5.8. Estructura de control For-in.
anterior :: indice :: siguiente
La estructura For-in necesita de la declaración de una variable de control de tipo enumerados, subrangos, conjuntos, números enteros (excepto int64 y qword), que nos permitirá controlar el número de repeticiones que realizará la estructura de control en una estructura For-in.
Dependiendo de la variable de control, si la variable de control es de tipo enumerado el bucle se repetirá la cantidad de valores que tiene el tipo de dato enumerado, y la variable de control irá tomando dichos valores. Ejemplo: .
| |
{$codepage UTF8}
TYPE
Enum01=(UNO,DOS,TRES,CUATRO,CINCO,SEIS,SIETE,OCHO,NUEVE,DIEZ);
VAr i:Enum01;
BEGIN
for i in Enum01 do Writeln(i)
END. |
| |
Código fuente 23: Uso de for-in con tipos de datos enumerados. |
La variable de control i, irá tomando los valores que tiene el tipo de dato enumerado Enum01, y luego los irá mostrando por pantalla. En el caso de conjuntos ocurre algo similar. Sólo que el bucle se ejecutará por cada elemento asignado a la variable de tipo conjunto, y la variable de control debe ser del tipo de dato del que se definió la variable de tipo conjunto. Ejemplo:
| |
{$codepage UTF8}
VAR
letras : Set of char;
i: char;
BEGIN
letras:=[];
for i in letras do writeln(i); //no muestra nada
letras:=['a','e','i','o','u'];
for i in letras do writeln(i); //muestra las vocales
END. |
| |
Código fuente 24: Uso de for-in con conjuntos. |
El bucle For-in también se puede usar con arreglos, en donde la variable de control debe ser del tipo de dato que se define para cada bloque de memoria del arreglo. Ejemplo:
| |
{$codepage UTF8}
TYPE TReg=Record
Nombre:String;
Edad:byte;
End;
VAR Registros:array [1..5] of TReg;
i:TReg;
j:byte;
BEGIN
for j:=1 to 5 do
Begin
Write('Nombre: ');Readln(Registros[j].Nombre);
Write('Edad: ');Readln(Registros[j].Edad)
End;
Writeln('----------------------------------------');
for i in Registros do
Begin
Writeln('Nombre: ',i.Nombre);
Writeln('Edad: ',i.Edad)
End;
END. |
| |
Código fuente 25: Uso de for-in con arreglos. |
Algo que se debe entender es que la variable de control, es una copia de todos los bloques o elementos que contenga un arreglo, es decir aunque el compilador compile el siguiente bucle:
| |
for i in Registros do
Begin
Readln(i.Nombre);
Readln(i.Edad)
End; |
no significa que hará cambios por cada elemento del arreglo, el bucle For-in siempre devolverá una copia de los valores de un arreglo, conjunto o un tipo de dato enumerado en la variable de control.
anterior :: indice :: siguiente |