Sei sulla pagina 1di 11

1/11

GUIA DE LABORATORIO Nº 1
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>
Using namespace std;
// Definicion de la funcion
int fun(int a)
{ a=50*a+10;
return a;
}

// Programa principal
int main()
{ int x
cout<<"Ingrese un numero entero:"; //variable local
cin>>x;
cout<<"Valor en x "<<x<<endl;
cout<<"Nuevo Valor de x "<<fun(x)<<endl;
cout<<"Valor en x "<<x<<endl;
}

Ejem 2.

#include <iostream>
using namespace std;
// forma clasica de pasar argumentos puntero a las funciones
//Definicion de la funcion
void fun(int *a)
{ *a=50+(*a)*10;
}

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


2/11

//Definicion de función principal


int main()
{ cout<<"Ingrese un numero entero:"; //variable local
cin>>x;
cout<<"Valor en x "<<x<<endl;
fun(&x); // llamada a funcion
cout<<"Nuevo Valor de x "<<x<<endl;
}

Ejem 3.

#include <iostream>
using namespace std;
// Definicion de la funcion
void fun(int &x)
{
x=50*x+10;
}

int main()
{ int x;
cout<<"Ingrese un numero entero:"; //variable local
cin>>x; //variable local
cout<<"Valor en x "<<x<<endl;
fun(x); // llamada a funcion
cout<<"Nuevo Valor de x "<<x<<endl;
}

Ejem 4.
// utilizando el algoritmo swap con una funcion
#include <iostream>
using namespace std;
void swap(int *a, int *b)
{ //intercambiando
int temp=*a;
*a=*b;
*b=temp;
cout<<"\nValor final en temp = "<<temp<<endl;
}

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


3/11

//progrma principal
int main()
{
int x,y;
cout<<"Ingrese dos enteros "<<endl;
cin>>x>>y;
cout<<"Valor inicial en x = "<<x<<endl;
cout<<"Valor inicial en y = "<<y<<endl;
swap(&x,&y); //llamada a la funcion de intercambio
cout<<"Valor final en x = "<<x<<endl;
cout<<"Valor final en y = "<<y<<endl;
}

Ejem 5.

#include <iostream>
using namespace std;
// Hallando la media

//Definicion de funciones
float media2(float n1,float n2)
{
return (n1+n2)/2;
}

float media3(float n1, float n2, float n3)


{
return (n1+n2+n3)/3;
}

//Funcion principal
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;
}

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


4/11

PARTE II: SOBRECARGA DE FUNCIONES

Ejem 6.

#include <iostream>
using namespace std;
// Hallando la media

// Definiendo las funciones


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

//Funcion principal
int main()
{
float med,x1,x2,x3;
double y1,y2,y3;
cout<<"Ingrese 3 numeros reales:";
cin>>x1>>x2>>x3;
med = media(x1,x2);
cout<<"media de "<<x1<<" y "<<x2<<" es: "<<med<< endl;
//media para tres float
med = media(x1,x2,x3);
cout<<"media de "<<x1<<", "<<x2<<", "<<x3<<" es:"<<media<< endl;
//media para tres doubles
med = media(y1,y2,y3);
cout<<"media de "<<y1<<", "<<y2<<", "<<y3<<" es:"<<media<< endl;
}

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


5/11

Ejem 7.
/* calculo del area de la base, area lateral de un cono utiliza funciones
sobrecargadas */
#include <iostream>
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;
}

PARTE III: MACROS Y ARCHIVOS DE INCLUSION EN C/C++

Ejem 8.
#include <iostream>
using namespace std;
// uso de macros
#define SALUDO "BIENVENIDO A ALGORITMOS Y ESTRUCTURA DE DATOS"

int main()
{
cout<<SALUDO<<endl;
}

Ejem 9.

#include <iostream>
using namespace std;
// uso de macros

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


6/11

#define SALUDO "Buenas tardes CodeBlock"


#define PROGRAM int main()
#define BEGIN {
#define END }
#define WRITE cout
#define READLN cin.get()
#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 de cabecera (header) y para
este caso almacenar en un archivo llamado pascal.h

//archivo pascal.h
#include <iostream>

// Definiendo mi propia libreria


#ifndef PASCAL_H
#define PASCAL_H

#define SALUDO "Buenos dias Algoritmos y Estructura de Daqtos en C++"


#define PROGRAM int main()
#define BEGIN {
#define END }
#define WRITE cout
#define READLN cin.get()
#define WRITELN endl

#endif // fin de la libreria

// Luego digite el siguiente programa y guarde con un nombre cualquiera


#include "pascal.h"

PROGRAM
BEGIN
WRITE<<SALUDO<<WRITELN;
READLN;
END

//Finalmente compile este programa para observer los resultados

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


7/11

Ejem 11.
#include <iostream>
using namespace std;

#define MAXIMO(x,y) (x>y)?(x):(y)

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

Ejem 12.
/* En este programa debe editar 2 archivos, una con extensión h y la otra con
extensión cpp, en este último debe incluir el archivo de librería digitos.h y luego
proceda a compilar. El archivo digitos.h no se compila */
/* Programa que muestra los dígitos de un numero entero, calcula la suma y lo
muestra utilizando macros */

#include <iostream>
#include "digitos.h"
using namespace std;
int main()
{ int a,d,s=0;
ESCRIBIR("Ingrese un numero:");
LEER(a);
ESCRIBIR("Los Digitos son:");
MIENTRAS(a)
INICIO
DIGITO(a,d);
OUT(d);
ACUMULAR(s,d);
CAMBIAR(a);
FIN
CAMBIARLINEA;
ESCRIBIR("La Suma es:");
OUT(s);CAMBIARLINEA;
PAUSA;
}

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


8/11

/* Editar un nuevo archivo y escribir las instrucciones líneas abajo y grabar con el
nombre digitos.h */

#ifndef H_DIGITOS
#define H_DIGITOS
#define LEER(a) cin>>a
#define ESCRIBIR(s) cout<<s
#define MIENTRAS(a) while(a!=0)
#define DIGITO(a,d) d=a%10
#define ACUMULAR(s,d) s+=d
#define CAMBIAR(a) a=a/10
#define OUT(x) cout<<x<<" "
#define CAMBIARLINEA cout<<endl
#define INICIO {
#define FIN }
#define PAUSA system("pause")
#endif

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


9/11

PROBLEMAS PROPUESTOS

1. Dado un número 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 un número entero positivo,
para luego determinar el digito mayor y el digito menor, para ello plantear el
problema usando paso de parámetros por referencia.
4. Escribir tres funciones donde cada uno de ellos acepte como entrada un
número entero positivo para luego calcular el equivalente de dicho número
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 numero es 9908.
7. Otro método que consiste en generar un numero 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étricas
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, de tal
manera que corra el programa para diferentes angulos que usted pueda
ingresar.
11. Escribir un programa que permita escribir la librería gases.h, de tal manera
que evalué las macros para las siguientes expresiones:

a) La constante a de de la ecuación de Van der Waals que ayuda a


corregir la presión esta dada por la siguiente expresión:

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


10/11

27 R 2Tc2
a
64 Pc
Donde el valor de R es la constante universal de los gases y su valor es
igual a 0.082057, Tc, Pc es la temperatura crítica y presión critica
respectivamente

b) Una de las ecuaciones de de las gases ideales esta dado por la


siguiente expresión:
RT
P ., donde M es el peso molecular del gas
M
c) El centroide para una superficie circular esta dado por
2 rSen( )
x
3 
Finalmente implemente el programa principal que haga uso de la librería
creada por usted.

12. Dado el siguiente programa (ver abajo), se pide implementar la librería


proceso.h. El programa acepta una fecha para luego mostrar el mensaje
de fecha es correcta, o fecha es incorrecta y además año es bisiesto o año
no es bisiesto.
#include <iostream>
#include "proceso.h"
using namespace std;
int main()
{ int d,m,a;
bool va;
MENSAJE;
LECTURA(d,m,a);
SI(MES(m))
INICIO
va=VERIFICAYEAR(a);
SI(TEST(va))
OUTVERDAD;
CASOCONTRARIO
OUTFALSO;
SI(TEST(VERFECHA(d)))
CORRECTO;
CASOCONTRARIO
INCORRECTO;
FIN
CASOCONTRARIO
NOESFEBRERO;
DETENER;
}

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista


11/11

13. Dado el siguiente programa, se pide implementar la sobrecarga de


funciones para producir la
siguiente salida que se muestra
a continuación.

#include<iostream>
using namespace std;
//Definicion de las funciones

// programa principal
int main()
{ int n, f; char c;
cout<<"Ingrese un numero entero:";
cin>>n;
cout<<endl;
Proceso(n);
cout<<"Numero de filas:";cin>>f;
cout<<"Ingrese caracter:";cin>>c;
cout<<endl;
cout<<"Esta es la figura generada\n\n";
Proceso(f,c);
}

Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista

Potrebbero piacerti anche