Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di...

32
© Mauro Gaspari - University of Bologna - [email protected] Fondamenti di Programmazione Prof. Mauro Gaspari: [email protected] Tutor: Dott. Davide Guidi: [email protected] Corso Coordinato con: Laboratorio di Linguaggi di Programmazione Prof. Angela Spighetti: [email protected]

Transcript of Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di...

Page 1: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Fondamenti di Programmazione

Prof. Mauro Gaspari: [email protected]

Tutor: Dott. Davide Guidi: [email protected]

Corso Coordinato con:Laboratorio di Linguaggi di Programmazione

Prof. Angela Spighetti: [email protected]

Page 2: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Scopo del Corso● Trasmettere agli studenti la padronanza dei fondamenti di 

programmazione tipica di un  informatico. La capacita' di

– formulare problemi;– sviluppare soluzioni creative;– realizzare tali soluzioni in modo chiaro ed accurato in un 

linguaggio di programmazione;–

● NB. Corso fondamentale per poter seguire tutti i corsi su materie informatiche degli anni successivi.

Page 3: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Organizzazione del Corso● Lezioni di Fondamenti di Programmazione

Prof. Mauro Gaspari● Corso di Laboratorio

Prof. Angela Spighetti● Corso Integrativo (interfacce grafiche)

Dott. Davide Guidi

Page 4: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Programma 1● Il modo con cui si programma: il concetto di programma, debugging, tipologie di errori, linguaggi formali e naturali, un primo programma.● Variabili, espressioni e comandi: valori e tipi, variabili, keywords, comandi, valutazione di espressioni, operatori e operandi, composizione, commenti.● Funzioni: conversione di tipi e coercion, funzioni matematiche, definizione di nuove funzioni, flusso di esecuzione, parametri ed argomenti. ● Condizionali e ricorsione: espressioni booleane, esecuzioni condizionali e alternative, condizionali concatenati e innestati, ricorsione infinita.

Page 5: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Programma 2● Sviluppo di programmi: funzioni con risultato, composizione di funzioni, controlli sui tipi.● Iterazione: assegnamenti multipli, i costrutti while e for, break e continue, tabelle. ● Tipi di dati strutturati: stringhe, liste, tuple, dizionari, files ed eccezioni. ● Alcuni concetti di Programmazione ad Oggetti.● Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi.

Page 6: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Modalità d'esame● Prove scritte:

– Scritto (la mattina): teoria e programmazione.– Prova in laboratorio (il pomeriggio): Esame di Laboratorio di 

Fondamenti di Programmazione (voto a se ma solo per chi passa lo scritto).

● Progetto obbligatorio:– interfacce grafiche in python.– va consegnato  prima della prova orale finale.– gruppi di 1, 2 o 3 persone (votazione massima rispettivamente  +3, 

+2, +1 da sommarsi al voto dello scritto).

● Prova orale con discussione progetto.

Page 7: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Parziali● Primo parziale: 

– scritto teoria e programmazione.● Secondo parziale:

– scritto teoria e programmazione.– Prova pratica in laboratorio: (Esame di Laboratorio di 

Fondamenti di Programmazione).– Orale e discussione progetto.

Page 8: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Materiale Didattico●TESTO ADOTTATO:How to Think Like a Computer Scientist: Learning with Python, by Allen Downey, Jeff Elkner and Chris Meyers.  Gree Tea Press (disponibile in rete: http://thinkpython.com/ e in italiano: http://www.python.it/Doc/Howtothink/Howtothink­html­it/index.htm).

●DA CONSULTARE: Python how to program. Deitel, Deitel, Liperi, Wiedermann, 

PRENTICE HALL 2002.

●Materiale in rete:

– Sito ufficiale di Python: http://www.python.org/

– Sito italiano di Python: http://www.python.it/

– Sito web del corso: http://www.cs.unibo.it/~gaspari/www/teaching

Page 9: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Cosa è Python

Page 10: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Linguaggi di Programmazione

● Python e' un esempio di linguaggio ad alto livello

● come C, C++, Perl, Java.● Significa che esistono anche linguaggi a basso 

livello– linguaggio macchina– assembler

Page 11: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Alto livello e basso livello

Linguaggi ad alto livello

....print b*h/2....

Assembler

LOAD r1,bLOAD r2,hMUL r1,r2DIV r1,#2RETLinguaggi a 

aasso livello0001001001000101001001001110110010101101001..

Linguaggio macchina

Page 12: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Programmi● I linguaggi di 

programmazione servono per scrivere programmi.

● Il codice di un programma si dice anche codice sorgente (source code)

Un programma  P scrittonel linguaggio L

L

P

Si tratta di codice sorgente di P e' scritto nel linguaggio L che in genere e' memorizzato su un file

....

......

....

.....

Page 13: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Il linguaggio macchina● Solo il linguaggio 

macchina e' eseguibile direttamente da un computer

● Ogni computer ha un suo linguaggio macchina

M

Un computer con linguaggio macchina M

Page 14: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Esecuzione● Ogni computer e' in 

grado di eseguire programmi solo nel suo linguaggio macchina

M

P

M

Page 15: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Problematiche● Difficile e dispendioso scrivere programmi in 

linguaggio macchina e in generale con i linguaggi a basso livello.

● Accadeva una volta con i primi computer.● Ora i linguaggi a basso livello si usano solo in 

poche applicazioni molto specializzate.

Page 16: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Vantaggi dei linguaggi ad alto livello● E' piu' semplice programmare con i linguaggi ad 

alto livello.● I programmi si scrivono piu' velocemente.● I programmi scritti con linguaggi ad alto livello 

sono portabili (eseguibili su computer diversi con poche o nessuna modifica).

● Mentre un programma in linguaggio macchina gira solo sul un certo tipo di computer.

Page 17: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Pero'

● I programmi scritti nei linguaggi ad alto livello non si possono eseguire direttamente sui computer.

Un programma  P scrittonel linguaggio ad alto livello Lnon può essere eseguito su uncomputer con linguaggio macchina M. 

L

P

M

Page 18: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Esecutori per linguaggi di programmazione

● Sono necessari dei programmi di supporto per eseguire il linguaggi ad alto livello:– Interpreti.– Compilatori.

Page 19: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Interpreti● Un interprete per un linguaggio L 

permette di eseguire programmi scritti nel linguaggio L.

● Un interprete per un linguaggio L e' un programma che prende come ingresso un programma sorgente scritto nel linguaggio L e lo esegue istruzioni dopo istruzione.

● Un interprete può essere scritto in linguaggio macchina.

LM

Un interprete per il linguaggio L scritto  in M.

Page 20: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Esecuzione di programmi python● L'interprete python permette 

di eseguire un programma P scritto in python in una macchina M.

● NB. Python e' un linguaggio interpretato, in altre parole un linguaggio eseguito con un interprete.

Python

P

M

PythonM

Page 21: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

I complilatori● L'alternativa all'interprete è 

tradurre i programmi sorgenti in linguaggio macchina.

● Questo è il ruolo del compilatore.

● Anche il compilatore è un programma che traduce codice sorgente di un linguaggio ad alto livello in un linguaggio a basso livello (in genere linguaggio macchina).

L ­> M

M

Un compilatore che traduce codice sorgente scritto nel linguaggio L in codice oggetto del linguaggio macchina M.

Page 22: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Un programma scritto in un linguaggio ad alto livello L 

una volta tradotto da un compilatore diventa eseguibile.

L ­> M

M

M

P

MM

L

P

NB. anche il compilatoredeve essere eseguito (in questo caso) sulla macchina M per potereffettuare la traduzione.

Codice sorgenteCodice oggettoeseguibile

Page 23: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

L'interprete python● Funzionamento interattivo.

– interprete– esempio di comandi

● Invocazione di un programma scritto su file– Il file termina con .py– editare il file name.py– eseguire “python name.py”

Page 24: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Ma cosa è un programma?● Un programma è una sequenza di istruzioni che 

specifica come eseguire un certo calcolo detto anche computazione.

● Una computazione può essere di tipo matematico  ma puo' essere anche di tipo simbolico. Ad esempio cercare e rimpiazzare alcune frasi in un documento di testo.

Page 25: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Alcune tipologie di istruzioni di base comuni a più linguaggi di programmazione

● Input

● Output

● Matematiche

● Esecuzioni condizionali

● Ripetizioni (cicli)

● La programmazione si può vedere come un processo che scompone i problemi da risolvere in tanti sotto problemi fino a quando questi sono risolvibili con una di queste istruzioni di base.

Page 26: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Bugs e Debugging!● Bug (o baco in italiano)● Debugging (o debuggare! in italiano)

– Si tratta di una capacita' necessaria per poter programmare.

– NB. Non esistono mai programmi senza errori!– Se un programma non funziona....si parte con il 

debugging! 

Page 27: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Tipologie di bugs (errori)● Errori sintattici ­­> “syntax error”

il programma e' scritto male e non puo' essere eseguito. Se c'e' un errore sintattico l'interprete python termina immediatamente.

● Errori a tempo di esecuzione (runtime) sono spesso chiamati eccezioni (exceptions). Rari nei programmi piccoli.

● Errori semantici: il programma viene eseguito con successo e termina ma non fa' quello per cui era stato scritto. Questo vuol dire che il significato del programma, la semantica, e' sbagliato. 

Page 28: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Debugging● Task creativo come quello di un investigatore.● Come mai un programma non funziona?● In genere si procede per ipotesi e si prova... il 

programma corretto.● Se l'ipotesi era sbagliata bisogna cercarne un altra 

fino ad escludere tutte le possibilita'.

Page 29: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Linguaggi formali e naturali

● Linguaggi naturali: sono le lingue normalmente parlate nelle varie nazioni.

● Linguaggi formali: linguaggi progettati per applicazioni specifiche.  Per esempio i linguaggi della matematica o della logica.

● I linguaggi di programmazione sono linguaggi formali progettati per esprimere calcoli (computazioni)

Page 30: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Linguaggi Formali: la sintassi● Regole strette rispetto alla sintassi.

● Sintassi organizzata a due livelli:

– token: singoli elementi che costituiscono un programma ad esempio: l'istruzione print, il numero 1, l'operatore +, l'operatore =, etc etc....

– strutture di frase: regole grammaticali che dicono come comporre i token per realizzare un programma.

● Il parsing e' quel processo che ci permette date le regole grammaticali di “comprendere” la struttura di una frase.

Page 31: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Differenze tra linguaggi formali e naturali

● Ambiguità: Il linguaggio naturale e' pieno di ambiguita', mentre i linguaggi formali sono stati progettati per essere quasi o completamente non ambigui.

● Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le stesse cose. I linguaggi formali sono meno ridondanti e più concisi.

● Nonletteralita': I linguaggi naturali hanno molti idiomi e metafore che non sono presenti nei linguaggi formali.

Page 32: Fondamenti di Programmazione - Scienza e Ingegneriagaspari/www/teaching/prog1.pdf · Esempi di programmazione avanzata: liste con puntatori, stack, code, alberi. ... Linguaggi di

© Mauro Gaspari ­ University of Bologna ­ [email protected]

Un primo programma● In genere il primo programma che si presenta 

quando si introduce un nuovo linguaggio e' chiamato “Hello, World!” perche' e' il programma che stampa questa frase.

● in python:print “Hello, World!”