Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: seryioo en 7 Agosto 2015, 23:57 pm



Título: Optimizar el código de este ejercicio (arrays) C++
Publicado por: seryioo en 7 Agosto 2015, 23:57 pm
Buenas, estoy haciendo ejercicios de array. He terminado uno y funciona correctamente pero creo que he hecho bastantes chapuzas en el código y me gustaría que lo vierais para pulirlo un poco.

Gracias.

Código
  1. /*
  2. 11) Diseñar un programa en C++ para determinar la disponibilidad de una serie de personas
  3. para reunirse algún día de un cierto mes. Para esto, el programa deberá preguntar el
  4. número de días del mes (28, 29, 20 0 31) y el número de personas que deben reunirse; con
  5. estos datos, pedirá, una a una, a cada persona cuáles son los días (de 1 al número de días
  6. del mes) que tiene disponibles y con ayuda de un único array deberá presentar en
  7. pantalla los días disponibles en que coinciden todas las personas.*/
  8.  
  9. #include <iostream>
  10. using namespace std;
  11.  
  12. typedef int  Tarray [];
  13.  
  14. void eliminarDia (int noPuede,int  dias, Tarray ar);
  15.  
  16. void siPuede (Tarray ar);
  17.  
  18.  
  19. int main(){
  20.    Tarray ar={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
  21.    int dias=0, personas=0, noPuede=0;
  22.    do{
  23.        cout<<"Introduzca el numero de dias del mes: ";
  24.        cin>>dias;
  25.    }while(dias<28 or dias>31);
  26.  
  27.    if(dias==28){
  28.        ar[30]=0;
  29.        ar[29]=0;
  30.        ar[28]=0;
  31.    }
  32.    else if (dias==29){
  33.        ar[30]=0;
  34.        ar[29]=0;
  35.    }
  36.    else if(dias==30){
  37.        ar[30]=0;
  38.    }
  39.    else;
  40.    cout<<"Cuantas personas desea que se reunan?: ";
  41.    cin>>personas;
  42.  
  43.    for(unsigned contador=1; contador<=personas; contador++){
  44.        while(noPuede!=-1){ //Para pasar a la siguiente persona
  45.            cout<<"Persona "<<contador<<" ,dia que no puede reunirse: ";
  46.            cin>>noPuede;
  47.            eliminarDia(noPuede, dias, ar);
  48.        }
  49.        noPuede=0;
  50.    }
  51.    siPuede(ar);
  52.    return 0;
  53. }
  54.  
  55.  
  56. void eliminarDia (int noPuede,int  dias, Tarray ar){
  57.    if(noPuede!=-1){
  58.        for(unsigned i=0; i<dias; i++){
  59.            if(ar[i]==noPuede) ar[i]=0;
  60.        }
  61.    }
  62. }
  63.  
  64. void siPuede (Tarray ar){
  65.    cout<<"Todos pueden: "<<endl;
  66.    for(unsigned i=0; i<31; i++){
  67.        if(ar[i]!=0) cout<<ar[i]<<endl;
  68.    }
  69. }
  70.  
  71.  


Título: Re: Optimizar el código de este ejercicio (arrays) C++
Publicado por: exoesqueleto en 8 Agosto 2015, 08:37 am
Saludos compadre, yo lo resolvi de otra manera echale un vistazo:

Código
  1.  
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. #define DIAS 31
  7.  
  8. int main() {
  9.  
  10.    int mes[DIAS] = {0}, numeroDias, cont= 0, numeroPersonas, centinela;
  11.    int reunion[DIAS] = {0};
  12.  
  13.    cout << "Introduzca cantidad de dias del mes (28, 29, 30 0 31): ";
  14.    cin >> numeroDias;
  15.  
  16.    for(int dias= 1; dias <= numeroDias; dias++)
  17.         mes[cont++] = dias;
  18.  
  19.    cout << "Introduzca cantidad de personas a reunirse: ";
  20.    cin >> numeroPersonas;// el dia debe cohincidir con el numero de personas
  21.  
  22.    for(int personas= 1; personas <= numeroPersonas; personas++){
  23.        cout << " Persona No " << personas  << endl;
  24.        centinela =0;
  25.        while(centinela != -1){
  26.            cout << "Introduzca los dias que tiene disponible (-1 para terminar): ";
  27.            cin >> centinela;
  28.             if(centinela != -1 ){
  29.                if(centinela <= numeroDias)
  30.                    reunion[ centinela - 1]++;
  31.                else
  32.                    cout << "Error! " << endl;
  33.            }//end_if
  34.        }//end_while
  35.        cout << endl;
  36.    }//for
  37.  
  38.    for(int cont =0; cont < DIAS; cont++){
  39.        if(reunion[cont] != numeroPersonas){
  40.            if(mes[cont] != 0)  
  41.                  cout << mes[cont] << "\t";
  42.              if(mes[cont] % 10 == 0)
  43.                  cout << endl;
  44.       }else{  
  45.             cout << "(" << mes[cont]<< ")\t";// los dias que coincidan se encierran entre parentesis
  46.        }//
  47.    }//end-for
  48.  
  49.    return 0;
  50. }//main
  51.  
  52.