Università degli Studi di Cagliari Facoltà di Scienze Corso di Laurea

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