Ejercicios resueltos laboratorio 7 - Algoritmos iterativos - While

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

Resolución 07-001

Tras leer n tenemos que verificar que se ha introducido un número positivo o nulo. Esto da lugar a una instrucción condicional que realiza la operación deseada si el valor es correcto y muestra un mensaje de error en caso contrario. Este bloque se representa de color amarillo pálido en la Figura 7.1.

Tras verifica que n no es negativa sabemos de antemano cuántas veces (cero o más) se quiere escribir la palabra "Hola", por lo que la estructura iterativa más adecuada es una estructura for.

Nos piden que utilicemos una estructura while, así que habrá que replicar los componentes de la estructura for.

En la figura 7.1. se representan en morado los bloques con la inicialización del contador previa al bucle (i recibe 1) y la posterior incrementación del contador (i recibe i + 1) ya que no están integrados en la estructura repetitiva (como sucederá en el caso for). El bloque de la estructura while con su cuerpo se representa en gris oscuro en la Figura 7.1.

Un posible diagrama de flujo sería:


Figura 7.1. Escritura repetitiva utilizando una estructura while

Obsérva la diferencia entre el rombo de la instrucción condicional en amarillo, de la que salen dos ramas laterales y el rombo de la instrucción while (similar al for), de la que sale una rama hacia abajo cuando se cumple la condición y una hacia la derecha cuando no se cumple para salir del bucle.

La codificación correspondiente podría ser:


/* 07-001.c (versión laboratorio)
 *
 * Leer un número positivo n y escribir la palabra "Hola" n veces utilizando while.
 * Si el número no es positivo escribir mensaje de error.
 */
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
  int i, n;

  printf ("Introduce un número positivo: ");
  scanf ("%d", &n);
  if (n >= 0) {
    i = 1;
    while (i <= n) {
      printf ("Hola\n");
      i++;
    }
  }
  else
    printf ("%d no es un número positivo\n", n);

  system ("pause");
  return 0;
}