SlideShare a Scribd company logo
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> ) <istruzione> Finché  <condizione>  è vera esegue  <istruzione> che può essere semplice  o composta. <condizione> V F <istruzione> I O
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  | termass  >  soglia  ? Calcola nuovo  termine  e lo somma a  senx . n  n +2 termass  | termine | Falso Vero Visualizza  senx 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; int n; printf (“\nAngolo in radianti: &quot;); scanf (&quot;%lf &quot;, &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 (&quot;\nIl seno di %lf e' %lf\n&quot;, x, senx); printf (&quot;\nValore fornito dalla funzione di libreria:  %lf\n&quot;, 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 Calcola l’espressione <inizializzazione> <istruzione> Calcola l’espressione <aggiornamento> Diagramma di flusso: I O <condizione> F V
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 ( &quot; \nIntroduci un carattere e un intero:  &quot; ); scanf ( &quot; %c%d &quot; , &carat, &N); for (indice=0; indice<N; indice++)    printf ( &quot; %c &quot; , carat);  /*senza ‘\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();  /* pulisce lo schermo in Turbo C */   printf (&quot;\nIntroduci N: &quot;); scanf (&quot;%d&quot;, &N); totale = 0; cont_validi = 0;
Istruzione for: soluzione for (ind = 1; ind <= N; ind++) {  /* per ogni valore introdotto */ printf (&quot;\nIntroduci il valore di indice %d: &quot;, ind); scanf (&quot;%d&quot;, &num);   if (num < 0 || num > 30)  /* controllo validità  */ printf (&quot;\nValore non valido&quot;);   else   {   totale += num;  /* accumula num nel totale */   cont_validi++;   } } printf (&quot;\nLa media è: %f\n&quot;, (float)totale/(float)cont_validi); }
Generazione di un Triangolo rettangolo Realizzare un programma che legga da tastiera l’altezza di un triangolo rettangolo e lo disegni sul monitor nel modo seguente: Introduci l’altezza:  7 * ** *** **** ***** ****** *******
Generazione di un Triangolo rettangolo #include <stdio.h> main() { int riga, colonna, alt; printf (“\nIntroduci l’altezza: &quot;); scanf (&quot;%d&quot;, &alt); for (riga = 1;  riga <= alt;  riga++) { for ( colonna = 1;  colonna <= riga;  colonna++)   printf (&quot;*&quot;); printf (&quot;\n&quot;); } }
Generazione di un triangolo isoscele Realizzare un programma in grado di generare un triangolo di &quot;*&quot; 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 isoscele 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 &quot;*&quot;.
Generazione di un triangolo isoscele Per la relazione tra il numero di spazi ed il numero di '*' si consideri la figura: 1 a  riga  * 2 a  riga  * * * 3 a  riga  * * * * * n a  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 isoscele #include <stdio.h> main() { int nrighe, ncolon, rigacorr, coloncorr; printf ( &quot; \nNumero righe del triangolo:  &quot;);  scanf (&quot;%d&quot;, &nrighe);  printf (&quot;\n\n\n&quot;); ncolon = nrighe * 2 - 1;  /* calcola il numero di colonne */ if (ncolon >= 80) printf ( &quot; \nErrore: troppe colonne!&quot;); else {
Generazione di un triangolo isoscele for (rigacorr = 1; rigacorr <= nrighe;   rigacorr++) { for (coloncorr = 1;   coloncorr <= (nrighe - rigacorr); coloncorr++) printf (&quot; &quot;);  /*  output degli spazi  */ for (coloncorr = 1;   coloncorr <= (rigacorr*2)-1;   coloncorr++) printf (&quot;*&quot;);  /*  output degli asterischi  */ printf (&quot;\n&quot;);  /*  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. <istruzione> <condizione> I O F V
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 (&quot;\nIl valore (trovato per n= %d) è: %lf &quot;, (n-1), y); }

More Related Content

PDF
Lezione 12 (28 marzo 2012)
PDF
Lezione 12 (28 marzo 2012)
PDF
Lezione 6 (12 marzo 2012)
PPT
9 Altre Istruzioni Di I O
PPTX
PDF
Vogliamo programmatori stupidi e pigri!
PPTX
Linguaggio C++ - Basi
PPTX
La metodologia Top - Down - applicazione al C++
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
Lezione 6 (12 marzo 2012)
9 Altre Istruzioni Di I O
Vogliamo programmatori stupidi e pigri!
Linguaggio C++ - Basi
La metodologia Top - Down - applicazione al C++

What's hot (20)

PDF
Le basi di Pytthon 3 - Fondamenti n.1
PPT
13 Puntatori E Memoria Dinamica
PDF
12 - Programmazione: Array dinamici e puntatori
PDF
10 - Programmazione: Tipi di dato strutturati
PPT
Corso c++
PDF
Soluzione esame b del 13 giugno 2012
PPSX
Informatica di base
PDF
Lezione 11 (26 marzo 2012)
PPT
1 Programmazione
PPT
6 Vettori E Matrici
PDF
15 - Programmazione: Algoritmi
PDF
Pillole di C++
PPT
Supermercato
PDF
Flow chart
PPT
Presentazione Ristorante
PDF
05 - Programmazione: Funzioni
PDF
Python - Primi passi
PPT
Presentazione Ristorante
PPT
presentazione dell'esercizio per le vacanze di natale
ODP
Programmazione Top Down in C++
Le basi di Pytthon 3 - Fondamenti n.1
13 Puntatori E Memoria Dinamica
12 - Programmazione: Array dinamici e puntatori
10 - Programmazione: Tipi di dato strutturati
Corso c++
Soluzione esame b del 13 giugno 2012
Informatica di base
Lezione 11 (26 marzo 2012)
1 Programmazione
6 Vettori E Matrici
15 - Programmazione: Algoritmi
Pillole di C++
Supermercato
Flow chart
Presentazione Ristorante
05 - Programmazione: Funzioni
Python - Primi passi
Presentazione Ristorante
presentazione dell'esercizio per le vacanze di natale
Programmazione Top Down in C++
Ad

Viewers also liked (9)

PDF
Intoduzione Alle Metodologie Agili
PDF
Workshop Su Refactoring
PDF
Codice legacy, usciamo dal pantano! @iad11
PDF
Design Pattern In Pratica
PDF
XP Game
PDF
User stories writing - Codemotion 2013
PDF
Agile retrospective,an example
PDF
Sviluppo software enterprise
PDF
User Story Mapping
Intoduzione Alle Metodologie Agili
Workshop Su Refactoring
Codice legacy, usciamo dal pantano! @iad11
Design Pattern In Pratica
XP Game
User stories writing - Codemotion 2013
Agile retrospective,an example
Sviluppo software enterprise
User Story Mapping
Ad

Similar to 5 Strutture Iterative (20)

PDF
Fondamenti di Informatica - Esercitazione3 (1).pdf
PPTX
Caratteristiche del linguaggio c
PDF
Lezione 8 (12 marzo 2012)
PDF
04 - Programmazione: Istruzioni Pt.2
PDF
Esercitazione 1 (27 febbraio 2012)
PDF
Lezione 5 (7 marzo 2012)
PDF
Lezione 11 (26 marzo 2012)
PPT
05 3 istruzioni-selezione-iterazione-condizioni
PDF
Lezione 16 (2 aprile 2012)
PDF
Calcolo Numerico - Esercizi 1
PDF
Esercitazione 3 (14 marzo 2012)
PPT
06 1 array_stringhe_typedef
PDF
Lezione 7 (12 marzo 2012)
PDF
Esercitazione 4 (19 marzo 2012)
PDF
Esercitazione 2 (29 febbraio 2012)
PDF
Soluzione esame a del 13 giugno 2012
PDF
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
PDF
Lezione 21 (2 maggio 2012)
PDF
Laboratorio Programmazione: Operatori logici
PPTX
Strutture Cicliche in C++
Fondamenti di Informatica - Esercitazione3 (1).pdf
Caratteristiche del linguaggio c
Lezione 8 (12 marzo 2012)
04 - Programmazione: Istruzioni Pt.2
Esercitazione 1 (27 febbraio 2012)
Lezione 5 (7 marzo 2012)
Lezione 11 (26 marzo 2012)
05 3 istruzioni-selezione-iterazione-condizioni
Lezione 16 (2 aprile 2012)
Calcolo Numerico - Esercizi 1
Esercitazione 3 (14 marzo 2012)
06 1 array_stringhe_typedef
Lezione 7 (12 marzo 2012)
Esercitazione 4 (19 marzo 2012)
Esercitazione 2 (29 febbraio 2012)
Soluzione esame a del 13 giugno 2012
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Lezione 21 (2 maggio 2012)
Laboratorio Programmazione: Operatori logici
Strutture Cicliche in C++

More from guest60e9511 (10)

PPT
2 Rappresentazione Dei Dati
PDF
Codifica
PPT
12 Struct
PPT
11 I File
PPT
10 Typedef Enum
PPT
8 Algoritmi
PPT
7 Sottoprogrammi
PPT
4 Strutture Condizionali
PPT
4 Algebra Di Boole
PPT
3 Linguaggioc
2 Rappresentazione Dei Dati
Codifica
12 Struct
11 I File
10 Typedef Enum
8 Algoritmi
7 Sottoprogrammi
4 Strutture Condizionali
4 Algebra Di Boole
3 Linguaggioc

5 Strutture Iterative

  • 2. 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 . . . . .......
  • 3. 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. . ..... . . ..... .
  • 4. 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. .
  • 5. 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 .
  • 6. Istruzione while Sintassi: while ( <condizione> ) <istruzione> Finché <condizione> è vera esegue <istruzione> che può essere semplice o composta. <condizione> V F <istruzione> I O
  • 7. 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.
  • 8. 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 ).
  • 9. 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 */ }
  • 10. 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.
  • 11. 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
  • 12. Esempio: calcolo del seno 1 Inizializzazioni: n 1 termine x senx x termass | x | termass > soglia ? Calcola nuovo termine e lo somma a senx . n n +2 termass | termine | Falso Vero Visualizza senx Visualizza sin(x) Stop
  • 13. Esempio: calcolo del seno #include <stdio.h> #include <math.h> const double soglia = 0.00005; main() { double x, senx, termine, termass; int n; printf (“\nAngolo in radianti: &quot;); scanf (&quot;%lf &quot;, &x); n = 1; termine = x; senx = x; if (x < 0) termass = - x; else termass = x; Inizializzazioni
  • 14. 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 (&quot;\nIl seno di %lf e' %lf\n&quot;, x, senx); printf (&quot;\nValore fornito dalla funzione di libreria: %lf\n&quot;, sin(x)); }
  • 15. 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>;
  • 16. 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>.
  • 17. Istruzione for Calcola l’espressione <inizializzazione> <istruzione> Calcola l’espressione <aggiornamento> Diagramma di flusso: I O <condizione> F V
  • 18. 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.).
  • 19. 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 ( &quot; \nIntroduci un carattere e un intero: &quot; ); scanf ( &quot; %c%d &quot; , &carat, &N); for (indice=0; indice<N; indice++) printf ( &quot; %c &quot; , carat); /*senza ‘\n’ !!!!*/ }
  • 20. 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).
  • 21. 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 ).
  • 22. Istruzione for: soluzione #include <stdio.h> #include <conio.h> main() { int num, ind, N, totale, cont_validi; clrscr(); /* pulisce lo schermo in Turbo C */ printf (&quot;\nIntroduci N: &quot;); scanf (&quot;%d&quot;, &N); totale = 0; cont_validi = 0;
  • 23. Istruzione for: soluzione for (ind = 1; ind <= N; ind++) { /* per ogni valore introdotto */ printf (&quot;\nIntroduci il valore di indice %d: &quot;, ind); scanf (&quot;%d&quot;, &num); if (num < 0 || num > 30) /* controllo validità */ printf (&quot;\nValore non valido&quot;); else { totale += num; /* accumula num nel totale */ cont_validi++; } } printf (&quot;\nLa media è: %f\n&quot;, (float)totale/(float)cont_validi); }
  • 24. Generazione di un Triangolo rettangolo Realizzare un programma che legga da tastiera l’altezza di un triangolo rettangolo e lo disegni sul monitor nel modo seguente: Introduci l’altezza: 7 * ** *** **** ***** ****** *******
  • 25. Generazione di un Triangolo rettangolo #include <stdio.h> main() { int riga, colonna, alt; printf (“\nIntroduci l’altezza: &quot;); scanf (&quot;%d&quot;, &alt); for (riga = 1; riga <= alt; riga++) { for ( colonna = 1; colonna <= riga; colonna++) printf (&quot;*&quot;); printf (&quot;\n&quot;); } }
  • 26. Generazione di un triangolo isoscele Realizzare un programma in grado di generare un triangolo di &quot;*&quot; 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.
  • 27. Generazione di un triangolo isoscele 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 &quot;*&quot;.
  • 28. Generazione di un triangolo isoscele Per la relazione tra il numero di spazi ed il numero di '*' si consideri la figura: 1 a riga * 2 a riga * * * 3 a riga * * * * * n a 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 .
  • 29. Generazione di un triangolo isoscele #include <stdio.h> main() { int nrighe, ncolon, rigacorr, coloncorr; printf ( &quot; \nNumero righe del triangolo: &quot;); scanf (&quot;%d&quot;, &nrighe); printf (&quot;\n\n\n&quot;); ncolon = nrighe * 2 - 1; /* calcola il numero di colonne */ if (ncolon >= 80) printf ( &quot; \nErrore: troppe colonne!&quot;); else {
  • 30. Generazione di un triangolo isoscele for (rigacorr = 1; rigacorr <= nrighe; rigacorr++) { for (coloncorr = 1; coloncorr <= (nrighe - rigacorr); coloncorr++) printf (&quot; &quot;); /* output degli spazi */ for (coloncorr = 1; coloncorr <= (rigacorr*2)-1; coloncorr++) printf (&quot;*&quot;); /* output degli asterischi */ printf (&quot;\n&quot;); /* output di new line: finita una riga! */ } } }
  • 31. Istruzione do ... while Sintassi: do <istruzione> while ( <condizione> ) Ripeti <istruzione>, che può essere semplice o composta, finché <condizione> è vera. <istruzione> <condizione> I O F V
  • 32. 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.
  • 33. 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 .
  • 34. 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 (&quot;\nIl valore (trovato per n= %d) è: %lf &quot;, (n-1), y); }