A continuación, mostraremos los esquemas básicos de recorrido y búsqueda sobre tablas, tratadas éstas como estructuras secuenciales. Para simplificar la notación, tomaremos como conjunto de índices el intervalo [1..N]
Esquema de recorrido
var y : enter fvar
y := 1;
incializar tratamiento
Mientras y ≠ N + 1 hacer
tratar i - ésimo elemento
y : = y + 1;
fMientras
tratamiento final
Como el recorrido de tablas es una tarea muy frecuente, es útil definir una instrucción más simple para utilizarla en casos como éste. Es la instrucción por, que tiene la sintaxis
por variable : = valor inicial hasta valor final paso incremento hacer
S
fpor
Cuando el incremento sea igual a 1 podemos obviar su mención en la instrucción.
Hay que hacer notar que al final de cada instrucción, excepto en la última, se añade automáticamente el valor incremento en la variable que sirve de índice. La expresión valor final se evalúa al principio de cada iteración y por tanto las instrucciones del cuerpo del bucle no deberían modificar las variables que aparezcan.
Con esta nueva instrucción, el esquema de recorrido puede escribirse así:
var y : enter fvar
inicializar tratamiento
Por y : = 1 hasta N hacer
tratar i - ésimo elemento
fpor
tratamiento final
Estructura iterativa for
Esta estructura iterativa no presenta un formato fijo, sino que admite numerosas variantes. Su función consiste en ejecutar un número determinar a veces una secuencia de instrucciones.
La sintaxis general (en C) de la sentencia for es la siguiente:
for (expresión 1; expresión 2; expresión 3)
{ grupo de sentencias ;}
La primera expresión de la construcción for acostumbra (pero no es obligatorio) a ser una sentencia de asignación donde se inicializa alguna variable que controla el número de veces que se debe ejecutar el bucle. Esta sentencia se ejecuta una sola vez antes de entrar por primera vez en el bucle.
La segunda expresión corresponde a la condición que indica al finalizar el bucle. La condición se evalúa antes de ejecutar el cuerpo del bucle, y por tanto al igual que la construcción mientras, el cuerpo del bucle puede ejecutarse entre 0 y N veces, donde N depende de la condición.
La tercera expresión corresponde normalmente a una sentencia de incremento o decremento sobre la variable de control del bucle. Esta sentencia se ejecuta siempre después de la ejecución del bucle.
Ejemplo
for (i = 0; i < 10; i++)
{ ........ }
Las tres partes del for son opcionales, por lo que es posible omitir alguna o todas ellas. En cualquier caso, los puntos y comas son siempre necesarios. Por ejemplo:
for ( ; ; )
{ }
crearía un bucle infinito.
C permite la utilización de más de una sentencia en la primera y tercera parte de la construcción for así como más de una condición en la segunda parte. En este caso la coma está haciendo la función de un "&&". También se puede utilizar un “||”.
La construcción siguiente sería correcta en C:
for (i = 0, j = 0; y < 10, j > 0; i++, j = j-2 )
{ ..... }
Búsqueda secuencial
Supongamos una lista de elementos almacenados en un vector. El método más sencillo de buscar un elemento en un vector es recorrer el vector desde el primer hasta el último. La búsqueda secuencial compara cada elemento del vector con el valor deseado, hasta que lo encuentra o acaba de leer el vector entero.
var y : entero; encontrado : booleano; fvar
encontrado : = falso;
y:=1;
Mientras (y <= N) y no encontrado hacer
si v[i] = x entonces
encontrado:=cierto;
sino
y:=i+1;
fsi
fmientras
Búsqueda secuencial en un vector ordenado
Básicamente el algoritmo es lo mismo de antes. Pero ahora podemos poner más restricciones. Dado que el vector está ordenado, en el momento en que encontramos un mayor valor que el que buscamos, ya estamos seguros de que no encontraremos el elemento deseado.
var y: entero; encontrado, terminar: booleano;
encontrado := falso;
terminar := falso
y := 1;
Mientras (y <= N) y (no encontrado) y (no terminar) hacer
si v[i] = x entonces
encontrado := cierto;
sino // Si v[i] > x, todos los elementos a la derecha del vector son > x.
si v[i] > x semillas
terminar := cierto;
sino
y := i + 1 ;
fsi
fsi
fmientras