Академический Документы
Профессиональный Документы
Культура Документы
Introduccin
Cuando los problemas que se van a resolver son muy grandes o complejos, disear la solucin se
convierte en una actividad lenta y ardua, es aqu donde posee mayor utilidad la Programacin
Modular, ya que facilita la tarea de programar y permite elaborar programas de manera ms rpida
y eficaz.
La experiencia ha demostrado que la mejor manera de desarrollar una solucin y mantenerla, es
construirla a partir de piezas pequeas, que la hacen ms manejable. A continuacin se presentan
diferentes elementos que facilitan el diseo, implementacin, operacin y mantenimiento de
soluciones grandes para problemas grandes.
Modulo Principal o
mdulo raz o mdulo de
control
Modulo 0
Modulo 1
Modulo 4
Modulo 2
Modulo 5
Submdulos
Modulo 3
Modulo 6
BOTTON UP:
tcnica que consiste en partir de los detalles ms precisos del algoritmo
completando sucesivamente mdulos de mayor complejidad, este mtodo es inverso al anterior,
parte de lo ms simple para llegar a lo complejo; se recomienda utilizarlo cuando: ya se cuenta con
experiencia en la aplicacin de la tcnica, o cuando se tiene un modelo a seguir y ya se sabe lo
que se va a hacer, o se cuenta con amplia pericia en la resolucin de problemas semejantes.
Conforme se va alcanzando el desarrollo de mdulos ms grandes se plantea como objetivo final la
resolucin global del problema. La tcnica de Botton Up es frecuentemente utilizada para la
realizacin de pruebas a sistemas ya concluidos:
Modulo 4
Modulo 5
Modulo 2
Modulo 1
Submdulos
Modulo 6
Modulo 3
Mdulo Principal o
mdulo raz o mdulo de
control
Modulo 0
WARNIER ORR: tcnica que utiliza una representacin semejante a la de cuadros sinpticos para
mostrar el funcionamiento y organizacin de los elementos que conforman el algoritmo.
Bsicamente es igual al Top Down, ya que toma el problema completo y lo va dividiendo en partes
ms pequeas, se diferencia en la representacin del diseo, Warner Orr utiliza una notacin de
llaves para organizar los mdulos:
Modulo 1
Modulo 4
Submdulos
Modulo 5
Modulo 0
Modulo 2
Modulo 6
Modulo Principal o
mdulo raz o mdulo de
control
Modulo 3
Desde el exterior:
Qu hace ?
Desde el interior:
Cmo lo hace ?
Mdulo 1
Mdulo 1-2
Mdulo 2
Mdulo 3
Mdulo 3-1
Mdulo 3-2
Mdulo 3-2-1
Mdulo 4
Mdulo 3-3
Mdulo 3-2-2
Mdulo 4-1
Mdulo 4-1-1
Debe recordarse que las lneas que conectan dos mdulos indican en primer lugar dependencia
entre ellos (el mdulo del nivel superior es el que controla la ejecucin del mdulo del nivel inferior)
y, en segundo lugar, comunicacin, ya que entre ellos se pueden enviar datos. La comunicacin
entre mdulos siempre es de forma vertical, nunca de forma horizontal. Por ejemplo, en el
diagrama de la figura anterior, el mdulo 0 (o mdulo principal) indica cundo se ejecuta el mdulo
2 y puede enviarle datos; este mdulo 2 al terminar su ejecucin le puede enviar su resultado al
mdulo principal. Los mdulos 2 y 3 no se relacionan entre ellos (ni dependencia ni
comunicacin).
Para dividir un problema en trozos del mismo, ms pequeos, lo indicado es hacer una lista de las
acciones o cosas que deben realizarse y agruparlas de alguna manera conveniente; adems deben
ser relacionadas, indicando por medio de lneas la dependencia entre los mdulos, en la figura
anterior, el mdulo 3-2-2 depende del mdulo 3-2, ste depende del mdulo 3 y ste a su vez del
mdulo 0.
Se sugiere que, lo primero que se puede hacer, es dividir el problema en tres partes: Entrada,
Proceso y Salida, que como son las partes de todo algoritmo, casi siempre estn presentes y si el
proceso en s es grande o complejo, se puede dividir en ms partes.
Comnmente, se puede dejar la entrada de datos como parte del mdulo principal y la salida puede
ser un solo mdulo o formar parte de los mdulos de proceso; tambin se puede dejar la salida en
el principal y disear un mdulo de entrada de datos y desde luego los de proceso. En fin que no
hay una regla para dividir un problema, cada programador divide y disea los mdulos que
considere necesarios.
Cada mdulo puede contener acciones slo de entrada, slo de proceso, slo de salida de datos o,
una combinacin de todos.
Los datos con que trabaja un mdulo se conocen como parmetros, y estos forman parte de los
datos de entrada, (pero no se leen), son enviados por el mdulo que lo precede. Por ejemplo en la
figura anterior, los parmetros del mdulo 1-2, deben ser facilitados por el mdulo 1.
Cada mdulo puede producir resultados (datos de salida) que no se imprimen, sino que son
requeridos por el mdulo que lo precede y se les conoce como Valor(es) de Retorno, de nuevo en
la figura anterior, el resultado del mdulo 3-2-2 es o pude ser enviado al modulo 3-2. Un mdulo
puede tener uno o varios parmetros, pero slo puede enviar un valor de retorno. El mdulo
principal no tiene parmetros ni valor de retorno.
********************************************************************************************************
2.3 Anlisis Estructurado
La tcnica de Anlisis Estructurado se conoce tambin como la tcnica Divide y Vencers, ya
que se descompone un problema en mdulos independientes ms simples, que son fciles de
resolver. Se disea la solucin de cada mdulo con independencia de los dems. Lo que facilita el
anlisis, el diseo del algoritmo y, desde luego, su codificacin. Adems, puesto que cada mdulo
se considera independiente, varios programadores pueden disear por separado las soluciones a
diferentes mdulos, con lo cual se minimiza el trabajo o esfuerzo personal y el tiempo de diseo
para la solucin completa.
Algunas ventajas de programar modularmente son:
Disminuir la complejidad.
Aumentar la claridad y fiabilidad.
Posibilitar el uso repetitivo de las rutinas en el mismo o en diferentes programas.
Facilitar la ampliacin del programa mediante nuevos mdulos.
Facilitar las modificaciones y correcciones al quedar automticamente localizadas en un
mdulo, lo cual indica que un programa modular es fcil de mantener y modificar.
Facilitar la escritura y depuracin de programas (ejecutar, probar y optimizar).
Facilitar el control porque el desglose de un problema en mdulos permite encomendar los
mdulos ms complejos a los programadores ms experimentados y los ms sencillos a los
programadores con menos pericia o experiencia.
Ahora bien, independientemente de la tcnica que se utilice para disear, para que este tipo de
programacin sea realmente efectiva, se debe establecer un organigrama modular
(representacin grfica de un algoritmo modular).
o tambin:
Retornar valor de retorno
Invocacin de un
Sub-flujograma
Inicio de un
Sub-flujograma
Fin de un
Sub-flujograma
Proceso1
Nombre1
Nombre2
Proceso2
Proceso3
Nombre1
Nombre2
Fin
Flujograma Principal
Fin_Nombre1
Retornar
Subflujogramas
Un sub-flujograma (mdulo) puede ser invocado desde el flujograma principal o desde otro subflujograma, al terminar de ejecutarse se retorna al flujograma principal o al sub-flujograma que lo
invoc. *****************************************************************************************************
Entonces, una funcin es un conjunto de lneas de cdigo que realizan una tarea especfica y
puede retornar un valor. Las funciones pueden tomar parmetros que modifiquen su
funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas
simples y para implementar operaciones que son comnmente utilizadas durante un programa y de
esta manera reducir la cantidad de cdigo. Cuando una funcin es invocada se le pasa el control a
la misma, una vez que esta finaliz con su tarea el control es devuelto al punto desde el cual la
funcin fue llamada.
Los programas complejos se escriben normalmente usando varios archivos fuente. Estos archivos
se compilan separadamente y se enlazan todos juntos, dentro de un Proyecto. Esto es una gran
ventaja durante el desarrollo y depuracin de grandes programas, ya que las modificaciones en un
archivo fuente slo obligarn a compilar dicho archivo fuente, y no el resto, con el consiguiente
ahorro de tiempo. La definicin de las funciones y clases puede hacerse dentro de los archivos
fuente o tambin pueden enlazarse desde bibliotecas compiladas previamente.
Por ejemplo si un programador quiere ofrecer ciertas funciones agrupadas bajo una biblioteca para
realizar una tarea en particular, pero internamente necesita crear y usar unas funciones auxiliares,
entonces restringe el acceso a esas funciones auxiliares, porque no pertenecen al juego de
funciones que quiere ofrecer. As:
// "oper.cpp"
// Ejecuta una instruccin de un procesador especializado
// para realizar cualquier operacin aritmtica
static double instAritmetica( unsigned int nInst, double param1, double param2 )
{
...
}
double sumar( double der, double izq )
{
return instAritmetica( 1, der, izq );
}
double restar( double der, double izq )
{
return instAritmetica( 2, der, izq );
}
double multiplicar( double der, double izq )
{
return instAritmetica( 3, der, izq );
}
double dividir( double der, double izq )
{
return instAritmetica( 4, der, izq );
}
De esta manera, cualquier programador tendr acceso a las cuatro funciones aritmticas que el
programador original quiso ofrecer. No se ofrece la funcin, 'instAritmetica()', porque no pertenece a
ese conjunto de funciones creado por el programador original.
Otro ejemplo puede ser a la hora de limitar la cantidad de funciones ofrecidas siguiendo una
documentacin establecida por los diseadores. Un jefe de proyecto da una lista de las funciones
que se deben implementar, pero no limita mucho en cuanto a la forma de implementarlas. Para
implementar las funciones indicadas, se pudieron haber creado unas cuantas funciones ms para
ayudar en la creacin de las dems. Esas otras funciones auxiliares que fueron creadas no forman
parte del cometido original, y como se limitan a un cdigo fuente, se decides usar 'static'.
Otra razn puede ser que existan coincidencias con las funciones que se usan en varios archivos
fuente. Para separar una funcin de las otras "versiones", se usa 'static' para no compartirlas y as
evitar problemas de conflicto de nombres.
El tipoValorRetorno, que puede ser void, si no se necesita valor de retorno. En C, si no se
establece, ser int por defecto, aunque en general se considera una mala tcnica de programacin
omitir el tipo de valor de retorno de una funcin. En C++ es obligatorio indicar el tipo del valor de
retorno.
Modificadores es, como lo indican los corchetes, opcional. Tienen un uso muy especfico que ser
tratado posteriormente.
Es muy til y recomendable que el identificador de la funcin posea un nombre que indique, lo
ms claramente posible, qu es lo que hace la funcin, y que permita interpretar qu hace el
programa con slo leerlo. Cuando se precisen varias palabras se utilizar la Tcnica Camel ya
explicada en la Unidad I.
La lista de declaraciones de parmetros entre parntesis, son los valores de entrada (y en
ocasiones tambin de salida). Para la funcin se comportan exactamente igual que variables, y de
hecho cada parmetro se declara igual que una variable. Una lista de parmetros es un conjunto de
declaraciones de parmetros separados con comas. Puede tratarse de una lista vaca.
Una definicin contiene adems las instrucciones con las que la funcin realizar su trabajo, es
decir, su cdigo o conjunto de sentencias que la componen. El cuerpo de la funcin representa el
cdigo que ser ejecutado cuando se llame a la funcin. El cuerpo de la funcin se encierra entre
llaves "{}". Por ejemplo:
int Mayor(int a, int b)
{
if (a > b) return a;
else return b;
}
La definicin de una funcin sirve para indicar al compilador los tipos de retorno y los de los
parmetros de una funcin, de modo que compruebe si son del tipo correcto cada vez que se use
esta funcin dentro del programa, o para hacer las conversiones de tipo cuando sea necesario.
Para el ejemplo expuesto, se indica al compilador que existe dentro del programa una funcin
"Mayor" que admite dos parmetros de tipo int y que devolver un valor de tipo int.
10
11
Bajo ciertas circunstancias se desear escribir funciones que no regresen valor alguno y para ello
se puede declarar a la funcin como void. La palabra reservada void es utilizada para declarar
funciones sin valor de retorno y tambin para indicar que una funcin especfica no requiere de
parmetros. Por ejemplo, la funcin pausa() que se ver en seguida, no devolver valor alguno y la
misma no requiere de parmetros.
// Requiere de la librera iostream
void pausa(void)
{
cout << "Por favor presione <Enter> HOLA...";
cin.get();
cin.ignore(255, '\n');
// Rechazar otras teclas presionadas antes de <Enter>
}
Notas: se debe de aclarar que el uso de la palabra void dentro de los parntesis es opcional al
momento de declarar una funcin. As, la funcin pausa() podra haberse declarado como void
pausa(), y la misma puede invocarse como: pausa();.
cin es para entrada de datos y cin>>a donde a es la variable de entrada donde se va a guardar la
informacin solicitada al usuario. cout<< es para la salida para lo que se desea conocer o
preguntar. Por ejemplo:
12
Para ver un ejemplo ms, se va a considerar el caso de la funcin binstr() del siguiente programa.
Se va a modificar dicha funcin de manera que sirva para convertir nmeros decimales en cadenas
numricas y cuya base de conversin sea pasada como parmetro. Es decir, la funcin podr
convertir nmeros decimales a: binario, octal, decimal, hexadecimal, etc.; y la nica condicin ser
que la base indicada est entre el 2 y el 36, inclusive. Nota: Ya que la funcin servir para convertir
nmeros a cualquier representacin ser nombrada como numstr() en lugar de binstr(). Si la
funcin es invocada sin el parmetro base regresar una cadena de dgitos decimales:
#include <iostream>
#include <stdlib.h>
int main()
{
int n = 128;
cout << "decimal = " << n << ", binario = " << numstr(n, 2) << endl;
cout << "decimal = " << n << ", octal.. = " << numstr(n, 8) << endl;
cin.get();
}
// Definicin de funcin numstr()
// Nota: esta funcin requiere de la librera stdlib.h
char *numstr(unsigned int n, const int base)
{
static char buffer[65];
itoa(n, buffer, base);
return buffer;
}
En el programa anterior, el arreglo de caracteres (buffer[65]) se ha declarado como esttico para
garantizar que dicho buffer retenga los datos an despus de que la funcin termine. En el mismo
ejemplo, si el buffer no se declara como esttico, el contenido del mismo podra ser destruido al
salir de la funcin y los resultados obtenidos podran ser no deseados.
EN CONCLUSION:
La estructura de un programa en C con mdulos o funciones quedara as:
[directivas del pre-procesador: includes y defines]
[declaracin de variables globales]
[declaraciones de funciones] Si no se usan declaraciones, las definiciones deben ir aqu
funcin main
[definiciones de funciones]
*****************************************************************************************************************
2.11 Ejemplos
Ejemplo 1:
Disear una solucin que calcule los minutos y segundos que equivalen a una cantidad de horas.
I. PLANTEAMIENTO GENERAL DEL PROBLEMA
Entrada de datos
Salida de datos
13
Nmero de minutos
Nmero de segundos
minutos
leer
imprimir
segundos
Salida de datos
** Cmo lo hace?
Datos de Salida:
Variables de Salida: No hay, devuelve el nmero de horas
Datos de Entrada
Variables de Entrada:
Nombre Tipo
Descripcin
hora
entero Representa el nmero de horas a convertir, variable local
Parmetros: No hay, la funcin no tiene parmetros.
Constantes: No existen.
Restricciones:
hora >0
Proceso:
No hay, solo lee y valida el nmero de horas
Variables de Proceso: No hay
14
*
Mientras hora<=0
Digite el
nmero
de horas
hora
hora
Retornar hora
b. MDULO minutos:
Salida de datos
** Cmo lo hace?
Datos de Salida
Variables de Salida: No hay, devuelve el numero de minutos
Datos de Entrada:
Variables de Entrada: No hay.
Parmetros:
Nombre Tipo
Descripcin
h
Entero Representa el nmero de horas a convertir
h: Nmero de horas a convertir, ledas en el mdulo leer.
Constantes: El nmero de minutos que tiene una hora: 60.
Restricciones:
Proceso:
No hay
min = 60 * h
Variables de Proceso:
Nombre Tipo
Descripcin
min
Entero Representa el nmero de minutos, variable local
15
min = 60 * h
Retornar min
c. MDULO segundos:
Salida de datos
** Cmo lo hace?
Variables de Salida: No hay, devuelve el nmero de segundos
Variables de Entrada: No hay.
Parmetros:
Nombre
m
Tipo
Descripcin
entero Representa el nmero de minutos a convertir
seg = 60 * m
Variables de Proceso:
Nombre
Tipo
Descripcin
seg
entero Representa el nmero de segundos, variable local
Diseo de Solucin Sub-flujograma:
segundos ( m )
seg = 60 * m
Retornar seg
16
d. MDULO imprimir:
Salida de datos
Cantidad de horas
Cantidad de minutos
Cantidad de segundos
** Cmo lo hace?
Variables de Salida:
Nombre Tipo
Ho
entero
Mi
entero
Se
entero
Descripcin
Representa el nmero de horas, variable local
Representa el nmero de minutos, variable local
Representa la cantidad de segundos, variable local
Variables de Entrada: No hay, recibe como parmetros el nmero de horas, minutos y segundos.
Parmetros:
Ho, Mi, Se: Nmero de horas, minutos y segundos a imprimir ledos o
Calculados en los otros mdulos.
Constantes: No existen.
Restricciones:
Proceso:
No hay
No hay
Variables de Proceso:
No hay
No. Horas, ho
Equivalentes a:
Retornar
17
e. MDULO Principal:
Salida de datos
Enva la cantidad de
horas,
minutos
y
segundos
** Cmo lo hace?
Variables de Salida: No hay, enva como parmetros: el nmero de horas, minutos y segundos a
la funcin imprimir.
Variables de Entrada: No hay, recibe los valores de retorno de los otros mdulos: el nmero de
horas, minutos y segundos
Parmetros: No hay.
Constantes: No existen.
Restricciones:
No hay
Proceso:
Invoca los mdulos, enva parmetros y recibe-asigna los resultados:
numH = Leer( )
//resultado de Leer
numM = minutos( numH )
//resultado de minutos
numS = segundos( numM ) //resultdo de segundos
Variables de Proceso:
Nombre Tipo
Descripcin
numH
entero Representa el nmero de horas, variable local
numM entero Representa el numero de minutos, variable local
numS
entero Representa el nmero de segundos, variable local
Disee de solucin Flujograma:
Inicio
numH = leer()
numM = minutos(num_h)
numS = segundos(num_m)
Fin
18
#include <conio.h>
#include <stdio.h>
// Convierte una cantidad de horas en minutos y segundos
// Declaracion y Definicion de Funciones
int leer () {
// Funcion que lee desde teclado la cantidad de horas a convertir
int hora;
printf ("Digite el numero de horas: ");
scanf ("%i", &hora);
while (hora <= 0) {
printf("Debe ser positiva ") ;
scanf("%i", &hora);
} // while
return hora;
} // leer
int minutos (int h) {
// Funcion que convierte la cantidad de horas en minutos
int min;
min = 60*h;
return min;
} // minutos
int segundos (int m) {
// Funcion que convierte la cantidad de minutos en segundos
int seg;
seg = 60*m;
return seg;
} // segundos
void imprimir (int ho, int mi, int se) {
// Despliega la cantidad de horas, minutos y segundos
printf ("No.Horas: %i", ho);
printf (" Equivalente a: %i Minutos y %i Segundos ", mi,se);
return;
} // imprimir
// Modulo Principal
main () {
int numH, numM, numS;
numH = leer();
numM = minutos(numH);
numS = segundos(numS);
imprimir(numH, numM, numS);
getch(); //pausa
}
19
Ejemplo 2
Disear una solucin que simule una calculadora sencilla; es decir, que realice las operaciones
aritmticas bsicas: SUMA, RESTA, MULTIPLICACIN Y DIVISIN. El programa debe permitir
realizar varias operaciones e imprimir cada vez: el nombre de la operacin realizada, los datos, el
resultado obtenido y, el nmero total de operaciones que se realizaron.
I. PLANTEAMIENTO GENERAL
Entrada de datos
Salida de Datos
Datos a operar
Tipo de operacin
deseada
Nombre de la operacin
Datos Iniciales
Resultado
No. de operaciones realizadas
II.
TOP- DOWN
El tener una idea de lo que se va a hacer ayuda mucho a decidir cuantos mdulos se van a disear
y la relacin que existe entre ellos; por lo tanto, las grandes cosas o pasos que se deben realizar
son:
1. Leer datos
2. Elegir la Operacin
3. Operar (producir el resultado)
4. Imprimir el resultado
5. Contar las operaciones
De aqu se puede inferir que se va a tener un mdulo para cada operacin aritmtica; adems el
mdulo principal va a leer los datos y es necesario validarlos, luego los enva a los mdulos,
tambin va a contar e imprimir el nmero de veces que se opera. El top-down queda as:
Principal
suma
III.
resta
multi
divi
ANLISIS ESTRUCTURADO
a. MODULO suma
Salida de Datos
Recibe
los
dos
nmeros a sumar
20
Mensaje: SUMA
Datos Iniciales o sumados
Resultado
** Cmo lo Hace?:
Variables de Salida.
Nombre Tipo
a
Real
b
Real
r
Real
Descripcin
El primer operando
El segundo operando
El resultado de la operacin
suma(a,b)
SUMA
r=a+b
Datos, a,b
Resultado de la
operacin:, r
Retornar
b. MDULO resta
Salida de Datos
Recibe
los
dos
nmeros a restar
21
Mensaje: RESTA
Datos Iniciales
Resultado
** Cmo lo Hace?:
Variables de Salida.
Nombre Tipo
a
Real
b
Real
r
Real
Descripcin
El primer operando
El segundo operando
El resultado de la operacin
resta(a,b)
RESTA
r=a-b
Datos, a,b
Resultado de la
operacin:, r
Retornar
c. MDULO multi
**
Qu
hace?:
Multiplica
dos nmeros
e
imprime:
la
palabra
MULTIPLICACION, los nmeros multiplicados y el resultado del producto.
Entrada de datos
Salida de Datos
22
Mensaje: MULTIPLICACIN
Datos Iniciales
Resultado
** Cmo lo Hace?:
Variables de Salida.
Nombre Tipo
a
Real
b
Real
r
Real
Descripcin
El primer operando
El segundo operando
El resultado de la operacin
multi(a,b)
MULTIPLICACIN
r=a*b
Datos, a,b
Resultado de la
operacin:, r
Retornar
d. MDULO divi
** Qu hace?: Divide dos nmeros e imprime: la palabra DIVISION, los nmeros dividos
y el resultado de la divisin
Entrada de datos
Salida de Datos
Recibe
los
dos
nmeros a dividir
23
Mensaje: DIVISION
Datos Iniciales
Resultado
** Cmo lo Hace?:
Variables de Salida.
Nombre Tipo
a
Real
b
Real
r
Real
Descripcin
El primer operando
El segundo operando
El resultado de la operacin
divi(a,b)
DIVISION
No
Si
b!=0
r=a/b
a, y, b, No se
pueden dividir
Datos, a,b
Resultado de la
operacin:, r
Retornar
24
e. MDULO principal
** Qu hace?: Lee dos datos reales, elige la operacin a realizar y cuenta las
operaciones hechas en total.
Entrada de datos
Salida de Datos
Nmero de operaciones
realizadas
Enva los datos a operar
** Cmo lo Hace?:
Variables de Salida:
Nombre Tipo
i
Real
Descripcin
El contador de las operaciones realizadas. Vi=0, Vc=1,
Vf.?
Debe enviar o mandar los dos nmeros a operar a cada mdulo
Variables de Entrada:
Nombre Tipo
x
Real
y
Real
op
Entero
otra
Parmetros:
Entero
Descripcin
El primer operando
El segundo operando
El tipo de la operacin a realizar 1: suma
2: resta
multiplicacin 4: divisin
Indica si se requiere otra operacin, 1: otro clculo
Constantes: No existen.
Restricciones: op>=1 && op<=4.
Proceso:
i=0
leer otra
leer x, y
leer op
Mientras
otra==1
op =
// y validar
1:
2:
3:
4:
Llamar Suma(x,y)
Llamar Resta(x,y)
Llamar Multi(x.y)
Llamar Divi(x,y)
i= i + 1
leer otra
Variables de Proceso: No hay.
25
3.
i=0
op
Para hacer
una operacin
digite 1
1
2
otra
4
otra==1
No
Si
1:
2:
3:
4:
Suma
Resta
Mutiplicacin
Divisin
suma(x,y)
resta(x,y)
multi(x,y)
divi(x,y)
i=i+1
Para hacer
otra operacin
digite 1
op
MIENTRAS
op<1 || op>4
otra
2
Error, debe
ser entre 1 y
4
3
op
Se realizaron:
, i, operaciones
x, y
Fin
1
26
#include <conio.h>
#include <stdio.h>
// Simulador de una calculadora sencilla: +, -, * y /
// Declaracion y Definicion de Funciones
void suma (float a, float b) {
// Suma dos numeros
float r;
printf ("\nS U M A\n");
r = a + b;
printf("\nDatos: %.2f %.2f ", a, b) ;
printf("\nResultados de la Operacion: %.2f", r);
return;
} // suma
void resta (float a, float b) {
// Resta dos numeros
float r;
printf ("\nR E S T A\n");
r = a - b;
printf("\nDatos: %.2f %.2f ", a, b) ;
printf("\nResultados de la Operacion: %.2f", r);
return;
} // resta
void multi (float a, float b)
// Multiplica dos numeros
float r;
printf ("\nM U L T I P L I
r = a * b;
printf("\nDatos: %.2f %.2f
printf("\nResultados de la
return;
} // multi
{
C A C I O N\n");
", a, b) ;
Operacion: %.2f", r);
27
// Modulo Principal
main () {
int i, otra, op;
float x,y; //Numeros a operar
i=0;
printf ("\nPara hacer una operacion digite 1 ");
scanf("%i", &otra);
while (otra==1) {
printf("\n1: Suma");
printf("\n2: Resta");
printf("\n3: Multiplicacion");
printf("\n4: Division");
printf("\nDigite el numero de la opcion elegida: ");
scanf ("%i", &op);
while (op<1 || op>4) {
printf ("\nError, debe ser entre 1 y 4 ");
scanf ("%i", &op);
}
printf("\nIntroduzca los dos numeros a operar: ");
scanf ("%f %f", &x, &y);
switch (op) {
case 1:
suma (x,y);
break;
case 2:
resta (x,y);
break;
case 3:
multi (x,y);
break;
case 4:
divi (x,y);
break;
}
i++;
printf("\nPara hacer otra operacion, digite 1 ");
scanf("%i", &otra);
}
printf ("\nSe realizaron %i operaciones", i);
getch(); //pausa
}
28