#include <iostream>
using namespace std;
struct VISITA {
int codVehiculo;
int numOperarios;
int numHoras;
int *vecOperarios;
};
struct MANTENIMIENTO {
int codVehiculo;
int numHorasAcumuladas;
};
int maxHorasVehiculo=100;
int main(){
VISITA *lstVisita = new VISITA[1];
int numVisita=0;
// ingreso de datos
while(1){
char rpta='x';
int codVehiculo, numOperarios, numHoras;
cout<<"Ingrese codigo del vehiculo: ";
cin>>codVehiculo;
lstVisita[numVisita].codVehiculo = codVehiculo;
cout<<"Ingrese numero de operarios: ";
cin>>numOperarios;
lstVisita[numVisita].numOperarios = numOperarios;
lstVisita[numVisita].vecOperarios = new int[numOperarios];
for(int i=0;i<numOperarios;i++){
cout<<"\tIngrese codigo del operario "<<i+1<<": ";
cin>>lstVisita[numVisita].vecOperarios[i];
}
cout<<"Ingrese numero de horas de la visita: ";
cin>>numHoras;
lstVisita[numVisita].numHoras = numHoras;
numVisita++;
// preguntamos si el usuario continua el ingreso
while( (rpta!='n') && (rpta!='s') ){
cout<<"Ingresa una nueva visita (s)i o (n)o ?: ";
cin>>rpta;
cin.ignore();
}
if(rpta=='n')
break;
else{
// reasignacion de memoria
VISITA *p = new VISITA[numVisita+1];
for(int i=0; i<numVisita; i++){
p[i] = lstVisita[i];
}
lstVisita = p;
}
}
// totalizamos las horas de cada vehiculo
int maxNumVehiculo=20;
int *horasVehiculo = new int[maxNumVehiculo];
for(int i=0; i<maxNumVehiculo; horasVehiculo[i++]=0);
for(int i=0; i<numVisita; i++){
int codVehiculo = lstVisita[i].codVehiculo;
horasVehiculo[codVehiculo-1] += lstVisita[i].numHoras;
}
// contamos cuantos vehiculos van a mantenimento
int numVehiculoMantenimiento=0;
for(int i=0; i<maxNumVehiculo; i++){
numVehiculoMantenimiento += (horasVehiculo[i]>maxHorasVehiculo)?1:0;
}
// creamos la lista de vehiculos que van a mantenimento
MANTENIMIENTO *lstVehiculos = new MANTENIMIENTO[numVehiculoMantenimiento];
for(int i=0; i<maxNumVehiculo; i++){
if(horasVehiculo[i] > maxHorasVehiculo){
lstVehiculos[i].codVehiculo = i+1;
lstVehiculos[i].numHorasAcumuladas = horasVehiculo[i];
}
}
// ordenamos la lista de vehiculos que van a mantenimento
for(int i=0; i<numVehiculoMantenimiento-1; i++){
for(int j=0; j<numVehiculoMantenimiento-i-1; j++){
if(lstVehiculos[j].numHorasAcumuladas < lstVehiculos[j+1].numHorasAcumuladas){
MANTENIMIENTO aux = lstVehiculos[j];
lstVehiculos[j] = lstVehiculos[j+1];
lstVehiculos[j+1] = aux;
}
}
}
// imprimimos la lista de vehiculos que van a mantenimento
for(int i=0; i<numVehiculoMantenimiento; i++){
cout<<"Codigo de vehiculo en mantenimiento: "<<lstVehiculos[i].codVehiculo<<endl;
cout<<"Horas acumuladas de operacion: "<<lstVehiculos[i].numHorasAcumuladas<<endl;
}
cin.get();
}