Sunteți pe pagina 1din 13

1/13

GUIA DE LABORATORIO Nº 1
FUNCIONES, SOBRECARGA DE FUNCIONES, MACROS,
PREPROCESADOR y ARREGLOS UNIDIMENSIONALES
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.
5. Arreglos unidimensionales, operaciones aplicando con funciones.

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 Programación Ing. Félix Huari Evangelista


2/13

//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 Programación Ing. Félix Huari Evangelista


3/13

//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 Programación Ing. Félix Huari Evangelista


4/13

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 Programación Ing. Félix Huari Evangelista


5/13

Ejem 7.
/* cálculo del área 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;
}

Algoritmos y Programación Ing. Félix Huari Evangelista


6/13

Ejem 9.

#include <iostream>
using namespace std;
// uso de macros
#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

Algoritmos y Programación Ing. Félix Huari Evangelista


7/13

// 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


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

Algoritmos y Programación Ing. Félix Huari Evangelista


8/13

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

PARTE IV: ARREGLOS UNIDIMENSIONALES

Ejem 13.

#include <iostream>
#include <iomanip>
using namespace std;
const int N=10; // N es una constante tipo entera;
//
//Programa Principal
int main()
{ int i, A[N]={0}; //Inicializa el vector A con 0 todos sus elementos
cout<<"VECTOR INICIALIZADA CON CEROS\n";
for(i=0;i<N;i++)
cout<<"A["<<i<<"]="<<setw(3)<<A[i]<<endl;
/*setw, es usado para establecer el ancho del campo (separacion de los datos)
la misma está en la libreria iomanip.h */
cout<<"\nVECTOR INICIALIZADA CON EL VALOR DEL INDICE POR 3\n";
for(i=0;i<N;i++)
{ A[i]=i*3;
cout<<"A["<<i<<"]="<<setw(3)<<A[i]<<endl;
}
}

Algoritmos y Programación Ing. Félix Huari Evangelista


9/13

Ejm. 14

#include <iostream>
#include <iomanip>
const int N=50; // N es una constante tipo entera
//Definición de las funciones
void LlenarAlfa(char a[], int &n)
{ int i=0; char k;
for(k=’A’;k<=’Z’;k++;i++)
a[i]=k;
n=i;
}

void Print(char a[], int n)


{ int i=0;
cout<<"SALIDA DEL VECTOR A\n";
for(; i<n ;i++)
cout<<"A["<<i<<"]="<<setw(3)<<a[i];
cout<<endl;
}

//Programa Principal
int main()
{ int n;
char A[N]; //A es un vector que almacena los caracteres alfabéticos
LlenarAlfa(A,n);
Print(A, n);
}

Algoritmos y Programación Ing. Félix Huari Evangelista


10/13

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 Programación Ing. Félix Huari Evangelista


11/13

27R 2Tc2
a=
64Pc
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 Programación Ing. Félix Huari Evangelista


12/13

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

14. Escribir un programa que permita almacenar en un vector 20 números


reales y positivos, para luego escribir el vector, el segundo número mayor y
el segundo número menor.
15. Dada la función f(x)=x3.sen(x), se pide escribir un programa que permite
imprimir los 2 vectores generados, para ello el valor de x va de 0 a 2 con
incrementos de 0.1.
X F(X)
0 0
0.1

16. Elabore un programa que permita inicializar un vector de tamaño n con el


valor opuesto de su índice, por ejemplo el elemento 0 tendrá como valor n,
el elemento 1 el valor de n-1 y así sucesivamente. Escribir el vector
generado.

17. Escribir un programa que permite ingresar 2 números enteros mayor o igual
que 2 dígitos, para luego pasar los dígitos comunes a un vector, si en
ambos hay dígitos repetidos, solo debe considerar uno de ellos. Finalmente
imprimir el vector.

Algoritmos y Programación Ing. Félix Huari Evangelista


13/13

18. Suponga que a Ud. lo designan para participar como jurado calificador en el
concurso de belleza de N señoritas para el trono de Mis Perú, los
organizadores han establecido 5 criterios de evaluación que son los
siguientes:
Belleza, desenvolvimiento, traje de baño, traje de noche, medidas del

cuerpo. El puntaje varía de 1 a 10 como máximo. Simular los puntajes en

forma aleatoria para cada criterio y por cada participante, para luego escribir

• El resultado de las N candidatas con sus correspondientes puntuaciones


obtenidas para cada criterio.
• Determinar el número de la candidata ganadora.
• Si existe más de una ganadora, mostrar el mensaje adecuado.

19. En un salón de clase existen n alumnos, por cada estudiante se ingresan


los siguientes datos: código, y sus cinco notas donde estas están entre 0 y
20. Escribir un programa que permita imprimir el código, las cinco notas,
promedio y un mensaje (aprobado o desaprobado), para cada uno de los n
alumnos. Para el cálculo del promedio considerar las 4 mejores notas.
Además, mostrar un resumen de cantidad de aprobados, cantidad de
desaprobados, porcentaje de aprobados y desaprobados.

Algoritmos y Programación Ing. Félix Huari Evangelista

S-ar putea să vă placă și