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

Post on 07-Mar-2021

2 views 0 download

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

© Mauro Gaspari ­ University of Bologna ­ gaspari@cs.unibo.it

Fondamenti di Programmazione

Prof. Mauro Gaspari: gaspari@cs.unibo.it

Tutor: Dott. Davide Guidi: dguidi@cs.unibo.it

Corso Coordinato con:Laboratorio di Linguaggi di Programmazione

Prof. Angela Spighetti: angspi@libero.it

© Mauro Gaspari ­ University of Bologna ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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

© Mauro Gaspari ­ University of Bologna ­ gaspari@cs.unibo.it

Cosa è Python

© Mauro Gaspari ­ University of Bologna ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

Esecuzione● Ogni computer e' in 

grado di eseguire programmi solo nel suo linguaggio macchina

M

P

M

© Mauro Gaspari ­ University of Bologna ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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 ­ gaspari@cs.unibo.it

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!”