Percorso: ilMac.net > Scuola di Mac > Corsi > Il linguaggio C


Il linguaggio C

L'istruzione FOR

In questa puntata impareremo ad utilizzare un’altra istruzione che non introduce nuovi concetti, ma che vi sarà utile al fine di rendere piu’ compatta la scrittura dei listati e che agevolerà anche la loro esecuzione, alleggerendo cosi’ il lavoro al microprocessore. E’ ovvio che non vi accorgerete, con listati semplici (e soprattutto eseguiti con un RISC!) del miglioramento di velocità, ma voglio ricordarvi che quando ci si trova davanti ad imponenti listati composti da migliaia e migliaia di linee, gli eventuali problemi di velocità di esecuzione vengono risolti operando alla radice, modificando istruzioni che a prima vista ed in esempi di listati piccoli, appunto non sembrano avere un impatto finale sulla velocità di esecuzione. Ma se per ognuna delle migliaia istruzioni riusciamo a far risparmiare al microprocessore una minima frazione di secondo, allora si’ che ce ci accorgeremo di quanto “la struttura dell’atomo puo’ influire sull’aspetto della materia”. (Spero abbiate capito il paragone...).

L’istruzione protagonista di questa puntata è l’istruzione FOR.
Vediamo quando é possibile ed opportuno utilizzarla. Non vi sarà difficile trovarvi in una situazione nella quale avete bisogno di ripetere una stessa operazione un determinato numero di volte. Ad esempio se dovete aggiungere piu’ volte una certa cifra ad un totale.
Vediamo la struttura di questo costrutto:

for (espressione1; espressione2; espressione3)
istruzione;

Dove espressione1 inizializza, espressione2 e' il test di termine ed espressione3 e' il modificatore (che puo' anche essere piu' di un semplice incremento).

Per farvi capire meglio i vantaggi di questa istruzione vi porto un semplice esempio: supponiamo di avere la variabile X che vale 1 e vogliamo aggiungervi per 10 volte 2.
Con le istruzioni apprese finora di certo scrivereste un listato simile al seguente:


#include <stdio.h>

main() {

int x = 1;

x = x +2;
x = x +2;
x = x +2;
x = x +2;
x = x +2;
x = x +2;
x = x +2;
x = x +2;
x = x +2;
x = x +2;

printf("%d",x);

}


L’output sara’ 1 + (2*10 ) = 21

Vediamo come il tutto viene reso estremamente piu’ compatto mediante l’uso del FOR.


#include <stdio.h>

main() {

int x = 1,i;

for(i=1; i<=10; i=i+1)
x=x+2;

printf("%d",x);

}


L’output sarà sempre 21. Ma vediamo cosa é cambiato. Innanzitutto nella dichiarazione delle variabili , alla X è stata aggiunta una variabile i (che fungerà da punto di riferimento per gli incrementi). Piu’ sotto vediamo apparire l’istruzione FOR seguita da ben tre espressioni all’interno delle parentesi tonde. Tradotto in uno schema a punti (i=1; i<=10; i=i+1) x=x+2 significa:

1. se i è uguale a o maggiore di 1 allora vai al punto 2 altrimenti fine
2. aggiungi 2 alla variabile x
3. incrementa i di 1 (i = i+1)

In questo caso, poiché l’espressione2 è i<=10, allora i 3 punti dello schema saranno eseguiti fintanto che la variabile i é minore o uguale a 10. Quindi i é usata come un indice, come un punto di riferimento per far capire
al computer quante volte deve ancora eseguire una determinata istruzione ; in questo caso per fargli capire quante volte deve sommare 2 a x che ad ogni ciclo aumenta appunto di 2.

Vediamo ora un’applicazione di questa istruzione in contesto piu’ reale.
Con il seguente listato potrete ottenere il totale di un massimo di 4 spese. Per avere a disposizione un maggior numero di spese calcolabili, è sufficiente che voi modifichiate la quarta linea di codice sostituendo “i<=4” con “i<=x” dove x è il numero di spese da voi scelto.


#include <stdio.h>

main() {

int spesa, totale=0,i;

for(i=1; i<=4; i=i+1) {
printf("Spesa: ");
scanf("%d", &spesa);

totale = totale + spesa;
} /*fine del ciclo FOR */

printf("nSpesa totale: %d",totale);

} /*fine del main() */


La struttura di quest’ultimo listato segue lo schema di cui sopra basato sulle 3 istruzioni del ciclo FOR. Sono solo state aggiunte delle graffe dopo le tre espressioni del ciclo. Questo perché dopo il FOR non abbiamo una singola istruzione, ma un blocco costituito da printf(), scanf() e totale=totale+spesa.

Naturalmente, oltre a poter sfruttare l’istruzione FOR per un incremento, potete sfruttarla per un decremento (non é infatti questa che cambia, cambia semplicemente l’istruzione dopo di essa, non é obbligatorio che l’istruzione da ripetere sia aritmetica...) . E allora perché non provare a scrivere un listato che da un totale iniziale X sottragga, in base a quanto stabilito di volta in volta dall’utente, una determinata somma?

Io ho lanciato il sasso, ora vedete voi ...=)
Come sempre ripeto che la lezione deve essere seguita dall’esercizio proposto e dall’inventiva personale. Sbizzarrite sempre la fantasia! Con poche istruzioni di è possibile scrivere un numero pressoché illimitato di listati differenti!
E se trovate difficoltà potete comunque scrivermi.



Data di pubblicazione: 15-05-2000
L'intero contenuto di questo sito dal 1998 del Team di ilMac.net, vietata ogni riproduzione senza il consenso scritto da parte degli autori.