Guia Laboratorio #7

15
1/15 Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos GUIA DE LABORATORIO Nº 7 PROGRAMACION ORIENTADA AL OBJETO OBJETIVOS Al finalizar la presente practica, el estudiante será capaz de poder definir una clase con sus respectivos datos y funciones miembros, incluir constructores y destructores, para finalmente crear objetos y realizar la programación POO. Ejem 1. #include <iostream> using namespace std; //Declarando la clase class cuadrado { public: void inicio(float a) {lado=a;} double area() {return lado*lado;} double perimetro() {return 4*lado;} double semiperimetro(){return perimetro()/2.0;} private: float lado; }; void Leer(loat &n) { cout “Ingrese un numero:”; cin>>n; } //Programa principal int main() { cuadrado x; // x es objeto de la clase cuadrado flota a; Leer(a); x.inicio(a); cout << "Area : " << x.area() << endl; cout << "Perimetro : " << x.perimetro() << endl; cout << "Semiperimetro: "<<x.semiperimetro() << endl; } Ejem 2. #include <iostream> using namespace std; class cuadrado { private:

description

c++

Transcript of Guia Laboratorio #7

Page 1: Guia Laboratorio #7

1/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

GUIA DE LABORATORIO Nº 7

PROGRAMACION ORIENTADA AL OBJETO

OBJETIVOS Al finalizar la presente practica, el estudiante será capaz de poder definir una clase con sus respectivos datos y funciones miembros, incluir constructores y destructores, para finalmente crear objetos y realizar la programación POO. Ejem 1. #include <iostream> using namespace std; //Declarando la clase class cuadrado { public:

void inicio(float a) {lado=a;} double area() {return lado*lado;} double perimetro() {return 4*lado;} double semiperimetro(){return perimetro()/2.0;}

private: float lado;

};

void Leer(loat &n) { cout “Ingrese un numero:”; cin>>n; } //Programa principal int main() {

cuadrado x; // x es objeto de la clase cuadrado flota a; Leer(a); x.inicio(a); cout << "Area : " << x.area() << endl; cout << "Perimetro : " << x.perimetro() << endl; cout << "Semiperimetro: "<<x.semiperimetro() << endl;

} Ejem 2. #include <iostream> using namespace std; class cuadrado { private:

Page 2: Guia Laboratorio #7

2/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

float lado; // el dato miembrolado es privado public: cuadrado(float a) {lado = a;} // declarando y definiendo un constructor double area() {return lado*lado;} double perimetro() {return 4*lado;} double semiperimetro(){return perimetro()/2.0;}

}; // fin de la clase void Leer(float &n) { cout “Ingrese un numero:”; cin>>n; }

// Programa principal int main() { flota a;

Leer(a); /* Declarando un objeto x de la clase cuadrado y activando el constructor */ cuadrado x(a); cout << "Area : " << x.area() << endl; cout << "Perimetro : " << x.perimetro() << endl; cout << "Semiperimetro: "<<x.semiperimetro() << endl;

} Ejem 3. #include <iostream> using namespace std; class cuadrado { private:

float lado; public: cuadrado() {}; // constructor vacio cuadrado(float a) {lado = a;} // constructor double area() {return lado*lado;} double perimetro() {return 4*lado;} double semiperimetro(){return perimetro()/2.0;}

}; // Fin de la clase void Leer(int &n) { cout “Ingrese un numero:”; cin>>n; }

//Programa principal int main() { flota a;

Leer(a);

Page 3: Guia Laboratorio #7

3/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

cuadrado x; // activando constructor vacio x = cuadrado(a); // activando el segundo constructor cout << "Area : " << x.area() << endl; cout << "Perimetro : " << x.perimetro() << endl; cout << "Semiperimetro: "<<x.semiperimetro() << endl;

} Ejem 4. #include <iostream> using namespace std; // muestra el uso del operador de resolucion o ambito :: class cuadrado { private:

float lado; public : cuadrado(){} // constructor vacio cuadrado(float); // constructor con parametros double area(); double perimetro(); double semiperimetro(); ~cuadrado(); // destructor

};//Fin de la clase // usando el operador de resolucion o ambito :: // Definiendo el constructor cuadrado cuadrado :: cuadrado(float a) {

lado = a; } // definiendo el destructor cuadrado cuadrado :: ~cuadrado() {

cout<<"Objeto cuadrado destruyendose...!" <<endl; } //Definiendo la funcion miembro Area double cuadrado :: area() {

return lado*lado; } //Definiendo la funcion miembro Perímetro double cuadrado::perimetro() {

return 4*lado; }

Page 4: Guia Laboratorio #7

4/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

//Definiendo la funcion miembro semiperimetro double cuadrado :: semiperimetro() {

return perimetro()/2.0; } void Leer(float &n) { cout “Ingrese un numero:”; cin>>a; }

//Programa principal int main() { cuadrado x; // activando el constructor vacio float a;

Leer(a); x = cuadrado(a); //activando el constructor con parametros cout << "Area : " << x.area() << endl; cout << "Perimetro : " << x.perimetro() << endl; cout << "Semiperimetro: "<<x.semiperimetro() << endl;

} Ejem 5. #include <iostream> using namespace std; // Declarando una clase class TipoRecta { private: float x1,x2,y1,y2,m1,m2; public: void Lectura(); void Pendiente(int); void VerEcuacion(); int VerificaTipoRecta(); };

//Definicion de las funciones miembro de la clase void TipoRecta::Lectura() { cout<<"Coordenada de eje x1:";cin>>x1; cout<<"Coordenada de eje y1:";cin>>y1; cout<<"Coordenada de eje x2:";cin>>x2; cout<<"Coordenada de eje y2:";cin>>y2; } void TipoRecta::Pendiente(int i) {

Page 5: Guia Laboratorio #7

5/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

if(i==0) m1=(y2-y1)/(x2-x1); else m2=(y2-y1)/(x2-x1); } void TipoRecta::VerEcuacion() { cout<<"\nLa Recta es:(Y-"<<y1<<")="<<m1<<"(X-"<<x1<<")"<<endl; } int TipoRecta::VerificaTipoRecta() { if(m1==m2) return 0; else if(m1*m2==-1) return 1; else return 2; }

//Programa principal int main() { TipoRecta P; int k; cout<<"DATOS PARA LA RECTA L1\n"; P.Lectura(); P.Pendiente(0); P.VerEcuacion(); cout<<"DATOS PARA LA RECTA L2\n"; P.Lectura(); P.Pendiente(1); P.VerEcuacion(); k=P.VerificaTipoRecta(); if(k==0) cout<<"L1 y L2 son paralelas\n"; else if(k==1) cout<<"L1 y L2 son perpendiculares\n"; else cout<<"L1 y L2 no son paralelas ni perpendiculares\n"; } Ejem 6 #include <iostream> using namespace std; //Muestra el uso de las funciones set y get //Declarando la clase

Page 6: Guia Laboratorio #7

6/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

class punto { private:

int x; int y; public : void setX(int); //establecer coordenada X void setY(int); //establecer coordenada Y int getX(); // devolver coordenada X int getY(); // devolver coordenada Y

};// Fin de la clase //Definiendo las funciones miembros //Definiendo la funcion miembro setX void punto :: setX(int a) {

x = a; } //Definiendo la funcion miembro setY void punto :: setY(int b) {

y = b; } //Definiendo la funcion miembro getX int punto::getX() {

return x; } //Definiendo la funcion miembro getY int punto::getY() {

return y; }

void Lectura(int &x, int &y) { cout<<”Ingrese las cordenada de un punto (a,b):”; cin>>x>>y; } //Progrma principal int main() {

punto p; // creando el objeto punto int a,b;

Lectura(a,b) p.setX(a); p.setY(b); cout<<"La coordenada es P(“<<p.getX()<<”,”<<p.getY()<<”)”<< endl;

}

Page 7: Guia Laboratorio #7

7/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

Ejem 7 #include <iostream> #include <iomanip.h> using namespace std; #define LINEA "-----------------" //Declarando la clase class complex { private:

float real; float imag; public : complex() {} // constructor vacio complex(float a,float b); // constructor con parametros void print(); //Funcion miembro suma es amiga friend complex suma(complex x,complex y);

};// Fin de la clase //Definiendo las funciones miembro de la clase //Definiendo el constructor complex :: complex(float a,float b) {

real=a; imag=b;

} //Definendo la funcion miembro print void complex :: print() {

cout<<setprecision(2)<<setw(5)<<real<<" + "<<setprecision(2)<<setw(5)<<imag<<"i"<<endl;

}

//definicion de la funcion amiga complex suma(complex x,complex y) {

complex z; z.real=x.real+y.real; z.imag=x.imag+y.imag; return z;

} void Lectura(float &x, float &y, float &z, float &w) { cout<<”Coordenadas del primer punto A (a,b):”;cin>>x>>y; cout<<”Coordenadas del segundo punto B (a,b):”;cin>>z>>w;

}

Page 8: Guia Laboratorio #7

8/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

//Programa principal int main() { float a,b,c,d;

Lectura(a,b,c,d); complex A(a,b), B(c,d); complex C; A.print(); cout<<"\t\t+" <<endl; B.print(); C=suma(A,B); cout<<LINEA<< endl; C.print();cout<<endl;

} Ejem 8. #include <iostream> using namespace std; #define BIRTH “Feliz Cumpleaños…..” // un ejemplo sencillo de una clase class Dia { public:

void CapturaDatos(); void print(); int GetDia(); int GetMes();

private: int mes; int dia;

};// Fin de la clase void Dia :: print() // Definicion de la funcion miembro print {

cout<<" mes = "<<mes<<" dia = "<<dia<<endl; } int Dia::GetDia() { return dia; } int Dia::GetMes() { return mes; }

void Dia::CapturaDatos() { cout<<"Ingrese el dia de hoy "; cin>>dia; cout<<"Ingrese el dia de mes "; cin>>mes; }

Page 9: Guia Laboratorio #7

9/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

//Programa principal int main() { Dia hoy, happy; // objetos de la clase Dia

cout<<"Ingrese el dia y mes actual:"; hoy.CapturaDatos();

cout<<"Ingrese el dia y mes de su cumpleaños "; happy.CapturaDatos();

cout<<"El dia de hoy es: ";hoy.print(); cout<<"El dia de su cumpleaños es: "; happy.print(); if (hoy.GetDia() == happy.GetDia() && hoy.GetMes() == happy.GetMes())

cout<<BIRTH<<endl; else

cout<<"Que tengas un lindo dia.....\n"<<endl; }

Ejem 9. /*Uno de los canones de la POO es el ocultamiento de la información. El siguiente ejemplo consta de dos archivos: el primero un archivo header TIME1.H donde se declara la clase TIME para objetos que guarden hora, minuto, segundo y un archivo fuente TIME1.CPP donde se encuentra las definiciones de las funciones miembro de la clase TIME y la función main para probar la clase.*/ // Archivo time1.h #ifndef TIME1_H #define TIME1_H // Declaracion de la clase time class Time { int hora; // 0 - 23

int minuto; // 0 – 59 int segundo; // 0 – 59 public: Time(); // constructor void setTime(int, int , int); // establecer hora, minuto, segundo void printUniversal(); // imprime la hora en formato universal void printStandard(); // imprime la hora en formato estandar

};//Fin de la clase #endif // Archivo time1. #include <iostream> #include "time1.h" /* El constructor Time inicializa a cero los datos miembro, asegura que todos los objetos de Time inicien en un estado consistente */ //Definiendo las funciones miembro de la clase //Definiendo el constructor Time :: Time() { hora=0;

Page 10: Guia Laboratorio #7

10/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

minuto=0; segundo=0;

} /* Establecer un nuevo valor de hora para Time en formato universal. Realiza pruebas de validez sobre los datos. Establece a cero los valores no validos */

void Time :: setTime(int h,int m, int s) //Definiendo la funcion miembro setTime {

hora = ( h >= 0 && h < 24 )? h :0; minuto = ( m >= 0 && m < 60 )? m :0; segundo = ( s >= 0 && h < 60 )? s :0;

} // Definiendo la funcion miembro printUniversal void Time :: printUniversal() { cout<<(hora < 10 ? "0" : "")<<hora<<":"<<(minuto < 10 ? "0" : "")<<minuto

<<":"<<(segundo<10 ? "0":"")<<segundo; } //Definiendo la funcion miembro printStandard void Time :: printStandard() { cout<<((hora == 0 || hora == 12) ? 12 : hora % 12)

<<":"<<(minuto < 10 ? "0" : "")<<minuto<<":"<<(segundo < 10 ? "0" : "") <<segundo<<(hora < 12 ? " AM":" PM");

}

//Programa principal int main() { int mh,mm,ms;

Time t; // crea el objeto t de la clase Time cout<<"La hora universal inicial es: "; t.printUniversal(); cout<<"\nLa hora estandar inicial es: "; t.printStandard(); // utilizando setTime() cout<<"\nIngrese la hora (hh,mm,ss) ";cin>>mh>>mm>>ms; t.setTime(mh,mm,ms); cout<<"\n\nLa hora universal despues de setTime es: "; t.printUniversal(); cout<<"\nLa hora estandar despues de setTime es: "; t.printStandard(); // intentando valores no validos para el objeto t t.setTime(100,100,100); cout<<"\n\nDespues de intentar ingresar valores no validos:\n" <<"Hora universal: "; t.printUniversal(); cout<<"\nHora estandar: "; t.printStandard(); cout<<endl<<endl;

}

Page 11: Guia Laboratorio #7

11/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

FUNCIONES AMIGAS Ejem 10. //Programa que calcula el producto de 2 números enteros basado en el algoritmo ruso #include<iostream> using namespace std; //Definicion de las clase class Producto { private: int n,m,pr; public: Producto(); ~Producto(); void VerDatos(); void SetNumero(int x); int GetNumero(); friend void LeerNumero(Producto &q); friend void Calcula(Producto &p); }; //Implementacion de las funciones Miembro Producto::Producto() {n=0;m=0;pr=0; } Producto::~Producto() { } void Producto::VerDatos() { cout<<"n="<<n<<endl;cout<<"m="<<m<<endl; cout<<"Producto Ruso = "<<pr<<endl; } void Producto::SetNumero(int x) { n=x; } int Producto::GetNumero() { return n; } //Funciones amigas void LeerNumero(Producto &q) {do{ cout<<"Ing. Primer numero:";cin>>q.n; cout<<"Ing. Segundo numero:";cin>>q.m; }while((q.n<=0) || (q.m<=0)); } void Calcula(Producto &p) { int x,y; x=p.n;y=p.m;p.pr=0; while(x>0) { if(x%2!=0) p.pr+=y;

Page 12: Guia Laboratorio #7

12/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

x/=2; y*=2; } } //Funcion principal int main() { Producto A; int a; LeerNumero(A); Calcula(A); A.VerDatos(); cout<<endl<<"Nuevo valor para el primer numero:";cin>>a; A.SetNumero(a); cout<<"n="<<A.GetNumero()<<endl; Calcula(A); A.VerDatos(); } Ejem 11. #include<iostream> #include<stdlib.h> using namespace std; //Declaracion de la clase RadioMp3 class RadioMp3 { private: int frecuencia; int volumen; public: RadioMp3(); ~RadioMp3(); friend void AumentarFrecuencia(RadioMp3 &); friend void DisminuirFrecuencia(RadioMp3 &); friend void SubirVolumen(RadioMp3 &); friend void BajarVolumen(RadioMp3 &); void SintonizarFrecuenciaCambiaVolumen(char &, char &); void VerFrecuenciaVolumen(); }; //Implementando las funciones miembro RadioMp3::RadioMp3() { frecuencia=99.99; volumen=45; } RadioMp3::~RadioMp3() { } void RadioMp3::VerFrecuenciaVolumen() { cout<<"Frecuencia es = "<<frecuencia<<endl;

Page 13: Guia Laboratorio #7

13/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

cout<<"Volumen actual es = "<<volumen<<endl; } void RadioMp3::SintonizarFrecuenciaCambiaVolumen(char &p, char &q) { cout<<endl<<"Sintonizar la Radio"<<endl<<endl; cout<<"Cambiar frecuencia(+)/(-):";cin>>p; cout<<"Cambiar volumen(+)/(-):";cin>>q; } //Funciones amigas void AumentarFrecuencia(RadioMp3 &x) { x.frecuencia+=0.01; } void DisminuirFrecuencia(RadioMp3 &x) { x.frecuencia-=0.01; } void SubirVolumen(RadioMp3 &x) { x.volumen++; } void BajarVolumen(RadioMp3 &x) {x.volumen--; } //Funcion principal int main() { RadioMp3 Q; bool t=true; char p,q,op; Q.VerFrecuenciaVolumen(); while(t) { Q.SintonizarFrecuenciaCambiaVolumen(p,q); if(p=='+') AumentarFrecuencia(Q); else DisminuirFrecuencia(Q); if(q=='+') SubirVolumen(Q); else BajarVolumen(Q); Q.VerFrecuenciaVolumen(); cout<<endl<<"Continuar (s/n):"; cin>>op; system("cls"); t=op=='s' ? true:false; } }

Page 14: Guia Laboratorio #7

14/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

PROBLEMAS PROPUESTOS

1. Escribir un programa que permita implementar la clase llamada Number, de tal manera que se pueda escribir un numero en letras y luego en numeración romana.

2. Escribir un programa que permita realizar la operaciones básicas con 2

matrices que almacenan números enteros. Las operaciones a consignar son la suma, resta , transpuesta. Para ello debemos ingresar el orden de la matriz.

3. Una empresa tiene una fuerza de ventas de N vendedores, y por cada

vendedor se ingresan los siguientes datos codigo, apellidos, nombres, las ventas diarias hechas (5 dias), se pide implementar un programa usando una clase para realizar lo siguiente:

Escribir los datos de los N vendedores incluido las ventas totales semanal.

Escribir los datos de los N vendedores incluido las ventas totales diarias

Escribir los datos ordenados alfabéticamente

Escribir los datos ordenados por las ventas totales semanales.

Number

Numero

Letras[80]

EnRom[80]

VerNumeroLetras()

VerNumeroRomano()

GeneraNumeroLetras()

GeneraNumeroRomano()

Matrices

n,m A[N][M], B[N][M],C[N][M]

Suma()

Resta()

Transpuesta()

VerMatriz()

Page 15: Guia Laboratorio #7

15/15

Prof.:Ing. Felix Huari E. Algoritmos y Estructura de Datos

4. Implementar una clase llamada TipoNumero, de tal manera que pueda

verificar si es un número es primo, es un número perfecto, capicúa. Diseñe la clase e incluya los datos y funciones miembro necesarios para posteriormente escribir el programa.

5. Implementar un programa que permita validar la fecha, para ella defina una clase llamada Fecha con los datos y funciones miembros necesarios. Además el programa debe mostrar la fecha del día siguiente.

6. Implementar una clase llamada TarjetaBingo, de tal manera que genere una cartilla de bingo, los números del bingo deben estar comprendido entre 1 y 50. Incluir los datos y funciones miembros necesarios.

7. Implementar un programa utilizando clases de tal manera que simule una hoja del Excel (primera pantalla), de tal manera que al pulsar las teclas direccionales se desplace el puntero de celda. Si estamos en la celda A1 al pulsar flecha arriba o flecha a izquierda no debe avanzar el puntero de celda. Considere las funciones y datos necesarios.

DatoAlumno

m,n

Cod[8]

Ape[25]

Nom[25] Ventas[N][M]

CapturaDatos()

VtaTotalSemanal()

VtaTotalDiaria()

OrdenaAlfa()

OrdenaTotalSemanal()

VerListadoInicial()

VerListadoFinal()