340 likes | 568 Views
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.
E N D
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 FINE PREPARA-CAFFE
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “prepara macchinetta” INIZIO PREPARA-MACCHINETTA PRENDI-MACCHINETTA-DA-CREDENZA 1 PRENDI-CAFFE-DA-DISPENSA 2 METTI-ACQUA-IN-MACCHINETTA METTI-CAFFE-IN-MACCHINETTA FINE PREPARA-MACCHINETTA
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA INIZIO PREPARA-MACCHINETTA V F Macchinetta in credenza 1 PRENDI-MACCHINETTA-DA-CREDENZA PRENDI-CAFFE-DA-DISPENSA 2
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA NODO CONNETTORE q TEST/VERIFICA/DECISIONE q CONDIZIONE
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA ENTRATA TEST F V q A B USCITA
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA V F Macchinetta in credenza 1 PRENDI-MACCHINETTA F V 2 Caffè non in dispensa COMPRA-CAFFE
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA TESTS IN CASCATA F V p 1 A B V F q 2 C D
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA TESTS NIDIFICATI F V p C F V q B A
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “servi caffè” INIZIO SERVI-CAFFE TOGLI-CAFFE-DA-FUOCO ZUCCHERA-CAFFE VERSA-CAFFE PORGI-CAFFE FINE SERVI-CAFFE
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “zucchera caffè” INIZIO ZUCCHERA-CAFFE V Caffè amaro AGGIUNGI-ZUCCHERO F ASSAGGIA-CAFFE FINE ZUCCHERA-CAFFE
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA ITERAZIONE PER VERO V p A F
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SIMBOLI INIZIO/FINE PROCESSO TEST NODO CONNETTORE PROCESSO FLUSSO AZIONE
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA STRUTTURE SEQUENZA ITERAZIONE PER VERO V p A F TEST ITERAZIONE PER FALSO F V p A B A F p V
Calcolo del resto 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 inizio Lettura dividendo Lettura divisore resto = divisore resto >= divisore F resto = resto - divisore V Stampa “resto”
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; }
Calcolo del numero primo Definizione Un 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 nonPRIMO; in caso contrario n è un numero PRIMO
Calcolo del numero primo Esempio N = 5
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 quoziente resto = n-(quoz*divisore); //calcolo del resto if (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); } }
Calcolo del numero primo inizio Lettura n primo = true divisore = 2 resto == 0 F V divisore = divisore +1 Primo = false È stato trovato un divisore Divisore < n AND primo = true F resto = n – (quoz*divisore) resto V quoziente quoz = n/divisore stampa
Progetto: Torri di Hanoi http://it.wikipedia.org/wiki/Torre_di_Hanoi http://www.frasi.net/giochionline/torre-di-hanoi/
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
Torri di Hanoi: regole • Situazione iniziale Situazione finale
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
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
C B A
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'); }
Torre di Hanoi: algoritmo void 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); }
1 2 3 3 1 2 3 1 3 1 3 3 1 2 3 2 3 1 2 2 1 2 1 2 A A A A A A A A B B B B B B B B C C C C C C C C Mossa 5 Mossa 6 Mossa 3 Mossa 7 Mossa 4 Mossa 2 Mossa 1 Torre di Hanoi: sequenza di trasferimenti