Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: krowa en 13 Marzo 2012, 23:48 pm



Título: Ayudaa problema nivel basico
Publicado por: krowa en 13 Marzo 2012, 23:48 pm
Buenas, ya habia preguntado algo sobre este programa y lo pude solucionar aca el link-> http://foro.elhacker.net/programacion_cc/ayuda_array_facil-t356132.0.html
ahora tengo otro problema, intente varias formas de hacer esto y no me sale, queria ver si ustedes podrian resolver la parte que me falta y explicar el code, muchas gracias

Aca la consigna de la funcion que me falta:
La otra función responderá a este prototipo: int Diferencia(fecha, fecha);, y debe devolver la diferencia en días entre las dos fechas suministradas.

Código
  1. #include<iostream>
  2. #include<stdio.h>
  3. using namespace std;
  4.  
  5. struct fecha{
  6.       unsigned short int dia:5;
  7.       unsigned short int mes:4;
  8.       unsigned short int anno:7;
  9.       };
  10.  
  11. void mostrar(fecha x){
  12.     char *mes[]={"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
  13.     cout<<"Fecha:"<<endl;
  14.     cout<<"       "<<x.dia<<" de "<<mes[x.mes-1]<<" de "<<(x.anno + 1960)<<endl;
  15.     }
  16.  
  17. bool Biciesto(fecha x){
  18.     if((x.anno+1960)%2==0)cout<<"FEBRERO ES BICIESTO"<<endl;
  19.     else cout<<"FEBRERO NO ES BICIESTO"<<endl;
  20.     }
  21.  
  22. bool ValidarFecha(fecha x){
  23.     bool tof=true;
  24.     int DiaMes[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  25.     if (x.mes>=1){
  26.                   if(x.mes>12) tof=false;
  27.                   }
  28.     else tof=false;
  29.     if (tof==true){
  30.                   if(x.dia>=1){
  31.                   switch(x.mes){
  32.                                 case 0:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  33.                                 case 1:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  34.                                 case 2:{
  35.                                      Biciesto(x);
  36.                                      if(x.dia>DiaMes[x.mes-1])tof=false;
  37.                                      }
  38.                                 case 3:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  39.                                 case 4:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  40.                                 case 5:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  41.                                 case 6:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  42.                                 case 7:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  43.                                 case 8:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  44.                                 case 9:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  45.                                 case 10:{if(x.dia>DiaMes[x.mes-1])tof=false;}
  46.                                 case 11:{if(x.dia>DiaMes[x.mes-1])tof=false;}    
  47.                                 }
  48.                                }
  49.                   }
  50.     return tof;
  51.     }  
  52.  
  53. int CompararFechas(fecha x,fecha y){
  54.    if(x.anno>y.anno)return 1;
  55.    else{
  56.         if(x.anno<y.anno)return -1;
  57.         else if(x.mes>y.mes)return 1;
  58.         else if(x.mes<y.mes)return -1;
  59.         else if(x.dia>y.dia)return 1;
  60.         else if(x.dia<y.dia)return -1;
  61.         else return 0;
  62.         }
  63. }
  64.  
  65.  
  66.  
  67.  
  68. int main(){
  69.    int temp=0;
  70.    fecha x,y; //aca podria ver decalarado un vector ejemplo: fecha[1]; ( fecha[0] y fecha [1])
  71.               //que me resutltaria mas facil para trabajar con bucles mas adelante
  72.  
  73.    cout<<"Introduzca Fecha: "<<endl;
  74.    cout<<"Dia (ej: 31): ";cin>>temp;x.dia=temp;
  75.    cout<<endl<<"Mes (ej: 12): ";cin>>temp;x.mes=temp;
  76.    cout<<endl<<"Ano (del 1 al 127, a eso se le suma 1960): ";cin>>temp;x.anno=temp;
  77.    cout<<endl;
  78.  
  79.    if (ValidarFecha(x)==true){
  80.                            cout<<"La fecha es correcta."<<endl;
  81.                            }
  82.    else cout<<"La fecha es incorrecta."<<endl;
  83.    mostrar(x);
  84.    getchar();
  85.    getchar();
  86.  
  87.    cout<<endl<<"Introduzca otra fecha para compararla con la primera"<<endl;
  88.    cout<<"Dia (ej: 31): ";cin>>temp;y.dia=temp;
  89.    cout<<endl<<"Mes (ej: 12): ";cin>>temp;y.mes=temp;
  90.    cout<<endl<<"Ano (del 1 al 127, a eso se le suma 1960): ";cin>>temp;y.anno=temp;
  91.    cout<<endl;
  92.  
  93.        if (ValidarFecha(x)==true){
  94.                            cout<<"La fecha es correcta."<<endl;
  95.                            }
  96.    else cout<<"La fecha es incorrecta."<<endl;
  97.    mostrar(y);
  98.  
  99.    if(CompararFechas(x,y)==1)cout<<"La primer fecha es mayor que la segunda"<<endl;
  100.    else if(CompararFechas(x,y)==-1)cout<<"La segunda fecha es mayor que la primera"<<endl;
  101.    else cout<<"Las fechas son iguales"<<endl;
  102.    cout<<endl<<endl;
  103.  
  104.  
  105.    system("pause");
  106.  
  107. }


ACLARO: NO es TAREA estoy estudiando por mi cuenta en un curso online y no me quiero saltar ningun ejercicio quiero entenderlos todos!

PD: se me habia ocurrido algo asi.. pero nose ni coomo seguir y creo que ya empese mal jaja.
Gracias!

Código
  1.  
  2. int Diferencia(fecha x,fecha y){
  3.    int auxano=0,auxmes=0,auxdia=0,tempp=0;
  4.  
  5.    if(x.anno>y.anno)auxano=(x.anno-y.anno);
  6.    else {if(x.anno<y.anno)auxano=(y.anno-x.anno);
  7.    }
  8.  
  9.   else {
  10.         if(x.mes>y.mes)auxmes=(x.mes-y.mes);
  11.         else if(x.mes<y.mes)auxmes=(y.mes-x.mes);
  12.         else{
  13.              if(x.dia>y.dia){auxdia=(x.dia-y.dia);return auxdia;}
  14.              else if (x.dia<y.dia)auxdia=(y.dia-x.dia);return auxdia;
  15.              }
  16.         }
  17. }
  18.