A partir de los esquemas básicos de recorrido y búsqueda podemos construir algoritmos que consideren variantes menos o más complicadas de uno de ellos o combinaciones de ambos. Vemos algunos ejemplos:

Ejemplo 1 Copiar un texto sin los espacios en blanco iniciales

En este caso la estrategia adecuada consiste en buscar la primera letra del texto y copiar la permanece en otra secuencia. De esta forma el algoritmo, que es una composición (secuencial) del esquema de búsqueda con el de recorrido seguirá el siguiente patrón.

  • Buscar de la primera letra
  • Recorrido con copia

Dividir el algoritmo en dos subalgoritmos, que responden claramente a esquemas de búsqueda o recorrido, permite simplificar el proceso de programación. Cada parte puede resolverse fácilmente aplicando en cada caso el esquema adecuado.

Ejemplo 2 Contar el número de letras de la primera palabra de un texto S

Aquí el algoritmo presentará en primer lugar una búsqueda de la primera letra, para continuar después con una segunda búsqueda con conteo de un blanco o de la marca. O sea:

  • Búsqueda primera letra
  • Búsqueda con contaje

Ejemplo 3 Longitud de la primera palabra

Ahora nos planteamos un problema que hace referencia a un texto: sabemos que en la entrada se leerá una frase marcada con un punto y formada por letras mayúsculas y otros caracteres que consideraremos separadores de palabras. Delante y detrás de cada palabra puede haber un separador o más (frente a la primera y detrás de la última palabra puede no haber ninguna separador). Queremos diseñar un algoritmo que nos diga la longitud de la primera palabra (si no hay ninguna palabra, la respuesta debe ser 0).

Se puede obtener la solución si se combinan dos esquemas de búsqueda: la primera lee caracteres separadores hasta encontrar la primera letra de la primera palabra; la segunda búsqueda lee caracteres hasta encontrar el primer separador posterior a la primera palabra y va contando las letras leídas. El valor de este contador es la respuesta solicitada (incluso en caso de que no haya ninguna palabra porque, en esta situación, la primera búsqueda fracasa y el cabezal permanece al final de la secuencia; a continuación, la segunda búsqueda termina inmediatamente sin entrar en el bucle y deja el contador a 0).

Programa longPrimPar
  var
     caro: caracter;
     n: entero;
     encontrado: boolea;
  fivar
  caro := leerCaracter();
  encontrado := falso;
  mientras (caro ≠'. ' ) y (no encontrado) hacer { Ninguno de los caracteres leídos 
  anteriores al último es una letra. El último es caro }
     encontrado := (caro ≤'Z') y (caro ≥'A');
     sí (no encontrado) entonces
        caro := leerCaracter();
        fisi
  fimientras { 
    Ninguno de los caracteres leídos anteriores al último es una letra. El último está 
    a caro. Si encontrado es cierto, pues es una letra; si es falso, puesto que es el 
    punto final 
  }
  encontrado := falso;
  n := 0;
  mientras (caro ≠ '.' ) y (no encontrado) hacer
  { Ninguno de los caracteres leídos anteriores al último después de la primera letra 
  es un separador. El último es a x, n es el número de letras leídas }
     encontrado := (caro > 'Z') o (caro < 'A');
     sí (no encontrado) entonces
        n := n +1;
        caro := leerCaracter();
     fsi
  fmientras
  { Ninguno de los caracteres leídos anteriores al último después de la primera letra 
  es un separador. El último está a caro. Si encontrado es cierto, pues es un 
  separador; si es falso, pues es el punto final, n es el número de letras leídas }
  escribirEnter(n);
fiPrograma
Pin It