Análisis laboratorio 7 - Algoritmos iterativos - while

Asignatura: Fundamentos de Informática
Especialidad: Electrónica - UPV/EHU
Curso académico: 2013-2014
Profesor: Ismael Etxeberria Agiriano

En este documento se proporcionan ideas algorítmicas para resolver los ejercicios iterativos.
Conviene analizarlas cuidadosamente y a poder ser con un papel en el que recrear los cálculos propuestos.
  1. 07-001: Especificación
    El análisis del ejercicio 1 se encuentra integrado en el ejercicio resuelto.

  2. 07-002: Especificación
    Habrá que introducir un contador que irá desde 2 hasta 15 y en cada iteración se mostrará una línea que habrá que construir mostrando el número introducido, el contador y el producto de ambos.
  3. 07-003: Especificación
    Es una estructura típica de dos bucles for, uno dentro del otro, con i y j de contadores. En nuestro caso haremos algo similar con dos bucles while.
    Como en todo sumatorio f se inicializa al elemento neutro de la suma, el 0.
    En cada iteración se sumará lo acumulado en f al cálculo de i+2*j (con los valores actuales de i y j).
    Si n ó m fueran inferiores al valor inicial (0 y 1 respectivamente) el resultado dará 0 ya que no se terminan de ejecutar ninguna vez ambos sumatorios.
  4. 07-004: Especificación
    Por ejemplo, para dividir 37 (dividendo) entre 11 (divisor), el resto r se inicializa al dividendo (37) y mientras éste sea superior al divisor (11) se irá restando al resto el divisor:

    Figura 7i.1. Resto de dividir 37 entre 11

  5. 07-005: Especificación
    El algoritmo es similar al anterior, sólo que para obtener el cociente tenemos que contar el número de veces que efectuamos la resta.
    Por ejemplo, si el dividendo es 37 y el divisor 11 obtendremos el cociente c:

    Figura 7i.2. Cociente de dividir 37 entre 11

  6. 07-006: Especificación
    Escribirlo en hexadecimal no tiene complicación algorítmica. Simplemente es cuestión de poder compararlo luego.
    Para poder escribir el número binario de izquierda a derecha (de mayor peso a menor peso) el algoritmo más sencillo consiste en buscar p, la primera potencia de 2 superior al número, y mirar sucesivamente para todas las potencias inferiores si el dígito es 1 ó 0 (por tratarse de base 2).
    Será más sencillo verlo con un ejemplo.
    Para n = 37 la Figura 7i.3 nos ilustra como obtener en p la primera potencia de 2 superior a 37, a saber, 64.

    Figura 7i.3. Obtención de la primera potencia superior.

    Dividimos p por 2, como se ve en la Figura 7i.4.

    Figura 7i.4. División por 2.

    Ahora miramos sucesivamente si n/p es 1 ó 0, que será el dígito para esa posición. De hecho podemos escribirlo.
    Si es 1 restaremos p a n.
    Cada iteración dividiremos p por 2. como se ilustra en la Figura 7i.5.

    Figura 7i.5. Obtención sucesiva de los dígitos.

    La Figura 7i.5 pretende mostrar la prueba del resultado obtenido.

    Figura 7i.6. Prueba del resultado.

  7. 07-007: Especificación
    Algorítmicamente es similar al anterior, sólo que hay que leer una base y utilizarla donde antes se utilizaba la base 2.
  8. 07-008: Especificación
    Lo más natural sería utilizar una estructura for pero vamos a hacerlo con una estructura while.
    Inicializamos el resultado a x y un contador a 0 y vamos incrementando el resultado y el contador mientras éste sea inferior a y.
  9. 07-009: Especificación
    Es un productorio desde i = 1 hasta y de x y lo natural es resolverlo mediante un bucle for pero en este laboratorio lo haremos con un while.
    Como tal productorio el resultado se inicializa a 1 (el elemento neutro de la multiplicación).
  10. 07-010: Especificación
    Se trata de utilizar una estructura for para escribir n líneas, pero construida mediante una estructura while.
    Habrá que prestar atención con qué hay que escribir para la línea i-ésima (cuántos espacios y cuántos asteriscos).
  11. 07-011: Especificación
    Es similar al anterior, sólo que en vez de ser creciente es decreciente.