Vous êtes sur la page 1sur 10

DOCENTE: Ing.

Marcelino Torres Villanueva 1



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;
}

float factorial(int n)
{
float f=1;
int i;
for(i=1;i<=n;i++)
f=f*i;
return f;
}






DOCENTE: Ing. Marcelino Torres Villanueva 3

2) Calcular el MCD de dos nmeros enteros.

#include<iostream>

using namespace std;

int mcd(int x, int y);

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;
}

bool esPrimo(int n)
{
int i,cd=0;
for(i=1;i<=n;i++)
{
if(n%i==0)
cd++;
}
if(cd==2) return true;
else return false;
}

5) Calcular el valor de la siguiente sumatoria:

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 cambio(float &x, float &y)
{
float t;
t=x;
x=y;
y=t;
}

2) Programa para ingresar el valor de un Punto en coordenadas Polares y reporte su equivalente
en coordenadas cartesianas.

#include<iostream>
#include<math.h>

using namespace std;

void ingreso(float &,float &);

void calculo(float,float,float &,float &);
void reporte(float,float);

int main()
{
float r,t,x,y;
ingreso(r,t);
calculo(r,t,x,y);
reporte(x,y);
system("pause");
return 0;
}


DOCENTE: Ing. Marcelino Torres Villanueva 8

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.

#include<iostream>
#include<math.h>
using namespace std;
void ingreso(float &,float &,float &, float &);
void calculo(float,float,float,float,float &,float &);
void reporte(float,float);

int main()
{
float x1,y1,x2,y2,m,b;
ingreso(x1,y1,x2,y2);
calculo(x1,y1,x2,y2,m,b);
reporte(m,b);
system("pause");
return 0;
}

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;
}

DOCENTE: Ing. Marcelino Torres Villanueva 9

void calculo(float x1, float y1, float x2, float y2,float &m,float &b)
{
m=(y2-y1)/(x2-x1);
b=y1-m*x1;
}

void reporte(float m, float b)
{
cout<<"y = "<<m<<"x";
if(b>0)
cout<<"+"<<b<<endl;
else
cout<<b<<endl;
}

4) Reportar los n primeros numerous primos
#include<iostream>
using namespace std;
void leeNro(char mensaje[],int &n);
bool esPrimo(int n);
void reportePrimos(int n);
int main()
{
int n;
leeNro("Valor de n : ",n);
reportePrimos(n);
system("pause");
return 0;
}
bool esPrimo(int n)
{
int i,cd=0;
for(i=1;i<=n;i++)
{
if(n % i==0)
cd++;
}
if(cd==2) return true;
else return false;

}
void reportePrimos(int n)
{
int c=0,num=0;
while(c<n)
{
num++;
if(esPrimo(num))
{
cout<<num<<" ";
c++;
}
}
cout<<endl;
}

DOCENTE: Ing. Marcelino Torres Villanueva 10

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;

}

bool sonAmigos(int n1,int n2)
{
int i,sd1,sd2;
sd1=sumaDivisores(n1);
sd2=sumaDivisores(n2);
if(n1==sd2 && n2==sd1) return true;
else return false;
}

Vous aimerez peut-être aussi