Per introdurre la sintassi in linguaggio C di questo particolare tipo di iterazione vediamo subito di risolvere un problema che ne richiede l'uso. Cerchiamo di costruire un programma che calcoli tutti i divisori interi di un numero compresi in un intervallo specificato. Eccone una possibile versione
#include
#include
main()
{ // Dichiarazione delle variabili
int i, n, m, num, resto;
printf("Programma per il calcolo di tutti i \n");
printf("divisori interi di un numero compresi \n");
printf("in un intervallo specificato \n\n\n");
// Acquisizione dei dati
printf("Numero di cui si desidera sapere i divisori: ");
scanf("%d",&num);
printf("Estremo inferiore dell'intervallo in cui cercare i divisori ");
scanf("%d",&n);
printf("Estremo superiore dell'intervallo in cui cercare i divisori ");
scanf("%d",&m);
// Ricerca e visualizzazione dei divisori
for (i=n; i<=m; i++)
if (!(num % i)) printf("%5d e' divisore di %5d\n", i, num);
system ("PAUSE");
return 0;
}
Il principio alla base dell'algoritmo risolutivo è semplice. Una variabile (i) assume tutti i valori interi tra l'estremo inferiore dell'intervallo in cui cercare i divisori (n) e l'estremo superiore (m). Per ogni valore assunto da i viene calcolato il resto della divisione tra num e i con l'espressione num % i. Quando il resto è zero iè divisore di num, e ne viene visualizzato il valore con apposito messaggio, altrimenti si procede senza nessun output.
Tutto è realizzato con il comando composto
for (i=n; i<=m; i++)
if (!(num % i)) printf("%5d e' divisore di %5d\n", i, num);
La riga
for (i=n; i<=m; i++)
stabilisce che partendo da (i=n) occorre ripetere le istruzioni del corpo del ciclo, fin quando è verificato che (i<=m), e ogni volta aumentando la i di 1 (i++ è il comando che incrementa la i. In pratica è come srivere i=i+1). Il comando che segue:
if (!(num % i)) printf("%5d e' divisore di %5d\n", i, num);
visualizza il messaggio quando (num % i) è zero. Se avete qualche dubbio ricontrollate la tabella degli operatori e l'uso dei valori interi come valori booleani (0 per falso, !0 per vero).
|