Guia Laboratorio #1

10
7/21/2019 Guia Laboratorio #1 http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 1/10 1/10  Algoritmos y Estructura de Datos Ing. Félix Huari Evangelista 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; }

description

c++

Transcript of Guia Laboratorio #1

Page 1: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 1/10

1/10

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

GUIA DE LABORATORIO Nº 1

FUNCIONES, SOBRECARGA, MACROS Y ELPREPROCESADOR

OBJETIVOS1. 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 funcionint fun(int a){a=50*a+10;return a;

}

// Programa principalint main(){ int x

cout<<"Ingrese un numero entero:"; //variable localcin>>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 funcionvoid fun(int *a){*a=50+(*a)*10;

}

Page 2: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 2/10

2/10

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

//Definicion de función principalint main(){ cout<<"Ingrese un numero entero:"; //variable localcin>>x;

cout<<"Valor en x "<<x<<endl;fun(&x); // llamada a funcioncout<<"Nuevo Valor de x "<<x<<endl;

}

Ejem 3.

#include <iostream>using namespace std;// Definicion de la funcionvoid fun(int &x){

x=50*x+10;}

int main(){int x;cout<<"Ingrese un numero entero:"; //variable localcin>>x; //variable localcout<<"Valor en x "<<x<<endl;fun(x); // llamada a funcioncout<<"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;

}

Page 3: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 3/10

3/10

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

//progrma principalint 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 intercambiocout<<"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 funcionesfloat media2(float n1,float n2){

return (n1+n2)/2;}

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

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

//Funcion principalint 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;

}

Page 4: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 4/10

4/10

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

PARTE II : SOBRECARGA DE FUNCIONES

Ejem 6.

#include <iostream>

using namespace std;// Hallando la media

// Definiendo las funcionesfloat 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 principalint 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 floatmed = media(x1,x2,x3);cout<<"media de "<<x1<<", "<<x2<<", "<<x3<<" es:"<<media<< endl;//media para tres doublesmed = media(y1,y2,y3);cout<<"media de "<<y1<<", "<<y2<<", "<<y3<<" es:"<<media<< endl;

}

Page 5: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 5/10

5/10

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

Ejem 7./* calculo del area de la base, area lateral de un cono utiliza funcionessobrecargadas */#include <iostream>const float M_PI = 3.1415926;

// devuelve el area de la basedouble AreaCono(double radio){

return M_PI*radio*radio;}

// devuelve el area lateraldouble 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

Page 6: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 6/10

6/10

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

#define SALUDO "Buenas tardes CodeBlock"#define PROGRAM int main()#define BEGIN {#define END }#define WRITE cout

#define READLN cin.get()#define WRITELN endl

PROGRAMBEGIN

WRITE<<SALUDO<<WRITELN;READLN;

END

Ejem 10.

 Ahora, se presenta una nueva versión del programa anterior. Obsérvese que ladefinición de las macros se guardan en un archivo de cabecera (header) y paraeste 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"

PROGRAMBEGIN

WRITE<<SALUDO<<WRITELN;READLN;

END

//Finalmente compile este programa para observer los resultados

Page 7: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 7/10

7/10

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

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 conextensión cpp, en este último debe incluir el archivo de librería digitos.h y luegoproceda a compilar. El archivo digitos.h no se compila */

 /* Programa que muestra los dígitos de un numero entero, calcula la suma y lomuestra 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);

FINCAMBIARLINEA;ESCRIBIR("La Suma es:");OUT(s);CAMBIARLINEA;

PAUSA;}

Page 8: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 8/10

8/10

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

 /* Editar un nuevo archivo y escribir las instrucciones líneas abajo y grabar con elnombre 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 aceptecomo parámetro dicho numero para luego evaluar la raíz cuadrada. Nodebe 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 porreferencia.

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 elproblema usando paso de parámetros por referencia.

4. Escribir tres funciones donde cada uno de ellos acepte como entrada unnúmero entero positivo para luego calcular el equivalente de dicho númeroen base 2, 8 y 16 respectivamente.

5. Los ángulos se miden en grados(°), minutos(') y los segundos("). Existen360 grados en un círculo, 60 minutos en un grado y 60 segundos en unminuto. Escribir una función que acepte como parámetros los 3 datos, porcada 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 unnumero entero positivo al azar de 2n cifras, luego elevarlo al cuadrado,después de este resultado, tomar las 2 n cifras centrales y repetirindefinidamente el proceso. Ejemplo Xo=4122, luego Xo

2=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 ncifras, luego se multiplica por un numero al azar de K cifras, dando lugar aun 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

Page 9: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 9/10

9/10

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

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 utilicemacro(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étricasde 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 talmanera que corra el programa para diferentes angulos que usted puedaingresar.

11. Escribir un programa que permita escribir la librería gases.h, de tal maneraque evalué las macros para las siguientes expresiones:

a) La constante a de de la ecuación de Van der Waals  que ayuda acorregir la presión esta dada por la siguiente expresión:

c

c

 P T  Ra

6427

  22

 

Donde el valor de R es la constante universal de los gases y su valor esigual a 0.082057, Tc, Pc  es la temperatura crítica y presión criticarespectivamente

b) Una de las ecuaciones de de las gases ideales esta dado por lasiguiente expresión:

 M 

 RT  P 

    ., donde M es el peso molecular del gas

c) El centroide para una superficie circular esta dado por

 

 )(

3

2  rSen x    

Finalmente implemente el programa principal que haga uso de la libreríacreada por usted.

12. Dado el siguiente programa (ver abajo), se pide implementar la libreríaproceso.h. El programa acepta una fecha para luego mostrar el mensajede fecha es correcta, o fecha es incorrecta y además año es bisiesto o añono es bisiesto. 

#include <iostream>#include "proceso.h"using namespace std;int main(){ int d,m,a;bool va;MENSAJE;LECTURA(d,m,a);

Page 10: Guia Laboratorio #1

7/21/2019 Guia Laboratorio #1

http://slidepdf.com/reader/full/guia-laboratorio-1-56d84e1c6d098 10/10

10/10

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

SI(MES(m))INICIO

va=VERIFICAYEAR(a);SI(TEST(va))OUTVERDAD;

CASOCONTRARIOOUTFALSO;SI(TEST(VERFECHA(d)))

CORRECTO;CASOCONTRARIO

INCORRECTO;FINCASOCONTRARIO

NOESFEBRERO;DETENER;}

13. Dado el siguiente programa, se pide implementar la sobrecarga defunciones para producir lasiguiente salida que se muestraa continuación.

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

// programa principalint 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);