1 / 34

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

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.

argyle
Télécharger la présentation

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA ESEMPIO INIZIO PREPARA-CAFFE FINE

  2. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “prepara caffè” INIZIO PREPARA-CAFFE PREPARA-MACCHINETTA METTI-MACCHINETTA-SU-FUOCO CUCINA-CAFFE SERVI-CAFFE FINE PREPARA-CAFFE

  3. 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

  4. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA INIZIO PREPARA-MACCHINETTA V F Macchinetta in credenza 1 PRENDI-MACCHINETTA-DA-CREDENZA PRENDI-CAFFE-DA-DISPENSA 2

  5. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA NODO CONNETTORE q TEST/VERIFICA/DECISIONE q CONDIZIONE

  6. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA ENTRATA TEST F V q A B USCITA

  7. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA V F Macchinetta in credenza 1 PRENDI-MACCHINETTA F V 2 Caffè non in dispensa COMPRA-CAFFE

  8. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA TESTS IN CASCATA F V p 1 A B V F q 2 C D

  9. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA TESTS NIDIFICATI F V p C F V q B A

  10. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “servi caffè” INIZIO SERVI-CAFFE TOGLI-CAFFE-DA-FUOCO ZUCCHERA-CAFFE VERSA-CAFFE PORGI-CAFFE FINE SERVI-CAFFE

  11. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “zucchera caffè” INIZIO ZUCCHERA-CAFFE V Caffè amaro AGGIUNGI-ZUCCHERO F ASSAGGIA-CAFFE FINE ZUCCHERA-CAFFE

  12. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA ITERAZIONE PER VERO V p A F

  13. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SIMBOLI INIZIO/FINE PROCESSO TEST NODO CONNETTORE PROCESSO FLUSSO AZIONE

  14. 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

  15. Progetto: Calcolo del resto

  16. 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.

  17. Calcolo del resto inizio Lettura dividendo Lettura divisore resto = divisore resto >= divisore F resto = resto - divisore V Stampa “resto”

  18. Calcolo del resto #include <stdio.h> int main() { int dividendo, divisore, resto; printf("Inserire dividendo:\n"); scanf("%d", &dividendo); //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; }

  19. Progetto: Calcolo numero primo

  20. 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

  21. Calcolo del numero primo Esempio N = 5

  22. 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); } }

  23. 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

  24. Progetto: Torri di Hanoi http://it.wikipedia.org/wiki/Torre_di_Hanoi http://www.frasi.net/giochionline/torre-di-hanoi/

  25. 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

  26. Torri di Hanoi: regole • Situazione iniziale Situazione finale

  27. 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

  28. 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

  29. La “Torre di Hanoi”

  30. C B A

  31. 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'); }

  32. 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); }

  33. Torre di Hanoi: output

  34. 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

More Related