Universidad de Ibagué, Coruniversitaria.
Ingeniería de Sistemas

Paradigmas de Programación

Inicio

Generalidades

Ejercicios

Talleres

Proyecto

 

 

 Paradigma Imperativo (Procedural)

  Es el paradigma clásico o tradicional. En el paradigma imperativo, un programa es visto como una lista de instrucciones o comandos. (Imperativo viene del Latín imperare, que significa comando). Básicamente, se le dice al computador que ejecute una secuencia de pasos, donde cada paso cambia el contenido, estado, de la memoria. Los programas imperativos o procedurales, explícitamente o implícitamente, asumen el computador basado en la arquitectura de Von Neumann.

 La programación estructurada es un enfoque disciplinado para escribir programas más legibles y eficientes que los programas no estructurados, así como más fáciles de probar, depurar y modificar. Existen conceptos básicos que se deben conocer de todo lenguaje de programación: Tipos de datos y operadores, declaración de constantes, ámbito de las variables, instrucciones de entrada/salida, estructura secuencial, condicional, iterativa, funciones de biblioteca...

________________________________________

 Programación Estructurada en C++

 La programación estructurada es un enfoque disciplinado para escribir programas más legibles y eficientes que los programas no estructurados, así como más fáciles de probar, depurar y modificar. Existen conceptos básicos que se deben conocer de todo lenguaje de programación: Tipos de datos y operadores, declaración de constantes, ámbito de las variables, instrucciones de entrada/salida, funciones de biblioteca...

 Como lo sugiere su nombre, en una estructura secuencial las instrucciones del programa se ejecutan en el mismo orden en que están escritas. Una secuencia de instrucciones son pasos sucesivos, uno seguido de otro.

  •     Escribir un programa para solucionar los siguientes problemas simples de computación:

  Leer por teclado el radio de un círculo y calcular e imprimir el área.

// Esta es la forma de insertar comentarios en lenguaje C++.
// Programa: Areac.cpp
// Autor : Usted
// Fecha : Marzo 9  de 2005
// Este programa permite calcular el área de un círculo

#include "iostream.h"
#include "conio.h"
#define cls  clrscr( )
// Estas son declarativas del preprocesador. Son archivos
// de cabecera o librerias de funciones (de biblioteca) y
// macroinstrucciones. El compilador reemplazara la constante
// simbolica cls por la funcion clrscr(), limpiar pantalla.

void main( )   // funcion principal del lenguaje C
{  // Inicio
int radio;    // declaracion de la variable entera radio
float area;  // declaracion de variable tipo real
cls;            //  limpiar pantalla;
cout << "<> AREA DE UN CIRCULO <>" << endl << endl;                  // salida por pantalla y doble salto de linea

cout << "Por favor, digite el radio del circulo -> ";
cin >> radio;        // entrada por teclado;
area = radio * radio * 3.1416;    // instruccion de asignacion
cout << "Area =  " << area << endl;
cout << "Presione ENTER para terminar...";
getch();   // detiene la ejecucion del programa
}            //  Fin de la funcion main( ) y del programa

___________________________________________________________________________________________  

 Ejercicios "amistosos"

___________________________________________________________________________________________

  1. Calcular el IVA y el valor a pagar por el cliente en la venta de x cantidad de un producto cualquiera. Calcular e imprimir también el cambio que se le debe entregar al cliente.

  2. La gran pirámide de Egipto está compuesta por 2 300 000 bloques de piedra, cada uno con una masa promedio de 2.5 megagramos o toneladas (1 Megagramo equivale a 10^6 gramos). ¿Cuál es la masa total de la pirámide? 

  3. En N días 5 programadores desarrollan una aplicación. ¿En cuántos días podrían desarrollar el mismo software 8 programadores?

  4. Un buque de la Armada, de N marineros, tiene víveres para 2 meses. Si queremos que los víveres duren 10 días más, ¿cuántos marineros habría que dejar en la base naval?

  5. Doce empleados de un juzgado digitan 240 páginas trabajando N horas diarias. ¿Cuántas páginas pueden digitar diariamente dieciséis empleados si trabajan el doble del tiempo en condiciones semejantes?

  6. Calcular e imprimir la distancia entre dos puntos P1 y P2.

  7. Leer por teclado el radio y la altura de un cilindro y calcular e imprimir el área y su volumen.

  8. Leer la longitud de los catetos de un triángulo rectángulo y determinar e imprimir su hipotenusa.

  9. Leer una cantidad entera de segundos y determinar e imprimir su equivalente en minutos y segundos. Por ej: 90 segundos equivalen a 1 minuto y 30 segundos.

  10. Escriba un programa que acepte por teclado un número de cinco dígitos, los separe y los imprima dejando tres espacios entre ellos (utilice los operadores división y módulo). Por ej., si el usuario teclea 27518, el programa debe imprimir  2   7   5   1   8 

________________________________________

Las técnicas básicas de solución de problemas en computación requieren el uso de las estructuras de control selectivas o condicionales, para elegir entre diferentes acciones alternativas. Es aquí donde radica el mayor potencial inteligente de un programa computacional. En estas estructuras es fundamental el buen manejo de las expresiones y los operadores lógicos y relacionales.

Las estructuras condicionales o selectivas que se utilizan para la toma de decisiones lógicas se pueden clasificar así:

  - Estructura selectiva simple      (if )
  - Estructura selectiva doble        (if / else)
  - Estructura selectiva múltiple    (if / else / if...)
  - Estructura selectiva múltiple compuesta por casos   (switch  case)

Todas estas estructuras se pueden combinar.

  • Codificar los siguientes programas de computación en Lenguaje C/C++ aplicando estructuras SELECTIVAS o CONDICIONALES:

// Ejemplo de condicional doble (if-else)
#include "iostream.h"
#include "conio.h"

main(){
  int res;
  clrscr();
  cout << "Cual es el resultado de (1+2*3-4) ? ";
  cin >> res;
  if (res == 3)
     cout << "Todo bien, todo bien!...";
  else
     cout << "Ojo! usted tiene deudas con Pitagoras...";
  getch();
}

    

  1. Un taxista trabaja en la empresa "PengüiTAXI" en la cual le asignan 3 rutas: Ruta A con un valor de $3000, Ruta B con valor $5000 y Ruta C con valor $7000.  Además, debe cobrar un recargo de $500 si está trabajando entre las 20:00 y las 05:00.  Si es festivo, hay un recargo de $100.  ¿Cuánto debe pagar un usuario que tome el servicio?

  2. Dados dos números enteros, determinar si un número es divisor del otro.

  3. Calcular las raíces reales, de ser posible, de una ecuación de segundo grado: (ax² + bx + c = 0)

  4. Determinar si un año es bisiesto. Un año es bisiesto si es múltiplo de 4 (por ejemplo, 1984). Los años múltiplos de 100 no son bisiestos, salvo si ellos son también múltiplos de 400 (2000 es bisiesto, 1800 no lo es).

  5. Determinar e imprimir si un número entero X es par, impar o nulo.

  6. Hallar la solución de una ecuación de la forma: ax + b = 0.

  7. Calcular e imprimir el área de un círculo, rectángulo o triángulo. Utilice una escalera if-else-if.

  8. En el almacén "Don Pingüino" se realiza descuento en las compras en función del valor total de dichas compras. Si se paga con tarjeta de crédito, el descuento en las compras se disminuye un 5%. Calcular el impuesto del IVA e imprimir el valor a cobrar al cliente en función de las siguientes premisas: a) Valor < $40000: sin descuento, b) Valor comprendido entre $40000 y $80000: descuento del 10%, c) Valor superior a $80000: descuento del 14%.

  9. Leer por teclado tres números diferentes y determinar cuál es el número mayor.

  10. Dados como datos dos variables de tipo entero, obtener el resultado de la siguiente función:

VAL = 100*V  si NUM=1
100^V  si NUM=2
100/V  si NUM=3
para cualquier otro valor de NUM

________________________________________

 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.

  • 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 Paradigmas de Programación y determinar e imprimir la edad promedio:

#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();
}

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

  2. 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.

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

  4. 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.

  5. 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?

  6. Laura está de compras en el hipermercado 'Mercacentro' 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.

  7. 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 *******.

  8. 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 
  9. 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.

  10.  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.

________________________________________

   La modularidad de los programas es un elemento clave en la programación estructurada.  La parametrización de funciones permite la reutilización de software y la facilidad de mantenimiento, y es también característica fundamental de la programación orientada a objetos.

  • Codificar los siguientes programas de computación en Lenguaje C/C++ utilizando FUNCIONES con paso de parámetros:

Escriba un programa modular con un ciclo indeterminado para leer el sueldo de los empleados de la empresa "PengüinSoft Ltda." y determinar e imprimir: a) Número de empleados de la empresa,  b) Total de nómina,  c) cantidad de mujeres y de hombres,  d) sueldo promedio de mujeres y de hombres,  e) sueldo promedio de los ingenieros de sistemas.

#include "iostream.h"
#include "conio.h"
#include "ctype.h"
#define lp clrscr()
// Programa ejemplo de un bucle (ciclo) indeterminado y
// llamado de funciones con paso de parámetros por valor

float promedio(float, int);    // Prototipos de función
void imprimir(float,float,float,float,int,int,int,int);
void titular();

void main(){
float sueldo; char sexo,sis;
int conte,contm,conth,contis;      // contadores
float acuse,acusm,acush,acusis;  // acumuladores
conte=contm=conth=contis=acuse=acusm=acush=acusis=0;
titular();
cin >> sueldo;
while(sueldo > 0){
       cout << "Sexo(F/M) -> ";
       cin >> sexo;
       sexo=toupper(sexo); // conversion de minuscula a mayuscula
       cout << "Es Ingeniero(a) de Sistemas?(S/N) -> ";
       cin >> sis;
       conte = conte + 1;
       acuse = acuse + sueldo;
       if (sexo == 'F'){
          acusm=acusm + sueldo;
          contm++;}
       else{
             acush=acush + sueldo;
             conth++;}
       if (sis == 'S' || sis == 's'){
           acusis=acusis + sueldo;
           contis++;}
       titular();
       cin >> sueldo;
}
if (contis > 0)
    imprimir(acuse,acusm,acush,acusis,conte,contm,conth,contis);
else
    cout << "No se procesaron sueldos!";
getch();
}

void imprimir(float acuse,float acusm,float acush,float acusis,int conte,int contm,int conth,int contis)
{
   lp;
   cout << "Número de empleados en PenguinSoft Ltda. :"<< conte <<endl;
   cout << "Total nomina de la empresa $"<< acuse <<endl;
   cout << "Mujeres :"<< contm <<endl;
   cout << "Sueldo promedio de mujeres $"<<  promedio(acusm,contm)<<endl;
   cout << "Hombres :"<< conth <<endl;
   cout << "Sueldo promedio de hombres $"<< promedio(acush,conth)<<endl;
   cout << "Ingenieros de Sistemas :"<< contis <<endl;
   cout << "Sueldo promedio Ing. de Sistemas $"<<  promedio(acusis,contis)<<endl;
}

float promedio(float acum, int cont) // La funcion recibe copia de valores
{
    return(acum/cont);   // devuelve el promedio
}

void titular()
{
    lp;
    cout << "PenguinSoft  Ltda."<<endl;
    cout << "Sueldos de empleados..." << endl<< endl;
    cout << "Digite un $ueldo. Para salir, teclee 0 -> ";
}

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

  1. Escriba una función Potencia(base, exponente) que devuelva el valor de base^exponente. Por ejemplo, Potencia(3, 4) = 3 * 3 * 3 * 3. Suponga que exponente es un entero positivo diferente de cero y que base es un entero. La función Potencia debería utilizar for o while para controlar el cálculo. No utilice funciones de la biblioteca matemática.

  2. Escriba un programa que acepte como entrada una serie de enteros y los pase, uno a la vez, a la función ParNon para determinar si un entero es par. La función deberá devolver 1 si el número es par y 0 si no lo es.

3). Implemente las siguientes funciones: a) La función Celsius devuelve el equivalente en grados centígrados de una temperatura Fahrenheit.  b) La función Fahrenheit devuelve el equivalente en grados fahrenheit de una temperatura en grados centígrados.

4). Un número entero es primo si sólo se puede dividir entre 1 y entre sí mismo. Por ej. 2, 3, 5, 7...  Escriba la función para determinar si un número es primo.

5). Los computadores juegan cada vez más un papel importante en la educación. Escriba un programa que ayude a un estudiante de primaria a aprender a multiplicar. Mediante la función rand genere dos enteros de un dígito. Después deberá desplegar una pregunta como

¿Cuánto es 3 veces 7?

El estudiante  tecleará  la respuesta. Su programa deberá llamar la función Respue para revisar la respuesta. Si es correcta, imprimir "Muy bien!!!" y presentar otro problema. Si está equivocada, visualizar "No. Por favor, intente de nuevo!" y permitir que el estudiante responda la misma pregunta hasta que esté correcta.



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