Bucle For
| Aquest article s'està elaborant i està inacabat. Un viquipedista (o més) hi està treballant i és possible que trobeu defectes de contingut o de forma. Podeu ajudar i editar però, si us plau, comenteu abans els canvis majors per coordinar-los. Aquest avís és temporal. Es pot treure o substituir per {{incomplet}} després d'uns dies d'inactivitat. Fou afegit el març del 2012 o abans. |
El bucle for o cicle for és una estructura de control en la qual es pot indicar el nombre mínim de iteracions. Està disponible en gairebé tots els llenguatges de programació imperatius.
Taula de continguts |
Elements del bucle[modifica]
|
|
- Variable de control : pràcticament un mandat imposat per l'ús habitual és utilitzar la lletra i Iterador com a variable de control, o bé les seves successores en cas de bucles niats. L'ús d'aquesta lletra críptica potser a primera vista és, però, una excel·lent forma d'aportar agilitat de lectura al codi pel seu ús tan extensiu. Com rares vegades els bucles niats superen les tres dimensions (per una senzilla qüestió d'explosió exponencial), les lletres i, j i k solen ser les úniques relacionades amb aquest ús. En C es defineix en el primer paràmetre de la instrucció juntament amb la inicialització (opcional).
- Inicialització de la variable de control : en pseudolenguaje es demana explicitar (és la secció : = ValorInicial ), però, altres llenguatges més permissius com C no ho requereixen de manera obligatòria. De tota manera, la pràctica d'utilitzar variables de control que no s'inicialitzen en el bucle no és recomanada per a la llegibilitat del codi. En C es defineix en el primer paràmetre del bucle juntament amb la variable de control.
- Condició de control : en pseudolenguaje es veu representat pel valor final que pot prendre la variable de control (la secció A ValorFinal ). En C és el segon paràmetre i pot ser qualsevol condició (ni tan sols és obligació que hi hagi la variable de control, encara que una vegada més, això no es considera una bona pràctica).
- Increment : en pseudolenguaje es pren per defecte el valor 1, encara que pot explicitar mitjançant de la sentència PAS = ValorPaso qualsevol nombre enter (llegiu bé sencer, o sigui que tècnicament podem decrementar). En C és l'últim paràmetre.
- Cos : és el que es farà en cada iteració, poden ser una o més instruccions. En pseudolenguaje pesa la restricció de no poder alterar el valor de la variable de control, això no és requerit en C, però no es considera una bona pràctica.
Usos[modifica]
El seu ús principal s'orienta als vectors, podent modificar, afegir, eliminar o consultar dades que es trobin segons l'índex. Per això últim, una condició mínima del vector és que ha de ser ordenat, perquè si està llegint una dada inexistent, això genera un error de programació.
For en pseudolenguaje[modifica]
La principal diferència d'un bucle PER pel que fa als bucles MENTRE I REPETIR, és que pot determinar al començament del bucle quantes vegades es iterar el mateix, la qual cosa moltes vegades pot redundar en una optimització del codi per part dels compiladors. Els condicionals constitueixen juntament amb els bucles els pilars de la programació estructurada, i el seu ús és una evolució d'una sentència de llenguatge assemblador que executava la següent línia o no en funció del valor d'una condició.
El bucle PER s'ha convertit en el bucle més àmpliament utilitzat en la programació, ja que amb l'evolució dels llenguatges la majoria de les condicions de fi
MENTRE NoFinDeTabla (taula) FER PróximoRegistro (taula) HacerAlgo (ElementoActual (taula)) FI MENTRE
És el mateix dir:
PER i: = 0 a CantidadRegistros (taula) - 1, PAS = 1 PróximoRegistro (taula) HacerAlgo (ElementoActual (taula)) FI PER
Un altre ús comú és utilitzar els bucles PER per recórrer vectors de dues o més dimensions, en aquest cas es nien aquestes iteracions.
PSEUDOLENGUAJE
Vector a [3] [4] [2].//Estem indicant un vector de 3 dimensions i 24 elements en total. PER i: = 0 A 2 FER PER j: = 0 A 3 FER PER k: = 0 A 1 FER HacerAlgo (a [i] [j] [k]) FI PER FI PER FI PER
Exemple de PER en pseudolenguaje[modifica]
PER VariableControl: = ValorInicial A ValorFinal, PAS = Increment Cos FI PER
on VariableControl , ValorInicial , ValorFinal i Pas són sencers. La (s) instrucció (s) del cos s'executarà (n) (ValorFinal - ValorInicial+1) vegades, o sigui que va des ValorInicial a ValorFinal inclusivament.
Exemple en C[modifica]
int main () {
int vector [10], i;
for (i = 0; i <10; i++)
{
vector [i] = i;
}
}
En la definició del for , tenim que la variable de control i s'inicialitza en un valor 0, després es comprova la condició de control que ha de ser certa durant la seva execució, per completar el cicle, i, finalment, tenim l'increment, en aquest cas en una unitat. Quan la condició i<10 deixa de ser certa (quan i=10), el bucle finalitza.
Si, per exemple, en la condició col·loquem i <11, llavors el cicle for s'executarà des [0 ... 10], la qual cosa, en intentar accedir a l'element vector [10], generarà un error, ja que en C (per definició) els vectors de mida N van des de la posició 0 fins la N-1.
Exemple anterior escrit en Lexico[modifica]
tasca
{
els objectes vector [10], i són quantitats variant i des 0-9 faci copieu i en vector [i]
}
Bucle Per Cada (For Each)[modifica]
Aquest bucle és una evolució del concepte del bucle Per a alguns llenguatges. S'utilitza per recórrer estructures repetitives de dades de forma més simple i àgil. El bucle For Each pot descriure genèricament (en pseudolenguaje) de la següent manera:
PER CADA element DE tipus A conjunt FER Cos FI FOR each
- Element : és el nom de la variable o objecte que pren l'element iterat en el cos del bucle.
- Tipus de Dada : és el tipus de variable o la classe a la qual pertany l'objecte que es vol iterar.
- Conjunt : és l'estructura de dades que es vol iterar. L'ús més típic és amb vectors o-en programació orientada a objectes-classes del tipus Col·lecció.
- Cos : és el que es farà en cada iteració, poden ser una o més instruccions. Si bé no s'imposa una obligació sobre això, el més comú és que en aquest cos hi hagi alguna operació sobre l'element iterat.
Necessitat d'una nova estructura de control[modifica]
Aquesta estructura sorgeix com una innovació en els llenguatges per permetre un codi més àgil i llegible en una situació que és una de les principals causes de l'ús del bucle PER: aplicar la mateixa operació sobre tots els elements d'un vector, i no necessitar conèixer la posició de l'element en el vector. Aquesta estructura amb el bucle PER es resol de la següent manera:
Amb el bucle PER CADA això es redueix a:
PER CADA x DE tipus A Vector FER x = AlgunaOperación (x) FI PER
Els avantatges d'utilitzar l'estructura PER CADA són les següents:
- No cal cridar a una funció que obtingui la mida del vector
- No és necessari utilitzar la incòmoda notació de subíndexs per referir-nos al valor en qüestió, sobretot tenint en compte que si utilitzem aquesta estructura és perquè no necessitem el valor de l'índex.
- Ens permet fer una revisió en temps de compilació sobre el tipus de dada que representa l'element.
El bucle PER CADA no és un substitut del PER, és una millora per al molt freqüent cas anteriorment esmentat. La diferència essencial entre el bucle PER i el PER CADA és que en el primer guia la seva iteració per una variable que s'incrementa fins a cert punt de tall, en canvi en el segon el que guia la iteració és el recorregut de tots els elements d'un vector. Certament podem transformar qualsevol PER CADA en un PER, però transformar un bucle PER en un bucle PER CADA requeriria inicialitzar i controlar manualment les variables de control, amb la qual cosa es perdria novament llegibilitat en el codi. Per tant, quan en un llenguatge se'ns dóna la possibilitat d'utilitzar les dues estructures, l'elecció del PER CADA s'ha de fer en aquells casos per als quals va ser pensat: aplicar la mateixa operació a tots els elements d'un vector sense importar l'ordre en què es facin, si bé no és necessari que la variable element sigui utilitzada en el cos del bucle, la seva absència denota amb seguretat una mala elecció d'estructura de control.
Vegeu també[modifica]
- Vectors
- C
- Llenguatge de programació
- Estructures de control
- Bucle
- Bucle while
- Bucle repetir
- Cicle infinit
- Teorema del programa estructurat
- Programació estructurada

