Coruniversitaria, Corporación Universitaria de Ibagué
Facultad de Ingeniería de Sistemas

Estructuras de Programación

Inicio

Generalidades

Ejercicios

Talleres

Proyecto

 

 

  Iterativos o repetitivos

 Las sentencias de control repetitiva se constituyen en la esencia fundamental de los programas computacionales. Su objetivo es controlar el flujo de ejecución de las instrucciones del programa.

Por lo general, los lenguajes de programación contienen las siguientes estructuras  repetitivas:

  - Estructura repetitiva  while
  - Estructura repetitiva  do while
  - Estructura repetitiva  for

 Todas estas estructuras también se pueden combinar.

--------------------------------------------------------------------------------------------------------------------------     

  Programación en lenguaje JAVA.  Instrucciones REPETITIVAS o ITERATIVAS (Ciclos):

____________________________________________________________________________________________

/* Especificacion de una Clase para calcular un promedio de edad
* @ EdadProm.java
* ciclo while
*
* @author vGus
* @version 1.00 2009/03/03
* @author Viejo Gus
*/
package poo_java;
import javax.swing.JOptionPane;

class EdadP {
     private int edad;
     private int sumed;
     private float promed;
     public void setedad(){
          edad=Integer.parseInt(JOptionPane.showInputDialog("Edad? "));
     }
     public int sumaredad(){
          return (sumed=sumed+edad); // Acumulador
     }
}

public class EdadProm {
   public static void main(String arg[]){
     int ned=0, conte=1;
     EdadP E = new EdadP();
     ned=Integer.parseInt(JOptionPane.showInputDialog("Cuantas edades desea procesar? "));
     JOptionPane.showMessageDialog(null,"Por favor, digite las "+ned+" edades");
     while (conte <= ned){
          E.setedad();
          E.sumaredad();
          conte=conte+1; // Contador. Es equivalente a conte++
     }
     JOptionPane.showMessageDialog(null,"La edad promedio es: "+(E.sumaredad()/conte));
   }
}

__________________________________________________________________________________________

/** Otro programa en Java para calcular un promedio de edad
* @ EdadProm.java
* ciclo while
*
* @author vGus
* @version 1.00 2008/10/10
*/
import javax.swing.JOptionPane;

public class EdadProm {
   public static void main(String arg[]){
     String ed,ned;
     int edad, ne=0, conte, acume=0;
     float prome;
     ned=JOptionPane.showInputDialog("Cuantas edades desea procesar? ");
     ne=Integer.parseInt(ned);
     JOptionPane.showMessageDialog(null,"Por favor, digite las "+ne+" edades");
     conte=1;
     while (conte <= ne){
          ed=JOptionPane.showInputDialog("Edad "+conte+"?");
          edad=Integer.parseInt(ed);
          acume=acume+edad; // Acumulador
          conte=conte+1; // Contador. Es equivalente a conte++
     }
     prome=acume/ne;
     JOptionPane.showMessageDialog(null,"La edad promedio es: "+prome);
   }
}

-------------------------------------------------------------------------------------------------------------------------- 

/**
* EdadProm.java
* ciclo do while
*
* @author vGus
* @version 1.00 2008/10/10
*/
import javax.swing.JOptionPane;

public class EdadProm {
   public static void main(String arg[]){
     String ed,ned;
     int edad, ne=0, conte, acume=0;
     float prome;
     ned=JOptionPane.showInputDialog("Cuantas edades desea procesar? ");
     ne=Integer.parseInt(ned);
     JOptionPane.showMessageDialog(null,"Por favor, digite las "+ne+" edades");
     conte=1;
     do{
          ed=JOptionPane.showInputDialog("Edad "+conte+"?");
          edad=Integer.parseInt(ed);
          acume=acume+edad; // Acumulador
          conte++; // Contador
     }while (conte <= ne);
     prome=acume/ne;
     JOptionPane.showMessageDialog(null,"La edad promedio es: "+prome);
   }
}

-------------------------------------------------------------------------------------------------------------------------- 

/**
* EdadProm.java
* ciclo for
*
* @author vGus
* @version 1.00 2008/10/10
*/
import javax.swing.JOptionPane;

public class EdadProm {
   public static void main(String arg[]){
     String ed,ned;
     int edad, ne=0, conte, acume=0;
     float prome;
     ned=JOptionPane.showInputDialog("Cuantas edades desea procesar? ");
     ne=Integer.parseInt(ned);
     JOptionPane.showMessageDialog(null,"Por favor, digite las "+ne+" edades");
     for(conte=1;conte <= ne;conte++){
          ed=JOptionPane.showInputDialog("Edad "+conte+"?");
          edad=Integer.parseInt(ed);
          acume=acume+edad; // Acumulador
     }
     prome=acume/ne;
     JOptionPane.showMessageDialog(null,"La edad promedio es: "+prome);
   }
}

--------------------------------------------------------------------------------------------------------------------------

  • Codificar los siguientes programas de computación en Lenguaje C/C++ utilizando estructuras  REPETITIVAS (ciclos):

--------------------------------------------------------------------------------------------------------------------------

  Leer la edad de los n alumnos de un curso de programación y determinar e imprimir la edad promedio:

#include "iostream.h"
#include "conio.h"
#include "stdio.h"
#define cls clrscr()
      // Utilizando el bucle while
void main(){
   int edad, na, sume=0, conta=1;
   float prome;
   cls;
   cout << "Cuántos alumnos desea procesar? -> ";
   cin >> na;
   cout << "Por favor, digite la edad de los "<< na <<" alumnos"<< endl;
   while (conta <= na){
          cout << "Alumno"<< conta << " edad? -> ";
          cin >> edad;
          sume = sume + edad;   // Acumulador
          conta = conta + 1;       // Contador.    Es equivalente a conta++
          cls;
   }
   prome = sume/na;
   cls;
   cout << "La edad promedio del grupo es... " << prome << " años";
   getch();
}

//  *** Ahora, utilizando el bucle do while

#include "iostream.h"
#include "conio.h"
#include "stdio.h"
#define cls clrscr()

void main(){
   int edad, na, sume=0, conta=1;
   float prome;
   cls;
   cout << "Cuántos alumnos desea procesar? -> ";
   cin >> na;
   cout << "Por favor, digite la edad de los "<< na <<" alumnos"<< endl;
   do{
          cout << "Alumno"<< conta << " edad? -> ";
          cin >> edad;
          sume = sume + edad;
          conta = conta + 1; // equivalente a conta++
          cls;
   }while (conta <= na);
   prome = sume/na;
   cls;
   cout << "La edad promedio del grupo es... " << prome << " años";
   getch();
}

// *** Y finalmente, utilizando el bucle for

#include "iostream.h"
#include "conio.h"
#include "stdio.h"
#define cls clrscr()

void main(){
   int edad, na, conta, sume=0;
   float prome;
   cls;
   cout << "Cuántos alumnos desea procesar? -> ";
   cin >> na;
   cout << "Por favor, digite la edad de los "<< na <<" alumnos"<< endl;
   for (conta = 1; conta <= na; conta++){
         cout << "Alumno"<< conta << " edad? -> ";
         cin >> edad;
         sume = sume + edad;
         cls;
   }
   prome = sume/na;
   cls;
   cout << "La edad promedio del grupo es... " << prome << " años";
   getch();
}

  • Escribir un programa en Pascal, utilizando ciclo while, para calcular la suma de una lista de números enteros leídos del teclado.

program SUMAR;
uses crt;
var   
   N, cont, num, suma  :  integer;

BEGIN    
   clrscr;
   WriteLn('¿Cuántos números enteros desea sumar?'); ReadLn(N);
   WriteLn('Digite los ',N,' números enteros...'); 
   cont := 0;  suma := 0;

   while cont < N do
       begin
           Read(num); 
           suma := suma + num;
           cont  := cont  + 1; 
       end;

   WriteLn('La suma de los ',N,' números es: ',suma);
   ReadLn;  
END.

{ Con la estructura  repeat del lenguaje Pascal }

program SUMAR;
uses crt;
var   
   N, cont, num, suma  :  integer;

BEGIN    
   clrscr;
   WriteLn('¿Cuántos números enteros desea sumar?'); ReadLn(N);
   WriteLn('Digite los ',N,' números enteros... '); 
   cont := 0;  suma := 0;

   repeat
           Read(num); 
           suma := suma + num;
           cont  := cont  + 1; 
   until  cont = N;

   WriteLn('La suma de los ',N,' números es: ',suma);
   ReadLn;  
END.

{ Con la estructura  for del lenguaje Pascal }

program SUMAR;
uses crt;
var   
   N, cont, num, suma  :  integer;

BEGIN    
   clrscr;
   WriteLn('¿Cuántos números enteros desea sumar?'); ReadLn(N);
   WriteLn('Digite los ',N,' números enteros...'); 
   suma := 0;

   for cont := 1 to N do

        begin
            Read(num); 
            suma := suma + num;
        end; 
   WriteLn('La suma de los ',N,' números es: ',suma);
   ReadLn;  
END.

___________________________________________________________________________________________  

 Ejercicios "amistosos"

___________________________________________________________________________________________

  1. Calcular e imprimir los valores que toma la ecuación Y =  X² + 4X + 3 cuando X va de 1 a 10.

  2. La empresa "TOLModels" desea seleccionar para un evento local a un grupo de personas que cumplan los siguientes requisitos: Mujeres con edad igual o superior a 17 años e inferior a 20 años, con un peso menor a 55 kg y estatura entre 1.70 y 1.75 m.  Hombres con edad entre los 18 y 21 años y con estatura superior a 1.75 m.  a) Cuántas mujeres fueron seleccionadas,    b) Porcentaje de hombres seleccionados,    c) Estatura promedio de todos los aspirantes, y    d) Peso de la mujer más joven seleccionada.

  3. En el Banco "SinFondos" desean registrar las transacciones realizadas a diario. Los tipos de transacción son:  'C' si la transacción es una consignación se debe actualizar el saldo del cliente,    'R'  si la transacción es un retiro se debe tener en cuenta si el saldo le alcanza a la persona; se debe dejar un saldo mínimo de $20000 en la cuenta y el valor mínimo de cada transacción es de $20000. Si el retiro es aprobado se debe actualizar el saldo. Por cada cliente se debe visualizar: Número de la cuenta y nombre del cliente, tipo, fecha y valor de transacción, y nuevo saldo.

  4. Leer el valor de N pensiones. Si el valor de la pensión es superior a 4 salarios mínimos, se debe calcular el IVA correspondiente. Determinar y visualizar el valor total del impuesto a las pensiones.

  5. Leer una cadena, caracter por caracter, y determinar cuántas letras están comprendidas entre las letras mayúsculas G - M  ambas inclusive.

  6. Leer por teclado N números enteros y calcular e imprimir la media de los números pares y la media de los impares. Utilizar un ciclo while.

  7. Leer por teclado 27 números enteros y determinar e imprimir cuántos números son primos.

  8. Imprimir una tabla de números. Cada línea de la tabla contiene tres entradas: el número, su cuadrado y su cubo. Comience con 1 y termine con 12+1. Utilice un ciclo for para generar los números.

  9. Representar un modelo informatizado del juego "adivina el número mágico". Funciona así: El jugador tiene 7 intentos para adivinar el número mágico. Si el número que se digita es el valor seleccionado como número mágico, el programa debe imprimir el mensaje CORRECTO! y terminar. En caso contrario, informar sobre si la suposición ha sido más alta o más baja y permitir que el usuario introduzca números hasta que adivine el número. Visualizar también el número de intentos.

  10. Un programa que imprima en pantalla cinco refranes diferentes, según el número del refrán seleccionado por el usuario. Utilice un ciclo do-while.

  11. Construír un ciclo indeterminado para calcular e imprimir el tiempo de conducción dada la distancia y la velocidad media.

  12. Generar e imprimir la progresión aritmética 1 2 4 8 16, hasta 1000.

  13. Simular una sencilla máquina codificadora que traduzca los caracteres que se leen por teclado a un formato codificado, adicionando 1 a cada letra. Es decir, 'A' se convierte en 'B', y así sucesivamente. El programa debe terminar cuando se presione ENTER.

  14. Los códigos ASCII para las letras minúsculas están separados de los de las letras mayúsculas por una diferencia de 32. Por lo tanto, para convertir una letra minúscula en una mayúscula, basta con restarle 32. Escriba un programa que lea los caracteres del teclado y visualice las letras minúsculas como mayúsculas. Terminar el programa cuando se presione la tecla ESC.

  15. Generar e imprimir las tablas de multiplicar.

  16. Utilizando una sentencia switch, escribir un programa que lea caracteres del teclado y busque tabuladores, nuevas líneas, y retrocesos. Cuando reciba uno, muestre lo que representa en palabras. Por ejemplo, cuando el usuario pulse la tecla TAB, que imprima tabulador. El programa debe terminar cuando el usuario digite ESC.

  17. Codificar el algoritmo de Euclides para calcular e imprimir el M.C.D. (máximo común divisor) de dos números, A y B.

  18. Para las elecciones a la Alcaldía de Chaparral, se inscribieron cuatro candidatos (con identificadores 1,2,3,4). Escriba un programa que permita determinar e imprimir el número de votos correspondiente a cada candidato y el porcentaje que obtuvo respecto al total de los votantes. El final de datos está representado por un cero. ¿Cuál es el nuevo alcalde de Chaparral?

  19. El gerente de 'FibraTolima' autorizó liquidar una bonificación a sus empleados en Navidad de acuerdo al siguiente criterio: Si el empleado es casado y tiene hijos, la bonificación es de $10000 por hijo.  Si no es casado y tiene hijos, la bonificación es de $5000 por hijo.  Si el trabajador tiene más de dos años de antigüedad en la Compañía, se le aumentan $3000 por cada hijo. Visualizar el sueldo a pagar a cada empleado y el total de la nómina.

  20. Leer por teclado 24 números reales que representan las temperaturas tomadas en EL Espinal en un período de 24 horas. Imprimir la temperatura promedio y las temperaturas más alta y más baja del día.

  21. Laura está de compras en el hipermercado 'Carrefour' de Ibagué y decide llevar un control sobre lo que va comprando, para saber la cantidad de dinero que tendrá que pagar al llegar a una caja. El supermercado tiene una promoción especial del 14% de descuento sobre aquellos artículos cuya etiqueta sea de color verde: del 10% sobre los de etiqueta amarilla, y del 7% sobre los de etiqueta vinotinto. Escriba un programa con un ciclo indeterminado que permita determinar e imprimir la cantidad de dinero que Laura deberá pagar.

  22. Un problema que se presenta frecuentemente en las finanzas domésticas es el determinar cuánto dinero se acumulará en una cuenta en el banco después de n años si se deposita inicialmente una cantidad conocida P, y la cuenta acumula anualmente interés a un porcentaje r (i = r/100). La cantidad futura se puede determinar mediante la conocida fórmula de interés compuesto: F = P(1 + i)^n. Escriba un programa utilizando un ciclo for que permita calcular e imprimir el interés compuesto para cada uno de los n años en los cuales el dinero se queda en depósito.

  23. Una aplicación interesante de las computadoras, es dibujar gráficos de barra (a veces llamados "histogramas"). Escriba un programa que lea 10 números (cada uno de ellos entre 1 y 27). Para cada uno de los números leídos, su programa deberá imprimir una línea, conteniendo dicho número en asteriscos adyacentes. Por ejemplo, si se lee por teclado el número 7, el programa deberá imprimir *******.

  24. Escriba un programa que permita realizar operaciones aritméticas elementales, según el operador ingresado por teclado. Imprimir el operando1, operador, operando2 y el resultado de la operación. El programa debe finalizar mediante una respuesta del usuario. 
    (¿Desea salir? S = sí, N = no).

    OPERADOR OPERACIÓN
    + Suma 
    - Resta 
    * Multiplicación 
    / División 
  25. En el estadio 'Manuel Murillo Toro' se tienen 5 tipos diferentes de localidades, las cuales se identifican por una clave numérica (valor comprendido entre 1 y 5). Codifique un programa que permita:

    a) Calcular e imprimir la recaudación total del estadio para el partido TOLIMA - CALI.
    b) Para cada venta por localidad, imprimir el tipo de boleta, la cantidad y el valor total de las boletas.
    c) Imprimir la cantidad total de boletas vendidas de cada tipo.

  26. La Distribuidora de Software "PengüinSoft" necesita calcular el aumento  de sueldo para sus N empleados, bajo el siguiente criterio:

    a) Sueldo < $700000: Aumento 14%
    b) Sueldo comprendido entre $700000 y $1500000: Aumento 10%
    c) Sueldo superior a $1500000: Aumento 8%.

    La empresa también desea conocer el sueldo promedio de las mujeres, sueldo promedio de hombres, sueldo promedio de los ingenieros de sistemas y el total de nómina de la compañía.

  27. La siguiente se llama la conjetura de ULAM, en honor del matemático S.Ulam:

<> Comience con cualquier entero positivo.
<> Si es par, divídalo por 2; si es impar, multiplíquelo por 3 y agréguele 1.
<> Obtenga enteros sucesivamente repitiendo el proceso.

Al final, obtendrá el número 1, independientemente del entero inicial. Por ejemplo, cuando el entero inicial es 26, la secuencia será: 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1. Escriba un programa que lea un entero positivo y obtenga e imprima la sucesión de ULAM.

  28. Un número es perfecto si "la suma de sus divisores excepto el mismo, es         igual al propio número". Codifique un programa para calcular e imprimir         los números perfectos menores o iguales que N.

  29. El factorial de un número entero positivo N se define como el producto         de los números comprendidos entre 1 y N. La expresión N! simboliza           el  factorial de N. Por definición: 0! = 1, 1! = 1, 2! = 1 * 2, 3! = 1 * 2 * 3         y  así sucesivamente. Escriba un programa que genere e imprima el factorial        de un número N.

  30. Los números de Fibonacci forman una interesante secuencia en la que           cada  número es igual a la suma de los dos números anteriores. En otras         palabras:  Fi = Fi-1 + Fi-2. Los dos primeros números son iguales a 1 (F1         = F2 = 1).

F3 = F2 + F1 = 1 + 1 = 2
F4 = F3 + F2 = 2 + 1 = 3
F5 = F4 + F3 = 3 + 2 = 5 y así sucesivamente.

Escriba un programa que genere e imprima los N primeros números de Fibonacci, donde N es un valor especificado por el usuario.



Inicio | Biografía | Cursos | Para pensar... | Para reflexionar... | Para reir | Enlaces

 
Profesor Gustavo Martínez Villalobos
Email: gustavo.martinez@unibague.edu.co
Facultad de Ingeniería de Sistemas, Coruniversitaria
Ibagué, Tolima, COLOMBIA