Ayudaa problema nivel basico

Iniciado por krowa, 13 Marzo 2012, 23:48 PM

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

krowa

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 (c++) [Seleccionar]
#include<iostream>
#include<stdio.h>
using namespace std;

struct fecha{
       unsigned short int dia:5;
       unsigned short int mes:4;
       unsigned short int anno:7;
       };

void mostrar(fecha x){
     char *mes[]={"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
     cout<<"Fecha:"<<endl;
     cout<<"       "<<x.dia<<" de "<<mes[x.mes-1]<<" de "<<(x.anno + 1960)<<endl;
     }
     
bool Biciesto(fecha x){
     if((x.anno+1960)%2==0)cout<<"FEBRERO ES BICIESTO"<<endl;
     else cout<<"FEBRERO NO ES BICIESTO"<<endl;
     }
           
bool ValidarFecha(fecha x){
     bool tof=true;
     int DiaMes[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
     if (x.mes>=1){
                   if(x.mes>12) tof=false;
                   }
     else tof=false;
     if (tof==true){
                   if(x.dia>=1){
                   switch(x.mes){
                                 case 0:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 1:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 2:{
                                      Biciesto(x);
                                      if(x.dia>DiaMes[x.mes-1])tof=false;
                                      }
                                 case 3:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 4:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 5:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 6:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 7:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 8:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 9:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 10:{if(x.dia>DiaMes[x.mes-1])tof=false;}
                                 case 11:{if(x.dia>DiaMes[x.mes-1])tof=false;}     
                                 }
                                }
                   }
     return tof;
     } 

int CompararFechas(fecha x,fecha y){
    if(x.anno>y.anno)return 1;
    else{
         if(x.anno<y.anno)return -1;
         else if(x.mes>y.mes)return 1;
         else if(x.mes<y.mes)return -1;
         else if(x.dia>y.dia)return 1;
         else if(x.dia<y.dia)return -1;
         else return 0;
         }
}



       
int main(){
    int temp=0;
    fecha x,y; //aca podria ver decalarado un vector ejemplo: fecha[1]; ( fecha[0] y fecha [1])
               //que me resutltaria mas facil para trabajar con bucles mas adelante
 
    cout<<"Introduzca Fecha: "<<endl;
    cout<<"Dia (ej: 31): ";cin>>temp;x.dia=temp;
    cout<<endl<<"Mes (ej: 12): ";cin>>temp;x.mes=temp;
    cout<<endl<<"Ano (del 1 al 127, a eso se le suma 1960): ";cin>>temp;x.anno=temp;
    cout<<endl;
       
    if (ValidarFecha(x)==true){
                            cout<<"La fecha es correcta."<<endl;
                            }
    else cout<<"La fecha es incorrecta."<<endl;
    mostrar(x);
    getchar();
    getchar();

    cout<<endl<<"Introduzca otra fecha para compararla con la primera"<<endl;
    cout<<"Dia (ej: 31): ";cin>>temp;y.dia=temp;
    cout<<endl<<"Mes (ej: 12): ";cin>>temp;y.mes=temp;
    cout<<endl<<"Ano (del 1 al 127, a eso se le suma 1960): ";cin>>temp;y.anno=temp;
    cout<<endl;

        if (ValidarFecha(x)==true){
                            cout<<"La fecha es correcta."<<endl;
                            }
    else cout<<"La fecha es incorrecta."<<endl;
    mostrar(y);

    if(CompararFechas(x,y)==1)cout<<"La primer fecha es mayor que la segunda"<<endl;
    else if(CompararFechas(x,y)==-1)cout<<"La segunda fecha es mayor que la primera"<<endl;
    else cout<<"Las fechas son iguales"<<endl;
    cout<<endl<<endl;
   
   
    system("pause");

}



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


int Diferencia(fecha x,fecha y){
    int auxano=0,auxmes=0,auxdia=0,tempp=0;
   
    if(x.anno>y.anno)auxano=(x.anno-y.anno);
    else {if(x.anno<y.anno)auxano=(y.anno-x.anno);
    }
   
   else {
         if(x.mes>y.mes)auxmes=(x.mes-y.mes);
         else if(x.mes<y.mes)auxmes=(y.mes-x.mes);
         else{
              if(x.dia>y.dia){auxdia=(x.dia-y.dia);return auxdia;}
              else if (x.dia<y.dia)auxdia=(y.dia-x.dia);return auxdia;
              }
         }
}