Solución

Anuncio
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;
}
}
Descargar