COMPARAR FECHAS

Iniciado por mateo26, 31 Agosto 2019, 19:17 PM

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

mateo26

Hola, tengo que realizar un programa en C++ que invocando las siguientes funciones sea capaz de comparar fechas. no se como hacer para la salida me suelte lo que necesito.


//Considere que se le proveen 2 funciones con el siguiente perfil:

int comparar_fechas(int d1, int m1, int a1, int d2, int m2, int a2) : Esta función recibe 2 fechas y retorna 1 si la primera es posterior a la segunda, 0 si son iguales o -1 si la primera es anterior a la segunda.
void imprimir_fecha(int d, int m, int a) : Este procedimiento imprime por pantalla la fecha pasada como parámetro con el siguiente formato "d/m/a"
Escriba un programa que solicite al usuario el ingreso de 2 fechas. Cada fecha se ingresará proporcionando un valor entero para el día, mes y año de cada una de las fechas. Deberá almacenar los valores propuestos en variables enteras. A continuación, su programa deberá decidir cuál de las 2 fechas es mayor e informarlo apropiadamente tal como se muestra en los ejemplos de ejecución. Para ello debe utilizar las funciones provistas.


#include <iostream>
using namespace std;

void imprimir_fecha(int d, int m, int a)
{
    cout<< d << "/" << m << "/" << a;
}

int comparar_fechas(int d1, int m1, int a1, int d2, int m2, int a2)
{
    if (a1 < a2)
        return -1;
    else if (a1 > a2)
        return 1;
    else
        if (m1 < m2)
            return -1;
        else if (m1 > m2)
            return 1;
        else
            if (d1 < d2)
                return -1;
            else if (d2 > d1)
                return 1;
            else
                return 0;
}

int main()
{
   int d1,m1,a1,d2,m2,a2;

    //Solicito ingreso primer fecha
    cout << "Ingrese dia de la primer fecha: "<<endl;
    cin >> d1;

    cout << "Ingrese mes de la primer fecha: "<<endl;
    cin >> m1;

    cout << "Ingrese año de la primer fecha: "<<endl;
    cin >> a1;
   
    //Solicito ingreso segunda fecha
    cout << "Ingrese dia de la segunda fecha: "<<endl;
    cin >> d2;

    cout << "Ingrese mes de la segunda fecha: "<<endl;
    cin >> m2;

    cout << "Ingrese año de la segunda fecha: "<<endl;
    cin >> a2;



}

98Fran

Esto puede que te sirva échale un ojo.

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

using namespace std;

struct fecha{
int dia, mes, año;
}d1,d2;

void pedirFecha();
fecha mayor();
void mostrarMayor(fecha);

int main(){

pedirFecha();
fecha fechaMayor = mayor();
mostrarMayor(fechaMayor);




cin.get();
return 0;
}

void pedirFecha(){

cout<<"Defina Fecha[1] --- dia/mes/año: ";
cin>>d1.dia>>d1.mes>>d1.año;
cout<<"\nDefina Fecha[2] --- dia/mes/año: ";
cin>>d2.dia>>d2.mes>>d2.año;

}

fecha mayor(){
fecha m;

if(d1.año == d2.año){
if(d1.mes == d2.mes){
if(d1.dia == d2.dia){
cout<<"Lo 2 son el mismo dia";
}
else{
if(d1.dia > d2.dia){
m = d1;
}
else{
m = d2;
}
}
}
else{
if(d1.mes > d2.mes){
m = d1;
}
else{
m = d2;
}
}
}
else{
if(d1.año > d2.año){
m = d1;
}
else{
m = d2;
}
}

return m;
}

void mostrarMayor(fecha mayor){
cout<<"\n-------------------------------------------";
cout<<"\nLa mayor fecha es: "<<mayor.dia<<"/"<<mayor.mes<<"/"<<mayor.año<<endl;
}

/*PD: usa [code=cpp]*Tu Codigo aquí*
así se vera mucho mejor el código. Saludos*/[/code]

98Fran

#2
Cita de: 98Fran en 31 Agosto 2019, 19:46 PM
Esto puede que te sirva échale un ojo.

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

using namespace std;

struct fecha{
int dia, mes, año;
}d1,d2;

void pedirFecha();
fecha mayor();
void mostrarMayor(fecha);

int main(){

pedirFecha();
fecha fechaMayor = mayor();
mostrarMayor(fechaMayor);




cin.get();
return 0;
}

void pedirFecha(){

cout<<"Defina Fecha[1] --- dia/mes/año: ";
cin>>d1.dia>>d1.mes>>d1.año;
cout<<"\nDefina Fecha[2] --- dia/mes/año: ";
cin>>d2.dia>>d2.mes>>d2.año;

}

fecha mayor(){
fecha m;

if(d1.año == d2.año){
if(d1.mes == d2.mes){
if(d1.dia == d2.dia){
cout<<"Lo 2 son el mismo dia";
}
else{
if(d1.dia > d2.dia){
m = d1;
}
else{
m = d2;
}
}
}
else{
if(d1.mes > d2.mes){
m = d1;
}
else{
m = d2;
}
}
}
else{
if(d1.año > d2.año){
m = d1;
}
else{
m = d2;
}
}

return m;
}

void mostrarMayor(fecha mayor){
cout<<"\n-------------------------------------------";
cout<<"\nLa mayor fecha es: "<<mayor.dia<<"/"<<mayor.mes<<"/"<<mayor.año<<endl;
}

/*PD: usa [code=cpp]*Tu Codigo aquí*
así se vera mucho mejor el código. Saludos*/[/code]

PD: No uso año sino ani-o (sin el -) pero el foro lo cambia automaticamente por que le da la gana xD. No se puede usar el caracter Ñ en C++. Saludos.

Si son más de 2 fechas se pueden usar vectores y es más fácil la verdad pero hice este programa cuando no tenía mucha idea de C++ solo lo básico.

98Fran

#3
Voy a decirte un par de cosas del código para que veas algunos fallos (ya que yo también estoy aprendiendo y me están ayudando por aquí en el foro)

Lo primero:
Código (cpp) [Seleccionar]
void imprimir_fecha(int d, int m, int a)
{
   cout<< d << "/" << m << "/" << a;
}

int comparar_fechas(int d1, int m1, int a1, int d2, int m2, int a2)
{
   if (a1 < a2)
       return -1;
   else if (a1 > a2)
       return 1;
   else
       if (m1 < m2)
           return -1;
       else if (m1 > m2)
           return 1;
       else
           if (d1 < d2)
               return -1;
           else if (d2 > d1)
               return 1;
           else
               return 0;
}


Has creado 2 funciones y no las has llamado en el main(), por tanto cuando inicialices el programa, este va ir a buscar la función main(), va a leer todas las instrucciones de main(), (que en este caso solo es meter valores a las variables) y se va a terminar y no va a hacer nada más.

Para que funcione tus funciones tienes que llamarlas con:


Código (cpp) [Seleccionar]
int main(){
   int d1,m1,a1,d2,m2,a2;

    //Solicito ingreso primer fecha
    cout << "Ingrese dia de la primer fecha: "<<endl;
    cin >> d1;

    cout << "Ingrese mes de la primer fecha: "<<endl;
    cin >> m1;

    cout << "Ingrese año de la primer fecha: "<<endl;
    cin >> a1;

    //Solicito ingreso segunda fecha
    cout << "Ingrese dia de la segunda fecha: "<<endl;
    cin >> d2;

    cout << "Ingrese mes de la segunda fecha: "<<endl;
    cin >> m2;

    cout << "Ingrese año de la segunda fecha: "<<endl;
    cin >> a2;

// y

    int x = comparar_fecha(d1,m1,a1,d2,m2,a2); //Todo esto importante después de los cout/cin de las variables.

    if(x == 0)
cout<<"Son el mismo dia";
    if(x == 1)
    imprimir_fecha(d1,m1,a1); //En el caso de la fecha 1;
    if(x == -1)
    imprimir_fecha(d2,m2,a2); //En el caso de la fecha 2;
}


Y

Código (cpp) [Seleccionar]
{
   if (a1 < a2)
       return -1;
   else if (a1 > a2)
       return 1;
   else
       if (m1 < m2)
           return -1;
       else if (m1 > m2)
           return 1;
       else
           if (d1 < d2)
               return -1;
           else if (d2 > d1)
               return 1;
           else
               return 0;
}

esta mál, el ultimo else if es lo mismo.
d1 <d2 == d2 > d1.


98Fran

#4
Me acabo de dar cuenta de que puede que no sepas que es una estructura xD.
ignora:

Código (cpp) [Seleccionar]
struct fecha{
int dia, mes, año;
}d1,d2;


Cambia:

d1.dia  por d1
d1.mes por m1
d1.an-io por a1
------------------
d2.dia == d2
d2.mes == m2
d2.año == a2

y

int main()
{
  int d1,m1,a1,d2,m2,a2;