Optimizar el código de este ejercicio (arrays) C++

Iniciado por seryioo, 7 Agosto 2015, 23:57 PM

0 Miembros y 1 Visitante están viendo este tema.

seryioo

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 (cpp) [Seleccionar]

/*
11) Diseñar un programa en C++ para determinar la disponibilidad de una serie de personas
para reunirse algún día de un cierto mes. Para esto, el programa deberá preguntar el
número de días del mes (28, 29, 20 0 31) y el número de personas que deben reunirse; con
estos datos, pedirá, una a una, a cada persona cuáles son los días (de 1 al número de días
del mes) que tiene disponibles y con ayuda de un único array deberá presentar en
pantalla los días disponibles en que coinciden todas las personas.*/

#include <iostream>
using namespace std;

typedef int  Tarray [];

void eliminarDia (int noPuede,int  dias, Tarray ar);

void siPuede (Tarray ar);


int main(){
   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};
   int dias=0, personas=0, noPuede=0;
   do{
       cout<<"Introduzca el numero de dias del mes: ";
       cin>>dias;
   }while(dias<28 or dias>31);

   if(dias==28){
       ar[30]=0;
       ar[29]=0;
       ar[28]=0;
   }
   else if (dias==29){
       ar[30]=0;
       ar[29]=0;
   }
   else if(dias==30){
       ar[30]=0;
   }
   else;
   cout<<"Cuantas personas desea que se reunan?: ";
   cin>>personas;

   for(unsigned contador=1; contador<=personas; contador++){
       while(noPuede!=-1){ //Para pasar a la siguiente persona
           cout<<"Persona "<<contador<<" ,dia que no puede reunirse: ";
           cin>>noPuede;
           eliminarDia(noPuede, dias, ar);
       }
       noPuede=0;
   }
   siPuede(ar);
   return 0;
}


void eliminarDia (int noPuede,int  dias, Tarray ar){
   if(noPuede!=-1){
       for(unsigned i=0; i<dias; i++){
           if(ar[i]==noPuede) ar[i]=0;
       }
   }
}

void siPuede (Tarray ar){
   cout<<"Todos pueden: "<<endl;
   for(unsigned i=0; i<31; i++){
       if(ar[i]!=0) cout<<ar[i]<<endl;
   }
}


exoesqueleto

Saludos compadre, yo lo resolvi de otra manera echale un vistazo:

Código (cpp) [Seleccionar]


#include <iostream>

using namespace std;

#define DIAS 31

int main() {
 
    int mes[DIAS] = {0}, numeroDias, cont= 0, numeroPersonas, centinela;
    int reunion[DIAS] = {0};
   
    cout << "Introduzca cantidad de dias del mes (28, 29, 30 0 31): ";
    cin >> numeroDias;
   
    for(int dias= 1; dias <= numeroDias; dias++)
         mes[cont++] = dias;
   
    cout << "Introduzca cantidad de personas a reunirse: ";
    cin >> numeroPersonas;// el dia debe cohincidir con el numero de personas
   
    for(int personas= 1; personas <= numeroPersonas; personas++){
        cout << " Persona No " << personas  << endl;
        centinela =0;
        while(centinela != -1){
            cout << "Introduzca los dias que tiene disponible (-1 para terminar): ";
            cin >> centinela;
             if(centinela != -1 ){
                if(centinela <= numeroDias)
                    reunion[ centinela - 1]++;
                else
                    cout << "Error! " << endl;
            }//end_if
        }//end_while
        cout << endl;
    }//for
   
    for(int cont =0; cont < DIAS; cont++){
        if(reunion[cont] != numeroPersonas){
            if(mes[cont] != 0) 
                  cout << mes[cont] << "\t";
              if(mes[cont] % 10 == 0)
                  cout << endl;
       }else{   
             cout << "(" << mes[cont]<< ")\t";// los dias que coincidan se encierran entre parentesis
        }//
    }//end-for
   
    return 0;
}//main