01/03/17 Università degli Studi di Cagliari Facoltà di Scienze Corso di Laurea in Matematica Elementi di Informatica Dott. Paolo Garau A.A. 2016/2017 1 Paolo Garau Presentazione del Corso Orario delle Lezioni Martedì: 11:00 – 13:00 (Aula Alpha) Mercoledì: 09:00 – 13:00 (Lab. T Palazzo delle Scienze) Paolo Garau 2 1 01/03/17 Presentazione del Corso Organizzazione Generale Il corso ha una durata complessiva di 64 ore e vale 8 CFU. Teoria Lezioni di carattere Teorico Pratica Lezioni pratiche volte alla programmazione C 3 Paolo Garau Presentazione del Corso Prove in itinere Durante il corso verranno effettuate delle prove di valutazione che influenzeranno il voto finale. Paolo Garau 4 2 01/03/17 Presentazione del Corso Prove di Esame Totali Le prove di esame totali saranno almeno 6, si svolgeranno durante tutto l’anno accademico e seguiranno il calendario ufficiale indicato nel sito del CdL di Matematica. Queste consistono in una prova di laboratorio (sviluppo di un progetto in C) e di un’interrogazione orale sulla parte teorica. Per maggiori dettagli e per le prenotazioni alle prove di esame vedere il sito di unica.it nella sezione “servizi agli studenti”. Paolo Garau 5 Presentazione del Corso Frequenza delle Lezioni La frequenza alle lezioni è un aspetto fondamentale per l’ottimo raggiungimento degli obiettivi del corso. Pertanto si consiglia di frequentare tutte le lezioni. Paolo Garau 6 3 01/03/17 Presentazione del Corso E per chi si impegna…. Paolo Garau 7 Presentazione del Corso Argomenti di teoria Elenco a titolo indicativo Ø Algoritmi e linguaggi di programmazione Ø Concetto di informazione e la sua codifica Ø La codifica dei numeri Ø Codifica di Immagini e Suoni Ø Codifica dei Video Ø L’hardware Ø Architetture, Memorie, supporti e periferiche Ø Il Sistema Operativo Ø Le reti di Calcolatori Ø Evoluzione dei sistemi e normativa sul trattamento dei dati personali. Paolo Garau 8 4 01/03/17 Presentazione del Corso Argomenti delle lezioni di laboratorio Elenco a titolo indicativo Ø Fondamenti dell’uso del PC Ø Virtualizzazione Ø Informazioni di base del Sistema operativo Linux Ø Utilizzo del Compilatore Ø Linguaggio C Ø Costrutti di programmazione Ø Array e puntatori Ø Liste dinamiche Ø Gestione dei file 9 Paolo Garau Testi di Riferimento Slides e Libri di testo Le Slides delle lezioni verranno pubblicate regolarmente attraverso il sito web del corso di Elementi di Informatica. Queste tratteranno tutti gli argomenti d'esame ma non possono essere sostitutive dei testi di riferimento. Testi Consigliati Luca Mari, Giacomo Buonanno, Donatella Sciuto Informatica e cultura dell'informazione McGrawn-Hill. N. Balossino Principi di Informatica Lattes. Paolo Garau 10 5 01/03/17 Forum del corso di Informatica Portale del Docente Troverete tutte le informazioni relative al corso nel seguente sito web: http://people.unica.it/paologarau Paolo Garau 11 Presentazione del Corso 5 consigli per un’ottima riuscita del corso 1) Seguire tutte le lezioni in particolare quelle in Laboratorio; 2) Studiare per fare bene tutte le prove in itinere; 3) Rivedere subito la lezione per individuare e chiarire eventuali punti oscuri; 4) Tenere sotto controllo il sito ed effettuare la registrazione studente; 5) Se si hanno dubbi durante la lezione chiedere senza esitazione. Paolo Garau 12 6 01/03/17 Presentazione Corso di Informatica Domande? 13 Paolo Garau Università degli Studi di Cagliari Facoltà di Scienze Corso di Laurea in Matematica Corso di Elementi di Informatica Lezione 1 1 marzo 2017 Dott. Paolo Garau A.A. 2016/2017 Paolo Garau 14 7 01/03/17 Che cos'è L'informatica Una prima definizione informale di Informatica L'informatica è una scienza interdisciplinare che riguarda tutti gli aspetti del trattamento dell'informazione mediante procedure automatizzabili. (Wikipedia) Analizziamo la definizione: Si tratta di una scienza interdisciplinare per molteplici ragioni. Da un lato perché utilizza delle conoscenze provenienti dalla ricerca di settori scientifici come ad esempio dalla matematica, dalla fisica o dalla logica. Dall'altra si applicano i risultati e la conoscenza ottenuta in contesti totalmente diversi tra loro. 15 Paolo Garau Che cos'è l'Informatica Per aspetti del trattamento dell'informazione si intendono le trasformazioni e le elaborazioni che possiamo fare sull'informazione. Data però la vastità delle tipologie di informazioni che interessano il mondo umano ci si deve limitare ai singoli settori in cui è possibile eseguire un trattamento mediante delle procedure automatizzate. NB: Non tutte le informazioni possono essere elaborate mediante processi automatizzati!!! Affinché queste procedure raggiungano il risultato sperato, e quindi si ottengano delle nuove informazioni, è necessario che si eseguano una serie di passi predefiniti e non ambigui. L'insieme di questi passi prende il nome di Algoritmo. Paolo Garau 16 8 01/03/17 Cos'è L'informatica sulla base gli Algoritmi Definizione formale di Informatica L'informatica è lo studio sistematico degli algoritmi che descrivono e trasformano l'informazione: la loro teoria, analisi, progetto, efficienza ed applicazione. (Association for Computing Machinery) Paolo Garau 17 Che cos'è un Algoritmo Definiamo cos'è un Algoritmo Un algoritmo è una sequenza logica di istruzioni elementari (univocamente interpretabili) che, eseguite in un ordine stabilito, permettono di ottenere la soluzione di un problema in un numero finito di passi. Proprietà degli algoritmi: La sequenza delle istruzioni da eseguire deve essere finita (Finitezza) Le istruzioni devono poter essere eseguite materialmente (Eseguibilità) Le istruzioni devono essere non ambigue (Non ambiguità) L'algoritmo deve portare ad un risultato (Risultato) Un algoritmo che risolve il problema per cui è stato creato si dice corretto. Un algoritmo corretto può essere più o meno efficiente. Paolo Garau 18 9 01/03/17 Facciamo un esempio di Algoritmo Partiamo da un semplice problema. Pensare ad un algoritmo che prende in ingresso due numeri interi e ne rende il maggiore. Dobbiamo descrivere nel dettaglio ogni singolo passaggio rispettando le proprietà degli algoritmi. [Finitezza, Eseguibilità, Non ambiguità, Risultato] Una possibile soluzione: leggi il primo_valore leggi il primo_valore leggi il secondo_valore leggi il secondo_valore se il (primo_valore > secondo_valore) se il (primo_valore > secondo_valore) stampa (primo_valore) stampa (primo_valore) altrimenti altrimenti stampa (secondo_valore) stampa (secondo_valore) Paolo Garau 19 Facciamo un esempio di Algoritmo Ipotizziamo che il nostro interlocutore non conosca il significato del segno > e sappia fare solamente delle somme, sottrazioni e distinguere numeri positivi dai numeri negativi. In questo caso riscriviamo il nostro algoritmo come: leggi primo_valore leggi secondo_valore se il (primo_valore – secondo_valore) è positivo stampa (primo_valore) altrimenti stampa (secondo_valore) leggi il primo_valore leggi il secondo_valore se il (primo_valore – secondo_valore) è positivo stampa (primo_valore) altrimenti stampa (secondo_valore) Paolo Garau 20 10 01/03/17 Facciamo un esempio di Algoritmo Conclusioni Molto spesso non c'è un solo algoritmo per risolvere uno stesso problema, ma se ne possono creare di diversi e tutti corretti. A seconda delle condizioni in cui dovremo lavorare sceglieremo un algoritmo piuttosto che un altro. (Vedi esempio del > o della sottrazione) Per quanto riguarda l'efficienza invece i due esempi non sono rappresentativi in quanto impiegano entrambi lo stesso numero di passaggi per risolvere uno stesso problema. 21 Paolo Garau Facciamo un esempio di Algoritmo Esiste un sistema per rappresentare gli algoritmi? I diagrammi di flusso Si utilizzano i seguenti blocchi elementari: Blocchi di Inizio e Fine Vengono utilizzati per indicare l’ingresso e l’uscita dal diagramma. Paolo Garau INIZIO FINE 22 11 01/03/17 Facciamo un esempio di Algoritmo Blocco di Input/Output Nel caso di “Leggi” l’algoritmo legge i valori inseriti dall’utente e li conserva in X, oppure nel caso di “Scrivi”, stampa il valore di X a schermo. Blocco di Elaborazione Si effettua l’elaborazione indicata (nell’esempio è la somma del valore di X + 1) e il risultato lo si memorizza in X. Leggi/Scrivi X X=X+1 23 Paolo Garau Facciamo un esempio di Algoritmo Blocco di Controllo Se la condizione è realizzata si procede nel senso “Vero” altrimenti “Falso”. In questo caso se x è uguale a 0 procedi verso “Vero” altrimenti verso “Falso”. X == 0 Vero Falso Attraverso le 4 tipologie di blocchi (Blocchi di Inizio/Fine, Blocchi di Input/Output, Blocchi di Elaborazione e i Blocchi di Controllo) è possibile rappresentare qualsiasi algoritmo. Paolo Garau 24 12 01/03/17 Dall'algoritmo al linguaggio di programmazione Esempio di Algoritmo INIZIO inizio leggi il primo_valore leggi il secondo_valore se il (primo_valore – secondo_valore) è positivo stampa (primo_valore) altrimenti stampa (secondo_valore) fine Leggi a Leggi b Falso (a – b) > 0 Vero Stampa b Stampa a FINE 25 Paolo Garau Dall'algoritmo al linguaggio di programmazione Esercizio INIZIO Creare un algoritmo che dato un numero intero in ingresso, dica se il numero è pari o dispari. Leggi a QUESTO ALGORITMO E’ SEMPRE CORRETTO? Paolo Garau a >0 Falso Vero a==0 Vero Falso a=a-2 Stampa “Il numero è dispari” Stampa “Il numero è pari” FINE 26 13 01/03/17 Presentazione del Corso Come possiamo comunicare l’algoritmo al nostro elaboratore? Paolo Garau 27 Dall'algoritmo al linguaggio di programmazione Una volta trovato l'algoritmo più adatto che risolve il nostro problema sappiamo quali sono i passi da eseguire per raggiungere l’obiettivo richiesto. Adesso ipotizziamo di voler comunicare il nostro algoritmo risolutivo al calcolatore in modo tale che sia lui a calcolarci la soluzione. Per fare questo utilizzeremo un linguaggio di programmazione. Il linguaggio di programmazione è un linguaggio formale utilizzato dall'uomo per scrivere programmi per calcolatori. Di fatto l'elaboratore è in grado di elaborare solo dei segnali elettrici ed in particolare dei valori binari, ovvero combinazioni di '0' e '1'. E' quindi necessario trasformare l'algoritmo in una forma comprensibile alla macchina. Paolo Garau 28 14 01/03/17 I linguaggi di programmazione L'elaboratore è in grado di interpretare solamente il linguaggio macchina ovvero quell'insieme dei comandi direttamente eseguibili dall'elaboratore. I linguaggi di programmazione invece sono più vicini al linguaggio umano scritto e permettono di esprimere l'algoritmo in forma non ambigua e comunque comprensibile per l'uomo. Una prima distinzione relativa ai linguaggi di programmazione è basata sulla vicinanza del linguaggio umano così da avere: Linguaggi di basso livello (più vicini al linguaggio macchina) Linguaggi di alto livello (più vicini al linguaggio umano) 29 Paolo Garau Linguaggi di Programmazione di basso livello I linguaggi di programmazione di basso livello sono poco diffusi ma vengono comunemente utilizzati dai costruttori di dispositivi elettronici (embedded devices). Il linguaggio macchina più conosciuto è quello Assembly mediante il quale è possibile controllare ed eseguire ogni singola istruzione di un microprocessore. Il suo utilizzo è possibile solo da parte di chi ha un'ottima conoscenza non solo del linguaggio ma anche dell'architettura dell'elaboratore. Inoltre un programma scritto in linguaggio macchina si può usare solo ed esclusivamente su quella tipologia di macchina e non su altre. Paolo Garau 30 15 01/03/17 Linguaggi di Programmazione di Alto livello I linguaggi di programmazione di alto livello sono invece quelli più diffusi e comunemente adottati per la realizzazione di software. Questi hanno la caratteristica di utilizzare un linguaggio molto simile a quello umano e per questo motivo la maggior parte della programmazione di software avviene utilizzando questi linguaggi. Un altro aspetto fondamentale è che questi linguaggi per essere usati non richiedono una conoscenza approfondita dell'architettura dell'elaboratore su cui verranno usati ma a seconda delle caratteristiche del linguaggio saranno più o meno portabili. Con il termine portabilità si intende la capacità di eseguire lo stesso software su elaboratori aventi caratteristiche differenti. (Vedi approfondimento: http://it.wikipedia.org/wiki/Porting) Paolo Garau 31 Alcuni linguaggi di Programmazione Alcuni dei linguaggi di Programmazione di Alto livello sono: Java C e C++ Python Visual Basic Pascal e altri... Paolo Garau 32 16 01/03/17 Come funzionano i linguaggi di alto livello Abbiamo detto che un linguaggio di alto livello utilizza una modalità di comunicazione più vicina a quella umana. Questo cosa significa in pratica? Proviamo a scrivere il nostro “algoritmo del maggiore” in Python. Algoritmo di partenza Inizio Leggi il primo_valore Leggi il secondo_valore Se il (primo_valore > secondo_valore) stampa (primo_valore) altrimenti stampa (secondo_valore) Fine Codice Sorgente scritto in un linguaggio di programmazione chiamato in Python #!/usr/bin/python # Filename: if.py primo_valore = 3 secondo_valore = 4 If primo_valore > secondo_valore: print primo_valore else: print secondo_valore Paolo Garau 33 Come funzionano i linguaggi di alto livello Sebbene il linguaggio di alto livello sia comprensibile sia all’uomo che alla macchina, questo non è direttamente eseguibile. Abbiamo un vincolo da tenere in considerazione, ovvero il calcolatore è in grado di eseguire solamente le istruzioni macchina. Partendo da questo vincolo dobbiamo considerare che è necessario tradurre il codice sorgente scritto nel linguaggio di alto livello (o linguaggio di programmazione) in un linguaggio di basso livello (o linguaggio macchina). I programmatori affidano il compito della traduzione dal codice sorgente al linguaggio macchina direttamente al calcolatore ed in particolare ai compilatori. Paolo Garau 34 17 01/03/17 Come funzionano i linguaggi di alto livello I compilatori sono dei programmi per PC che vengono utilizzati dai programmatori per: Ø Verificare la correttezza della sintassi del codice sorgente usato; Ø Trasformare il codice sorgente (ovvero l’algoritmo scritto nel linguaggio di programmazione) in linguaggio macchina. Una volta che il codice sorgente è stato trasformato in linguaggio macchina otteniamo il programma pronto per essere utilizzato. Il programma ottenuto non è altro che un file con estensione .exe che prende il nome di file eseguibile e può essere aperto senza l’ausilio di nessun’altra applicazione. 35 Paolo Garau Come funzionano i linguaggi di alto livello E’ quindi opportuno fare una prima distinzione dei file del PC in: Ø File eseguibili (estensione .exe) Ø File non eseguibili (altre estensioni) Osservazione sui nomi dei file Tutti i file conservati nelle memorie del PC sono costituiti da due parti nome_file . estensione Dove il nome_file ha lunghezza variabile e l’estensione solo 3 o 4 caratteri. Attraverso questo sistema tutti i file vengono associati ad un programma che sia in grado di leggerli, ad eccezione dei file eseguibili che non devono essere letti da programmi ma solamente eseguiti dal PC in modo autonomo. Paolo Garau 36 18 01/03/17 Come funzionano i linguaggi di alto livello Il processo di traduzione dal codice sorgente al linguaggio macchina può avvenire in due modalità. Possiamo avere linguaggi compilati oppure linguaggi interpretati. I linguaggi compilati richiedono la generazione del codice eseguibile al momento della programmazione/realizzazione. I linguaggi interpretati vengono scritti nel linguaggio di programmazione e non si genera un codice eseguibile al momento della scrittura del programma. Il codice sorgente viene interpretato e trasformato in eseguibile al momento dell’esecuzione del programma. 37 Paolo Garau Funzionamento dei linguaggi compilati Funzionamento dei linguaggi compilati. Algoritmo scritto nel linguaggio di programmazione Compilatore Livello di Programmazione Livello Utente Finale Input (Dati in Ingresso) Paolo Garau Esecuzione del programma Programma in linguaggio macchina Questo è quello che accade con i programmi scritti in C e C++ Output (Dati in Uscita) 38 19 01/03/17 Funzionamento dei linguaggi interpretati Funzionamento dei linguaggi interpretati Algoritmo scritto nel linguaggio di programmazione Livello di Programmazione Livello Utente Finale Esecuzione del programma Questo è quello che accade con i programmi scritti in Java Traduttore / Compilatore Input (Dati in Ingresso) Programma in linguaggio macchina Output (Dati in Uscita) 39 Paolo Garau Schema Funzionale di un Calcolatore Nelle precedenti slide si parlava di come è possibile, partendo da un problema, fare in modo che un calcolatore ci restituisca la soluzione. Quindi, se prima si parlava del come realizzare e comunicare algoritmi, adesso diamo una presentazione di chi deve eseguirli ovvero del calcolatore. Ogni calcolatore ha la seguente architettura: Black Box Unità di Elaborazione (CPU) Input (Dati in Ingresso) Paolo Garau Memoria Centrale Output (Dati in Uscita) 40 20