Comparar fechas. Ayuda! C++

Iniciado por Wazzp, 23 Septiembre 2010, 23:57 PM

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

Wazzp

Eso de la comprobacion de la voy a agregar mas adelante.. primero quiero lo basico y se lo mando a mi amiga que me lo pidio.. y ahi le pregunto si quiere esa comprobacion,si me dice que no,el programa esta bien,si las kiere,solamente tengo que agregarlas y listo! Gracias por la ayuda :)

PiroskY

jaja a wazzap le decia que lo haga
Porque hizo toda una estructura todo ordenadito, pero primero que nada yo haria el programa funcional, y despues le doy mejor formato

Intenta hacer el codigo que compare las 2 fechas y decinos que tal te fue

Wazzp

Ok.. les voy a ser 100% Sincero.. No tengo NI IDEA de que hice XD Solo se que compila y funciona bien.. pero no creo que el algoritmo para las fechas este bien.. Alguien corrige? porque ya lo revise como 20 veces y no se cual podria ser un error..
Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;
    void datos(int &d,int &m,int &a,int &D,int &M,int &A)
    {
    cout<<"Ingresa una fecha en formato DD-MM-AAAA"<<endl;
    cin>>d>>m>>a;
    cout<<"Ingresaste.."<<d<<"/"<<m<<"/"<<a<<endl;

    cout<<"Ingresa una segunda fecha para comparar con la primera.."<<endl;
    cin>>D>>M>>A;
    cout<<"Ingresaste.."<<D<<"/"<<M<<"/"<<A<<endl;
    }
    void calculo(int d,int m,int a,int D,int M,int A,int m2,int a2,int r)
     {
        if (a>=A)
        {
            a2=a-A;
        }

      if (a<=A)
    {
        a2=A-a;
    }
    if (m>=M)
    {
        m2=M-m;
    }
        else if (m<=M)
        {
           m2=M-m;
        }
    r=(a2*365)+(m2*30)+(D-d);
    cout<<"El resultado seria: "<<r<<"dias.."<<endl;
    }

int main()
{
   int d,m,a,D,M,A;
   int a2=0,m2=0,r=0;
   datos(d,m,a,D,M,A);
   int t;
   cout<< "Comparar..? 1=si 2=no-quiero cambiar las fechas 3=salir"
   <<endl;
   cin>>t;
   do
     {
       switch(t)
       {
            case 1:
            calculo(d,m,a,D,M,A,a2,m2,r);
            return 0;
            break;
            case 2:
            cout<<"Revisa las fechas.."<<endl;
            datos(d,m,a,D,M,A);
            calculo(d,m,a,D,M,A,a2,m2,r);
            return 0;
            break;
            default:
            return 0;
            break;
       }
    }while(t!=3);

}


Ahh y disculpa satu pero use tu idea.. Una pregunta,es necesario ubicar los & dentro del void()??

PiroskY

#13
Pero los meses no tienen todo 30 dias

Vos lo que queres hacer es algo simplesito que calcule aproximadamente, o tiene que ser exacto?
Porque tampoco estas teniendo en consideracion años bisiestos

Mira, yo empece hace poquito a programar, y lo que haria es lo siguiente:
dividi el calculo en 3 etapas
Primero calcular cuantos dias faltan hasta el fin de año de la primer fecha
despues culcular cuantos años hay entre las 2 fechas
y por ultimo cuantos dias pasaron del ultimo año

Esto te funcionaria solo para fechas en las que los años no son el mismo
pero el otro caso lo haces a parte y listo

No se si estoy ayudando demasiado, que alguien me diga si es el caso, soy nuevo en el foro

Wazzp

Aclaro por las dudas: El programa es para una amiga,en ningun caso debe ser 100% Exacto. Ya le pregunte el tema de la exactitud del programa y me dijo que no hacia falta.. Si en algun momento me pide que lo haga mas exacto usaria un par de Ifs mas para los meses que tengan 30/31/28/29 dias y los años bisiestos

Igual,Ayudes demasiado o no,quiero darte las gracias :) Todo esto me ayuda mas que a realizar el ejercicio(Que sinceramente no tiene tanta importancia) Me ayuda a pensar como programador,y creo que eso no se puede aprender de ningun lado, Solo tu interes y tus ganas de ser un programador pueden servir :) -Solo mi opinion-

Saludos del Wazzp  :rolleyes:

PiroskY

bueno, si no tiene que ser exacto esta bien


Te diria que intentes volver a hacerlo siguiendo los tips de las 3 etapas
Y si no va a ser tan exacto, tampoco te gastes en fijarte cual es la fecha anterior a la otra
Que en la primer variable se ingrese la fecha mas antigua y en la segunda la mas actual

Wazzp

#16
Hmmm... Wow.. Se me acaba de ocurrir una muy buena idea o.o!!! Tu comment fue disparador! Graciaas!! Cuando termine el code lo posteo por si a alguien le interesa usarlo :) (Voy a ponerle lo de los años bisiestos y los meses antes de postearlo asi es 99.99% Exacto)

EDIT:

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;
    void datos(int &d,int &mcont,int &a,int &D,int &Mcont,int &A,int &t)
    {
    cout<<"Ingresa una fecha(DD/MM/AAAA. Debe ser la mas antigua!)"<<endl;
    cin>>d>>mcont>>a;
    cout<<"Ingresaste.."<<d<<"/"<<mcont<<"/"<<a<<endl;

    cout<<"Ingresa una segunda fecha. Debe ser la mas reciente."<<endl;
    cin>>D>>Mcont>>A;
    cout<<"Ingresaste.."<<D<<"/"<<Mcont<<"/"<<A<<endl;
    cout<< "Comparar..? 1=si 2=no-quiero cambiar las fechas 3=salir"
   <<endl;
   cin>>t;
    }

    void ABis(int a,int A,int m,int M)
    {
        if ( ( ( a % 4 == 0 ) && (a % 100 != 0 ) ) || ( (a % 400 ==0)))

            m=1;
             else
                m=2;

       if ( ( ( A % 4 == 0 ) &&( A % 100 != 0 ) ) || ( (A % 400 ==0) ) )

           M=1;
            else
                M=2;
    }

    void meses(int m,int mb,int Mb,int M,int mcont,int Mcont)
    {
        if ((mcont==1)||(mcont==3)||(mcont==5)||(mcont==7)||(mcont==8)||(mcont==10)||(mcont==12))
        {
             mb=31;
        }

            else if ((mcont==4)||(mcont==6)||(mcont==9)||(mcont==11))
            {
                mb=30;

        };
    if ((Mcont==1)||(Mcont==3)||(Mcont==5)||(Mcont==7)||(Mcont==8)||(Mcont==10)||(Mcont==12))
        {
            Mb=31;
        }
        else if ((Mcont==4)||(Mcont==6)||(Mcont==9)||(Mcont==11))
        {
            Mb=30;
        };
    if ((m==1)&&(mcont==2))
    {
        mb=29;
        }
        else if((m==2)&&(mcont==2))
        {
            mb=28;
        }

    }

    void calculo(int d,int m,int a,int X,int mcont,int mb,int Mb,int mb1,int A,int M,int Mcont,int R,int Y)
    //Calcularia la cantidad de dias hasta el fin del año
    {
       {
         while (mcont<=12)
         ABis(a,A,m,M);
       meses(m,mb,Mb,M,mcont,Mcont);
     X+=mb;
     mcont++;
     };
     {
          while (Mcont>=1)
          ABis(a,A,m,M);
       meses(m,mb,Mb,M,mcont,Mcont);
     Y+=Mb;
     Mcont--;
     };
     R=(X-Y);
     cout<<"La respuesta seria: "<<R<<" Dias."<<endl;
     }

   int main()
{
   int d,a,D,A,t,m,M;
   int mb=0;int Mb=0;int mcont=0;
   int X=0;int Mcont=0;
   int Y=0;int mb1=0;
   int R=0;
   datos(d,mcont,a,D,Mcont,A,t);

   do
     {
       switch(t)
       {
            case 1:
            calculo(d,m,a,X,mcont,mb,Mb,mb1,A,M,Mcont,R,Y);
            break;

            case 2:
            cout<<"Revisa las fechas.."<<endl;
            calculo(d,m,a,X,mcont,mb,Mb,mb1,A,M,Mcont,R,Y);
            return 0;
            break;

            default:
            return 0;
            break;
       }
    }while(t!=3);
return 0;
}

Por que se cuelga en lugar de empezar cuando pongo introduzco Comparar en switch?