Programación C++ - Solución Examen de Septiembre 03 Pág.1 Ejercicio 1 #include <iostream.h> #include <stdlib.h> #include <math.h> double CalculaCuota( double cap, double interes, int num); double CalculaPagos(double *capp, double *capam, double *intepag,double cap, double interes, int num); int CalculaMeses(double cap, double interes, double cuota, int MesMax); void ImprimePagos(double *capp, double *capam, double *intepag, int mess, double); void main() { double cap,interes,cuota; int meses,edad; char ch; double *capp, *capam,*intepag; system("cls"); while(1){ cout << cout << cout << cout << "Capital?:"; cin >> cap; "Interes Anual(%)?:"; cin >> interes; "Cuota a pagar?:"; cin >> cuota; "Edad?:"; cin >> edad; //comprobar >18 y menor de 65 meses = CalculaMeses(cap,interes,cuota,(65-edad)*12); if (meses == 0){ cout << "No se puede.. \nSuba la cuota o Baje el capital"; } else { cout << "Los meses a pagar son:" << meses; //reservar memoria capp = new double[meses+1]; capam = new double[meses+1]; intepag = new double[meses+1]; cuota = CalculaPagos(capp,capam,intepag,cap,interes,meses); ImprimePagos(capp,capam,intepag,meses,cuota); delete [] capp; delete [] capam; delete [] intepag; } cout << "\nDesea continuar (s/n)?"; cin >> ch; if (ch=='n' || ch=='N') break; } cout << "\nAdios.." <<endl; } int CalculaMeses(double cap, double interes, double cuota, int MesMax) { int mes=0; double ct; for (int i=1; i<=MesMax; i++){ ct = CalculaCuota(cap,interes,i); if (ct <= cuota) { mes = i; Escuela Superior de Ingenieros- Tecnun – Universidad de Navarra Programación C++ - Solución Examen de Septiembre 03 } break; Pág.2 //termina, ya encontro } return mes; } double CalculaPagos(double *capp, double *capam, double *intepag,double cap, double interes, int mess) { double cuota = CalculaCuota(cap,interes,mess); double cappend = cap; for (int i=0;i<mess;i++){ capp[i] = cappend; intepag[i] = capp[i]*interes/(12*100); capam[i] = cuota - intepag[i]; //actualizar capital pendiente cappend = capp[i] - capam[i]; //cap.pendiente - cap.amortizado } cout << "\nCuota:"<<cuota << endl; return cuota; } void ImprimePagos(double *capp, double *capam, double *intepag, int mess, double cuota) { cout << "\n\t\t Tabla de Amortizacion"<<endl; cout.width(5); cout << "Mes"; cout.width(12); cout << "Cap.Pend"; cout.width(12); cout << "Cap.Amort"; cout.width(12); cout << "Interes"; cout.width(12); cout << "Cuota/mes"; cout.setf(ios::fixed); cout << endl; for (int i=0;i<mess;i++){ cout.precision(2); cout.width(5); cout << i+1; cout.width(12); cout << capp[i]; cout.width(12); cout << capam[i]; cout.width(12); cout << intepag[i]; cout.width(12); cout << cuota <<endl; } } double CalculaCuota( double cap, double interes, int mess) { double cuota; double im = interes/(12*100); cuota = (cap*im)/(1-pow(1+im,-mess)); } return cuota; Escuela Superior de Ingenieros- Tecnun – Universidad de Navarra Programación C++ - Solución Examen de Septiembre 03 Pág.3 Ejercicio 2 #include <iostream.h> #include <string.h> #include <stdlib.h> class Perfil { bool CarnetConducir; public: void PideDatos(){ char ch; cout <<"carnet de conducir (s/n):?"; cin >> ch; if (ch=='s' || ch=='S') CarnetConducir=true; else CarnetConducir=false; } virtual void showPerfil(){ cout << " Carnet Cond:"; (CarnetConducir==true)? cout <<"Si":cout<<"No"; cout << endl; }; }; class PerfilTitulado : public Perfil { char Titulacion[30]; bool conocInfor; public: PerfilTitulado(){ char ch; cout << "Titulacion:?" ; cin >> Titulacion; cout << "Conoc.Informaticos (s/n):?"; cin >> ch; if (ch=='s' || ch=='S') conocInfor=true; else conocInfor=false; PideDatos(); } void showPerfil(){ cout << "\n\tPERFIL:"; cout << " Titulacion:" << Titulacion; cout << " Con.Inform:" ; (conocInfor==true)? cout <<"Si":cout<<"No"; Perfil::showPerfil(); } }; class PerfilEspecialista : public Perfil { char Especialidad[30]; public: PerfilEspecialista(){ cout << "Especialidad:?" ; cin >> Especialidad; PideDatos(); } void showPerfil(){ cout << "\n\tPERFIL:"; cout << " Especialidad:" << Especialidad; Perfil::showPerfil(); } Escuela Superior de Ingenieros- Tecnun – Universidad de Navarra Programación C++ - Solución Examen de Septiembre 03 }; class Empleo { Perfil *pf; public: void PideDatos(){ int per; cout << "PERFIL?: 1:Titulado cin >> per; if (per==1) { pf = new PerfilTitulado; 2:Especialista ?"; }else{ pf = new PerfilEspecialista; } } //destructor?? virtual void infoEmpleo() { pf->showPerfil(); } }; class OfertaEmpleo : public Empleo { char empresa[30]; char puesto[30]; double sueldo; public: OfertaEmpleo(char *emp=NULL, char *puest=NULL, double suel=0) { cout << "Oferta de Empleo:\n"; cout << "Empresa:?"; cin >> empresa; cout << "Puesto:?"; cin >> puesto; cout << "Sueldo:?"; cin >> sueldo; Empleo::PideDatos(); } void infoEmpleo() { cout << "\nOFERTA de EMPLEO:"; cout << " Empresa:" << empresa; cout << " Puesto:" << puesto; cout << " Sueldo:" << sueldo; Empleo::infoEmpleo(); } }; class DemandaEmpleo : public Empleo { char nombre[30]; public: DemandaEmpleo(char *emp=NULL, char *puest=NULL, double suel=0) { cout << "Demanda de Empleo:\n"; cout << "Nombre:?"; cin >> nombre; Escuela Superior de Ingenieros- Tecnun – Universidad de Navarra Pág.4 Programación C++ - Solución Examen de Septiembre 03 Empleo::PideDatos(); } void infoEmpleo() { cout << "\nDEMANDA de EMPLEO:"; cout << " Nombre:" << nombre; Empleo::infoEmpleo(); } }; void main() { int contOf=0, contDm=0, opc; Empleo *of[30]; system("cls"); while(true) { cout << "++++ Menu ++++" << endl; cout << "1. Agregar Oferta" << endl; cout << "2. Agregar Demanda" << endl; cout << "3. Listar todo" << endl; cout << "4. Terminar" << endl; cout << "\tOpcion:?"; cin >> opc; switch (opc){ case 4: return; case 1: of[contOf++] = new OfertaEmpleo(); break; case 2: of[contOf++] = new DemandaEmpleo();break; case 3: for (int i=0;i<contOf;i++) of[i]->infoEmpleo(); break; } } } cout << "\nAdios.."; Escuela Superior de Ingenieros- Tecnun – Universidad de Navarra Pág.5