UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA INDUSTRIAL
GUIA DE LABORATORIO
DE ALGORITMOS Y
PROGRAMACIÓN
DOCENTE : Ing° Ezzard Omar Alvarez Díaz
Cu. 03 Setiembre 2009
GUIA DE LABORATORIO
FUNCIONES, SOBRECARGA, MACROS Y EL
PREPROCESADOR
OBJETIVOS
1. Conocer y distinguir entre los diferentes tipos de funciones en C++.
2. Conocer y utilizar el concepto de sobrecarga de funciones en sus programas.
3. Utilizar macros en sus programas.
4. Crear sus propias librerías
PARTE I: FUNCIONES
Ejem 1.
#include <iostream>
#include <stdlib.h>
using namespace std;
// declaracion de la funcion prototipo
int fun(int a); //declaracion de la funcion prototipo
int main() // programa principal
{
int x;
cout<<"Ingrese un numero entero:"; //variable local
cin>>x;
cout<<"El Valor de x es "<<x<<endl;
cout<<"El Nuevo Valor de x es "<<fun(x)<<endl;
cout<<"El Valor de x es "<<x<<endl;
system("PAUSE");
}
// definicion de la funcion
int fun(int a)
{
a=(30/a)+15;
return a;
}
Ejem 2.
#include <iostream>
#include <stdlib.h>
using namespace std;
// forma clásica de pasar argumentos puntero a las funciones
// declaración de la función prototipo
void fun(int *n); // *n es un puntero a un entero
int main()
{
int x;
cout<<"Ingrese un numero entero:"; //variable local
cin>>x;
cout<<"El Valor de x es "<<x<<endl;
fun(&x); // llamada a funcion
cout<<"El Nuevo Valor de x es "<<x<<end l;
system("PAUSE");
}
// definicion de la funcion
void fun(int *a)
{
*a=30/(*a)*15;
}
Ejem 3.
#include <iostream>
#include <stdlib.h>
using namespace std;
// declaracion de la funcion prototipo
void fun(int &x);
int main()
{
int x;
//funcion tipo void
cout<<"Ingrese un numero entero:"; //variable local
cin>>x; //variable local
cout<<"El Valor de x es "<<x<<endl;
fun(x); // llamada a funcion
cout<<"El Nuevo Valor de x es "<<x<<endl;
system("PAUSE");
}
// definicion de la funcion
void fun(int &x)
{
x=30/x+15;
}
Ejem 4.
// utilizando el algoritmo de intercambio (swap) con una función
#include <iostream>
#include <stdlib.h>
using namespace std;
void swap(int *a, int *b);
//progrma principal
int main()
{
int x,y;
cout<<"Ingrese dos numeros enteros "<<endl;
cin>>x>>y;
cout<<"El Valor inicial de x es "<<x<<endl;
cout<<"El Valor inicial de y es "<<y<<endl;
swap(&x,&y); //llamada a la funcion de intercambio
cout<<"EL Valor final de x es "<<x<<endl;
cout<<"El Valor final de y es "<<y<<endl;
system("PAUSE");
return 0;
}
void swap(int *a, int *b)
{ //realizando el intercambio
int aux=*a;
*a=*b;
*b=aux;
cout<<"\nEl Valor final de aux es "<<aux<<endl;
}
Ejem 5.
#include <iostream>
#include <stdlib.h>
using namespace std;
// Hallando la media de numeros decimales
// declaracion de funciones prototipo
float media2(float,float);
float media3(float, float, float);
int main()
{
float media,x1,x2,x3;
cout<<"Ingrese 3 numeros reales:";
cin>>x1>>x2>>x3;
media=media2(x1,x2);
cout<<"media de "<<x1<<" y "<<x2<<" es: "<<media<< endl;
media=media3(x1,x2,x3);
cout<<"media de "<<x1<<", "<<x2<<", "<<x3<<" es: "<<media<<endl;
system("PAUSE");
}
float media2(float n1,float n2)
{
return (n1+n2)/2;
}
float media3(float n1, float n2, float n3)
{
return (n1+n2+n3)/3;
}
PARTE II : SOBRECARGA DE FUNCIONES
Ejem 6.
#include <stdlib.h>
#include <iostream>
// Hallando la media
// declaracion de funciones prototipo
float media(float, float);
float media(float , float , float);
double media(double , double , double);
#include <iostream>
#include <stdlib.h>
using namespace std;
// Hallando la media
// declaracion de funciones prototip o
float media(float, float);
float media(float , float , float);
double media(double , double , double);
int main()
{
float med,x1,x2,x3;
double med_1, y1,y2,y3;
cout<<"Ingrese 3 numeros reales:";
cin>>x1>>x2>>x3;
med = media(x1,x2);
cout<<"La media de "<<x1<<" y "<<x2<<" es: "<<med<< endl;
//media para tres float
med = media(x1,x2,x3);
cout<<"La media de "<<x1<<" y "<<x2<<" es: "<<med<< endl;
cout<<"La media de "<<x1<<", " <<x2<<", "<<x3<<" es :"<<med<< endl;
//media para tres doubles
cout<<"Ingrese 3 numeros reales de doble precision:";
cin>>y1>>y2>>y3;
med_1 = media(y1,y2,y3);
cout<<"La media de "<<y1<<", "<<y2<<", "<<y3<<" es :"<<med_1<< endl;
system("PAUSE");
return 0;
}
float media(float n1,float n2)
{
return (n1+n2)/2;
}
float media(float n1, float n2, float n3)
{
return (n1+n2+n3)/3;
}
double media(double n1, double n2, double n3)
{
return (n1+n2+n3)/3;
}
Ejem 7.
//Programa que calcula del area de la base,
//area lateral de un cono
utiliza funciones sobrecargadas */
#include <iostream>
#include <stdlib.h>
using namespace std;
const float M_PI = 3.1415926;
// devuelve el area de la base
double AreaCono(double radio)
{
return M_PI*radio*radio;
}
// devuelve el area lateral
double AreaCono(double radio, double gene)
{
return M_PI*radio*gene;
}
int main()
{
double radio, gene;
cout<<"Ingrese el radio y la generatriz ";
cin>>radio>>gene;
cout<<"\nEl area de la base es: "<<AreaCono(radio)<<endl;
cout<<"\nEl area lateral es: "<<AreaCono(radio, gene)<<endl;
system("PAUSE");
return 0;
}
PARTE III: MACROS Y ARCHIVOS DE INCLUSION EN C/C++
Ejem 8.
#include <iostream>
using namespace std;
// uso de macros
#define SALUDO "BIENVENIDO AL CURSO \
DE ALGORITMOS Y PROGRAMACION CON C++"
int main()
{
cout<<SALUDO<<endl;
system("PAUSE");
RETURN 0;
}
Ejem 9.
#include <iostream>
using namespace std;
// uso de macros
#define SALUDO "Buenas Tardes Alumnos"
#define PROGRAM int main()
#define BEGIN {
#define END }
#define WRITE cout
#define READLN [Link]()
#define WRITELN endl
PROGRAM
BEGIN
WRITE<<SALUDO<<WRITELN;
READLN;
END
Ejem 10.
/*Ahora, se presenta una nueva versión del programa anterior. Obsérvese que la
definición de las macros se guardan en un archivo header; modales.h el cual es
llamado desde el archivo fuente [Link] */
//archivo modales.h
// definiendo mi propia libreria
#ifndef MODALES_H
#define MODALES_H
#define SALUDO "Es bueno saludar todos los dias"
#define PROGRAM int main()
#define BEGIN {
#define END }
#define WRITE cout
#define READLN [Link]()
#define WRITELN endl
#endif // fin de la libreria
#include <iostream>
#include "modales.h"
using namespace std;
PROGRAM
BEGIN
WRITE<<SALUDO<<WRITELN;
READLN;
END
Ejem 11.
#include <iostream>
#define MAXIMO(x,y) (x>y)?( x):(y)
using namespace std;
int main()
{
int a, b, max;
cout<<"Ingrese dos enteros diferentes: "<<endl;
cin>>a>>b;
max=MAXIMO(a,b);
cout<<"El maximo es: "<<max<<endl;
system ("PAUSE");
return 0;
}
PROBLEMAS PROPUESTOS
1. Dado un numero entero positivo, se pide elaborar una función que acepte como
parámetro dicho numero para luego evaluar la raíz cuadrada. No debe emplear la
función sqrt(). Resolver el problema usando paso por valor.
2. Plantear el mismo problema, pero esta vez usando paso de parámetros por
referencia.
3. Escribir una función que acepte como entrada u n numero entero positivo, para luego
determinar el digito mayor y el digito menor, para ello plante ar el problema usando
paso de parámetros por referencia.
4. Escribir tres funciones donde cada uno de ellos acepte como entrada un numero
entero positivo para luego calcular el equivalente de dicho numero en base 2, 8 y 16
respectivamente.
5. Los ángulos se miden en grados(°), minutos(') y los segundos("). Existen 360 grados
en un círculo, 60 minutos en un grado y 60 segundos en un minuto. Escribir una
función que acepte como parámetros los 3 datos, por cada medida, para luego
devolver la suma.
Ejemplo: 74° 29' 105" + 105° 8' 12" = 179° 37' 25".
6. Escribir una función que permita generar 20 números pseudo aleatorios basado en el
método de los cuadrados medios. Consiste en tomar un numero entero positivo al
azar de 2n cifras, luego elevarlo al cuadrado, después de este resultado, tomar las 2
n cifras centrales y repetir indefinidamente el proceso. Ejemplo Xo=4122, luego
Xo2=16990884, luego el nuevo número es 9908.
7. Otro método que consiste en generar un número pseudo aleatorio es el de Lehmer, la
misma consiste en lo siguiente. Se toma un numero al azar de n cifras, luego se
multiplica por un numero al azar de K cifras, dando lugar a un numero de n+k cifras
del cual se separan las k cifras de la izquierda, obteniéndose un numero de n cifras
del cual se resta el de K cifras que se había separado. Ejemplo: Si Xo=4122, K=76,
entonces 4122 x 76=313272, ahora bien 3272-31=3241, este seria el nuevo numero
generado.
8. Una macro puede llamar a otra macro. Escriba un programa que utilice macro(s) para
hallar el máximo y el mínimo de tres números.
9. Escriba un programa que utilice macros para hallar todas las funciones
trigonométricas de un ángulo. Recuerde que las funciones trigonométr icas de C/C++
trabajan con el ángulo en radianes.
10. Escriba una librería donde defina funciones trigonométricas (archivo TRIGO.H) y
luego escriba un programa que pruebe dicha librería.