Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: mari2diaz en 22 Julio 2018, 15:26 PM

Título: Ayuda con este programa en C
Publicado por: mari2diaz en 22 Julio 2018, 15:26 PM
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;
}
Título: Re: Ayuda con este programa en C
Publicado por: aurquiel en 23 Julio 2018, 17:08 PM
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;
}
Título: Re: Ayuda con este programa en C
Publicado por: ivancea96 en 23 Julio 2018, 19:59 PM
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
Título: Re: Ayuda con este programa en C
Publicado por: CalgaryCorpus en 24 Julio 2018, 02:21 AM
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?
Título: Re: Ayuda con este programa en C
Publicado por: MAFUS en 24 Julio 2018, 13:54 PM
Y qué tal si de hace con time.h, que ya tiene todo eso pensado?
Título: Re: Ayuda con este programa en C
Publicado por: srWhiteSkull en 25 Julio 2018, 15:04 PM
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
Título: Re: Ayuda con este programa en C
Publicado por: ivancea96 en 25 Julio 2018, 20:31 PM
Basta ver el comentario del código para suponer que la idea es hacerlo a mano.
Título: Re: Ayuda con este programa en C
Publicado por: MAFUS en 26 Julio 2018, 02:07 AM
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.
Título: Re: Ayuda con este programa en C
Publicado por: srWhiteSkull en 26 Julio 2018, 14:38 PM
/* 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.