INFORMATICA Strutture iterative

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

LINGUAGGIO DI PROGRAMMAZIONE C
INFORMATICA Algoritmi fondamentali
INFORMATICA Strutture condizionali
Process synchronization
Programma: main() { istruzioni } ; assegnazione condizione ciclo istruzione: ;
Introduzione al linguaggio C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Iterazione while – do while - for.
Iterazione A. Ferrari.
3TC – 5/11/2010 Cicli while e do.. While Contatori e Totalizzatori.
Universita di Camerino
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
Iterazione enumerativa (for)
Algoritmi Politecnico di Milano
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Algebra di Boole ed elementi di logica
Process synchronization
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 3 Ottobre 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Informatica (Programmazione) Lezione 11 (19 novembre 2008) Programmazione in Java: controllo del flusso (iterazione)
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Introduzione alla programmazione lll
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do.
DAL PROBLEMA ALL'ALGORITMO Problemi e Programmi Paolo Amico
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente)
Istruzioni di ripetizione in Java
INFORMATICA Esercizi.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Istruzioni Iterative Nicola Fanizzi
Strutture di controllo nel C
Strutture di controllo in C -- Flow Chart --
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Fondamenti di Informatica Algoritmi
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
CODIFICA Da flow-chart a C++.
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Programmazione di Calcolatori
Parte 4 Elementi di Informatica di base
Unità Didattica 3 Linguaggio C
Radice quadrata di un numero
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Programmazione Strutturata
Anno accademico Le istruzioni di controllo in C.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
TURBOPASCAL L’iterazione - prof. V. Riboldi -.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Ottobre 2014.
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Strutture di controllo Esercizi!. Utilizzare i metodi: I modi per poter richiamare un metodo, di una classe (ad esempio SavitchIn) sono due. 1) E’ sempre.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
Algoritmi e basi del C Struttura di un programma
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
Algoritmi e basi del C Struttura di un programma
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Diagrammi a blocchi.
Strutture di controllo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Transcript della presentazione:

INFORMATICA Strutture iterative

Strutture iterative Si dice ciclo (loop) una sequenza di istruzioni che deve essere ripetuta più volte consecutivamente. Si consideri ad esempio il calcolo del fattoriale di un numero n > 0: n! = n (n - 1) (n - 2) 2 con il caso particolare 0! = 1. Sembrerebbe che basti una semplice assegnazione, ma se non si conosce a priori il valore di n, è impossibile scrivere l’istruzione che esegue il calcolo del fattoriale, poiché la formula contiene tanti fattori quanti ne indica n. . . . .......

Strutture iterative Proviamo a riscrivere la formula del fattoriale come: n! =(( (((1 2) 3) 4) (n - 1) n) Osservando la formula possiamo: attribuire ad una variabile fatt il valore 1, quindi moltiplicare fatt per 2 ed attribuire il risultato ancora ad fatt, poi fatt per 3 e così via fino a n. ..... . . . ..... .

Strutture iterative L'algoritmo di soluzione può quindi essere formalizzato mediante un algoritmo iterativo: assegna il valore 1 a fatt; se n vale 0, hai finito; con k che varia da 1 a n con passo unitario esegui: moltiplica fatt per k ed attribuisci il risultato a fatt.   Il prodotto fatt k viene eseguito n volte com’è necessario. La scelta di algoritmi ciclici influenza spesso altri componenti del programma, come la base dati. .

Strutture iterative Nel linguaggio C i cicli iterativi sono realizzati da tre costrutti: while : realizza il costrutto WHILE - DO; do – while : realizza il costrutto REPEAT - UNTIL; for : realizza il ciclo a contatore.

Istruzione while Sintassi: while (<condizione>) Finché <condizione> è vera esegue <istruzione> che può essere semplice o composta. I F <condizione> O V <istruzione>

Istruzione while : osservazioni Il costrutto while realizza il costrutto while – do della programmazione strutturata. <condizione> deve essere di tipo logico ed è ricalcolata ad ogni iterazione; se <condizione> risulta falsa già alla prima iterazione <istruzione> non viene eseguita neppure una volta; se <condizione> non diventa mai falsa non si esce mai dal loop! essendo <istruzione> una normale istruzione composta può contenere qualsiasi tipo di istruzione, in particolare altri while, dando origine (come per l’if) a while annidati.

Istruzione while: esempio Leggere un numero intero N da tastiera, e calcolare la somma S dei primi N numeri interi. Pseudocodice: Legge N da tastiera; inizializza l’accumulatore di risultato S a 0; inizializza un contatore indice a 1; finché indice <= N; aggiungi all’accumulatore S il valore di indice; aggiorna indice (ovvero incrementalo di 1); visualizza il risultato finale (valore di S).

Istruzione while: esempio #include <stdio.h> main() { int N, indice, S; printf (“\nIntroduci N: ”); scanf (“%d”, &N); S = 0; /* inizializzazioni */ indice = 1; while (indice <= N) S += indice; /* S S + indice: operazione iterativa */ indice++; /* aggiornamento condizione */ } printf (“\nSomma = %d”, S); /* output */

Esempio: calcolo del seno Calcolare la funzione seno x mediante lo sviluppo in serie   sino quando i fattori sono > 0.00005. Osservando i singoli fattori dello sviluppo si può osservare che: con N che varia a passi di 2.

Esempio: calcolo del seno Il primo termine lo conosciamo all’atto della lettura da tastiera del valore in radianti dell’angolo. Tutti gli altri termini possono essere ricavati in successione a partire dal primo applicando la relazione che abbiamo trovato che lega un termine al successivo. Diagramma di flusso Start Legge il valore dell’angolo x 1

Esempio: calcolo del seno 1 Inizializzazioni: n 1 termine x senx x termass | x | Falso termass > soglia ? Visualizza senx Vero Calcola nuovo termine e lo somma a senx. n n+2 termass |termine| Visualizza sin(x) Stop

Esempio: calcolo del seno #include <stdio.h> #include <math.h> const double soglia = 0.00005; main() { double x, senx, termine, termass, n; printf ("Angolo in radianti: "); scanf ("%lf ", &x); n = 1; termine = x; senx = x; if (x < 0) termass = - x; else termass = x; Inizializzazioni

Esempio: calcolo del seno /* Ad ogni ciclo calcola un nuovo contributo */ while (termass > soglia) { termine = - termine * (x * x) / ((n+1) * (n+2)); /* nuovo termine */ senx += termine; /* accumula in senx */ n += 2; /* aggiorna n */ if (termine < 0) /* aggiorna il valore assoluto di termine */ termass = -termine; else termass = termine; } printf ("\nIl seno di %lf e' %lf\n", x, senx); printf ("\nValore fornito dalla funzione di libreria: %lf\n", sin(x));

Istruzione for In altri linguaggi il costrutto for permette di eseguire una istruzione, semplice o composta, per un numero prefissato di volte (ciclo a contatore). Nel linguaggio C è più generale, al punto da poter essere assimilata ad una particolare riscrittura del costrutto while. Sintassi: for (<inizializzazione>; <condizione>; <aggiornamento>) <istruzione>;

Istruzione for <condizione> è un'espressione logica; <inizializzazione> e <aggiornamento> sono invece espressioni di tipo qualsiasi. L'istruzione for opera secondo il seguente algoritmo: viene calcolata <inizializzazione>; finché <condizione> è vera (valore non nullo) ; viene eseguita <istruzione>; viene calcolato <aggiornamento>.

Istruzione for I F O V Diagramma di flusso: Calcola l’espressione <inizializzazione> F <condizione> O V <istruzione> Calcola l’espressione <aggiornamento>

Istruzione for Di fatto il costrutto for è del tutto equivalente al seguente frammento di programma: <inizializzazione> while (<condizione>) { <istruzione> <aggiornamento> } Poiché non vi sono restrizioni sulla <istruzione> da eseguire nel corpo del ciclo, questa può contenere a sua volta istruzioni for (for annidati ), o altri costrutti di controllo (if, while, switch, ecc.).

Istruzione for Problema: leggere da tastiera un valore intero N e un carattere carat, e visualizzare una riga di N caratteri carat esempio: N = 10, carat = ‘*’ output ********** soluzione iterativa: ripeti N volte l’operazione “stampa carat ” Programma: #include <stdio.h> main() { int N, indice; char carat; printf ("\nIntroduci un carattere e un intero: "); scanf ("%c%d", &carat, &N); for (indice=0; indice<N; indice++) printf ("%c", carat); /*senza ‘\n’ !!!!*/ printf ("\n"); }

Istruzione for: esercizio Leggere da tastiera un numero intero N; successivamente leggere da tastiera N numeri interi, e calcolarne la media. Inoltre si controlli che ogni numero inserito sia compreso tra 0 e 30; in caso contrario, il numero deve essere ignorato. Al termine visualizzare la media dei soli valori validi. Analisi: Problema iterativo: si devono leggere N numeri da tastiera. Calcolo della media e controllo di ogni valore inserito (tra 0 e 30).

Istruzione for: soluzione Pseudocodice: Legge N da tastiera; Inizializza a 0 il totale (totale) ; Inizializza a 0 un contatore per i validi (cont_validi); Con un indice ind che va da 1 a N: legge un valore num da tastiera; Se num è < 0 oppure > 30 segnala che non è un valore valido e lo trascura, altrimenti : accumula num nel totale; incrementa di 1 cont_validi; Calcola la media (totale / cont_validi).

Istruzione for: soluzione #include <stdio.h> #include <conio.h> main() { int num, ind, N, totale, cont_validi; clrscr(); totale = 0; cont_validi = 0; printf ("\nIntroduci N: "); scanf ("%d", &N);

Istruzione for: soluzione for (ind = 1; ind <= N; ind++) { /* per ogni valore introdotto */ printf ("\nIntroduci il valore di indice %d: ", ind); scanf ("%d", &num); if (num < 0 || num > 30) /* controllo validità */ printf ("\nValore non valido"); else { totale += num; /* accumula num nel totale */ cont_validi++; } printf ("\nLa media è: %f\n", (float)totale/(float)cont_validi);

Esercizio: generazione di un triangolo Realizzare un programma in grado di generare un triangolo di "*" sul video, le cui dimensioni (numero di righe su cui si sviluppa il triangolo) siano fornite da tastiera. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Poiché il video è composto da 80 colonne, sia 80 la dimensione massima.

Generazione di un triangolo: soluzione Una possibile organizzazione del programma potrebbe essere costituito dalla seguente struttura: controlla se il numero di colonne (calcolato in base al numero di righe) è < di 80; se nrighe è il numero di righe da stampare, per nrighe volte esegui: - scrivi un certo numero di spazi; - scrivi un certo numero di "*".

Generazione di un triangolo: soluzione Per la relazione tra il numero di spazi ed il numero di '*' si consideri la figura: 1a riga * 2a riga * * * 3a riga * * * * * na riga * * * * * * * N o spazi - nell'ultima riga se ne devono stampare 0, nella penultima 1, nella terzultima 2, ecc.: in una generica riga rigacorr saranno: nrighe - rigacorr; N o asterischi - nella prima riga se ne deve stampare 1, nella seconda 3, nella terza 5, ecc.: nella generica riga rigacorr saranno: (rigacorr*2) - 1.

Generazione di un triangolo: soluzione #include <stdio.h> main() { int nrighe, ncolon, rigacorr, coloncorr; printf ("\nNumero righe del triangolo: "); scanf ("%d", &nrighe); printf ("\n\n\n"); ncolon = nrighe * 2 - 1; /* calcola il numero di colonne */ if (ncolon >= 80) printf ("\nErrore: troppe colonne!"); else

Generazione di un triangolo: soluzione for (rigacorr = 1; rigacorr <= nrighe; rigacorr++) { for (coloncorr = 1; coloncorr <= (nrighe - rigacorr); coloncorr++) printf (" "); /* output degli spazi */ for (coloncorr = 1; coloncorr <= (rigacorr*2)-1; coloncorr++) printf ("*"); /* output degli asterischi */ printf ("\n"); /* output di new line: finita una riga! */ }

Istruzione do ... while Sintassi: do <istruzione> while (<condizione>) Ripeti <istruzione>, che può essere semplice o composta, finché <condizione> è vera. I <istruzione> V <condizione> F O

Istruzione do ... while: osservazioni L’istruzione do ... while realizza il costrutto repeat - until della programmazione strutturata. <condizione> deve essere di tipo logico ed è calcolata ad ogni iterazione; <istruzione> pertanto è sempre eseguita almeno una volta (anche se <condizione> è subito falsa); se <condizione> non diventa mai falsa non si esce mai dal loop! come per gli altri costrutti<istruzione> è una normale istruzione composta e può contenere qualsiasi tipo di istruzione o costrutto (altri while, if, switch, ecc.), dando origine a strutture annidate.

Istruzione do ... while: esempio Calcolare il valore della serie armonica:   terminando il calcolo quando un fattore contribuisce per meno di 0.00005. La serie armonica si trova in numerose applicazioni quale, ad esempio, il calcolo degli interessi composti.

Istruzione do ... while: esempio #include <stdio.h> const double soglia = 0.00005; main() { double y, termine; int n; y = 0.0; n = 1; do termine = 1.0 / n; y += termine; n++; } while (termine > soglia); printf ("\nIl valore (trovato per n= %d) è: %lf ", (n-1), y);