Sie sind auf Seite 1von 27

Funciones en C++

(2)
Prof. Oscar Tinoco G.
Observaciones adicionales

Las funciones terminan su ejecucin ya


sea a travs de la ejecucin de la ltima
instruccin o utilizando la sentencia return.
Un funcin puede retornar valor slo
cuando el tipo de retorno no es void.
Las funciones que son de tipos distintos de
void pueden ser utilizadas como
operandos en otras expresiones del
lenguaje.
Ejercicio Propuesto

Escriba una funcin que dados los lmites de


un intervalo y un nmero real, diga si el
nmero pertenece al intervalo.

float Verifica (float x)


Funciones tipo void
#include <iostream>
using namespace std;
#include <cmath>
void muestraseno(float r);
main(){
double x;
for(int i=0; i<=45 ; i+=2){
x = i*3.14159265/180.0;
cout << "sen(";
muestraseno(i);
cout << ") = ";
llamadas a muestraseno(sin(x));
muestraseno cout << "\n";
}
return 0;
Despliega }
un nmero void muestraseno(float r)
real, en este {
caso r cout << r;
}
Ejercicio 1

Elaborar y aplicar una funcin denominada


buscar de modo tal que proporcionndole
un numero de dos o ms cifras y un dgito,
devuelva la posicin de dicho dgito en el
primer nmero ingresado.
Ejemplo:
Nmero: 52456
Dgito:3
Valor devuelto: 4 (Las posiciones e cuentan en
este caso de derecha a izquierda)
#include <iostream>
using namespace std;
int buscar(int x,int k){
int i;
if (k<=0 || x<0) return -1;
for (i=0;i<k-1;i++)
x=x/10;
return (x%10);
}
main(){
int n,k,digito;
cout<<"Ingrese numero y posicion:"<<endl;
cin>>n>>k;
digito=buscar(n,k);
if (digito<0)
cout<<"No encontrado\n";
else
cout<<"El digito encontrado es: \n"<<digito;
return 0;
Ejercicio 2

Elaborar y aplicar una funcin denominada


Ingresa que permita ingresar los
componentes de un Vector de nmeros
reales.

float Ingresa(float A[ ])
#include <iostream.h>
float Ingresa(float A[])
{
int i=0;
for(i=0;i<10;i++)
{
cin>>A[i];
}
}
main()
{
float Datos[10];
int i;
cout<<"Ingresar componentes\n";
Ingresa(Datos);
cout<<"\nMuestra "<<Datos[8]<<"\n";
system("pause");
}
Ejercicio 3

Elaborar y aplicar una funcin denominada


Promedio que calcule el promedio de los
componentes de un Vector de nmeros
reales.

float Promedio(float A[ ])
#include <iostream.h>
float Promedio(float A[ ])
{
int i=0;
float sum=0;
for(i=0;i<10;i++)
{
sum=sum+A[i];
}
return sum/10;
}
main()
{
float Datos[10];
int i;
for(i=0;i<10;i++)
{
cout<<"Ingresa nro:";
cin>>Datos[i];
}
cout<<"\n\n"<<Promedio(Datos);
system("pause");
#include <iostream.h>
float Promedio(float A[ ])
{
int i=0;
float sum=0;
for(i=0;i<10;i++)
{
sum=sum+A[i];
}
return sum/10;
}
main()
{
float Datos[10];
int i;
for(i=0;i<10;i++)
{
cout<<"Ingresa nro:";
cin>>Datos[i];
}
cout<<"\n\n"<<Promedio(Datos);
system("pause");
Funciones: Paso de argumentos
por valor y por referencia (1)

Paso de argumentos por valor:


Hasta ahora los ejemplos que hemos visto han utilizado
este mecanismo. La llamada por valor significa que una
copia del argumento se pasa al parmetro de la funcin.
Esto implica que todo lo que se realice en el cdigo de la
funcin no va a alterar el valor del argumento usado para
llamar a la funcin.
#include <iostream>
float AreaCirculo(float);
main()
{
float r=10.0;
float a;
a = AreaCirculo(r);
cout << "Area del circulo de radio " << r ;
cout << " es: " << a << endl;
return 0; En el ejemplo, al pasar como
} argumento la variable r, se hace
float AreaCirculo( float radio) una copia en la variable
{ radio, la cual es una variable local
radio = 3.14 * radio * radio; de la funcin AreaCirculo, por lo
return radio; tanto los cambios
} realizados sobre esta variable no
afectan a la del programa principal.
Funciones: Paso de argumentos
por valor y por referencia (2)
Paso de argumentos por REFERENCIA:
Es el mecanismo de pasar argumentos
mediante las direcciones en lugar de valores. Debe
utilizarse siempre y cuando la
funcin deba devolver argumentos modificados.

Un caso de particular inters es el paso de vectores, matrices


y cadenas de caracteres.
int funcion3 ( int& X, int Y, int Z )

Parmetro por valor


Parmetro por referencia

Importante
Un parmetro valor significa que el argumento (parmetro)
puede ser una variable, una constante o una expresin.

Un parmetro por referencia implica que el argumento


necesariamente es una variable. La forma de indicar un
parmetro por referencia es anexar el smbolo & al final del
tipo de la variable
#include <iostream>
using namespace std;
void muestra(int &x);
main(){
int a;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Valor ingresado: "<<a<<endl;
//aplica funcion muestra al valor a
muestra(a);
cout<<"Muestra valor de a luego de aplicar funcion muestra:\n";
cout << a;
return 0;

}
void muestra(int &x)
Qu ha ocurrido con la
{ variable a?.
x = 5;
}
Otro ejemplo
#include <iostream>
using namespace std;
int cuadradoPorValor (int);
void cuadradoPorReferencia (int&);
main () {
int x = 2, z = 4;
cout<<"x antes de la llamada a cuadrado por valor "<<x<<endl;

cuadradoPorValor(x);
cout<<"x DESPUES de la llamada a cuadrado por valor "<<x<<endl;
cout<<"\n z antes de llamada por referencia"<<z<<endl;
cuadradoPorReferencia(z);
cout<<"z DESPUES de llamada por referencia "<<z<<endl;
}
int cuadradoPorValor (int a)
{
return a *= a;
}
void cuadradoPorReferencia (int &cRef)
{
cRef *= cRef;
}
Ejercicio
Escribir un programa en C++ que al
recibir como datos N enteros, determine
cuntos de stos son pares y cuantos
impares
Defina y utilice la funcin parnon con
parmetros de valor y referencia
#include<iostream>
using namespace std;
void parnon (int NUM, int &par, int &impar);
main(){
int i, n, num, par=0, imp=0;
cout<<"Ingresa el nro de datos:"<<endl;
cin>>n;
for(i=1; i<=n;i++)
{
cout<<"Ingresa el nro: "<<i<<endl;
cin>>num;
parnon(num, par, imp);
}
cout<<"nro de pares: "<<par<<endl;
cout<<"nro de pares: "<<imp<<endl;
return 0 void parnon (int NUM, int &par, int &impar)
} {
if(NUM%2==0)
par++;
else
impar++;
}
Ecuacin cuadrtica con
funciones
void leer(double &a, double &b, double &c){
cout << Ingrese coeficientes a,b,c: ";
cin >> a >> b >> c; Por referencia
}
void calcularRaices(double a, double b, double c,double &x1,
double &x2, int &caso){
double d = b*b-4*a*c;
if(d>0){
x1 = (-b+sqrt(d))/2/a; x2 = (-b-sqrt(d))/2/a;
caso = 1;
}else if(d==0){
x1 = (-b+sqrt(d))/2/a; x2 = (-b-sqrt(d))/2/a;
caso = 2;
}else{
x1 = -b/2/a;
x2 = sqrt(-d)/2/a;
caso = 3;
}
}
Ecuacin cuadrtica con funciones
void imprime(double x1,double x2,int caso){
switch(caso){
case 1:cout <<"x1 = "<<x1<<" x2 = "<<x2<< endl;break;
case 2:cout <<"x1 = x2 =" << x1 << endl;break;
case 3:cout <<"re = "<<x1<<" im = "<<x2<< endl;break;
}
}
main()
{
double a,b,c,x1,x2;
int caso;
leer(a,b,c);
calcularRaices(a,b,c,x1,x2,caso);
imprime(x1,x2,caso);

return 0;
}
Ejercicio 4

Elaborar y aplicar una funcin denominada


Intercambio que que intercambie los valores
de dos variables enteras.
Utilizar parmetro por valor y parmetro por
referencia
#include <iostream>
using namespace std;
void intercambio(int a, int b) {
int aux;
aux= a;
a=b;
b=aux;
}
main() {
int a, b;
a=3;
b=7;
intercambio(a,b);
cout << "Final a es " << a <<", Final b es" << b <<"\n";

return 0;
}
#include <iostream>
int actividad( int temp )
using namespace std;
{
// Prototipo de funciones
cout<<"la actividad recomendada es ";
int darTemp ( int& );
if( temp > 85 )
int actividad( int );
cout<<"nadar."<<endl;
main()
else if ( temp > 70 )
{
cout<<"tenis."<<endl;
int temperatura;
else if (temp<32)
darTemp( temperatura );
cout<<"golf."<<endl;
actividad( temperatura );
else if ( temp > 0 )
getche();
cout<<"esquiar."<<endl;
}
else
// Definicion de funciones
cout<<"bailar."<<endl;
int darTemp( int& temp )
}
{
cout<<"introduzca la temperatura
exterior:"<<endl;
cin>>temp;
cout<<"la temperatura actual es "
<<temp<<endl;
}
Ejercicios

1. Escribir una funcin que reciba como parmetro un


nmero y devuelva como resultado un valor de tipo
lgico que indique si es par o impar
2. Escribir una funcin que reciba como parmetros las
dos coordenadas cartesianas de un punto del plano y
devuelva como resultado un nmero, del 1 al cuatro, que
indique el cuadrante al cual pertenece el punto (no
considerar los ejes coordenados)

Das könnte Ihnen auch gefallen