Eliminación de elementos en un tablero y cálculo de sucesión recurrente

Clasificado en Informática

Escrito el en español con un tamaño de 3,02 KB

Eliminar Trozo de Columna

Acción: EliminarTrozoColumna (dato-resultado T: TipoTablero; dato columna: RangoColumnas; dato fila_inicial, fila_final: RangoFilas; dato-resultado S: Secuencia de TipoCaramelo)

Léxico: eliminados, fila: RangoFilas

Algoritmo

  1. Calculamos el número de elementos que serán eliminados de la tabla:
    eliminados ← fila_final – fila_inicial + 1
  2. Desplazamos los elementos que hay en las posiciones superiores. El recorrido lo hacemos en sentido inverso, para que si hay más caramelos que desplazar que huecos dejan los que se eliminan, no sobreescribamos posiciones equivocadas de caramelos que después se moverían. Cada elemento se debe desplazar un número de filas igual a la cantidad de caramelos eliminados por debajo. Los elementos que hay que desplazar son los que se encuentran en las filas desde la 1 hasta fila_inicial - 1. Puede ocurrir que este intervalo sea vacío, porque el caramelo de la primera fila esté entre los eliminados. En ese caso, obviamente, el recorrido no tendrá efecto alguno:
    fila RECORRIENDO [1, fila_inicial – 1] EN SENTIDO INVERSO HACER
    T[fila + eliminados, columna] ← T[fila, columna]
    FIN_RECORRIENDO
  3. Ahora rellenamos las posiciones que dejan los elementos desplazados. Para que se produzca el efecto de caída desde arriba que describe el enunciado, haremos también el recorrido en sentido inverso:
    fila RECORRIENDO [1, eliminados] EN SENTIDO INVERSO HACER
    T[fila, columna] ← EA(S)
    Avanzar(S)
    FIN_RECORRIENDO

Cálculo de Sucesión Recurrente

Se trata de un ejercicio de recorrido de una sucesión de valores definida por una expresión recurrente de profundidad dos, como sucede con la sucesión de Fibonacci vista en clase. Lo resolveremos de igual manera, con una iteración cuyo invariante reflejará que en cada momento llevamos calculado el elemento k-ésimo y los dos anteriores (k-1 y k-2). Como se nos pide escribir los N primeros elementos, escribiremos los elementos de la sucesión desde b0 hasta bN-1. Haremos un análisis de casos previo para considerar el caso en que se soliciten solo uno o dos elementos, en cuyo caso no será necesario iterar, ya que los dos primeros valores se definen axiomáticamente.

Léxico: bactual, banterior, bpreanterior, N, k: Entero

Algoritmo

bpreanterior ← 1; // b0
banterior ← 2; // b1
bactual ← 8; // b2
Leer(N);
SEGÚN N
  N = 1: Escribir(bpreanterior);
  N = 2: Escribir(bpreanterior, banterior);
  N > 2:
    Escribir(bpreanterior, banterior, bactual);
    // Si k=3 esta iteración no se ejecutaría ni una sola vez:
    k RECORRIENDO [3, N-1] HACER
      bpreanterior ← banterior;
      banterior ← bactual;
      bactual ← 2 * banterior + bpreanterior + 3;
      Escribir(bactual)
    FIN_RECORRIENDO
FIN_SEGÚN
Fin.

Entradas relacionadas: