Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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;
}
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;
}
//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;
}
//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;
}
Ejem 6.
#include <iostream>
using namespace std;
// Hallando la media
//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;
}
Ejem 7.
/* calculo del area de la base, area lateral de un cono utiliza funciones
sobrecargadas */
#include <iostream>
const float M_PI = 3.1415926;
int main()
{
double radio, gene;
cout<<"Ingrese el radio y la generatriz ";
cin>>radio>>gene;
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
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>
PROGRAM
BEGIN
WRITE<<SALUDO<<WRITELN;
READLN;
END
Ejem 11.
#include <iostream>
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;
}
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;
}
/* 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
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:
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
#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);
}