Supongamos primero un caso particular que nos ayude a abstraer el esquema correspondiente.

Ejemplo: Determinar si un texto S contiene la letra ‘w’

En este caso es suficiente con encontrar la primera aparición de la letra w. Para ello deberemos de escribir un bucle que vaya avanzando por la secuencia y se detenga si el elemento coincide con lo buscado. Al finalizar le asignaremos a una variable booleana está el valor necesario: cierto si se ha encontrado y falso de lo contrario.

El bucle tiene las siguientes características:

  1. Invariante : el elemento en curso está guardado en una variable c y si hemos encontrado 'w' esta será su primera aparición.
  2. Condición de continuación: nos detendremos si encontramos 'w' o si termina la secuencia.
  3. Inicialización: aquí únicamente lo que habrá que hacer será leer el primer elemento
  4. Cuerpo: como no se debe hacer ningún tratamiento, únicamente habrá que leer lo siguiente de la secuencia.

Con todo esto el algoritmo quedaría:

var c:carácter; está: booleano; fvar
leer_primero(Seq,c);
Mientras c ≠ ‘.’ y c ≠ ‘w’ hacer
  leer_siguiente(S,c);
FinMientras
está := (c=’w’);

Este esquema presenta un caso de búsqueda pura seguido de una asignación; no hay ninguna tratamiento de los elementos visitados. Basándonos en esto, especificamos y diseñamos el esquema de búsqueda en una secuencia S que cumpla una propiedad A.

declaración de variables
  acceder al primer elemento
  inicializar tratamiento
Mientras no último elemento y no se satisfaga A hacer
  obtener siguiente elemento
fmientras

 

Pin It