Foro de elhacker.net

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()

Código
  1. /* Escribe un programa para calcular el numero de dias
  2.    que hay entre dos fechas; declarar fecha como una
  3.    estructura */
  4.  
  5. #include<stdio.h>
  6.  
  7. struct fecha{
  8. unsigned int dia, mes, año;
  9. };
  10.  
  11. int main(int argc, char *argv[]){
  12. struct fecha f[3];
  13. int i, dia, mes, año;
  14.  
  15. for(i=0; i<2; i++){
  16. printf("Introduzca fecha %d: ", i+1);
  17. scanf("%d %d %d", &f[i].dia, &f[i].mes, &f[i].año);
  18. }
  19.  
  20. dia = f[0].dia - f[1].dia;
  21. mes = f[0].mes - f[1].mes;
  22. año = f[0].año - f[1].año;
  23.  
  24. año = año * 360;
  25. mes = mes * 30;
  26. f[2].dia = año + (mes) + (dia);
  27.  
  28. printf("\n\n\nDias Trascurridos %d", f[2].dia);
  29. return 0;
  30. }
  31.  


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.


Código
  1. #include<stdio.h>
  2.  
  3. struct fecha{
  4. unsigned int dia, mes, año;
  5. };
  6.  
  7. int main(){
  8. struct fecha f[3];
  9. unsigned int i = 0, dia = 0, mes = 0, año= 0;
  10.  
  11. for(i=0; i<2; i++){
  12. printf("Introduzca fecha %u: ", i+1);
  13. scanf("%u %u %u", &f[i].dia, &f[i].mes, &f[i].año);
  14. }
  15.  
  16. dia = f[0].dia - f[1].dia;
  17. mes = f[0].mes - f[1].mes;
  18. año = f[0].anioo - f[1].año;
  19.  
  20. año = año * 360;
  21. mes = mes * 30;
  22. f[2].dia = anioo + mes + dia;
  23.  
  24. printf("\n\n\nDias Trascurridos %d", f[2].dia);
  25. printf("La fecha 1 es %s que la fecha 2\n", (dia>=0) ? "menor":"mayor");
  26.  
  27. return 0;
  28. }
  29.  


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
  • 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.


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
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
Código:
/* 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.