Date post: | 01-May-2015 |
Category: |
Documents |
Upload: | samuela-leo |
View: | 230 times |
Download: | 0 times |
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO
PREPARA-CAFFE
FINE
ESEMPIO
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO PREPARA-CAFFE
PREPARA-MACCHINETTA
METTI-MACCHINETTA-SU-FUOCO
CUCINA-CAFFE
FINE PREPARA-CAFFE
SERVI-CAFFE
SCOMPOSIZIONE: processo “prepara caffè”
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”
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO PREPARA-MACCHINETTA
PRENDI-MACCHINETTA-DA-CREDENZA
PRENDI-CAFFE-DA-DISPENSA
Macchinetta in credenza
VF
1
2
NODO CONNETTORE
TEST/VERIFICA/DECISIONE
CONDIZIONE
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
q
q
VF
ENTRATA
USCITA
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
q
BA
TEST
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
1
2
PRENDI-MACCHINETTA
Macchinetta in credenza
Caffè non in dispensa
COMPRA-CAFFE
V
VF
F
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
A B
C D
p
q
1
2
V
V
F
F
TESTS IN CASCATA
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
p VF
VFCq
AB
TESTS NIDIFICATI
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO SERVI-CAFFE
TOGLI-CAFFE-DA-FUOCO
ZUCCHERA-CAFFE
VERSA-CAFFE
FINE SERVI-CAFFE
PORGI-CAFFE
SCOMPOSIZIONE: processo “servi caffè”
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO ZUCCHERA-CAFFE
FINE ZUCCHERA-CAFFE
Caffè amaro
F
V
ASSAGGIA-CAFFE
AGGIUNGI-ZUCCHERO
SCOMPOSIZIONE: processo “zucchera caffè”
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
p
F
V
A
ITERAZIONE PER VERO
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
INIZIO/FINE PROCESSO
PROCESSO
AZIONE
TEST
NODO CONNETTORE
FLUSSO
SIMBOLI
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
pVF
pA
V
F
ABp
A
VF
SEQUENZA
TEST
ITERAZIONE PER VERO
ITERAZIONE PER FALSO
STRUTTURE
Progetto: 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
Calcolo del restoinizio
Lettura dividendo
Lettura divisore
resto >= divisore
resto = divisore
V
resto = resto - divisore
Stampa “resto”
F
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;}
Progetto: Calcolo numero primo
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
Calcolo del numero primoEsempioN = 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 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); }}
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
Progetto: Torri di Hanoihttp://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
La “Torre di Hanoi”
A B C
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: 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);}
Torre di Hanoi: output
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