Advertisement
Lautaroleguizamon

Fechas Tópicos.

Aug 18th, 2023
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.69 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4.  
  5. typedef struct
  6. {
  7.     int d;
  8.     int m;
  9.     int a;
  10. } Fecha;
  11.  
  12. void ingresarFecha(Fecha *);
  13. void ingresarEnteroPos(int *);
  14. Fecha sumaDiasAFecha(Fecha*, int);
  15. bool esFechaValida (const Fecha*);
  16. int cantDiasMes(int, int);
  17. bool esBisiesto(int);
  18. int main()
  19. {
  20.     Fecha fInicio;
  21.     int dias;
  22.     ingresarFecha(&fInicio);
  23.     //ingresarEnteroPos(&dias);
  24.     //Fecha fsuma= sumaDiasAFecha(&fInicio, dias);
  25.     return 0;
  26. }
  27.  
  28. void ingresarFecha(Fecha* f) // indica que la variable apuntada por el puntero no puede ser modificada desde este puntero
  29. {
  30.  
  31.     puts("\nIngrese una fecha (D/M/A): "); //puedo guardar con este formato si meto un caracter que no es un digito, anda tambien con -
  32.     scanf("%d/%d/%d",&f->d, &f->m, &f->a); // el operador -> hace la desreferencia al puntero a la estructura en su lado izquierdo, y en el lado derecho el campo de esa estructura
  33.     while(!esFechaValida(f))//no hace falta poner nada porque ya es puntero
  34.     {
  35.         puts("\nFecha invalida. Ingresela de nuevo:");
  36.         scanf("%d/%d/%d",&f->d, &f->m, &f->a);
  37.     }
  38. }
  39.  
  40. bool esFechaValida (const Fecha* fecha)
  41. {
  42.     if(fecha->a>=1601)
  43.         if(fecha->m>=1&&fecha->m<=12)
  44.             if(fecha->d>=1&&fecha->d<=cantDiasMes(fecha->m, fecha->a))
  45.                 return true;
  46.     return false;
  47. }
  48.  
  49. int cantDiasMes(int m, int a)
  50. {
  51.     int dm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  52.     if(m==2&&esBisiesto(a))
  53.         return 29;
  54.     return dm[m];
  55. }
  56.  
  57. bool esBisiesto (int anio)
  58. {
  59.     return anio%4==0&&(anio%100!=0||anio%400==0);
  60. }
  61.  
  62. //se puede definir una macro, como #define esBisiesto(anio%4==0&&(anio%100!=0||anio%400==0))
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement