Sunteți pe pagina 1din 12

Curso: Fundamentos de Algoritmos – Sesión 08

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 función que se definen.
Casi todos las Funciones tienen una lista de parámetros que permiten comunicar información entre
Funciones. Los parámetros de una función también son variables locales.
La sintaxis para declarar un función es la siguiente:

tipo_de_valor_devuelto nombre_de_la_función ( lista_de_parámetros)


{
Declaraciones e instrucciones
}
Donde :
tipo_de_valor_devuelto: Indica el tipo de valor que se devuelve a la función invocadora. Si una
función no devuelve un valor, el tipo_de_valor_devuelto se declara como void.
nombre_del_función : Es cualquier identificador válido
lista_de_parámetros : Es una lista separada por comas que contiene las declaraciones de las variables
que se pasarán a la función. Si una función no recibe parámetros las lista_de_parámetros se deja
vacía.
El cuerpo de la función es el conjunto de declaraciones e instrucciones que constituyen la función.
Cuando un programa encuentra una llamada a una función, se transfiere el control desde el punto de
invocación a la función invocada, se ejecuta la función y el control regresa a la función invocadora.
Una función invocada puede devolver el control a la invocadora de tres maneras:
Si la función no devuelve valor, el control se devuelve al llegar a la llave derecha que termina la
función o ejecutando la sentencia return;
Si la función devuelve un valor, la sentencia return expresión, devuelve el valor de expresión.
Ejemplos:
1) Hacer un programa para calcular la suma de dos números 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
parámetros enteros x e y.

DOCENTE: Ing. Marcelino Torres Villanueva 1


Curso: Fundamentos de Algoritmos – Sesión 08

2) Hacer un programa para que se muestre el mensaje “C++ es fácil 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 función no devuelve un valor, por eso el tipo_de_valor_devuelto es void. Lo que hace
solamente la función 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 2


Curso: Fundamentos de Algoritmos – Sesión 08

2) Calcular el MCD de dos números 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 número 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 3


Curso: Fundamentos de Algoritmos – Sesión 08

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 número 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 número 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 4


Curso: Fundamentos de Algoritmos – Sesión 08

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 + x2/2! + x3/3! + x4/4! + ... + xn/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 5


Curso: Fundamentos de Algoritmos – Sesión 08

Tipos de Parámetros de las Funciones

1) Parámetros por Valor : Son aquellos a través de los cuales se pasan valores a la función, es decir
se hace una copia de la variable pasada como argumento. A estos parámetros se les conoce como
parámetros 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 función calculo hace una copia de su valor al
parámetro de la función, luego la que se incrementa es la variable x de la función y no la variable x del
programa principal.

2) Parámetros por referencia: Son aquellos a través de los cuales se pasan referencias de las
variables esto permite que las variables pasadas como argumento se puedan modificar.
Para declarar un parámetro 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 función calculo pasa la referencia de la variable
esto hace que la variable x se pueda modificar.

DOCENTE: Ing. Marcelino Torres Villanueva 6


Curso: Fundamentos de Algoritmos – Sesión 08

Ejercicios

1) Programa para intercambiar el valor de 2 variables numéricas

#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 7


Curso: Fundamentos de Algoritmos – Sesión 08

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 ecuación 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 8


Curso: Fundamentos de Algoritmos – Sesión 08

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 9


Curso: Fundamentos de Algoritmos – Sesión 08

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 números son amigos si cada uno de ellos es igual a la suma de los divisores (menores
que el número) 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;
}

DOCENTE: Ing. Marcelino Torres Villanueva 10


Curso: Fundamentos de Algoritmos – Sesión 08

Ejercicios Propuestos
1) Calcular la altura que cae un objeto. Se debe ingresar el tiempo recorrido en segundos.
(H = 0.5 * G * T 2 . G = 9.8 m/seg2)
2) Calcular Monto generado por un capital depositado durante cierta cantidad de períodos a una
tasa de interés determinada y expresada en porcentaje.
Monto = Capital*(1 + tasa/100)NumeroPeríodos

3) Calcular el volumen de un cilindro dada el radio y la altura.


4) Ingrese un número que represente segundos y determinar a cuanto equivale en horas,
minutos y segundos.
Ejemplo: Si se ingresa 9500 segundos el programa debería reportar: 2 horas, 38 minutos y
20 segundos.
5) Calcule el valor de la función Fx, dada por
x3 + x/2, para x < 0
Fx =
4x2 – 2 , para x ≥ 0
6) En el curso de Algoritmos se rinden 4 exámenes de las cuales se elimina la menor nota. Hacer
un programa para ingresar las notas de los 4 exámenes y reportar la nota eliminada y el
promedio final del alumno
7) Ingresar 3 números y reportar el menor de ellos
8) Diseñe un programa que determine le categoría de un estudiante en base a su promedio
ponderado de acuerdo a la siguiente tabla:

PROMEDIO CATEGORIA
>=17 A
>=14 pero <17 B
>=12 pero <14 C
< 12 D

9) Ingresar el día y el mes de nacimiento y reportar su signo zodiacal.


10) Ingresar el día y el mes de una fecha y reportar la estación a la que pertenece: verano,
otoño, invierno o primavera
11) Ingresar 2 números y luego un carácter indicando la operación a realizar (+, -,*,/,^) y
reportar el resultado de la operación
12) Escribir un programa que lea 3 números enteros positivos a, b, n>0, calcule la sumatoria de :

1! 2! 3! 4! (n+1)!
- + - + .....
A A+B A + 2B A + 3B A + nB

13) Ingresar un numero entero y reportar si es perfecto o no. Un numero es perfecto cuando es
igual a la suma de divisores menores que el.
14) Ingresar 2 números y reportar su mínimo común múltiplo
15) Ingresar un quebrado (numerador y denominador) y reducirlo a su mínima expresión.
16) Ingresar un número y reportar el número de dígitos que tiene.
17) Ingresar un número y reportarlo al revés
18) Ingresar un número y reportar si es capicúa. Un número es capicúa cuando se lee igual de
izquierda a derecha y viceversa. Por ejemplo 2002 es capicúa
19) Ingresar un numero entero en base 10 y convertirlo en un numero de base b (entre 2 y 9)
20) Ingresar un numero entero en base b y convertirlo a base 10.
21) Convertir un numero de base n a otro de base m
22) Ingresar el numero de mes y el año y reporte el número de días que tiene ese mes.

23) Dado un numero entero positivo N, dibujar el siguiente triangulo:

DOCENTE: Ing. Marcelino Torres Villanueva 11


Curso: Fundamentos de Algoritmos – Sesión 08

Si N=5 saldrá
1
21
321
4321
54321

24) Dado un numero entero positivo N, dibujar el siguiente rectángulo:


Si N=4 saldrá

********
********
********
********
25) Dado un numero entero positivo N, dibujar en la pantalla el siguiente triangulo:
Si N=4
****
***
**
*

DOCENTE: Ing. Marcelino Torres Villanueva 12

S-ar putea să vă placă și