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

5 Strutture Iterative

  • 1.
  • 2.
    Strutture iterative Sidice 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 Proviamoa 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'algoritmodi 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 Nellinguaggio 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: esempioLeggere 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 delseno 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 delseno 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 delseno 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 delseno #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 delseno /* 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 Inaltri 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 Calcolal’espressione <inizializzazione> <istruzione> Calcola l’espressione <aggiornamento> Diagramma di flusso: I O <condizione> F V
  • 18.
    Istruzione for Difatto 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: esercizioLeggere 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: soluzionePseudocodice: 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: soluzionefor (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 unTriangolo 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 unTriangolo 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 untriangolo 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 untriangolo 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 untriangolo 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 untriangolo 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 untriangolo 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); }