Comparar fechas. Ayuda! C++

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

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

Wazzp

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

using namespace std;

int main()
{
   int d,m,a;
   cout<<"Ingresa una fecha en formato DD-MM-AAAA"<<endl;
   cin>>d>>m>>a;
   cout<<"Ingresaste.."<<d<<"/"<<m<<"/"<<a<<endl;
   int D,M,A;
   cout<<"Ingresa una segunda fecha para comparar con la primera.."<<endl;
   cin>>D>>M>>A;
   cout<<"Ingresaste.."<<D<<"/"<<M<<"/"<<A<<endl;
   cout<<"Comparar?? 1=si y 2=no"<<endl;
   int t;
   cin>>t;

   Eleccion:
   switch(t) {
   case '1':
   goto calculo;
   break;
   case '2':
   goto rehacer;
   break;
   default:
   cout <<"Error,Reingresa los datos"<<endl;
   break;
   }
   calculo:
   {
           cout<<"Aki iria el algoritmo para la comparacion"<<endl;
               //El cual aun no se como hacer ^^^^^^^^^^^^^
   }

   rehacer:
   {
       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;
   cout<<"Comparar?? 1=si y 2=no"<<endl;
   goto Eleccion;
   }
   cin.ignore();
   cin.get();
   return 0;
}


Estoy creando este programa que calcula el tiempo que paso entre 2 fechas.. necesito que me tiren alguna indirecta para el algoritmo del calculo.. y por favor,diganme si tengo algo mal en el codigo hasta ahora.. Creo que el switch lo tengo mal porque cada vez que pongo 1 por ejemplo,ejecuta el cout y luego vuelve al principio en lugar de terminar el programa.. gracias de antemano

[L]ord [R]NA

No entiendo siquiera que es lo que quieres, si te explicas bien creo que seria mejor, verifica tambien que el codigo que tengas sea compilable... Evita los GoTo, no estamos en Basic. para eso existen las funciones, los bucles y las sentencias condicionales.

Wazzp

Sinceramente,estaba leyendo uno de los libros que tengo y fue la unica manera en la que se me ocurrio.. La idea es comprar dos fechas diferentes y calcular la cantidad de dias que pasaron entre fecha1 y fecha2.. El codigo compila sin errores ni warnings asi que supongo que esta bien..

[L]ord [R]NA

1) el codigo tiene un error cuando se introducen las fechas... verificalo.
2) El Switch tiene un error, siempre sale default porque solicitas un int y luego lo comparas con un char sin realizar la conversion... Mira la Tabla ASCII.

Compara primero los años, buscales la diferencia, despues los meses y despues los dias, entonces toma en consideracion la longitud del año con respecto a los meses y si el año es o no es bisiesto.

Un consejo: Si el libro que estas leyendo te recomienda GoTo inmediatamente deja de leerlo... te aseguro que quien escribio el libro a suerte debe de saber basic.

Wazzp

#4
No es que lo recomienda.. en un momento aparece un ejemplo con el goto.. Pero no dice nada al respecto.. es como una mencion de que existe.. ahora me fijo y lo corrijo.. Gracias por la ayuda RNA  :D

EDIT: Revisando el Codigo,hice algunas modificaciones y el codigo compila y funciona bien.. Ahora mi problema es como reemplazar los goto.. Deberia usar void x () siendo x una funcion hecha por mi?? Si es asi aun no estoy seguro de como hacerlo, y si no es asi no tengo ni idea.. ayuda?

Littlehorse

CitarEDIT: Revisando el Codigo,hice algunas modificaciones y el codigo compila y funciona bien.. Ahora mi problema es como reemplazar los goto.. Deberia usar void x () siendo x una funcion hecha por mi?? Si es asi aun no estoy seguro de como hacerlo, y si no es asi no tengo ni idea.. ayuda?

Si, usar funciones seria lo ideal. Tal vez te sirva revisar este capitulo de conclase.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Wazzp

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

using namespace std;

int d,m,a,D,M,A;
    int calculo();
    int datos();
    void eleccion(int t);

int main()
{
    int datos();
    {
        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;
    }

    int eleccion(int t);
    {
     cout<<"Comparar?? 1=si, 2=no y 3=salir"<<endl;
       int t;
    cin>>t;

        switch(t)
        {
        case 1:
        break;

        case 2:
        break;

        case 3:
        cout <<"Algun mensaje de salida.."<<endl;
        cin.get();
        return 0;

        default:
        cout <<"Error,Reingresa los datos"<<endl;
        break;

        }
    }


}


No se si voy bien pero por ahora tengo esto.. Alguien me podria decir si de lo de las funciones esta bien? si lo estan hago rapido el algoritmo para el calculo,relleno las funciones que me faltan y lo compilo a ver si funciona..

satu

Hola, la idea es esa pero no lo haces bien. Donde tienes definidas las funciones escribes su código y luego dentro del main solo tienes que llamar a la función:
Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

void datos(int &d, int &m, int &a, int &D, int &M, int &A) //Los parametros son de salida (por referencia)
    {
    //Aqui el code, que en tu caso seria:
    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)
    {
    //Esta funcion calcula el tiempo que ha pasado entre las 2 fechas y lo muestra
    //Aqui el code
    }


int main()
{
    int d, m, a, D, M, A, t;

    //Esto yo lo haria asi
    do{
        datos(d, m, a, D, M, A); //Aqui ya se almecenan en las variables los valores
        cout<<"Comparar?? 1=si, 2=no y 3=salir"<<endl;
        cin>>t;

        switch(t)
            {
            case 1: //Llamas a la funcion calcular y listo
            calcular(d, m, a, D, M, A);
            break;

            case 2: //Por ejemplo pides que se vuelvan a introducir los datos
            cout<<"Vuelve a introducir los datos...."<<endl;
            break;

            case 3:
            cout <<"Algun mensaje de salida.."<<endl;
            cin.get();
            return 0;

            default:
            cout <<"Error"<<endl;
            break;
            }
    }while(t!=3);

return 0;
}


Breakbeat como forma de vida

PiroskY

Che, pero por que primero no intentas hacer el codigo que compare dos fechas?

btw: Tenes que validar que las 2 fechas esten bien o se supone que van a ingresar fechas correctas?

satu

Hola

Eso lo tiene que hacer él, es su tarea.

Y claro que puede comprobar que las fechas estén bien, pero eso ya depende de él. De esta forma tienes que confiar en que la fecha introducida sea válida, pero así está bien, eso ya depende de cómo quiera hacerlo, mientras más comprobaciones "mejor" (nótense las comillas) pero si no se lo piden....

Saludos
Breakbeat como forma de vida