Ejercicio 1 #include <iostream.h> #include <math.h> #include <iomanip.h> #include <stdlib.h> void PideDatos(long *, double *nota, int& num); void MostrarDatos(long *carnet, double *nota, int num); void Estadisticas(long *carnet, double *nota, int num); void main() { int opc,num=0; long *carnet=NULL; double *nota=NULL; while(true){ cout << "\t** Menu **"<<endl; cout << "1. Introducir datos del alumno"<<endl; cout << "2. Mostrar datos"<<endl; cout << "3. Datos Estadisticos"<<endl; cout << "4. Limpiar Pantalla"<<endl; cout << "5. Salir"<<endl; cout << "\tOpcion:?"; cin >> opc; switch(opc){ case 1: cout << "Numero de alumnos:"; cin >> num; if (num>0) { delete [] carnet; delete [] nota;} carnet = new long[num]; nota = new double[num]; PideDatos(carnet,nota,num); break; case 2: MostrarDatos(carnet,nota,num); break; case 3: Estadisticas(carnet,nota,num); break; case 4: system("cls"); break; case 5: /* liberar memoria */; return; } } } void PideDatos(long *carnet, double *nota, int &num) { for (int i=0;i<num;i++){ cout << "Carnet y Nota:? "; cin >> carnet[i] >> nota[i]; } } void Estadisticas(long *carnet, double *nota, int num) { double sus=0,ap=0, not=0, sobre=0, mh=0; //pocentajes int nsus=0,nap=0, nnot=0, nsobre=0, nmh=0; //cantidad for (int i=0;i<num;i++){ if (nota[i] < 5.0) nsus++; else if (nota[i] >= 5.0 && nota[i]<6.5) nap++; else if (nota[i] >= 6.5 && nota[i]<7.5) nnot++; else if (nota[i] >= 7.5 && nota[i]<10) nsobre++; else mh++; } sus = 100.0*nsus/num; ap = 100.0*nap/num; not = 100.0*nnot/num; sobre = 100.0*nsobre/num; mh = 100.0*nmh/num; cout.setf(ios::fixed); cout.fill(' '); cout << setw(15)<<"Suspendidos" << setw(10) << setprecision(2) << sus << endl; cout cout cout cout << << << << setw(15)<<"Aprobados" << setw(10) << setprecision(2) << ap << endl; setw(15)<<"Notables" << setw(10) << setprecision(2) << not << endl; setw(15)<<"Sobresalientes"<<setw(10)<< setprecision(2) << sobre << endl; setw(15)<<"MH" << setw(10) << setprecision(2) << mh << endl<<endl; } void MostrarDatos(long *carnet, double *nota, int num) { if (num <= 0) return; int opc; cout << "Orden.Asc. x Nota(1) o x Carnet(2):?"; cin >> opc; } double tmp; long t; for (int i=0;i<num-1;i++){ for (int j=i;j<num;j++){ if (opc==1){ //ordenar x nota if ( nota[j] < nota[i] ) { tmp=nota[i]; t=carnet[i]; nota[i] = nota[j]; carnet[i]=carnet[j]; nota[j] = tmp; carnet[j]=t; } }else{ if ( carnet[j] < carnet[i] ) { tmp=nota[i]; t=carnet[i]; nota[i] = nota[j]; carnet[i]=carnet[j]; nota[j] = tmp; carnet[j]=t; } } } } cout.setf(ios::left); cout << setw(10) << "Carnet" ; cout.unsetf(ios::left); cout << setw(10) << "Nota" << endl; cout.fill('.'); cout.setf(ios::fixed); for (int i=0;i<num;i++){ cout.setf(ios::left); cout << setw(10) << carnet[i]; cout.unsetf(ios::left); cout << setw(10) << setprecision(2) << nota[i] << endl; } Ejercicio 2 #include <iostream.h> #include <string.h> #include <stdlib.h> class Asignatura { char *Name; double Creditos; public: Asignatura(){Name=NULL;} ~Asignatura(){ delete [] Name;} void Asigna(char *nam="",double Cred=0){ Name = new char[ strlen(nam) + 1]; strcpy(Name,nam); Creditos=Cred; } double GetCreditos(){ return Creditos;} friend ostream& operator<<(ostream &co, Asignatura &as){ co << "\tAsig.:"<<as.Name << " Creditos:" << as.Creditos ; return co; } }; class Persona { protected: long DNI; char *Name; //nombre y Apellidos public: Persona(){Name=NULL;} void Asigna(char *n,long d){ Name = new char[ strlen(n) + 1]; strcpy(Name,n); DNI = d; } ~Persona(){ delete [] Name; } }; class Profesor: public Persona { int Categoria; //1: Prof. Asociado 2:Adjunto 3: Ordinario int numAsig; //Num. de asignaturas que imparte Asignatura *asig; public: Profesor(){numAsig=0;} ~Profesor(){ if (numAsig>0) delete [] asig;} void Asigna(char *name="", long DNI=0, int cat=0, int numA=0){ Persona::Asigna(name,DNI); Categoria = cat; numAsig = numA; asig = new Asignatura[numA]; //crear numA asignaturas char tmp[80]; double Cred; for (int i=0;i<numAsig;i++){ cout << "\tAsig. " << i+1 << " (Nombre Creditos):?"; cin >> tmp >> Cred; asig[i].Asigna(tmp,Cred); } } double CreditosTotales() { double nc=0; for (int i=0;i<numAsig;i++){ nc += asig[i].GetCreditos(); } return nc; } friend ostream& operator<<(ostream &co, Profesor *pr){ co << "Nombre: " << pr->Name; co << " DNI: " << pr->DNI; co << " Categoría: "; if (pr->Categoria ==1) co << "Prof. Asociado\n"; else if (pr->Categoria ==2) co << "Prof. Adjunto\n"; else co << "Prof. Ordinario\n"; for (int i=0;i<pr->numAsig;i++){ co << pr->asig[i]<<endl; } co << "\tCred.Totales:" << pr->CreditosTotales() << endl; return co; } friend istream& operator>>(istream &ci, Profesor *pr){ char tmp[120]; long dni,categ,numA; cout << "Nombre?:"; ci.getline(tmp,120); cout << "DNI?:"; cin >> dni; cout << "Categoria(1:Asoc. 2:Adjunto 3:Ordinario)?:"; cin >> categ; cout << "Num.Asignaturas:"; cin >> numA; pr->Asigna(tmp,dni,categ,numA); return ci; } }; #define NUM 50 int Menu(); void main() { int opc,num=0; Profesor *lista[NUM]; while(true){ opc = Menu(); if (opc==1) { // librar memoria asignada a la lista return; //Termina el programa } else if (opc==2){ cin.ignore(1,'\n'); lista[num]=new Profesor; cin >> lista[num]; //pedir datos num++; } else if (opc==3){ //display for (int i=0;i<num;i++) cout << lista[i] << endl; } else if (opc==4){ system("cls"); } } } int Menu() { int opc; while(true){ cout << "\t** Menu **"<<endl; cout << "1. Salir"<<endl; cout << "2. Introducir Datos"<<endl; cout << "3. Mostrar Datos por consola"<<endl; cout << "4. Limpiar Pantalla"<<endl; cout << "5. Grabar Datos a disco"<<endl; cout << "\tOpcion:?"; cin >> opc; if ( opc >0 && opc <6) return opc; } }