Prácticas de C++ Practica Nº 5 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante Practica Nº 5 Programación en C++ Pág. 1 ÍNDICE ÍNDICE ........................................................................................................................................ 1 1. Introducción...................................................................................................................... 1 1.1 Ejercicio 1: clase Fecha.............................................................................................. 1 1.2 Ejercicio 2: Resolver ecuaciones de 2 grado con “clase”. ......................................... 2 1.3 Ejercicio 3: clase Alumno .......................................................................................... 3 1. Introducción. En esta práctica va a profundizar más en la creación de las clases y los objetos. Trate de realizar los ejercicios de forma individual. Recuerde que el mismo ejercicio que se le plantea, se puede realizar de formas diferentes, lo cual le servirá para profundizar más en la materia. Y por último, recuerde que a programar sólo se aprende programando. 1.1 Ejercicio 1: clase Fecha En este ejercicio vamos a crear la clase Fecha, la cual nos permitirá almacenar varias fechas como objetos, de forma que luego podamos imprimirlas, sumarles y restarles días para calcular nuevas fechas, etc. Este proyecto se llamará Ejer1. Debe crear tres ficheros Fecha.h, Fecha.cpp y main.cpp. Estos ficheros se listan a continuación: //fichero Fecha.h class Fecha { int dia,mes,ano; public: Fecha(int d=1, int m=1, int a=1900); //const. con valores por defecto void Pidedatos(); void Prt(); Fecha Suma(int d); }; //fichero Fecha.cpp Fecha::Fecha(int d, int m, int a) { dia=d; mes=m; ano=a; } Fecha Fecha::Suma(int dias) { Fecha temp; //hacer el algoritmo de sumar días, considerando los meses de 30 días return temp; } void Fecha::Prt() { cout << setfill('0') << setw(2) << dia << '/' << setw(2) << mes << '/' << setw(4) << ano; } void Fecha::Pidedatos() { char ch; cout << "Escriba Fecha de la forma dd/mm/aa:"; cin >> dia >> ch >> mes >> ch >> ano; } Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra Practica Nº 5 Programación en C++ Pág. 2 //fichero principal.cpp void main() { int num; Fecha f1(12,4,2001); Fecha f2; f2.Pidedatos(); //crear una fecha //crear una fecha con valores por defecto //pedir fecha 2 cout << "\nFecha 1: "; f1.Prt(); cout << "\nFecha 2: "; f2.Prt(); cout << "\nNum.dias a sumar:?"; cin >> num; Fecha f3; //crear objeto f3 con valores por defecto f3 = f2.Suma(num); //sumar “num” días f2.Prt(); cout << " + "<< num << " dias = "; f3.Prt(); } cout << " \nHe terminado.." << endl; Compile el proyecto y ejecútelo, observando el resultado. Trate de hacer las modificaciones necesarias para que el programa pueda restar días a una fecha, de la siguiente manera: f3 = f2.Resta(num); //restar “num” días f2.Prt(); cout << " - "<< num << " dias = "; f3.Prt(); 1.2 Ejercicio 2: Resolver ecuaciones de 2 grado con “clase”. Este ejercicio consiste en hacer una clase que permita resolver las ecuaciones de segundo grado, usando la Programación Orientada a Objetos. Para esto crear la clase Ecua2G que tenga las variables y métodos adecuados que permitan resolver la ecuación. A continuación se le proporciona la estructura de la clase y su utilización en el programa principal main(). Ud. debe implementar las funciones de la clase. class Ecua2G { double A,B,C; public: Ecua2G(){A=0;B=0;C=0;} Ecua2G(double a, double b, double c){ A=a; B=b; C=c; } void PideDatos(); //Pide los coeficientes por la consola double Disc(); //devuelve el discriminante void Prt(); //Imprime ecuacion AX^2 + BX + C = 0 //tipo=true raices reales tipo=false raices complejas void Raices(bool &tipo, double &x1, double &x2); }; Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra Practica Nº 5 Programación en C++ Pág. 3 //Programa principal void main() { double xs1,xs2; bool tip; cout << "\n*** Ecuacion1 ***" << endl; Ecua2G ec1(1,4,4); ec1.Raices(tip,xs1, xs2); //calcula las raices ec1.Prt(); tip? cout << " Raices reales:": cout << " Raices complejas:"; cout << xs1 << "," << xs2 << endl; cout << "\n*** Ecuacion2 ***" << endl; Ecua2G ec2; ec2.PideDatos(); //dar A=1,B=3,C=6.25 ec2.Raices(tip,xs1, xs2); ec2.Prt(); tip? cout << " Raices reales:": cout << " Raices complejas:"; cout << xs1 << "," << xs2 << endl; cout << "\n*** Ecuacion3 ***" << endl; double a,b,c; cout << "Dar coeficientes A,B y C:"; cin >> a >> b >> c; Ecua2G ec3(a,b,c); ec3.Raices(tip,xs1, xs2); //constructor ec3.Prt(); tip? cout << " Raices reales:": cout << " Raices complejas:"; cout << xs1 << "," << xs2 << endl; } Recuerde que debe colocar los ficheros de cabecera “.h” que sean necesarios. Debe crear un nuevo proyecto llamado Ejer2 en su directorio de trabajo. 1.3 Ejercicio 3: clase Alumno Este ejercicio consiste en hacer la clase Alumno que permita introducir en el ordenador los nombres, carnés, direcciones y demás datos de un alumno o alumna. El ejercicio se debe ir implementando en fases, las cuales se listan a continuación: ¾ Fase I: Clase Alumno y su implementación. La clase Alumno y el programa main() se dan a continuación: //Fichero Alumno.h #include <iostream.h> #include <string.h> #include <iomanip.h> class Alumno { long carnet; char nombre[50]; public: void DarAlumno(); void Prt(); }; Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra Practica Nº 5 Programación en C++ Pág. 4 //fichero Alumno.cpp void Alumno::DarAlumno() { cout << "Dar Carnet:"; cin >> carnet; cin.ignore(); cout << "Dar Nombre:"; cin.getline(nombre,50); } void Alumno::Prt() { cout << "Carnet:"<<setw(8)<< carnet << " Nombre:"<<nombre<<endl; } //fichero Principal.cpp void main() { int num; Alumno al[100]; //array de 100 alumnos cout << "Numero de alumnos a introducir:?"; cin >> num; for (int i=0;i<num;i++){ al[i].DarAlumno(); } } cout << "\n*** Base de Datos ***\n"; for ( i=0;i<num;i++){ al[i].Prt(); } ¾ Fase II: Búsqueda de alumnos por cursos. Esta nueva fase consiste en agregar una nueva variable a la clase, la variable int Curso, la cual permitirá agregar el curso en el que está el alumno. Debe agregar el código necesario para que cuando pida los datos del alumno, también pida el curso. En main() debe pedir introducir el curso que se desea mostrar y el programa debe mostrar en la consola sólo los alumnos de ese curso, como se muestra a continuación: int curso; cout << "Dar curso a ver:?"; cin >> curso; for ( i=0;i<num;i++){ //búsqueda en el array de alumnos e imprimir los encontrados if ( curso == .. ) al[i].Prt() ; } Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra