Ayuda con este programa en C

Iniciado por mari2diaz, 22 Julio 2018, 15:26 PM

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

mari2diaz

Quiero comparar si una fecha es mayor que la otra en este programa si alguien me puede dar una idea de como hacerlo que no sea con if()

/* Escribe un programa para calcular el numero de dias
   que hay entre dos fechas; declarar fecha como una
   estructura */
   
#include<stdio.h>

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

int main(int argc, char *argv[]){
struct fecha f[3];
int i, dia, mes, año;

for(i=0; i<2; i++){
printf("Introduzca fecha %d: ", i+1);
scanf("%d %d %d", &f[i].dia, &f[i].mes, &f[i].año);
}

dia = f[0].dia - f[1].dia;
mes = f[0].mes - f[1].mes;
año = f[0].año - f[1].año;

año = año * 360;
mes = mes * 30;
f[2].dia = año + (mes) + (dia);

printf("\n\n\nDias Trascurridos %d", f[2].dia);
return 0;
}

aurquiel

#1
1-Evitar la ñ usar variables como año
2- Si usas unsigned en la estrutura las demas variabbles tambien deben ser unsgined
3-Declaraste tres estructuras la ultima estructura que aloja el resultado hubiera sido mas factible solo declarar unas variables.
4- El operador ternario (a>b) ? 1:0 puede ser una sustitucion al if.


#include<stdio.h>

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

int main(){
struct fecha f[3];
unsigned int i = 0, dia = 0, mes = 0, año= 0;

for(i=0; i<2; i++){
printf("Introduzca fecha %u: ", i+1);
scanf("%u %u %u", &f[i].dia, &f[i].mes, &f[i].año);
}

dia = f[0].dia - f[1].dia;
mes = f[0].mes - f[1].mes;
año = f[0].anioo - f[1].año;

año = año * 360;
mes = mes * 30;
f[2].dia = anioo + mes + dia;

printf("\n\n\nDias Trascurridos %d", f[2].dia);
printf("La fecha 1 es %s que la fecha 2\n", (dia>=0) ? "menor":"mayor");

return 0;
}

ivancea96

Si bien es cierto que está bien usar tipos que concuerden entre sí, yo no recomendaría usar unsigned salvo que sea totalmente necesario.
Fíjate, por ejmeplo, en esto: (dia>=0) ? "menor":"mayor"
dia es unsigned, así que siempre va a ser mayor o igual a 0.
La lógica y las operaciones cambian, además de que conseguiremos fácilmente un underflow al andar haciendo restas sin comprobaciones (sin ir más lejos, si el dia o el mes de [1] es mayor que el de
  • saldrán resultados incorrectos).

    Y en cuanto a la pregunta original, comparar fechas es como restar. Si el mes de la fecha más alta es menor que el de la más pequeña, igual que en una resta: le restas 1 al año y le sumas 12 al mes. Parecido para los días.

CalgaryCorpus

Hay que considerar que los años pueden ser bisiestos.

Que tal si calcular la distancia hacia una fecha pasada comun de cada fecha y luego la diferencia entre ambas ditancias?
Aqui mi perfil en LinkedIn, invitame un cafe aqui

MAFUS

Y qué tal si de hace con time.h, que ya tiene todo eso pensado?

srWhiteSkull

Cita de: MAFUS en 24 Julio 2018, 13:54 PM
Y qué tal si de hace con time.h, que ya tiene todo eso pensado?

...exacto, como usar difftime() y esas cosas  :rolleyes:
https://en.cppreference.com/w/c/chrono/difftime

ivancea96

Basta ver el comentario del código para suponer que la idea es hacerlo a mano.

MAFUS

A mi me ha dado la impresión de que lo que quiere es saber si una fecha va antes de otra y que desconocía que con time.h se puede hacer.

srWhiteSkull

#8
/* Escribe un programa para calcular el numero de dias
  que hay entre dos fechas; declarar fecha como una
  estructura */


No pone de que forma debes hacer el programa, simplemente te indica que resuelvas la forma para calcular los días entre dos fechas. Y encima fecha puedes declararla como una estructura time_t (Ejemplo, time_t fecha; ).

Si esto no es lo que buscaba el profesor este argumento astuto puede usarse contra él  ;) :xD

PD Hay que tener en cuenta que el resultado de la función difftime() lo devuelve en segundos, no es como si al usarla resolviera completamente el ejercicio.