Implementación de Patrones Algorítmicos de Recorrido y Búsqueda Secuencial

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,21 KB

Problema 1: Recorrido con Tratamiento Especial del Primer Elemento (Conteo de Inversiones)

Este es un problema de recorrido en el que no se puede tratar el primer elemento como el resto, pues se trata de comparar el Elemento Actual (EA) con el anterior, y el primero no tiene predecesor. Usaremos, por tanto, el Tercer Esquema de Recorrido.

Esquema Algorítmico

Léxico
  S : Secuencia de Entero; // Del 2º Modelo de Acceso Secuencial
  anterior : Entero;
  inversiones : Entero;

Algoritmo
  Iniciar (S);
  SEGÚN EsVacia (S)
    EsVacia (S) : Escribir (“Secuencia vacía, no hay inversiones”);
    NO EsVacia (S) :
      // Tratamiento del primer elemento:
      Avanzar (S);
      anterior ← EA (S);
      inversiones ← 0;
      MIENTRAS NO EsUltimo (S) HACER
        Avanzar (S);
        SI EA (S) < anterior ENTONCES
          inversiones ← inversiones + 1
        FIN_SI;
        anterior ← EA (S)
      FIN_MIENTRAS;
      Escribir (inversiones)
  FIN_SEGÚN
FIN.
  

Problema 2: Búsqueda Simple en Secuencia (Múltiplo de N)

Se trata de un problema de búsqueda simple del Primer Modelo de Acceso Secuencial. La propiedad buscada es que el Elemento Actual (EA) sea múltiplo de N, es decir, que EA(S) MOD N = 0.

Función ExisteMultimoN

ExisteMultimoN : una función (Dato-Resultado S : Secuencia de Entero; N : Entero > 0) → Booleano;

Algoritmo
  Comenzar (S);
  MIENTRAS EA (S) ≠ MarcaFin Y DESPUÉS EA (S) MOD N ≠ 0 HACER
    Avanzar (S)
  FIN_MIENTRAS;
  ExisteMultimoN ← EA (S) ≠ MarcaFin
FIN;
  

Problema 3: Búsqueda Simple en Tabla Bidimensional

Se trata de una búsqueda simple en tabla bidimensional. Siguiendo el orden habitual (creciente por filas y en cada fila creciente por columnas), lo resolveremos utilizando el esquema de búsqueda en tablas bidimensionales del Tercer Modelo de Acceso Secuencial.

Función ExisteCaramelo

ExisteCaramelo : una función (TT : TipoTablero; TCa : TipoCaramelo) → Booleano;

Léxico
  fila : RangoFilas;
  columna : RangoColumnas;

Algoritmo
  fila ← 1;
  columna ← 1;
  MIENTRAS NO (fila = N Y columna = M) Y TTfila,columna ≠ TCa HACER
    SI columna < M ENTONCES
      columna ← columna + 1
    SI_NO
      columna ← 1;
      fila ← fila + 1
    FIN_SI
  FIN_MIENTRAS;
  ExisteCaramelo ← TTfila,columna = TCa
FIN;
  

Problema 4: Combinación de Recorrido y Búsqueda en Tablas

Se trata de dos problemas combinados: un recorrido por filas, pues necesitamos comprobar todas ellas para saber cuántas cumplen la propiedad, y dentro del tratamiento de cada fila hay una búsqueda por columnas, pues tan pronto nos encontremos con un caramelo del color buscado no habrá que continuar. Esta búsqueda por columnas dentro de la fila la haremos según el esquema conocido del Tercer Modelo de Acceso Secuencial.

Función ContarFilasColor

ContarFilasColor : una función (TT : TipoTablero; TCo : TipoColor) → Entero;

Léxico
  numero_de_filas : Entero;
  fila : TipoFilas;
  columna : TipoColumnas;

Algoritmo
  numero_de_filas ← 0;
  // Recorrido por filas
  fila RECORRIENDO [1, N] HACER
    // Dentro de la fila “fila” haremos una búsqueda por columnas
    columna ← 1;
    MIENTRAS columna ≠ M Y TTfila,columna.color ≠ TCo HACER
      columna ← columna + 1
    FIN_MIENTRAS;
    // A la salida de la búsqueda comprobamos la propiedad
    SI TTfila,columna.color = TCo ENTONCES
      numero_de_filas ← numero_de_filas + 1
    FIN_SI
  FIN_RECORRIENDO;
  ContarFilasColor ← numero_de_filas
FIN;
  

Fragmento Redundante del Código Fuente

El siguiente fragmento parece ser una repetición parcial del código de búsqueda bidimensional (Problema 3) incluido en el documento original:

SI columna < M ENTONCES
  columna ← columna + 1
SI_NO
  columna ← 1;
  fila ← fila + 1
FIN_SI
FIN_MIENTRAS;
ExisteCaramelo ← TTfila,columna = TCa
  

Entradas relacionadas: