FUNCIONES Los Funciones en c++ permiten modularizar sus programas. Todas las variables declaradas en las definiciones de Funciones son variables locales es decir solo se conocen en la funcin que se definen. Casi todos las Funciones tienen una lista de parmetros que permiten comunicar informacin entre Funciones. Los parmetros de una funcin tambin son variables locales. La sintaxis para declarar un funcin es la siguiente:
tipo_de_valor_devuelto nombre_de_la_funcin ( lista_de_parmetros) { Declaraciones e instrucciones } Donde : tipo_de_valor_devuelto: Indica el tipo de valor que se devuelve a la funcin invocadora. Si una funcin no devuelve un valor, el tipo_de_valor_devuelto se declara como void. nombre_del_funcin : Es cualquier identificador vlido lista_de_parmetros : Es una lista separada por comas que contiene las declaraciones de las variables que se pasarn a la funcin. Si una funcin no recibe parmetros las lista_de_parmetros se deja vaca. El cuerpo de la funcin es el conjunto de declaraciones e instrucciones que constituyen la funcin. Cuando un programa encuentra una llamada a una funcin, se transfiere el control desde el punto de invocacin a la funcin invocada, se ejecuta la funcin y el control regresa a la funcin invocadora. Una funcin invocada puede devolver el control a la invocadora de tres maneras: Si la funcin no devuelve valor, el control se devuelve al llegar a la llave derecha que termina la funcin o ejecutando la sentencia return; Si la funcin devuelve un valor, la sentencia return expresin, devuelve el valor de expresin. Ejemplos: 1) Hacer un programa para calcular la suma de dos nmeros enteros. Use Funciones.
#include<iostream>
using namespace std;
int suma(int,int);
int main() { int a,b; cout<<"Ingrese 2 numeros : "; cin>>a>>b; cout<<"La suma es : "<<suma(a,b)<<endl; system("pause"); return 0; }
int suma(int x, int y) { return x+y; }
En la funcion int suma(int x, int y), se ve que el tipo_de_valor_devuelto es int, y tiene dos parmetros enteros x e y.
DOCENTE: Ing. Marcelino Torres Villanueva 2
2) Hacer un programa para que se muestre el mensaje C++ es fcil de aprender. #include<iostream>
using namespace std;
void mensaje();
int main() { mensaje(); system("pause"); return 0; } void mensaje() { cout<<"C++ es facil de Aprender"<<endl; }
En este caso la funcin no devuelve un valor, por eso el tipo_de_valor_devuelto es void. Lo que hace solamente la funcin es mostrar un mensaje.
Ejercicios 1) Hacer un programa para calcular el factorial de un numero entero n.
#include<iostream>
using namespace std;
float factorial(int);
int main() { int n; do{ cout<<"Ingrese numero : "; cin>>n; }while(n<=0); cout<<"El factorial es : "<<factorial(n)<<endl; system("pause"); return 0; }
int main() { int x,y; do{ cout<<"Ingrese 2 numeros : "; cin>>x>>y; }while(x<=0 || y<=0); cout<<"El M.C.D. es "<<mcd(x,y)<<endl; system("pause"); return 0; }
int mcd(int x, int y) { int d=2,p=1; while(d<=x && d<=y) { if(x % d == 0 && y % d ==0) { p=p*d; x=x/d; y=y/d; } else d++; } return p; }
3) Programa para reportar todos los divisores de un nmero entero N #include<iostream> using namespace std;
void reporteDivisores(int );
int main() { int num; do{ cout<<"Ingrese numero : "; cin>>num; }while(num<=0); reporteDivisores(num); system("cls"); return 0; }
DOCENTE: Ing. Marcelino Torres Villanueva 4
void reporteDivisores(int n) { int i; cout<<"Los divisores son : "<<endl; for(i=1;i<=n;i++) { if(n % i ==0) cout<<i<<" "; } cout<<endl; }
3) Programa para reportar los factores primos de un numero entero n #include<iostream> using namespace std; void factoresPrimos(int n); int main() { int num; do{ cout<<"Ingrese numero : "; cin>>num; }while(num<=0); factoresPrimos(num); system("pause"); return 0; } void factoresPrimos(int n) { int d=2; while(n>1) { if(n % d ==0) { cout<<d<<" "; n=n/d; } else d++; } }
4) Programa para ingresar un numero y se reporte si es primo
#include<iostream> using namespace std; bool esPrimo(int );
int main() { int num; do{ cout<<"Ingrese numero : "; cin>>num; }while(num<=0);
DOCENTE: Ing. Marcelino Torres Villanueva 5
if(esPrimo(num)) cout<<"El numero es primo"<<endl; else cout<<"El numero no es primo"<<endl; system("pause"); return 0; }
s = 1+ x + x 2 /2! + x 3 /3! + x 4 /4! + ... + x n /n!
#include<iostream> using namespace std;
float suma(float ,int);
int main() { float x; int n; cout<<"Valor de x : "; cin>>x; do{ cout<<"Valor de n : "; cin>>n; }while(n<=0); cout<<"La suma es : "<<suma(x,n)<<endl; system("pause"); }
float suma(float x, int n) { float s=1,f=1,p=1; int i; for(i=1;i<=n;i++) { f=f*i; p=p*x; s=s+p/f; } return s; }
DOCENTE: Ing. Marcelino Torres Villanueva 6
Tipos de Parmetros de las Funciones
1) Parmetros por Valor : Son aquellos a travs de los cuales se pasan valores a la funcin, es decir se hace una copia de la variable pasada como argumento. A estos parmetros se les conoce como parmetros de entrada. Ejemplo: #include<iostream> using namespace std; void calculo(float );
int main() { float x=3; calculo(x); cout<<" x = "<<x<<endl; system("pause"); return 0; }
void calculo(float x) { x=x+2; }
El resultado es : x=3 La variable x del programa principal al llamar a la funcin calculo hace una copia de su valor al parmetro de la funcin, luego la que se incrementa es la variable x de la funcin y no la variable x del programa principal.
2) Parmetros por referencia: Son aquellos a travs de los cuales se pasan referencias de las variables esto permite que las variables pasadas como argumento se puedan modificar. Para declarar un parmetro por referencia se utiliza el operador referencia &. Ejemplo:
#include<iostream> using namespace std; void calculo(float &x);
int main() { float x=3; calculo(x); cout<<" x = "<<x<<endl; system("pause"); return 0; }
void calculo(float &x) { x=x+2; } El resultado es: x=5
La variable x del programa principal al llamar a la funcin calculo pasa la referencia de la variable esto hace que la variable x se pueda modificar.
DOCENTE: Ing. Marcelino Torres Villanueva 7
Ejercicios
1) Programa para intercambiar el valor de 2 variables numricas
#include<iostream>
using namespace std;
void cambio(float &, float &);
int main() { float a,b; cout<<"Valor de a : "; cin>>a; cout<<"Valor de b : "; cin>>b; cambio(a,b); cout<<"Nuevo valor de a : "<<a<<endl; cout<<"Nuevo valor de b : "<<b<<endl; system("pause"); return 0; }
void ingreso(float &r, float &t) { do{ cout<<"Valor de r : "; cin>>r; }while(r<=0);
cout<<"Angulo en grados sexagesimales : "; cin>>t; } void calculo(float r, float t, float &x, float &y) { // convertimos el angulo de sexagesimales a radianes t=t*M_PI/180; x=r*cos(t); y=r*sin(t); }
void reporte(float x, float y) { cout<<"x = "<<x<<endl; cout<<"y = "<<y<<endl; } 3) Ingrese 2 puntos del plano cartesiano y reporte la ecuacin de la recta que los contiene.
void ingreso(float &x1, float &y1, float &x2, float &y2) { cout<<"Primer Punto"<<endl; cout<<"Valor de x : "; cin>>x1; cout<<"Valor de y : "; cin>>y1; cout<<"Segundo Punto"<<endl; cout<<"Valor de x : "; cin>>x2; cout<<"Valor de y : "; cin>>y2; }
void leeNro(char mensaje[],int &n) { do{ cout<<mensaje; cin>>n; }while(n<=0); } 5) Escribir un programa que permita leer dos numeros y reporte si son amigos. Se dice que dos nmeros son amigos si cada uno de ellos es igual a la suma de los divisores (menores que el nmero) del otro. Ejemplo: 220 y 284 son amigos. #include<iostream.h> using namespace std; void ingreso(char mensaje[],int &n); int sumaDivisores(int n); bool sonAmigos(int n1,int n2); int main() { int num1,num2; ingreso("Primer numero : ",num1); ingreso("Segundo numero : ",num2); if(sonAmigos(num1,num2)) cout<<"Son amigos "<<endl; else cout<<"No son amigos "<<endl; system("pause"); return 0; } void ingreso(char mensaje[],int &n) { do{ cout<<mensaje; cin>>n; }while(n<=0); } int sumaDivisores(int n) { int i,sd=0; for(i=1;i<=n/2;i++) { if(n%i==0) sd=sd+i; } return sd;