introduzione alla programmazione strutturata
DESCRIPTION
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA. ESEMPIO. INIZIO. PREPARA-CAFFE. FINE. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA. SCOMPOSIZIONE: processo “prepara caffè”. INIZIO PREPARA-CAFFE. PREPARA-MACCHINETTA. METTI-MACCHINETTA-SU-FUOCO. CUCINA-CAFFE. SERVI-CAFFE. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/1.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO
PREPARA-CAFFE
FINE
ESEMPIO
![Page 2: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/2.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO PREPARA-CAFFE
PREPARA-MACCHINETTA
METTI-MACCHINETTA-SU-FUOCO
CUCINA-CAFFE
FINE PREPARA-CAFFE
SERVI-CAFFE
SCOMPOSIZIONE: processo “prepara caffè”
![Page 3: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/3.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO PREPARA-MACCHINETTA
PRENDI-MACCHINETTA-DA-CREDENZA
PRENDI-CAFFE-DA-DISPENSA
METTI-ACQUA-IN-MACCHINETTA
METTI-CAFFE-IN-MACCHINETTA
FINE PREPARA-MACCHINETTA
2
1
SCOMPOSIZIONE: processo “prepara macchinetta”
![Page 4: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/4.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO PREPARA-MACCHINETTA
PRENDI-MACCHINETTA-DA-CREDENZA
PRENDI-CAFFE-DA-DISPENSA
Macchinetta in credenza
VF1
2
![Page 5: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/5.jpg)
NODO CONNETTORE
TEST/VERIFICA/DECISIONE
CONDIZIONE
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
q
q
![Page 6: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/6.jpg)
VF
ENTRATA
USCITA
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
q
BA
TEST
![Page 7: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/7.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
1
2
PRENDI-MACCHINETTA
Macchinetta in credenza
Caffè non in dispensa
COMPRA-CAFFE
V
VF
F
![Page 8: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/8.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
A B
C D
p
q
1
2
V
V
F
F
TESTS IN CASCATA
![Page 9: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/9.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
p VF
VFCq
AB
TESTS NIDIFICATI
![Page 10: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/10.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO SERVI-CAFFE
TOGLI-CAFFE-DA-FUOCO
ZUCCHERA-CAFFE
VERSA-CAFFE
FINE SERVI-CAFFE
PORGI-CAFFE
SCOMPOSIZIONE: processo “servi caffè”
![Page 11: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/11.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO ZUCCHERA-CAFFE
FINE ZUCCHERA-CAFFE
Caffè amaro
F
V
ASSAGGIA-CAFFE
AGGIUNGI-ZUCCHERO
SCOMPOSIZIONE: processo “zucchera caffè”
![Page 12: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/12.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
p
F
V
A
ITERAZIONE PER VERO
![Page 13: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/13.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO/FINE PROCESSO
PROCESSO
AZIONE
TEST
NODO CONNETTORE
FLUSSO
SIMBOLI
![Page 14: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/14.jpg)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
pVF
pA
V
F
ABp
A
VF
SEQUENZA
TEST
ITERAZIONE PER VERO
ITERAZIONE PER FALSO
STRUTTURE
![Page 15: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/15.jpg)
Progetto: Calcolo del resto
![Page 16: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/16.jpg)
La divisione di due numeri positivi, può essere espressa attraverso la sottrazione:n:m equivale a sottrarre m da n fino a quando n diventa inferiore di m. Il numero di volte in cui tale sottrazione ha luogo, è il risultato della divisione.
Calcolo del resto
![Page 17: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/17.jpg)
Calcolo del restoinizio
Lettura dividendo
Lettura divisore
resto >= divisore
resto = divisore
V
resto = resto - divisore
Stampa “resto”
F
![Page 18: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/18.jpg)
Calcolo del resto#include <stdio.h>
int main(){ int dividendo, divisore, resto; printf("Inserire dividendo:\n"); scanf("%d", ÷ndo); //lettura dividendo printf("Inserire divisore:\n"); scanf("%d", &divisore); //lettura divisore
resto = dividendo; while (resto >= divisore){
resto = resto - divisore; } printf("\nresto della divisione %d/%d e' %d", dividendo, divisore, resto); return 0;}
![Page 19: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/19.jpg)
Progetto: Calcolo numero primo
![Page 20: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/20.jpg)
Calcolo del numero primo
DefinizioneUn numero n>=2 è un numero PRIMO se è divisibile per 1 e per se stesso.
L’ algoritmo consiste nel dividere il numero n per tutti i numeri interi minori di n.Se il numero n risulta divisibile per uno di questi interi (ovvero il resto della divisione è zero) allora n è un numero non PRIMO; in caso contrario n è un numero PRIMO
![Page 21: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/21.jpg)
Calcolo del numero primoEsempioN = 5
![Page 22: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/22.jpg)
int main(){ int n, divisore, quoz, resto; int primo; printf("Insrire Numero:"); scanf("%d", &n);
primo = true; divisore = 2; while (divisore < n && primo==true){
quoz = n/divisore; //calcolo del quozienteresto = n-(quoz*divisore); //calcolo del restoif (resto == 0){ //se il resto è nullo primo = false; //il numero in esame non è primo} else{ //altrimenti divisore = divisore + 1; //incremento il divisore}
} if (primo==true){ printf ("\n\n%d e` un numero primo",n); }else{ printf ("\n\n%d non e` un numero primo",n); }}
![Page 23: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/23.jpg)
Calcolo del numero primoinizio
Lettura n
primo = truedivisore = 2
Divisore < n AND
primo = true
V
quoz = n/divisore
F
stampa
resto = n – (quoz*divisore)
resto == 0 Primo = falseVdivisore = divisore +1 F
quoziente
resto
È stato trovato un divisore
![Page 24: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/24.jpg)
Progetto: Torri di Hanoihttp://it.wikipedia.org/wiki/Torre_di_Hanoihttp://www.frasi.net/giochionline/torre-di-hanoi/
![Page 25: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/25.jpg)
Torri di Hanoi: regole• Il rompicapo è costituito da tre pile di dischi
(“torri”) allineate– all’inizio tutti i dischi si trovano sulla pila di sinistra– alla fine tutti i dischi si devono trovare sulla pila di
destra o centrale• I dischi sono tutti di dimensioni diverse e
quando si trovano su una pila devono rispettare la seguente regola– nessun disco può avere sopra di sé dischi più grandi
![Page 26: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/26.jpg)
Torri di Hanoi: regole Situazione iniziale Situazione finale
![Page 27: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/27.jpg)
Torri di Hanoi: regole
• Per risolvere il rompicapo bisogna spostare un disco alla volta– un disco può essere rimosso dalla cima della
torre ed inserito in cima ad un’altra torre• non può essere “parcheggiato” all’esterno…
– in ogni momento deve essere rispettata la regola vista in precedenza• nessun disco può avere sopra di sé dischi
più grandi
![Page 28: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/28.jpg)
Algoritmo di soluzione• Il problema generale consiste nello spostare n dischi da
una torre ad un’altra, usando la terza torre come deposito temporaneo
• Per spostare n dischi da una torre all’altra si suppone di saper spostare n-1 dischi da una torre all’altra, come sempre si fa nella ricorsione
Ricorsione
Una funzione ricorsiva è una funzione che richiama se stessa
![Page 29: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/29.jpg)
La “Torre di Hanoi”
![Page 30: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/30.jpg)
A B C
![Page 31: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/31.jpg)
Torre di Hanoi: algoritmo
int mossa = 0;void hanoi(int, char, char, char);void muovi(int, char, char);
int main(){ int DISCHI; printf("\nInserire il numero di DISCHI:"); scanf("%d",&DISCHI); printf("\nMosse da eseguire per spostare %d dischi\n", DISCHI); hanoi(DISCHI, 'A', 'B', 'C');}
![Page 32: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/32.jpg)
Torre di Hanoi: algoritmovoid hanoi(int n, char piolo_b, char piolo_a, char aus){ if(n == 1) { muovi(n, piolo_b, piolo_a); }else { hanoi(n-1, piolo_b, aus, piolo_a); muovi(n, piolo_b, piolo_a); hanoi(n-1, aus, piolo_a, piolo_b); }}
void muovi(int n, char piolo_b, char piolo_a){ char invio; printf("\nMossa %3d: ", ++mossa); printf("disco %d da %c a %c\n",n, piolo_b, piolo_a); scanf("%c", &invio);}
![Page 33: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/33.jpg)
Torre di Hanoi: output
![Page 34: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA](https://reader037.vdocuments.mx/reader037/viewer/2022110214/56815d8e550346895dcba2ab/html5/thumbnails/34.jpg)
Torre di Hanoi: sequenza di trasferimenti
123
A B C
23
A B C
1
Mossa 1
3
A B C
1 2
Mossa 2
3
A B C
12
Mossa 3
A B C
312
Mossa 4
1
A B C
3 2
Mossa 5
1
A B C
23
Mossa 6
A B C
123
Mossa 7