© 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]
© 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.
© 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
© 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.
© 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.
© 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.
© 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.
© 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/Howtothinkhtmlit/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
© Mauro Gaspari University of Bologna [email protected]
Cosa è Python
© 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
© 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
© 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
....
......
....
.....
© 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
© Mauro Gaspari University of Bologna [email protected]
Esecuzione● Ogni computer e' in
grado di eseguire programmi solo nel suo linguaggio macchina
M
P
M
© 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.
© 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.
© 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
© 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.
© 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.
© 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
© 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.
© 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
© 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”
© 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.
© 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.
© 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!
© 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.
© 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'.
© 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)
© 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.
© 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.
© 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!”
Top Related