Professional Documents
Culture Documents
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 listruzione che
esegue il calcolo del fattoriale, poich la formula
contiene tanti fattori quanti ne indica n.
Piero Demichelis
Strutture iterative
Proviamo a riscrivere la formula del fattoriale
come:
.....
n! =((
. .
.
.....
.
(((1 2) 3) 4)
(n - 1) 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.
Strutture iterative
Nel linguaggio C i cicli iterativi sono realizzati da
tre costrutti:
while
Piero Demichelis
Istruzione while
Sintassi:
while (<condizione>)
<istruzione>
<condizione>
Finch <condizione>
vera esegue <istruzione>
che pu essere semplice
o composta.
Piero Demichelis
V
<istruzione>
F
O
Piero Demichelis
Piero Demichelis
x
x
x
sin x x
L
3! 5! 7!
x x
fatt fatt . prec.
N 1 N 2
Start
1
Piero Demichelis
x
x
|
Falso
Vero
Calcola nuovo termine e lo
somma a senx.
n
n+2
termass
|
termine|
Piero Demichelis
Visualizza senx
Visualizza sin(x)
Stop
Piero Demichelis
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:
Istruzione for
<condizione> un'espressione logica;
<inizializzazione> e <aggiornamento> sono
invece espressioni di tipo qualsiasi.
L'istruzione for opera secondo il seguente
algoritmo:
Istruzione for
Diagramma di flusso:
I
Calcola lespressione
<inizializzazione>
<condizione>
F
O
V
<istruzione>
Calcola lespressione
<aggiornamento>
Piero Demichelis
Istruzione for
Di fatto il costrutto for del tutto equivalente al
seguente frammento di programma:
<inizializzazione>
while (<condizione>)
{
<istruzione>
<aggiornamento>
}
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
**********
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");
Piero Demichelis
}
Piero Demichelis
*
* *
* * *
* * * *
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* *
* * *
* * * *
Piero Demichelis
riga
riga
riga
riga
*
* * *
* * * * *
* * * * * * *
/* output degli
+)
asterischi */
printf ("*");
printf ("\n");
riga! */
/* output degli
/* output di new line: finita una
}
}
Piero Demichelis
I
<istruzione>
Ripeti <istruzione>,
che pu essere semplice
o composta,
finch <condizione>
vera.
Piero Demichelis
<condizione>
1 1
1
y n 1 L
2 3
n
terminando il calcolo quando un fattore
contribuisce per meno di 0.00005.
Piero Demichelis