Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

Estructures algorítmiques de repetició

Les estructures algorítmiques de repetició ens permeten fer coses que es repeteixen un nombre (determinat o no) de cops. L'estructura més habitual és la for però també tenim les estructures while i do-while.

Estructura for

L'estructura for repeteix un conjunt d'instruccions un nombre predeterminat de vegades. Cal una variable que compti les iteracions. La forma de l'estructura for és la següent:

for (inicialització; condició; modificació){
	// Instruccions que es fan tants cops com es repeteix el bucle
}

A la inicialització declarem una variable que sol ser entera i la inicialitzem a un cert valor. La condició indica què s'ha de complir per tal que el bucle es repeteixi. Si la condició no és compleix el bucle es deixa d'executar i el programa segueix a continuació. La modificació sol ser un increment o un decrement de la variable. Una forma típica seria la següent:

for (int k = 1; k < 11; k++){
	// Instruccions que es fan tants cops com es repeteix el bucle
}
// Instruccions que es fan quan la condició del for ja no és certa

Aquest bucle es repetirà deu cops. En el primer cop k valdrà 1 i en el darrer valdrà 10. Podem fer servir la variable k dins el bucle.

No és necessari que el bucle comenci a 1. Pot començar a 0 o a qualsevol altre valor. Tampoc cal que la variable sigui entera ni que s'incrementi d'un en un. Seria possible que la variable s'incrementés d'altres formes (j = j + 4), es decrementés (i = i - 1), o altres opcions (per exemple, m = m * 4).

Estructura while

L'estructura while repeteix un conjunt d'instruccions un nombre indefinit de vegades, mentre no es cumpleix la condició establerta. La forma de l'estructura while és la següent:

while (condició){
	// Instruccions que es fan tants cops com es repeteix el bucle
}

El comportament del bucle for que hem vist abans el podem generar amb el següent bucle while:

int k = 1;
while (k < 11){
	// Instruccions que es fan tants cops com es repeteix el bucle
	k++;
}
// Instruccions que es fan quan la condició ja no és certa

Els bucles while són recomanables quan la variable que s'incrementa no és la mateixa que es compara o quan el bucle depèn d'esdeveniments externs com l'activació d'un sensor.

Estructura do-while

A l'estructura while si inicialment la condició no es compleix les instruccions internes no s'executen cap cop. A l'estructura do-while la condició es comprova al final i, per tant, les instruccions sempre s'executen un cop com a mínim. La forma de l'estructura do-while és la següent:

do {
	// Instruccions que es fan tants cops com es repeteix el bucle
} while (condició);

El comportament del bucle for que hem vist abans el podem generar amb el següent bucle do-while:

int k = 1;
do {
	// Instruccions que es fan tants cops com es repeteix el bucle
	k++;
} while (k < 11);
// Instruccions que es fan quan la condició ja no és certa

En aquest cas les instruccions es faran 10 cops però al final del bucle el valor de k serà 11.

Els bucles do-while són recomanables quan la variable que s'incrementa no és la mateixa que es compara o quan el bucle depèn d'esdeveniments externs com l'activació d'un sensor i, a més, volem que el bucle es faci un cop com a mínim.

Important: Les claus només són necessàries quan el contingut de la sentència és de més d'una línia. Si és d'una sola línia les claus no són necessàries però és una bona pràctica posar-les per evitar errors si s'hi han d'afegir més coses en el futur.

Per exemple, aquests dos trossos de programa són equivalents:

for (int k = 1; k < 11; k++)
	Serial.print("k = ");
	Serial.println(k);

for (int k = 1; k < 11; k++){
	Serial.print("k = ");
}
Serial.println(k);

Per tant el valor de k només s'imprimeix un cop. De fet, la manera més "formal" d'escriure la primera versió seria:

for (int k = 1; k < 11; k++)
	Serial.print("k = ");
Serial.println(k);

Encara que probablement aquest programa no fa res útil.

 

 

 

En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

 

 

 

 

 

 

 

 

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.