Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Funciones_240707_204322

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 18

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA

“ANTONIO JOSÉ DE SUCRE”


VICERECTORADO PUERTO ORDAZ
DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA
SECCIÓN DE COMPUTACIÓN
ASIGNATURA: COMPUTACIÓN II

UNIDAD 2. PROGRAMACIÓN PROCEDIMENTAL.

Uno de los problemas habituales del programador ocurre cuando los programas
alcanzan un tamaño considerable en cuanto a líneas de códigos se trata. El problema se
puede volver tan complejo que fuera inabordable.

Para mitigar este problema apareció la Programación Procedimental. En ella el


programa se divide en módulos de tamaño manejable. Cada módulo realiza una función 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 Programación Procedimental implementa el paradigma divide y


vencerás, tan importante en la programación. El programa se descompone en módulos. Los
módulos se puede entender que son pequeños programas. Reciben datos y a partir de ellos
realizan un cálculo o una determinada tarea. Una vez el módulo 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 módulos se llaman Funciones. Anteriormente se ha usado algunas


funciones implementadas en las librerías del lenguaje C++ (cin, cout y pow por ejemplo). El
lenguaje C++ proporciona diversas funciones ya preparadas (se les llama funciones
estándar) para evitar que el programador tenga que codificar absolutamente todo el
funcionamiento del programa.

Las funciones son invocadas desde el código utilizando su nombre. Cuando desde el
código se invoca a una función, entonces el flujo del programa salta hasta el código de la
función invocada. Después de ejecutar el código de la función, el flujo del programa regresa
al código siguiente a la invocación.

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 más fácil la programación, proporcionando un medio de dividir un
proyecto grande en módulos más manejables.

Si se agrupan varias funciones en bibliotecas, otros programas pueden reutilizar las


funciones; por esta razón se puede ahorrar tiempo de desarrollo. Y dado que las bibliotecas
contienen rutinas presumiblemente comprobadas, se incrementa la fiabilidad del programa
completo.

1
Las funciones pueden existir de modo autónomo. Como ya se ha trabajado
anteriormente, se sabe que cada programa en C++ tiene al menos una función main(); sin
embargo, cada programa C++ consta de muchas funciones en lugar de una función main()
grande. La división del código en funciones hace que las mismas se puedan reutilizar en su
programa y en otros programas. Después de que escriba, pruebe y depure su función, ésta
se puede utilizar nuevamente una y otra vez. Para reutilizar una función dentro de su
programa, sólo se necesita llamar a la función.

1. FUNCIONES.

Al escribir un programa largo en C++, se busca dividirlo en varios módulos o


funciones, entonces, dicho programa en C++ se compondrá de varias funciones, cada una de
las cuales realiza una tarea principal. Cada función realiza una determinada tarea y cuando
se ejecuta la sentencia return o termina el código de la función, se retorna al punto en que
fue llamada desde la función principal (main()) o desde otra función.

1.1.Definición.

Una función es un conjunto de líneas de código que realizan algo en particular;


específicamente una función debe retornar un valor que haya calculado o que se defina en el
código.

1.2.Declaración y Estructura.

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

tipo_devuelto Nombre_Funcion (tipo nomb_parámetro1, …, tipo nomb_parámetroN)


Inicio
Declaración de Variables Locales //(Propias de la Función)

Conjunto de Instrucciones de la Función

Devolver (Expresión o Valor)
Fin
Código 1. Declaración de una Función en Pseudocódigo.

tipo_devuelto Nombre_Función (tipo nomb_parámetro1,..., tipo nomb_parámetroN)


{
Declaración de Datos;

Conjunto de Instrucciones de la Función;

return(Expresión o Valor);
}
Código 2. Declaración de una Función en C++.

2
 Prototipo.

Las declaraciones de funciones en C++ comienzan con el prototipo de éstas. El


prototipo de una función es sencillo, y está incluido al principio del código del programa para
notificar al compilador el tipo y número de argumentos que va a usar la función. Al prototipo
también se le es conocido como cabecera.
Listado de Parámetros Formales o Argumentos de la
¿De qué tipo es el valor que Función, se debe especificar el tipo de dato y el nombre
retorna la función? de la variable.

tipo_devuelto Nombre_Función ( tipo Nomb_Parámetro1, …, tipo Nomb_ParámetroN)

¿Cómo se llama la Función?

Figura 1. Prototipo de la Función.

 Cuerpo de la Función.

El cuerpo de la función se dispone, bien sea entre las palabras Inicio y Fin para
pseudocódigo o dentro de un conjunto de llaves { }, en C++. En esta sección se escribirán
las líneas de código, de los distintos tipos de instrucciones (declaración, entrada/salida,
asignación y cálculo y control) que darán vida a la función.

Diseñe una función que calcule una expresión de potencia ( ), donde la


Ejemplo 01.
base y el exponente se asuman números enteros positivos.
entero pot (entero base, entero exponente)
Inicio
Pseudocódigo

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

for (i= 1; i<= exponente; i++)


potencia= potencia*base;
return (potencia);
}

Es importante recalcar que dentro del cuerpo de la función se encontrará una


instrucción llamada “Devolver” (pseudocódigo) o “return” (C++), la cual, como su nombre lo

3
indica es la que retornará el valor calculado dentro de la función, cuando dicha función es
utilizada.

1.3.Llamada de una Función.

Una vez que hemos declarado la función, la idea es hacer uso de ésta. El proceso de
utilizar o emplear a la función que hemos creado se denomina llamar a la función.
Este proceso no es algo nuevo, de manera inconsciente desde que comenzamos a
programar en C++ hemos utilizado funciones propias de este lenguaje de programación, para
refrescar un poco la memoria, analicemos el código del Ejemplo 02.

Diseñe un programa que calcule el área de una circunferencia, cuyo radio


Ejemplo 02.
es introducido por el usuario.
Algoritmo Área de Circunferencia
Inicio
Pseudocódigo

entero Radio
real Area
Mostrar (“Ingrese el Radio de la Circunferencia”)
Leer(Radio)
Area = 3,1416*Radio^2
Mostrar (“El Área es: ”, Area)
Fin
#include <iostream.h>
#include <math.h> // Libreria que contiene la función pow
#define PI 3.1416
void main()
{
int Radio;
C++

float Area;
cout<<“Ingrese el Radio de la Circunferencia: ”;
cin>>Radio;
Area = PI * pow(Radio,2);
cout<<“El Área es: ”<<Area;
system(“PAUSE”);
}

La instrucción pow, no es más que una función que calcula la potencia de un número
elevado a un exponente. Su definición se encuentra en la librería math.h, es por eso que si
no agregamos dicha librería, el compilador no reconoce a la función, arrojando un resultado
como el de la figura 2.

Figura 2. Error del Depurador por no incluir la Librería Math.h y usar la función pow en el
código.

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

Diseñe un programa que utilice la función pot del Ejemplo 01, para calcular
Ejemplo 03.
el área de una circunferencia, cuyo radio es introducido por el usuario.
Algoritmo Área de Circunferencia
//Función pot
entero pot (entero base, entero exponente)
Inicio
entero i, potencia
potencia= 1
Repetir desde i= 1 hasta i<= exponente
potencia= potencia*base
Pseudocódigo

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

//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”);
}
5
Cuando se ejecuta el programa principal del Ejemplo 03, se llama a la función pot en
la instrucción donde se calcula el área de la circunferencia, cuando el computador interpreta
dicha instrucción se da cuenta que es una función y “salta” a la declaración de esa función,
allí ejecuta las instrucciones que pertenecen a ésta y cuando consigue una instrucción return,
sale de la función, retornando el valor que se indique en el punto donde fue llamada la
función en un principio. Para comprender un poco este proceso visualice la figura 3.

Figura 3. Ejecución de una Función.

1.4.Parámetros de una Función.

Para visualizar los parámetros de una función sea propia del usuario o pertenezca a
C++, el software de programación despliega una pestañita indicando los argumentos de la
función al escribir el paréntesis de apertura luego del nombre de la función. Lo anterior se
observa en la figura 4.

Figura 4.Ayuda del C++ Builder para visualizar los Parámetros de una Función.

Existen dos métodos para pasar variables (parámetros) al llamar funciones. Una
función puede utilizar paso de parámetros por valor o parámetros por referencia, así como
también puede no tener parámetros.

6
 Paso por Valor.

También llamado paso por copia, significa que cuando se compila la función y el
código que llama a la misma, ésta recibe una copia de los valores de los parámetros
actuales. La función receptora no puede modificar la variable de la función (parámetro
pasado). En la siguiente figura se muestra un ejemplo de un programa que utiliza una función
llamada funcion1 con paso por valor.

void main ()
{

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

6
6
7
6

Figura 5. Función con Paso de Parámetros por Valor.

 Paso por Referencia.

Trabajando las funciones como se ha hecho hasta ahora, se tiene una importante
limitación cuando de retornar valores al programa principal se trata, ya que la función
devolver o return está limitada a retornar un solo valor. El método de paso por referencia
permite solventar este inconveniente, ya que permite modificar directamente los valores que
están el programa principal.

El método de paso de parámetros por referencia también se conoce como paso por
dirección, en este caso los parámetros formales de la función (los que están en el prototipo),
se deben declarar incluyendo el símbolo & cómo primer carácter del identificador, y al usar la
función el parámetro actual (argumento que se pasa cuando se llama a la función) se sigue
pasando de la misma manera, es decir, con su correspondiente nombre. En la siguiente
unidad se estudiará más a fondo este tipo de paso, pero utilizando variables puntero.
Cuando se modifica el valor del parámetro formal de un parámetro por referencia (la
variable local), este valor queda almacenado en la misma dirección de memoria, por lo que al
retornar la función llamadora la dirección de la memoria donde se almacenó el parámetro
contendrá el valor modificado. Veamos el Ejemplo 04.

7
Diseñe un programa a través de una función o procedimiento calcule la
Ejemplo 04. superficie y el volumen de una esfera cuyo radio es introducido por el
usuario.
Pseudocódigo
Algoritmo Superficie y Volumen de Esfera
//Subrutina 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 función, su valor varía indirectamente.

8
2. PROCEDIMIENTOS.

En el código del ejemplo 04 se introdujo la definición de Procedimiento. Un


procedimiento no es más que una función cuyo tipo_retorno (ver figura 1) es un tipo vacío,
lo que es en C++ void.

Procedimiento Nombre_Procedimiento (tipo nomb_parámetro1, …, tipo nomb_parámetroN)


Inicio

Declaración de Variables Locales //(Propias de la Función)



Conjunto de Instrucciones de la Función

Fin
Código 3. Declaración de un Procedimiento en Pseudocódigo.

void Nombre_Procedimiento (tipo nomb_parámetro1,..., tipo nomb_parámetroN)


{
Declaración de Datos;

Conjunto de Instrucciones del Procedimiento;

}
Código 4. Declaración de un Procedimiento en C++.
Como los procedimientos no han de retornar valores a través de la instrucción
Devolver (pseudocódigo) 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, función y bloque. Normalmente la posición 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
función en el programa completo; tales variables se les llama variables globales. Para hacer
una variable global, declárela simplemente al principio de un programa, fuera de cualquier
función (inclusive la función 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 función
y cualquiera de ellas puede modificar su valor. La vida de estas variables va ligada a la del
programa, se crean cuando empieza la ejecución del programa y pueden ser utilizadas hasta
que se acabe el mismo.

9
3.2. Variables Locales.

Están declaradas dentro de la función, bien dentro del cuerpo o bien como parámetros
formales. El ámbito de la variable se reduce al de la función y fuera de esta no tienen
presencia, es decir, sólo puede ser utilizada por la función donde está declarada.

Por su parte, las variables locales pueden ser:

Variables Automáticas: Son eliminadas cuando se termina la ejecución de la función donde


han sido declaradas, es decir, su vida se limita al tiempo que está activa la función. Los
parámetros formales son variables automáticas

Variables Estáticas: A pesar de que sólo pueden ser utilizadas por la función donde han sido
declaradas, no son destruidas al terminar ésta. Por lo tanto, mantienen su valor para la
próxima vez en que sea llamada la función. Se declaran, precediendo el nombre del tipo por
la palabra "static".

4. UTILIZACIÓN DE ARREGLOS COMO PARÁMETROS.

En C++ todos los arreglos se pasan por referencia (dirección). C++ trata
automáticamente la llamada a la función como si hubiera situado el operador de dirección &
delante del nombre del arreglo.

La declaración de un parámetro 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 parámetro
que indique el tamaño del arreglo, como se verá en el siguiente ejemplo.

Diseñe un programa que lea dos arreglos de 10 elementos, que los sume
término a término y los deposite en otro arrelgo. Diseñe tres funciones, la
Ejemplo 05.
primera debe ingresar los datos, la segunda sumar dos arreglos y la
tercera debe mostrar.
Pseudocódigo
Algoritmo Parámetros tipo Arreglo

//Procedimiento para Leer arreglo de dimensión 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])

10
Fin_Repetir_Desde
Fin

//Procedimiento para Mostrar un arreglo de dimensión 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 dimensión 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[10], B[10], C[10]
Llamar a lectura (A, 10)
Llamar a lectura (B, 10)

Mostrar (“Arreglo A:”)


Llamar a muestra (A, 10)
Mostrar (“Arreglo B:”)
Llamar a muestra (B, 10)

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

Mostrar (“Arreglo C:”)


Llamar a muestra (C, 10)
Fin
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";

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

5. UTILIZACIÓN DE REGISTROS COMO PARÁMETROS.

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 método de dirección.

12
Diseñe un programa que permita guardar los datos de una encuesta
realizada a 300 personas, sobre su índice de masa corporal. A los
Ejemplo 06.
encuestados se les pidió su nombre, cédula, 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 fórmula: IMC =
Peso / Estatura2, y luego clasificar la evaluación según la tabla de Clasificación IMC (ver
abajo).

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

[3] Salir del Programa.

IMC [300]
Nombre Cedula Estatura Peso imc eval Clasificación IMC
1 Infrapeso <18,50
2 Normal 18,50 a 24,99
: Sobrepeso ≥ 25
300 Obeso ≥ 30,00

Utilice programación procedimental, e implemente las siguientes Funciones y


Procedimientos:

 Función Menú: Despliega el Menú y retorna la opción seleccionada.


 Procedimiento Validar: Asegura que la opción seleccionada este en el rango correcto.
 Procedimiento Cargar Datos: Carga los datos en la estructura.
 Procedimiento Evaluación: Carga los datos en el campo eval según la clasificación IMC.
 Procedimiento Mostrar: Muestra los datos cargados en la estructura.

Pseudocódigo.
Algoritmo Parámetros Tipo Registro
Registro Datos_IMC
caracter nombre[20], eval[15]
real peso, estatura, imc
entero cedula
Fin_Registro

//Procedimiento Validación
Procedimiento validacion (entero &valor, entero lim_inf, entero lim_sup)
Inicio
Repetir Mientras (valor<lim_inf || valor>lim_sup)
Mostrar ("Opcion invalida, reintroducir")
Leer (valor)
Fin_Repetir_Mientras
Fin

13
//Función 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 Evaluación
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
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
14
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 Función Menu, retorna la opción ya validada

En Caso de (opcion)

caso 1:
Llamar a: ingreso (Encuesta, 300)
Llamar a: evaluacion (Encuesta, 300)
caso 2:
Llamar a: mostrar (Encuesta, 300)

case 3:
Mostrar (“Fin del Programa…”)

Fin_En_Caso_De
Fin _Repetir_Mientras
Fin

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

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

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

//Función 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;
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);
}
16
}
//Procedimiento Evaluación
void evaluacion (Datos_IMC eval_im[ ], 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();

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

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

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

}// Fin While


}//Fin Main

18

También podría gustarte