Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto 14 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Dato un numero dire se è positivo o negativo … e se il numero fosse nullo? Eseguire il prodotto tra due numeri positivi usando solo l’operazione di somma ... E se i numero non fossero solo positivi? Trovare il maggiore tra tre numeri Somma di 3 interi consecutivi Somma dei primi N numeri Media di N numeri Acquisto di prodotti con tetto massimo di spesa Divisione tra due numeri PROBLEMA Dati due numeri effettuare il loro prodotto usando solo l’operazione somma. SOLUZIONE Provate a trovare una soluzione al problema descrivendola con diagrammi di flusso Usando solo l’operazione somma SOLUZIONE: PROBLEMA Dati 3 numeri stabilire quale sia il valore maggiore SOLUZIONE Provate a trovare una soluzione al problema descrivendola con diagrammi di flusso • Problema Problema: Calcolare la somma di tre interi consecutivi Note: Note La variabile somma è un contenitore di somme parziali, finché non si ottiene la somma totale richiesta La soluzione del problema viene raggiunta eseguendo azioni simili per un numero opportuno di volte 23 Il ciclo o loop è uno schema di flusso per descrivere, in modo conciso, situazioni in cui un gruppo di operazioni deve essere ripetuto più volte La condizione di fine ciclo viene verificata ogni volta che si esegue il ciclo; se la condizione assume valore vero (falso), le istruzioni vengono reiterate, altrimenti si esce dal ciclo La condizione di fine ciclo può essere verificata prima o dopo l’esecuzione dell’iterazione Le istruzioni di inizializzazione assegnano valori iniziali ad alcune variabili (almeno a quella che controlla la condizione di fine ciclo) Ciclo con controllo in testa Ciclo con controllo in coda 24 • Problema Problema: Calcolare la somma di tre interi consecutivi Note: Note La fase di inizializzazione riguarda la somma e l’indice del ciclo Il controllo di fine ciclo viene effettuato in coda 25 Un ciclo è definito quando è noto a priori quante volte deve essere eseguito; un ciclo definito è detto anche enumerativo Un contatore del ciclo tiene memoria di quante iterazioni sono state effettuate; può essere utilizzato in due modi: incremento del contatore: contatore il contatore viene inizializzato ad un valore minimo (ad es. 0 o 1) e incrementato ad ogni esecuzione del ciclo; si esce dal ciclo quando il valore del contatore eguaglia il numero di iterazioni richieste decremento del contatore: contatore il contatore viene inizializzato al numero di iterazioni richiesto e decrementato di uno ad ogni iterazione; si esce dal ciclo quando il valore del contatore raggiunge 0 (o 1) 27 Un ciclo è indefinito quando non è possibile conoscere a priori quante volte verrà eseguito La condizione di fine ciclo controlla il valore di una o più variabili modificate da istruzioni che fanno parte dell’iterazione Comunque, un ciclo deve essere eseguito un numero finito di volte, cioè si deve sempre verificare la terminazione dell’esecuzione del ciclo 28 • Problema Problema: Calcolare la somma dei primi N numeri. Note Note: Leggo un numero N e sommo tutti i numeri dell’intervallo [0,N] oppure [N,0] se N è negativo Attenzione al segno del risultato 29 • Problema Problema: Calcolo della media di un insieme di numeri; non è noto a priori quanti sono i numeri di cui deve essere calcolata la media I numeri vengono letti uno alla volta fino a che non si incontra un x=0, che segnala la fine dell’insieme 30 31 PROBLEMA Si progetti un terminare per automatizzare la spesa in un supermercato. Il terminale deve contare il numero di prodotti messi nel carrello per una spesa massima di 100€. SOLUZIONE Analizzare il problema e descrivere la soluzione con diagrammi di flusso Completa il diagramma Verifica se è impossibile (divisore=0) o indeterminata (dividendo=0 e divisore=0) ESERCIZIO: COSA FA QUESTO DIAGRAMMA DI FLUSSO? 1 2 3 4 5 6 7 BEGIN "Contatore" N=1 IF N = 100 GOTO 7 OUT N N=N+1 GOTO 3 END "Contatore" FIGURA DIAGRAMMA DI FLUSSO E PSEUDOCODICE DELL'ALGORITMO "CONTATORE" PER STAMPARE I NUMERI NATURALI DA 1 A 99. ESERCIZIO: STAMPARE LA TABELLINA DEL 2 FINO A UN NUMERO DATO START Tabellina 2 OUT "Fino a che numero devo stampare la tabellina?" IN Nmax n=2 FALSO while n <= Nmax VERO OUT n n=n+2 END Tabellina 2 DIAGRAMMA DI FLUSSO DI UN ALGORITMO CHE STAMPA LA TABELLINA DEL DUE FINO A UN NUMERO MASSIMO DATO. Esercizio: cosa fa questo algoritmo? start start P := 0 P := 0 read A,B read A,B falso A <> 0 while (A <> 0) write P if (A è dispari) then vero P := P + B end vero A è dispari end if falso A := A / 2 P := P + B B := B * 2 end while A := A / 2 write P B := B * 2 end Informatica di Base -- R.Gaeta 88 Esercizio: cosa fa questo algoritmo? P 0 3 9 21 A 7 3 1 0 B 3 6 12 24 Informatica di Base -- R.Gaeta 89 Esercizio: cosa fa questo algoritmo? P 0 0 0 12 36 A 12 6 3 1 0 B 3 6 12 24 48 Informatica di Base -- R.Gaeta 90 Esercizio: massimo di una sequenza di K numeri • Si supponga di fornire in input ad un programma un numero K e K interi positivi. Il programma deve restituire il valore minimo tra quelli introdotti. Informatica di Base -- R.Gaeta 93 Esercizio: massimo di una sequenza di K numeri start start read K K read numero read numero min := numero min := numero inseriti := 1 while (inseriti < K) inseriti := 1 inseriti < K falso read numero write min if (numero < min) then vero read numero vero min := numero min := numero end end if numero < min inseriti := inseriti + 1 end while falso write min inseriti := inseriti + 1 end Informatica di Base -- R.Gaeta 94 Esercizio: massimo di una sequenza di K numeri (controllo input) start start K K <= 0 vero write "K deve essere positivo!" falso read numero min := numero inseriti := 1 inseriti < K falso write min vero read numero vero min := numero end numero < min falso inseriti := inseriti + 1 end read K if ( K <= 0) then write “K deve essere positivo!” else read numero min := numero inseriti := 1 while (inseriti < K) read numero if (numero < min) then min := numero end if inseriti := inseriti + 1 end while write min end if Informatica di Base -- R.Gaeta 95