divendres, 21 de maig del 2010

Estructures repetitives (iteratives)

Ahir van veure com en un determinat moment del programa potser necessitem que davant una certa condició el programa faci una cosa o una altra, ho vam veure amb l'exemple més comú. Tot i que tenim més possibilitats per fer el mateix.

Amb les estructures iteratives ens passa el mateix. Explicarem el concepte amb un tipus d'estructura, malgrat que tenim més maneres de fer el mateix. Doncs bé aquest tipus d'estructures es fan servir quan necessitem que el programa repeteixi unes instruccions un nombre determinat de vegades o mentre es compleixi una condició. Dit d'una altra manera, les instruccions són línies de codi, si unes determinades línies de codi s'han de repetir fins que alguna cosa canviï necessitarem una estructura repetitiva que ens generi un bucle del qual no sortirem fins que la condició canviï. És molt més "econòmic" que escriure mil cops determinades instruccions i és especialment útil quan depèn d'algun tipus d'interacció que la condició canviï.

Aprofitant el trillat exemple del programa dels amics, farem que, un cop el programa ens diu la frase en funció del % d'amics sense fills que tinguem, ens demani l'edat de cadascun d'aquests amics i després ens calculi la mitjana d'edat que tenen els nostres amics sense fills. Atenció! Com que encara no hem avançat gaire, traurem la possibilitat d'introduir les dades des del teclat i les dades del nombre d'amics del grup i el nombre d'amics sense fills aniran introduïdes al codi. Agafarem l'exemple del primer exercici: 6 amics al grup i només 1 amb fills, per tant 5 sense fills.

Clica la imatge per a una correcta visualització

Crearem 4 variables noves:

edat>> encarregada d'emmagatzemar l'edat de l'amic dins el bucle
suma_edat>> acumularà el sumatori de les edats introduïdes
mitja>> contindrà l'operació per calcular la mitja d'edat dels sense fills
i>> serveix per recórrer pel bucle

El bucle.
En el nostre exemple el bucle és aquest:

for(i=0;i<5;i++){
printf("Introdueix la edat del amic %d: ", i+1);
scanf("%f", &edat);
suma_edat=suma_edat+edat;
}

Quin embolic, no? Doncs el for és una de les estructures repetitives. Està recomanat utilitzar-lo quan sabem exactament el nombre de cops que s'haurà de repetir el bucle. Nosaltres tenim 5 amics sense fills, per tant haurà de preguntar 5 cops l'edat de l'amic.

El que hi ha entre parèntesi indica l'inici, la condició i que passa a cada repetició:

  • i=0; recorda que la variable i serveix per recórrer el bucle, s'inicia a 0 però canvia de valor
  • i<5;>
  • i++; vol dir que cada cop que es repeteixi el bucle, la variable 1 suma 1

Així dons i comença a 0 però quan el bucle es fa un cop, en sortir, valdrà 1, es torna a fer, en sortir valdrà 2, es torna a fer, en sortir valdrà 3... i així fins a 5 cops!

Les instruccions que són a l'interior del bucle:

for(i=0;i<5;i++){
printf("Introdueix la edat del amic %d: ", i+1);
scanf("%f", &edat);
suma_edat=suma_edat+edat;
}

La primera línia de codi treu per pantalla la frase introdueix l'edat del amic %d i aquest %d en sortir per pantalla s'imprimirà per valor que tingui i en aquells moments més 1. O sigui el primer cop que veiem la frase, com que i val 0, si a 0 sumem 1 ens imprimirà:

Introdueix l'edat de l'amic 1

Com que i, en acabar les instruccions i tornar a entrar al bucle suma 1 per la instrucció i++ quan hagi d'imprimir la frase per segon cop i ja valdrà 1, però com que sumarà 1 en imprimir-la ens mostrarà:

Introdueix l'edat de l'amic 2

...i així successivament!

La segona línia de codi (scanf("%f", &edat);) llegeix l'edat que introduïm al teclat i l'emmagatzema temporalment a la variable edat.

La tercera línia va sumant les edats introduïdes i acumulant el sumatori dins la variable suma_edat. Recorda posar & davant la variable per a una correcta execució del programa.

Finalment:

mitja=suma_edat/5;
printf("La mitja de edat dels teus amics sense fills es de %.2f", mitja);

Calculem la mitja i imprimim el resultat per pantalla. Demà un resum amb els principals tipus d'estructures condicionals i iteratives!

Cap comentari:

Publica un comentari a l'entrada