Beruflich Dokumente
Kultur Dokumente
GUIA DE LABORATORIO Nombre de la Practica: Creacin de Funciones en lenguaje C++ Lugar de Ejecucin: Laboratorio Tiempo Estimado: 2 horas y 45 minutos CURSO: Lenguaje de Programacin
I. OBJETIVOS Que el estudiante: Formule la utilidad de las funciones en los programas de C/C++ Disee y escriba sus propias funciones dentro de un programa de C/C++ Ejercite las diversas maneras de cmo realizar la llamada a una funcin desde otra funcin. Examine cmo utilizar los valores devueltos por la funcin desde otra funcin que realiza la llamada. Programe el paso de parmetros por Valor y por Referencia a una funcin. II. INTRODUCCION TEORICA
Qu es una Funcin?
Una funcin es un modulo / seccin de cdigo independiente y separado del cuerpo principal, que realiza una tarea especifica y que opcionalmente puede regresar un valor a la parte principal del programa u otra funcin o procedimiento que la llame. Una funcin tiene las siguientes caractersticas: 1. Tiene un nico nombre. Al utilizar ste nombre en otras partes del programa se pueden ejecutar los enunciados contenidos en la funcin. A esto se le conoce como llamar a la funcin. Una funcin puede ser llamada desde otra funcin. 2. Una funcin es independiente. Una funcin puede ejecutar sus tareas sin interferencia en de otras partes del programa. 3. la funcin ejecuta una tarea especfica. Una tarea es un trabajo discreto que su programa debe ejecutar como parte de su desempeo general, por ejemplo: mandar una lnea de texto a impresin, ordenar una lista hacer un clculo matemtico. 4. Cuando un programa llama a una funcin, el programa puede enviar hacia la funcin informacin en la forma de uno o ms argumentos. Los argumentos son datos que la funcin puede necesitar para realizar su trabajo. Cuando la funcin termina su trabajo, la ejecucin del programa regresa a la lnea siguiente a la llamada a la funcin. Las funciones pueden enviar informacin al programa en la forma de un valor devuelto. 5. Cuando un programa llama a una funcin, la ejecucin del cdigo salta a la posicin inicial definida por el nombre de la funcin. El programa ejecuta los enunciados contenidos en sta y posteriormente el programa que llam a la funcin contina en la lnea de cdigo siguiente. Una funcin bien diseada ejecuta una tarea especfica y fcil de entender. Es recomendable que ante una tarea complicada, dividirla en mltiples funciones y entonces llamarlas a su debido momento.
1 / 11
Gua :
6. Una funcin (opcionalmente) devuelve un valor al programa que la llam. Cuando un programa llama a una funcin se ejecutan los enunciados contenidos en sta, si su programa lo requiere, stos enunciados pueden devolver un valor al programa que llam a la funcin. Existen 2 tipos de funciones que se pueden utilizar dentro de un programa creado en C: a) Funcin incluida dentro de una librera (archivo extensin .h) de C b) Funcin personalizada, creada por el programador
Descripcion Calcula x elevado a la potencia de y. Los argumentos x e y son de tipo double. Calcula la raz cuadrada del valor no negativo de x Calcula las funciones trigonometricas (seno, coseno y tangente) de un ngulo x (medido en radianes). Calcula valor del arco seno y arco tangente de x. Ambas funciones retornan el arco seno en el intervalo [-PI/2, +PI/2] radianes. Calcula el valor principal del arco coseno de x. El valor de dominio para x es el intervalo [-1, +1]. La funcin acos retorna el arco coseno en el intervalo [0, PI] radianes. Calcula el valor del arco tangente de y/x, usando los signos de ambos argumentos para determinar el cuadrante del valor de retorno 2
double acos(double x)
double atan2( y, x)
Lenguaje de Programacin
Descripcion Calcula valor de la funcin e segn el valor de argumento x. La funcin opuesta es log, que calcula el logaritmo natural (o neperiano) de un numero x. Calcula el logaritmo de x en la base 10
x
Nota: Para obtener el logaritmo de un nmero en una base determinada x, distinta de e o 10, puede utilizar un artificio matemtico como el siguiente:
log x n =
DEFINICIN DE LA FUNCION La definicin de una funcin es en s la funcin misma. Est compuesta en su primera lnea de cdigo por el encabezado, el cual debe ser idntico al prototipo de la funcin, pero no se utiliza el punto y coma. Enseguida del encabezado se redacta el Cuerpo de la Funcin, encerrados entre llaves { }, el cual contiene el cdigo C para definir los pasos a ejecutar por la funcin. Si la funcin devuelve SOLAMENTE un valor, ste se debe especificar al final del cuerpo de la funcin. La sintaxis del Cuerpo de una funcin es la siguiente:
Tipodato | void Nombrefuncin(lista de parmetros formales) { Cuerpo de Instrucciones; return [dato | var | expresin]; }
En donde: a) Tipodato especifica el tipo de dato (Ej.: int, float, char y otros) que regresara la funcin cuando termine sus tareas. Si la funcin no regresa valor al finalizar, se debe usar la palabra clave void, que indica significa vaci. Lenguaje de Programacin 3
Gua :
b) La lista de parmetros formales es una lista de declaracin de variables separadas por comas (,) que almacenan los valores que recibe la funcin desde el lugar de llamada de la misma. Estas variables actan como locales dentro del cuerpo de la funcin. Si no necesita parmetros, se indica con void entre los ( ). MUY IMPORTANTE: Aunque no se ocupen parmetros, los parntesis son obligatorios. c) La instruccin return le indica a la funcin que finalice su ejecucin, y que debe regresar uno y solo un dato a la parte del programa que la llamo. Se puede regresar un valor (2, -7.453, r, etc.), una variable o una expresin algebraica, tal como lo muestran los ejemplos siguientes: a) return (23.56); b) return (area); c) return (x+15/2);
Dentro del cuerpo de la funcin puede haber una o varias instrucciones return, pero tenga en cuenta que cuando se alcanza uno de estos return(), la funcin finaliza su trabajo, ignorando el conjunto restante de lneas que falten. INVOCANDO A UNA FUNCION Una vez redactado el Prototipo y la Definicin de una funcin, se puede mandar a llamar desde un bloque de cdigo de su programa (de igual forma que las funciones incluidas en alguna librera de C). Cuando se llame a una funcin, lo har en una nueva lnea, teniendo en cuenta lo siguiente: + Si la funcin no devuelve un valor, basta con escribir el nombre de la funcin Ejemplo:
Saludar( );
+ Si la funcin devuelve un valor, debe escribir una sentencia de asignacin, en la cual, una variable reciba el valor devuelto por la funcin, ejemplo:
resultado = Nombrefuncion ();
+ A la derecha del nombre de la funcin invocada debe escribir una pareja de parntesis ( ). Si la funcin necesita de argumentos de entrada-salida, debe reemplazar cada argumento por un valor o variable que sea del mismo tipo de dato. Con toda la informacin reunida hasta este punto, esta en condicin de escribir un programa que demuestre el prototipo y definicin de una funcin. PARMETROS POR VALOR Y POR REFERENCIA En C++ el paso por valor significa que al compilar la funcin y el cdigo que llama a la funcin, sta recibe una copia de los valores de los parmetros que se le pasan como argumentos. Las variables reales no se pasan a la funcin, slo copias de su valor. Ejemplo:
#include <iostream.h> #include <conio.h>
Si pasara este parmetro por referencia, le debe agregar un & junto al parmetro valor, para indicar que enva una direccin de memoria (NO una copia del valor) de la variable enviada
void demo( int valor ) { valor=5; // le asigna un valor al parmetro recibido cout<<endl<<" >>> Dentro de funcin demo: valor="<<valor<<endl; } void main() {
Lenguaje de Programacin
Gua :
int n=10; cout<<"Antes de llamar a funcin demo: n="<<n<<endl; demo(n); //llama a la funcin y se le pasa variable (n) por valor cout<<"Despus de llamar a la funcin: n="<<n<<endl; getche(); }
Cuando una funcin debe modificar el valor de la variable pasada como parmetro y que esta modificacin retorne a la funcin llamadora, se debe pasar el parmetro por referencia. En este mtodo, el compilador no pasa una copia del valor del argumento; en su lugar, pasa una referencia, que indica a la funcin dnde existe la variable en memoria. La referencia que una funcin recibe es la direccin de la variable. Es decir, pasar un argumento por referencia es, simplemente, indicarle al compilador que pase la direccin del argumento. Al hacer los cambios en el programa del ejemplo anterior, la salida de este programa ser: Por qu...? 10 5 5
Una limitacin del mtodo de paso por referencia es que se pueden pasar slo variables a la funcin. No se pueden utilizar constantes ni expresiones en la lnea de llamada a la misma.
CONSEJO FINAL: Para crear un cdigo fuente en el cual defina y utilice funciones personalizadas, debe seguir estos 2 pasos: 1. Primero escriba la definicin (Cuerpo) de la funcin. 2. Una vez finalizado el cuerpo de la funcin, solo copie el encabezado de la misma para formar as el Prototipo, agregndole un punto y coma (;) al final del enunciado. Lenguaje de Programacin
Gua :
III. MATERIALES Y EQUIPO Para la realizacin de la gua de prctica se requerir lo siguiente: No. 1 2 3 Requerimiento Gua de Laboratorio Memoria US PC con DEV-C++ Cantidad 1 1 1
IV. PROCEDIMIENTO 1. Cree una carpeta denominada cu aplellido, en la cual guardara los diferentes cdigos fuentes solicitados a continuacin. 2. Redacte, analice y pruebe con varias combinaciones de entrada a cada uno de los cdigos fuentes siguientes: Ejemplo #1: Crear una funcion que solicite el nombre de un estudiante y sus 3 notas de periodo de la materia Filosofia 1. Finalmente, determine la nota promedio e indique si la aprob (con 6.0 o mas)
#include <iostream> using namespace std; #include <stdlib.h> // Prototipo de funcion NotaMateria void NotaMateria(void);
// Definiciones de funciones main(){ // Funcin principal main NotaMateria(); //invoca a funcion NotaMateria //invoca por 2da vez a funcion NotaMateria(); }//fin funcion main // Definicin de Funcin NotaMateria void NotaMateria(void){ char nomalum[20]; float n1,n2,n3,nf; //3 notas de periodo y nota final system("cls"); cout<<"Digite el nombre del estudiante: "; fflush(stdin); cin.getline(nomalum,20); cout<<"Ahora digite las 3 notas de periodo:\n"; cin>>n1>>n2>>n3; nf=n1*0.3+n2*0.35+n3*0.35; cout<<"\nESTUDIANTE "<<nomalum<< " OBTUVO UNA NOTA FINAL DE "<<nf<<endl; if(nf<6) cout<<"y reprobo el curso\n"; else cout<<"y reprobo el curso\n";
Lenguaje de Programacin
Gua :
system("pause"); }//fin funcion NotaMateria
Ejemplo #2: Crear 2 funciones que operen a 2 numeros enteros de la siguiente manera: Funcin resta( ): recibe 2 numeros en parmetros, para mostrar en pantalla a la diferencia entre ambos. Funcion producto ( ): recibe 2 numeros como parmetros, para retornar la multiplicacin de ambos
#include <iostream> using namespace std; #include <stdlib.h> // Prototipos de funciones resta y producto void resta(int valor1, int valor2); int producto(int valor1, int valor2); // Definiciones de funciones main(){ // Funcin principal main int numero1, numero2, resultado; cout<<"Introduzca dos numeros enteros:"<<endl; cin>>numero1>>numero2; // llamada a la funcin "resta" resta(numero1, numero2); // Al nmero1 se le resta el nmero2 resta(numero2, numero1); // Al nmero2 se le resta el nmero1 // llamada a la funcin "producto" resultado = producto(numero1, numero2); cout<<endl<<"La multiplicacion de "<<numero1<< " por "<<numero2<<" es:\t"<<resultado<<endl; system("pause"); }//fin funcion main // Definicin de Funcin resta void resta(int valor1, int valor2){ int sustrac; // variable local sustrac = valor1 - valor2; cout<<"\nLa resta de "<<valor1<<" - " <<valor2<<" es "<<sustrac; }//fin funcion resta // Definicin de Funcin producto int producto(int valor1, int valor2){ int local; // variable local local = valor1 * valor2; return(local); }//fin funcion producto
Ejemplo #3: Creacion de una funcin que retornar el mayor de 3 nmeros enteros recibidos en sus parmetros.
#include <iostream> using namespace std; #include <conio.h> //Prototipo de la funcion mayorde int mayorde(int a, int b, int c);
Lenguaje de Programacin
Gua :
//Definiciones de funciones main(){ int a,b,c; //variables locales de funcion main cout<<"Ingrese tres valores enteros (a,b y c):"<<endl; cin>>a>>b>>c; /*Llamada de la funcion mayorde, directamente en flujo salida de cout */ cout<<"El numero mayor es: "<<mayorde(a,b,c)<<endl; getch(); }//fin de main() //Definicion de la funcion mayorde int mayorde(int a, int b, int c){ if((a>b) && (a>c)){ return a; } if((b>a) && (b>c)){ return b; } if((c>a) && (c>b)){ return c; } if((a==b) && (b==c)){ cout<<"Los 3 numeros son iguales entre si"<<endl; return a; } } // fin funcion mayorde
Ejemplo #4 Crear una funcin que calcule el factorial de un numero recibido desde un parametro. Observar que palabra return puede usarse mas de una vez dentro de la definicin de una misma funcion
#include <iostream> using namespace std; #include <math.h> #include <conio.h> //Prototipo de la funcion factorial long factorial(int num); //cuerpo de funcion principal main() main(){ int num; cout<<"Numero a obtener su factorial:\t"; cin>>num; cout<<num<<"! = "<<factorial(num)<<endl; getch(); } //Definicion de la funcion factorial long factorial(int num){ long fact=1; if(num==0){ return (1); }else{ for(int i=1;i<=num;i++) fact *=i; //acumulador
Lenguaje de Programacin
Gua :
return(fact); }//fin if-else } // fin factorial
Ejemplo #5 Crear por medio de funciones la solucin al siguiente problema: Calcula el sueldo final (SF) a pagar a cada uno de los 8 empleados de empresa LA CONSTANCIA SA. Cada empleado tiene un Nivel (0, 1, 2, 3) y un Sueldo Base (SB). Para calcular el SF de un empleado se le aplican los siguientes descuentos y Bono al SB: 1. Se le aplican los descuentos de Ley: ISSS (3.1%) y Renta (9.3%). 2. Si el Nivel de empleado es 2 o 3, se le descuenta el 11.4% del SB en concepto de Seguro de Vida 3. Segn el Nivel del empleado se le calcula un Bono (por el esfuerzo hecho) sobre el SB as: Nivel 0: $7 Nivel 1: 6.4% del SB Nivel 2: 13.94% del SB Nivel 3: 21.04% del SB Al final se muestra los totales ($) en conceptos de: a) Descuentos del ISSS, b) Planilla a pagar a los empleados El programa en C debe tener una funcin para cada una de estas tareas diferentes: a) Ingreso del sueldo base y el Nivel de un empleado como parmetros. Luego calcula los 2 descuentos de ley y el seguro de vida (si se aplica), para devolver cada uno de estos resultados en el resto de los argumentos de la funcin. b) Recibe el sueldo base y el nivel del empleado como parmetros, para retornar el Bono. c) Mostrar en pantalla el valor de cada descuento, bono y el sueldo final de un empleado. Retornar el Sueldo final.
#include <iostream> using namespace std; #include <iomanip> #include <conio.h>
//prototipos de funciones void descuentos(float sb, int nivel, float &isss, float &renta, float &seguro); float calculobono(float sb, int nivel); float verempleado(float sb, int nivel, float isss, float renta, float seguro, float bono); // Definiciones de funciones main(){ // Funcin principal int te=0; //total empleados ingresados float sueldob; //sueldo base de un empleado int niv; //nivel de un empleado float disss, drenta,dseguro; //cada descuento retenido float sbono; float montoisss,planilla; cout<<"Aplicacion Contable de LA CONSTANCIA SA\n"; cout<<"ingrese el sueldo base de cada uno de sus 4 empleados.\n"; montoisss=0; planilla=0; for(te=1;te<=4;te++){ cout<<"\nEmpleado # "<<te<<endl; cout<<"\nSueldo base ?? $"; cin>>sueldob; cout<<"\nNivel (entre 0 a 4) ??"; cin>>niv;
Lenguaje de Programacin
Gua :
//invoca a funcion que calcula y retorna descuentos descuentos(sueldob,niv,disss,drenta,dseguro); montoisss+=disss; //invoca funcion que retorna valor del bono sbono=calculobono(sueldob,niv); planilla=planilla+verempleado(sueldob,niv,disss,drenta,dseguro,sbono); }//fin for te cout<<"\nMonto retenido en concepto de ISSS: $"<<montoisss; cout<<"\nPlanilla a pagar: $"<<planilla;
getch(); }//fin funcion main // Definicin de Funcin NotaMateria void descuentos(float sb, int nivel, float &isss, float &renta, float &seguro){ //calcula y retorna los descuentos de ley en parametros salida isss=0.031*sb; renta= 0.093*sb; seguro=0.0; switch(nivel){ case 2: case 3: seguro=0.114*sb; }//fin switch nivel }//fin funcion descuentos float calculobono(float sb, int nivel){ switch(nivel){ case 0: return(7); case 1: return(0.064*sb); case 2: return(0.1394*sb); case 3: return(0.2104*sb); } }//fin funcion calculobono float verempleado(float sb, int nivel, float isss, float renta, float seguro, float bono){ float sf; sf=sb-(isss+renta+seguro)+bono; cout<<"\nSueldo Base $"<<setw(8)<<sb; cout<<"\nDescuento de: ISSS $"<<setw(5)<<isss<<"\tRenta $"<<setw(5)<<renta<< "\tSeguro $"<<setw(5)<<seguro<<endl; cout<<"Bono $"<<setw(5)<<bono<<endl; cout<<"Sueldo liquido $"<<setw(8)<<sf<<endl; return(sf); }//fin funcion verempleado
PROBLEMAS A RESOLVER: o Crear una funcin que permita ordenar de manera ascendente a 4 valores decimales cualesquiera, recibidos como parmetros por referencia Muestre la tabla de potencias de un numero N.
La lectura del valor N y del control de ciclos se lleva a cabo en la funcin principal (main), el clculo de (N a la X) en una funcin denominada POTENCIA, y el despliegue del resultado en otra funcin diferente.
Lenguaje de Programacin
10
Gua :
V. DISCUSION DE RESULTADOS o Elabore una funcin que reciba en un parmetro un nmero entero y devuelva en otro parmetro si este nmero recibido es primo o no. Recuerde que un nmero primo es aquel que solamente se divide exactamente entre el mismo y la unidad. Algunos ejemplos de nmeros primos: 2, 7, 11, 19 Realizar un programa que solicite desde la funcin main() a las 3 calificaciones (discusin, preparcial y parcial respectivamente) de cada uno de los 10 estudiantes de la materia Electronica
Para completar el programa, defina una funcin diferente para realizar cada una de estas tareas: + Recibir por medio de parmetros a las 3 notas de solamente un alumno. Luego se calcula la nota promedio aplicando estos porcentajes (25%, 30% y 45%). Por ultimo, devuelva la nota calculada. + Recibir la nota promedio en un parmetro, para luego mostrar en pantalla este promedio y la confirmacin si aprob (si promedio es mayor que 6.0) o reprob la materia de Electronica.
VII. BIBLIOGRAFIA Deitel, Harvey M. y Deitel, Paul J. CMO PROGRAMAR EN C++. 1ra Edicin. Editorial Mc Graw Hill Pappas, Chris H. y Murray, William H. MANUAL DE REFERENCIA DE VISUAL C++ 6.0. 4ta Edicin Editorial Prentice Hall (PEARSON). Joyanes Aguilar, Lus. PROGRAMACIN EN C++ - ALGORITMOS, ESTRUCTURAS DE DATOS Y OBJETOS. Editorial McGraw Hill, Espaa, 2000.
Lenguaje de Programacin
11