2.4k likes | 2.5k Views
Il Programma. Dalla progettazione all’esecuzione. Perché programmare?. Un programma è un insieme di istruzioni che “insegna” al computer come svolgere particolari compiti che l’uomo preferisce delegare ad una macchina, che li può eseguire in maniera più veloce o più efficiente.
E N D
Il Programma Dalla progettazione all’esecuzione
Perché programmare? Un programma è un insieme di istruzioni che “insegna” al computer come svolgere particolari compiti che l’uomo preferisce delegare ad una macchina, che li può eseguire in maniera più veloce o più efficiente
Il programma in 6 fasi • Capire e descrivere il problema • Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente) • Elaborare un “diagramma a blocchi” del metodo risolutivo • Trascrivere il diagramma in un linguaggio di programmazione • Compilare il programma • Eseguire il programma
Il programma in 6 fasi • Capire e descrivere il problema
1. Descrizione del problema Problema: il signor Trinciapolli possiede una macelleria, e per fare il conto per i suoi clienti deve addizionare un certo numero di addendi.
Il programma in 6 fasi • Capire e descrivere il problema • Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)
2. Ricerca algoritmo Problema: il signor Trinciapolli possiede una macelleria, e per fare il conto per i suoi clienti deve addizionare un certo numero di addendi. Metodo risolutivo (algoritmo): il signor Trinciapolli fornisce al computer il numero di acquisti che il cliente ha effettuato e poi ciascun importo parziale e il computer gli mostrerà sullo schermo il totale. Nota: il sistema di fornire prima il numero di addendi non è comodo per il signor Trinciapolli; ma è stato scelto per semplificare il procedimento per il lettore
2. Algoritmo in linguaggio naturale In blu sono state indicate le variabili, ovvero quelle parti del programma che cambiano valore durante l’esecuzione Il programma del Trinciapolli deve quindi: • Mostrare un titolo • Chiedere quanti sono gli addendi e ottenere una risposta, che memorizzerà in una cella di memoria che chiama N • Porre somma = 0 e k = 0 • Finché k < N • Chiedere l’addendo N-esimo e ottenere una risposta (num) • Sommare l’addendo N-esimo a somma • Visualizzare il risultato sullo schermo • Terminare il programma In verde trovate le costanti, che non cambiano mai Alcune osservazioni
Il programma in 6 fasi • Capire e descrivere il problema • Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente) • Elaborare un “diagramma a blocchi” del metodo risolutivo
3. Diagramma a blocchi INIZIO • Mostrare un titolo • Chiedere quanti sono gli addendi e ottenere una risposta, che memorizzerà in una cella di memoria che chiama N • Porre somma = 0 e k = 0 • Finché k < N • Chiedere l’addendo N-esimo e ottenere una risposta (num) • Sommare l’addendo N-esimo a somma • Visualizzare il risultato sullo schermo • Terminare il programma “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k somma FINE
3. Diagramma a blocchi Prendiamoci una piccola pausa perché il signor Trinciapolli non ha capito esattamente. Riprendiamo il diagramma e seguiamo il “flusso”, ovvero vediamo un po’ cosa succede nelle varie fasi…
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k somma FINE 3. Diagramma a blocchi Il programma mostra sullo schermo la parola “Somma” come titolo
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k somma FINE 3. Diagramma a blocchi Il programma mostra sullo schermo la parola “Quanti?” per chiedere al Trinciapolli quanti acquisti ha fatto la cliente
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N 3 somma FINE 3. Diagramma a blocchi Il programma memorizza il numero di acquisti, che il Trinciapolli digita sulla tastiera (supponiamo 3)
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k k somma N 0 3 0 somma FINE 3. Diagramma a blocchi Il programma pone somma e k uguali a 0
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k k somma N 0 3 0 somma FINE 3. Diagramma a blocchi Il programma si chiede se k < N.
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k k somma N 0 3 0 somma FINE 3. Diagramma a blocchi In questo caso la risposta è sì
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k k somma N 0 3 0 somma FINE 3. Diagramma a blocchi Il programma mostra la scritta “Prossimo addendo?”
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 6 0 0 somma FINE 3. Diagramma a blocchi Il programma memorizza il primo addendo, che il Trinciapolli digita sulla tastiera (supponiamo 6€)
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 6 0 0 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 6 0 6 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 6 0 6 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 6 1 6 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 6 1 6 somma FINE 3. Diagramma a blocchi Il programma si chiede se k < N. La risposta è ancora sì
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 6 1 6 somma FINE 3. Diagramma a blocchi Il programma chiede al Trinciapolli e ottiene il secondo addendo, che mette in num (supponiamo 2€)
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k num N k somma 3 2 6 1 somma FINE 3. Diagramma a blocchi Il programma chiede al Trinciapolli e ottiene il secondo addendo, che mette in num (supponiamo 2€)
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 2 1 6 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 2 1 8 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 2 2 8 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 2 2 8 somma FINE 3. Diagramma a blocchi Il programma si chiede se k < N. La risposta è ancora sì
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 2 2 8 somma FINE 3. Diagramma a blocchi Il programma chiede al Trinciapolli e ottiene il secondo addendo, che mette in num (supponiamo 10€)
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k num N k somma 3 10 8 2 somma FINE 3. Diagramma a blocchi Il programma chiede al Trinciapolli e ottiene il secondo addendo, che mette in num (supponiamo 10€)
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 10 2 8 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 10 2 18 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 10 3 18 somma FINE 3. Diagramma a blocchi Il programma incrementa somma di num e k di 1
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 10 3 18 somma FINE 3. Diagramma a blocchi Il programma si chiede ancora se k < N. La risposta è, finalmente, no
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k N k somma num 3 10 3 18 somma FINE 3. Diagramma a blocchi Il programma mostra sullo schermo il contenuto di somma, che è il risultato del programma
Il programma in 6 fasi • Capire e descrivere il problema • Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente) • Elaborare un “diagramma a blocchi” del metodo risolutivo • Trascrivere il diagramma in un linguaggio di programmazione
4. Il programma in Pascal Mostreremo ora, a partire dal diagramma a blocchi, come sia facile scrivere il programma. A titolo di esempio si è scelto come linguaggio di programmazione il Pascal, ma un altro linguaggio non presenterebbe sensibili differenze.
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k somma FINE 4. Il programma in Pascal Program Trinciapolli; Titolo del programma
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k somma FINE 4. Il programma in Pascal Program Trinciapolli; Var N, somma, k, num: integer; Elenco delle variabili, che contengono numeri interi
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k somma FINE 4. Il programma in Pascal Program Trinciapolli; Var N, somma, k, num: integer; Begin Writeln(‘Somma’); Writeln(‘Quanti?’); Readln(N); Somma := 0; k :=0; While k < N then Begin Writeln(‘Prossimo addendo?’); Readln(num); Inc(somma, num); Inc(k, 1); End; Writeln(somma) End.
Il programma in 6 fasi • Capire e descrivere il problema • Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente) • Elaborare un “diagramma a blocchi” del metodo risolutivo • Trascrivere il diagramma in un linguaggio di programmazione • Compilare il programma
5. Compilazione Una notizia buona e una cattiva. Quella buona è per il Trinciapolli: ormai lui non deve fare più niente, il programma è completo e gli basta premere il tasto “compila” del Turbo Pascal o del Free Pascal per avere direttamente il programma funzionante… Quella cattiva è invece per i lettori che hanno ancora voglia di seguirmi: inizia una fase un tantino complicata di questo corso… Ma comincia anche la parte più interessante, che ci mostra la genialità di quelle teste che hanno costruito i primi computer. Armatevi di un po’ di pazienza, e proseguiamo!
5. Compilazione La compilazione è un’operazione chiave: è quella che trasforma il programma, così come l’abbiamo scritto ora, in un insieme di simboli e numeri, detto compilato, comprensibile al computer (molto meno a noi…), in modo che possa essere eseguito.
Memoria byte 5. Compilazione Dobbiamo aprire però una piccola parentesi su come è strutturata la memoria (RAM) di un computer. Essa è formata da moltissimi bytes.
byte 1 0 1 1 1 0 1 1 bit bit bit bit bit bit bit bit 5. Compilazione Ogni byte, poi è formato da 8 bit (=binary digit). Ogni bit è come un “interruttore”, che può essere acceso o spento (ovvero può valere 1 o 0). Per chi conosce un po’ la matematica ad aritmetiche finite, sarà intuitivo che in un byte possiamo memorizzare un numero da 0 a 255 (28-1).
string 4 C i a o 5. Compilazione Un byte può contenere anche un carattere, come una lettera, un numero o un simbolo (ad esempio di punteggiatura). Per memorizzare un testo, invece, dobbiamo usare una stringa (insieme di caratteri). Una stringa occupa quindi tanti bytes quante sono le sue lettere, più uno iniziale che esprime appunto la lunghezza. Questa stringa occupa 5 bytes
5. Compilazione Per memorizzare un numero che vada oltre il 255, dobbiamo usare più di un byte: ad esempio con 2 bytes possiamo arrivare al numero 65535 (216-1) Fatte queste premesse, torniamo al programma… Un’ultima precisazione: il computer che simuleremo nei prossimi passaggi non è un personal computer, ma una macchina immaginaria, spesso semplificata, comunque il più possibile aderente al computer “normale”
INIZIO “Somma” “Quanti?” N 0 somma 0 k k < N? no sì “Prossimo addendo?” num somma + num somma k + 1 k somma FINE 5. Compilazione 0 W string A sinistra abbiamo indicato l’indirizzo dove si trova in memoria questa istruzione (che, essendo la prima, ha indirizzo 0)