Você está na página 1de 0

1

UNIDAD 2. PROGRAMACIN PROCEDIMENTAL.



Uno de los problemas habituales del programador ocurre cuando los programas
alcanzan un tamao considerable en cuanto a lneas de cdigos se trata. El problema se
puede volver tan complejo que fuera inabordable.

Para mitigar este problema apareci la Programacin Procedimental. En ella el
programa se divide en mdulos de tamao manejable. Cada mdulo realiza una funcin muy
concreta y se pueden programar de forma independiente. Se basa en concentrar los
esfuerzos en resolver problemas sencillos y una vez resueltos, el conjunto de esos
problemas soluciona el problema original.

En definitiva, la Programacin Procedimental implementa el paradigma divide y
vencers, tan importante en la programacin. El programa se descompone en mdulos. Los
mdulos se puede entender que son pequeos programas. Reciben datos y a partir de ellos
realizan un clculo o una determinada tarea. Una vez el mdulo es probado y validado se
puede utilizar las veces que haga falta en el programa sin necesidad de tener que volver a
programar.

En C++ los mdulos se llaman Funciones. Anteriormente se ha usado algunas
funciones implementadas en las libreras del lenguaje C++ (cin, cout y pow por ejemplo). El
lenguaje C++ proporciona diversas funciones ya preparadas (se les llama funciones
estndar) para evitar que el programador tenga que codificar absolutamente todo el
funcionamiento del programa.

Las funciones son invocadas desde el cdigo utilizando su nombre. Cuando desde el
cdigo se invoca a una funcin, entonces el flujo del programa salta hasta el cdigo de la
funcin invocada. Despus de ejecutar el cdigo de la funcin, el flujo del programa regresa
al cdigo siguiente a la invocacin.

Las funciones contienen varias sentencias bajo un mismo nombre, que un programa
puede utilizar una o mas veces para ejecutar dichas sentencias. Ahorran espacio, reduciendo
repeticiones y haciendo ms fcil la programacin, proporcionando un medio de dividir un
proyecto grande en mdulos ms manejables.

Si se agrupan varias funciones en bibliotecas, otros programas pueden reutilizar las
funciones; por esta razn se puede ahorrar tiempo de desarrollo. Y dado que las bibliotecas
contienen rutinas presumiblemente comprobadas, se incrementa la fiabilidad del programa
completo.

Las funciones pueden existir de modo autnomo. Como ya se ha trabajado
anteriormente, se sabe que cada programa en C++ tiene al menos una funcin main(); sin
embargo, cada programa C++ consta de muchas funciones en lugar de una funcin main()
grande. La divisin del cdigo en funciones hace que las mismas se puedan reutilizar en su
programa y en otros programas. Despus de que escriba, pruebe y depure su funcin, sta
se puede utilizar nuevamente una y otra vez. Para reutilizar una funcin dentro de su
programa, slo se necesita llamar a la funcin.



2
1. FUNCIONES.

Al escribir un programa largo en C++, se busca dividirlo en varios mdulos o
funciones, entonces, dicho programa en C++ se compondr de varias funciones, cada una de
las cuales realiza una tarea principal. Cada funcin realiza una determinada tarea y cuando
se ejecuta la sentencia return o termina el cdigo de la funcin, se retorna al punto en que
fue llamada desde la funcin principal (main()) o desde otra funcin.

1.1. Definicin.

Una funcin es un conjunto de lneas de cdigo que realizan algo en particular;
especficamente una funcin debe retornar un valor que haya calculado o que se defina en el
cdigo.

1.2. Declaracin y Estructura.

El conjunto de lneas que conforman a la funcin tienen una estructura bien definida,
sta est dividida en dos partes principales: el prototipo y el cuerpo de la funcin. C++
requiere que una funcin se declare o defina antes de su uso, por lo tanto esta se ubicar
antes de la funcin main.

tipo_devuelto Nombre_Funcion (tipo nomb_parmetro1, , tipo nomb_parmetroN)
Inicio

Declaracin de Variables Locales //(Propias de la Funcin)

Conjunto de Instrucciones de la Funcin

Devolver (Expresin o Valor)

Fin
Cdigo 1. Declaracin de una Funcin en Pseudocdigo.

tipo_devuelto Nombre_Funcin (tipo nomb_parmetro1,..., tipo nomb_parmetroN)
{
Declaracin de Datos;

Conjunto de Instrucciones de la Funcin;

return(Expresin o Valor);
}
Cdigo 2. Declaracin de una Funcin en C++.

Prototipo.

Las declaraciones de funciones en C++ comienzan con el prototipo de stas. El
prototipo de una funcin es sencillo, y est incluido al principio del cdigo del programa para
notificar al compilador el tipo y nmero de argumentos que va a usar la funcin. Al prototipo
tambin se le es conocido como cabecera.

3
tipo_devuelto Nombre_Funcin ( tipo Nomb_Parmetro1, , tipo Nomb_ParmetroN)
De qu tipo es el valor que
retorna la funcin?
Listado de Parmetros Formales o Argumentos de la
Funcin, se debe especificar el tipo de dato y el nombre
de la variable.
Cmo se llama la Funcin?

Figura 1. Prototipo de la Funcin.

Cuerpo de la Funcin.

El cuerpo de la funcin se dispone, bien sea entre las palabras Inicio y Fin para
pseudocdigo o dentro de un conjunto de llaves { }, en C++. En esta seccin se escribirn
las lneas de cdigo, de los distintos tipos de instrucciones (declaracin, entrada/salida,
asignacin y clculo y control) que darn vida a la funcin.

Es importante recalcar que dentro del cuerpo de la funcin se encontrar una
instruccin llamada Devolver (pseudocdigo) o return (C++), la cual, como su nombre lo
indica es la que retornar el valor calculado dentro de la funcin, cuando dicha funcin es
utilizada.

Ejemplo 01.
Disee una funcin que calcule una expresin de potencia (

), donde la
base y el exponente se asuman nmeros enteros positivos.
P
s
e
u
d
o
c

d
i
g
o

entero pot (entero base, entero exponente)
Inicio
entero i, potencia
potencia= 1
Repetir desde i= 1 hasta i<= exponente
potencia= potencia*base
Fin_Repetir_Desde
Devolver (potencia)
Fin
C
+
+

int pot (int base, int exponente)
{
int i, potencia;
potencia= 1;
for (i= 1; i<= exponente; i++)
potencia= potencia*base;
return (potencia);
}

1.3. Llamada de una Funcin.

Una vez que hemos declarado la funcin, la idea es hacer uso de sta. El proceso de
utilizar o emplear a la funcin que hemos creado se denomina llamar a la funcin.

4
Este proceso no es algo nuevo, de manera inconsciente desde que comenzamos a
programar en C++ hemos utilizado funciones propias del este lenguaje de programacin,
para refrescar un poco la memoria, analicemos el cdigo del Ejemplo 02.

Ejemplo 02.
Disee un programa que calcule el rea de una circunferencia, cuyo radio
es introducido por el usuario.
P
s
e
u
d
o
c

d
i
g
o

Algoritmo rea de Circunferencia
Inicio
entero Radio
real Area
Mostrar (Ingrese el Radio de la Circunferencia)
Leer(Radio)
Area = 3,1416*Radio^2
Mostrar (El rea es: , Area)
Fin
C
+
+

#include <iostream.h>
#include <math.h> // Libreria que contiene la funcin pow
#define PI 3.1416
void main()
{
int Radio;
float Area;
cout<<Ingrese el Radio de la Circunferencia: ;
cin>>Radio;
Area = PI * pow(Radio,2);
cout<<El rea es: <<Area;
system(PAUSE);
}

La instruccin pow, no es ms que una funcin que calcula la potencia de un nmero
elevado a un exponente. Su definicin se encuentra en la librera math.h, es por eso que si
no agregamos dicha librera, el compilador no reconoce a la funcin, arrojando un resultado
como el de la figura 2.


Figura 2. Error del Depurador por no incluir la Librera Math.h y usar la funcin pow en el
cdigo.

Ahora bien, en el Ejemplo 01 hemos creado nuestra propia funcin pow, en el Ejemplo
03 utilizaremos la funcin pot creada por nosotros mismos.





5

Ejemplo 03.
Disee un programa que utilice la funcin pot del Ejemplo 01, para calcular
el rea de una circunferencia, cuyo radio es introducido por el usuario.
P
s
e
u
d
o
c

d
i
g
o

Algoritmo rea de Circunferencia
//Funcin pot
entero pot (entero base, entero exponente)
Inicio
entero i, potencia
potencia= 1
Repetir desde i= 1 hasta i<= exponente
potencia= potencia*base
Fin_Repetir_Desde
Devolver (potencia)
Fin
//Algoritmo Principal
Inicio
entero Radio
real Area
Mostrar (Ingrese el Radio de la Circunferencia)
Leer(Radio)
Area = 3,1416* pot(Radio, 2)
Mostrar (El rea es: , Area)
Fin
C
+
+

#include <iostream.h>
#define PI 3.1416

int pot (int base, int exponente)
{
int i, potencia;
potencia= 1;
for (i= 1; i<= exponente; i++)
potencia= potencia*base;
return (potencia);
}
//Programa Principal
void main()
{
int Radio;
float Area;
cout<<Ingrese el Radio de la Circunferencia: ;
cin>>Radio;
Area = PI * pot(Radio,2);
cout<<El rea es: <<Area;
system(PAUSE);
}



6
Cuando se ejecuta el programa principal del Ejemplo 03, se llama a la funcin pot en
la instruccin donde se calcula el rea de la circunferencia, cuando el computador interpreta
dicha instruccin se da cuenta que es una funcin y salta a la declaracin de esa funcin,
all ejecuta las instrucciones que pertenecen a sta y cuando consigue una instruccin return,
sale de la funcin, retornando el valor que se indique en el punto donde fue llamada la
funcin en un principio. Para comprender un poco este proceso visualice la figura 3.


Figura 3. Ejecucin de una Funcin.

1.4. Parmetros de una Funcin.

Para visualizar los parmetros de una funcin sea propia del usuario o pertenezca a
C++, el software de programacin despliega una pestaita indicando los argumentos de la
funcin al escribir el parntesis de apertura luego del nombre de la funcin. Lo anterior se
observa en la figura 4.


Figura 4.Ayuda del C++ Builder para visualizar los Parmetros de una Funcin.

Existen dos mtodos para pasar variables (parmetros) al llamar funciones. Una
funcin puede utilizar paso de parmetros por valor o parmetros por referencia, as como
tambin puede no tener parmetros.



7
Paso por Valor.

Tambin llamado paso por copia, significa que cuando se compila la funcin y el
cdigo que llama a la misma, sta recibe una copia de los valores de los parmetros
actuales. La funcin receptora no puede modificar la variable de la funcin (parmetro
pasado). En la siguiente figura se muestra un ejemplo de un programa que utiliza una funcin
llamada funcion1 con paso por valor.

void main ()
{
int x=6;
cout<<x<<endl;
funcion1(x);
cout<<x<<endl;
system(PAUSE);
}
void funcion1 (int y)
{
cout<<y<<endl;
y++;
cout<<y<<endl;
}
6
6
6
7
6

Figura 5. Funcin con Paso de Parmetros por Valor.

Paso por Referencia.

Trabajando las funciones como se ha hecho hasta ahora, se tiene una importante
limitacin cuando de retornar valores al programa principal se trata, ya que la funcin
devolver o return est limitada a retornar un solo valor. El mtodo de paso por referencia
permite solventar este inconveniente, ya que permite modificar directamente los valores que
estn el programa principal.

El mtodo de paso de parmetros por referencia tambin se conoce como paso por
direccin, en este caso los parmetros formales de la funcin (los que estn en el prototipo),
se deben declarar incluyendo el smbolo & cmo primer carcter del identificador, y al usar la
funcin el parmetro actual (argumento que se pasa cuando se llama a la funcin) se sigue
pasando de la misma manera, es decir, con su correspondiente nombre. En la siguiente
unidad se estudiar ms a fondo este tipo de paso, pero utilizando variables puntero.


8
Cuando se modifica el valor del parmetro formal de un parmetro por referencia (la
variable local), este valor queda almacenado en la misma direccin de memoria, por lo que al
retornar la funcin llamadora la direccin de la memoria donde se almacen el parmetro
contendr el valor modificado. Veamos el Ejemplo 04.

Ejemplo 04.
Disee un programa a travs de una funcin o procedimiento calcule la
superficie y el volumen de una esfera cuyo radio es introducido por el
usuario.
P
s
e
u
d
o
c

d
i
g
o

Algoritmo Superficie y Volumen de Esfera
//Funcin para calcular la superficie y el volumen
Procedimiento sup_vol (real radio, real &vol, real &sup)
Inicio
vol=(4/3)*3.1416*radio^3
sup=4*3.1416*radio^2
Fin
//Algoritmo Principal
Inicio
real Radio, Volumen, Superficie
Mostrar (Ingrese el Radio de la Esfera)
Leer(Radio)
Llamar a sup_vol( Radio, Volumen, Superficie)
Mostrar (El Volumen es: , Volumen)
Mostrar (La Superficie es: , Superficie)
Fin
C
+
+

#include <iostream.h>
#include <math.h>
#define PI 3.1416

void sup_vol (float radio, float &vol, float &sup)
{
vol=(4/3)*PI*pow(radio,3);
sup=3*PI*pow(radio,2);
}
//Programa Principal
void main()
{
float Radio, Volumen, Superficie;
cout<<Ingrese el Radio de la Circunferencia: ;
cin>>Radio;
sup_vol(Radio, Volumen, Superficie);
cout<<El Volumen es: <<Volumen;
cout<<La Superficie es: <<Superficie;
system(PAUSE);
}


En el ejemplo 04, los valores para las variables Volumen y Superficie no son
retornados, sino que al ser modificadas dentro de la funcin, su valor vara indirectamente.

9
2. PROCEDIMIENTOS.

En el cdigo del ejemplo 04 se introdujo la definicin de Procedimiento. Un
procedimiento no es ms que una funcin cuyo tipo_retorno (ver figura 1) es un tipo vaco,
lo que es en C++ void.

Procedimiento Nombre_Procedimiento (tipo nomb_parmetro1, , tipo nomb_parmetroN)
Inicio

Declaracin de Variables Locales //(Propias de la Funcin)

Conjunto de Instrucciones de la Funcin


Fin
Cdigo 3. Declaracin de un Procedimiento en Pseudocdigo.

void Nombre_Procedimiento (tipo nomb_parmetro1,..., tipo nomb_parmetroN)
{
Declaracin de Datos;

Conjunto de Instrucciones del Procedimiento;


}
Cdigo 4. Declaracin de un Procedimiento en C++.

Como los procedimientos no han de retornar valores a travs de la instruccin
Devolver (pseudocdigo) o return (C++), estos pueden modificar con el paso por referencia el
valor de alguna variable del programa principal. Este es el caso del ejemplo 04.

3. MBITO DE UNA VARIABLE.

El mbito es la zona de un programa en el que es visible una variable. Existen cuatro
tipos de mbitos: programa, archivo fuente, funcin y bloque. Normalmente la posicin de la
sentencia en el programa determina el mbito.

3. 1. Variables Globales.

Las variables que tienen mbito de programa pueden ser referenciadas por cualquier
funcin en el programa completo; tales variables se les llama variables globales. Para hacer
una variable global, declrela simplemente al principio de un programa, fuera de cualquier
funcin (inclusive la funcin main()), se recomienda declararlas al comienzo del programa
antes de las definiciones de las funciones.

El mbito de estas variables es global, es decir, que son visibles por cualquier funcin
y cualquiera de ellas puede modificar su valor. La vida de estas variables va ligada a la del
programa, se crean cuando empieza la ejecucin del programa y pueden ser utilizadas hasta
que se acabe el mismo.

10
3. 2. Variables Locales.

Estn declaradas dentro de la funcin, bien dentro del cuerpo o bien como parmetros
formales. El mbito de la variable se reduce al de la funcin y fuera de esta no tienen
presencia, es decir, slo puede ser utilizada por la funcin donde est declarada.

Por su parte, las variables locales pueden ser:

Variables Automticas: Son eliminadas cuando se termina la ejecucin de la funcin donde
han sido declaradas, es decir, su vida se limita al tiempo que est activa la funcin. Los
parmetros formales son variables automticas

Variables Estticas: A pesar de que slo pueden ser utilizadas por la funcin donde han sido
declaradas, no son destruidas al terminar sta. Por lo tanto, mantienen su valor para la
prxima vez en que sea llamada la funcin. Se declaran, precediendo el nombre del tipo por
la palabra "static".

4. UTILIZACIN DE ARREGLOS COMO PARMETROS.

En C++ todos los arreglos se pasan por referencia (direccin). C++ trata
automticamente la llamada a la funcin como si hubiera situado el operador de direccin &
delante del nombre del arreglo.

La declaracin de un parmetro formal de tipo arreglo puede ser:

Forma 1 Tipo_Dato Nombre_Arreglo [N]
Forma 2 Tipo_Dato Nombre_Arreglo [ ]
Forma 3 Tipo_Dato *Nombre_Arreglo

En esta unidad utilizaremos las formas 1 y 2, la forma 3 es trabajando con punteros
que es el tema de la siguiente unidad. Si se utiliza la forma 2, se debe incluir otro parmetro
que indique el tamao del arreglo, como se ver en el siguiente ejemplo.

Ejemplo 05.
Disee un programa que lea dos arreglos de 10 elementos, que los sume
trmino a trmino y los deposite en otro arrelgo. Disee tres funciones, la
primera debe ingresar los datos, la segunda sumar dos arreglos y la
tercera debe mostrar.

11
P
s
e
u
d
o
c

d
i
g
o

Algoritmo Parmetros tipo Arreglo

//Procedimiento para Leer arreglo de dimensin n
Procedimiento lectura (real a[ ], entero n)
Inicio
Entero i
Repetir desde i= 1 hasta i<= n
Mostrar(Introduzca el Elemento Numero , i)
Leer(a[i])
Fin_Repetir_Desde
Fin

//Procedimiento para Mostrar un arreglo de dimensin n
Procedimiento muestra (real a[ ], entero n)
Inicio
Entero i
Repetir desde i= 1 hasta i<= n
Mostrar(i, , a[i])
Fin_Repetir_Desde
Fin

//Procedimiento para Sumar dos Arreglos de dimensin n
Procedimiento suma (real a[ ], real b[ ], real c[ ], entero n)
Inicio
Entero i
Repetir desde i= 1 hasta i<= n
c[i]=a[i]+b[i]
Fin_Repetir_Desde
Fin

//Algoritmo Principal
Inicio
real A[11], B[11], C[11]
Llamar a lectura (A, 11)
Llamar a lectura (B, 11)

Mostrar (Arreglo A:)
Llamar a muestra (A, 11)
Mostrar (Arreglo B:)
Llamar a muestra (B, 11)

Llamar a suma(A, B, C, 11)

Mostrar (Arreglo C:)
Llamar a muestra (C, 11)
Fin

12
C
+
+

#include <iostream.h>
#include <conio.h>
#define N 10

void lectura (float a[ ], int n)
{
int i;
for (i=0; i<n; i++)
{
cout<<"Indroduzca el Elemento "<<i+1<<" : \n";
cin>>a[i];
}
}

void muestra (float a[ ], int n)
{
int i;
for (i=0; i<n; i++)
cout<<"Elemento "<<i+1<<": "<<a[i]<<endl;
}

void suma (float a[ ], float b[ ], float c[ ], int n)
{
int i;
for (i=0; i<n; i++)
c[i]=a[i]+b[i];
}

void main()
{
float A[N], B[N], C[N];
cout<<"Ingreso del Arreglo A \n";
lectura(A, N);
cout<<"Ingreso del Arreglo B \n";
lectura(B, N);
clrscr();
cout<<"Estos fueron los Arreglos que ingreso: \n";
cout<<"\n Arreglo A \n";
muestra(A, N);
cout<<"\n Arreglo B \n";
muestra(B, N);
suma(A, B, C, N);
cout<<"\n Arreglo Resultante C \n";
muestra(C, N);
getch();
}



13
5. UTILIZACIN DE REGISTROS COMO PARMETROS.

C++ permite pasar estructuras a funciones, bien por valor o bien por referencia,
utilizando el operador &. Si la estructura es grande, se debe usar el mtodo de direccin.

Ejemplo 06.
Disee un programa que permita guardar los datos de una encuesta
realizada a 300 personas, sobre su ndice de masa corporal. A los
encuestados se les pidi su nombre, cdula, estatura y peso. El programa
debe mediante un men de opciones, realizar:

[1] Ingresar los datos de la Encuesta: se deben ingresar los datos que
se les pidi a los encuestados, calcular el correspondiente ndice de masa
corporal usando la frmula: IMC = Peso / Estatura
2
, y luego clasificar la
evaluacin segn la tabla de Clasificacin IMC (ver abajo).

[2] Mostrar Datos Totales: Se debe visualizar la estructura con toda la
informacin completa.

[3] Salir del Programa.

IMC [300]
Nombre Cedula Estatura Peso imc eval Clasificacin IMC
1

Infrapeso <18,50
2 Normal 18,50 a 24,99
: Sobrepeso 25
300 Obeso 30,00

Utilice programacin procedimental, e implemente las siguientes
Funciones y Procedimientos:

Funcin Men: Despliega el Men y retorna la opcin seleccionada.
Procedimiento Validar: Asegura que la opcin seleccionada este en el
rango correcto.
Procedimiento Cargar Datos: Carga los datos en la estructura.
Procedimiento Evaluacin: Carga los datos en el campo eval segn la
clasificacin IMC.
Procedimiento Mostrar: Muestra los datos cargados en la estructura.

Pseudocdigo.
Algoritmo Parmetros Tipo Registro
Registro Datos_IMC
caracter nombre[20], eval[15]
real peso, estatura, imc
entero cedula
Fin_Registro

//Procedimiento Validacin
Procedimiento validacion (entero &valor, entero lim_inf, entero lim_sup)

14
Inicio
Repetir Mientras (valor<lim_inf || valor>lim_sup)
Mostrar ("Opcion invalida, reintroducir")
Leer (valor)
Fin_Repetir_Mientras
Fin

//Funcin Men
entero menu ()
Inicio
entero opc
Mostrar ("Menu de Opciones: ")
Mostrar (1)Ingresar Datos de la Encuesta)
Mostrar ("2)Visualizar Datos ")
Mostrar ("3)Salir del Programa ")
Mostrar ("Escoja una Opcion: ")
Leer (opc)
validacion(opc, 1, 3)
Devolver (opc)
Fin

//Procedimiento Ingreso
Procedimiento ingreso (Datos_IMC ing_imc[ ], int n)
Inicio
int i
Repetir Desde i=1 hasta i<=n
Mostrar ("Ingrese el Nombre: ")
Leer(ing_imc[i].nombre)
Mostrar ("Ingrese la cedula: ")
Leer(ing_imc[i].cedula)
Mostrar ("Ingrese el peso: ")
Leer(ing_imc[i].peso)
Mostrar ("Ingrese la estatura: ")
Leer(ing_imc[i].estatura)
ing_imc[i].imc=ing_imc[i].peso/ing_imc[i].estatura^2
Fin_Repetir_Desde
Fin

//Procedimiento Evaluacin
Procedimiento evaluacion (Datos_IMC eval_imc[ ], int n)
Inicio
int i
Repetir Desde i=1 hasta i<=n
Si(eval_imc[i].imc<18.5)
eval_imc[i].eval="Infrapeso"
Fin_Si
Si (eval_imc[i].imc>=18.5 && eval_imc[i].imc<25)
eval_imc[i].eval="Normal"
Fin_Si

15
Si (eval_imc[i].imc>=25 && eval_imc[i].imc<30)
eval_imc[i].eval="Sobrepeso"
Fin_Si
Si(eval_imc[i].imc>=30)
eval_imc[i].eval="Obeso"
Fin_Si
Fin_Repetir_Desde
Fin

//Procedimiento Muestra
Procedimiento mostrar (Datos_IMC most_imc[ ], int n)
Inicio
int i
Mostrar("Resultados de la Encuesta")
Mostrar (" Nombre Cedula IMC Evaluacion")
Repetir Desde i=1 hasta i<=n
Mostrar(most _imc[i].nombre," ")
Mostrar(most _imc[i].cedula," ")
Mostrar(most _imc[i].imc," ")
Mostrar(most _imc[i].eval, " ")
Fin_Repetir_Desde
Fin

//Programa Principal
Inicio
Datos_IMC Encuesta[300]
entero i, opcion=1

Repetir Mientras (opcion>=1 && opcion<3)

opcion= menu() // Llamada Funcin Menu, retorna la opcin ya validada

En Caso de (opcion)

caso 1:
Llamar a: ingreso (Encuesta, 300)
Llamar a: evaluacion (Encuesta, 300)
caso 2:
Llamar a: mostrar (IMC[i])

case 3:
Mostrar (Fin del Programa)

Fin_En_Caso_De
Fin _Repetir_Mientras
Fin




16
C++
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <iomanip.h>
#define N 3

//Declaracin de Variables Globales
struct Datos_IMC
{
char nombre[25], eval[15];
float peso, estatura, imc;
int cedula;
};

//Procedimiento Validacin
void validacion (int *valor, int lim_inf, int lim_sup)
{
while (*valor<lim_inf || *valor>lim_sup)
{
cout<<"Opcion invalida, reintroducir";
cin>>*valor;
}
}

//Funcin Menu
int menu ()
{
int opc;
clrscr();
cout<<"Menu de Opciones: \n";
cout<<"1)Ingresar Datos de la Encuesta \n";
cout<<"2)Visualizar Datos \n";
cout<<"3)Salir del Programa \n";
cout<<"Escoja una Opcion: ";
cin>>opc;
validacion(&opc, 1, 3);
return (opc);
}
//Procedimiento Ingreso
void ingreso (Datos_IMC ing_imc[], int n)
{
int i;
for(i=0; i<n; i++)
{
cout<<"Ingrese el Nombre: (Recuerde colocar un punto al final)\n";
cin.getline(ing_imc[i].nombre, 20, '.');
cout<<"Ingrese la cedula: \n";
cin>>ing_imc[i].cedula;

17
cout<<"Ingrese el peso: \n";
cin>>ing_imc[i].peso;
cout<<"Ingrese la estatura: \n";
cin>>ing_imc[i].estatura;
ing_imc[i].imc=ing_imc[i].peso/pow(ing_imc[i].estatura,2);
}
}
//Procedimiento Evaluacin
void evaluacion (Datos_IMC eval_imc[], int n)
{
int i;
for(i=0; i<n; i++)
{
if(eval_imc[i].imc<18.5)
strcpy(eval_imc[i].eval,"Infrapeso");

else if (eval_imc[i].imc>=18.5 && eval_imc[i].imc<25)
strcpy(eval_imc[i].eval,"Normal");

else if (eval_imc[i].imc>=25 && eval_imc[i].imc<30)
strcpy(eval_imc[i].eval,"Sobrepeso");

else if(eval_imc[i].imc>=30)
strcpy(eval_imc[i].eval,"Obeso");
}
}
// Procedimiento Mostrar
void mostrar (Datos_IMC ing_imc[], int n)
{
int i;
cout<<" Resultados de la Encuesta \n";
cout<<"Nombre"<<setw(20)<<"Cedula"<<setw(10)<<"IMC"<<setw(15)<<"Evaluacion"<<endl;
for(i=0; i<n; i++)
{
cout<<ing_imc[i].nombre<<" ";
cout<<left<<ing_imc[i].cedula<<setw(15);
cout<<left<<setprecision(2)<<ing_imc[i].imc<<setw(15);
cout<<left<<ing_imc[i].eval<<endl;
}
}
/*********************PROGRAMA PRINCIPAL*******************************/
void main ()
{
Datos_IMC Encuesta[N];
int i, opcion=1;

while (opcion>=1 && opcion<3)
{
opcion= menu();

18

switch(opcion)
{
case 1:
clrscr();
ingreso (Encuesta, N);
evaluacion (Encuesta, N);
break;

case 2:
clrscr();
mostrar (Encuesta, N);
getch();
break;

case 3:
system ("PAUSE");
break;
}// Fin Switch

}// Fin While
}//Fin Main

Você também pode gostar