Guest User

Godzio

a guest
Oct 27th, 2011
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.77 KB | None | 0 0
  1. /*
  2.  * Zadanie 6
  3.  * Ten program oblicza czas, ktory minal od jakies daty.
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8.  
  9. typedef struct data data;
  10.  
  11. struct data {
  12.     int dzien;
  13.     int miesiac;
  14.     int rok;
  15. };
  16.  
  17. int czy_przestepny (int rok) {
  18.     if (rok%4 == 0)
  19.         return 1;
  20.     else
  21.         return 0;
  22. }
  23.  
  24. int ile_dni_w_miesiacu (int miesiac, int rok) {
  25.     int dni = 0;
  26.    
  27.     switch (miesiac) {
  28.         case 1:
  29.         case 3:
  30.         case 5:
  31.         case 7:
  32.         case 8:
  33.         case 10:
  34.         case 12:
  35.             dni = 31;
  36.             break;
  37.            
  38.            
  39.         case 2:
  40.             if (czy_przestepny(rok))
  41.                 dni = 29;
  42.             else
  43.                 dni = 28;
  44.             break;
  45.        
  46.         case 4:
  47.         case 6:
  48.         case 9:
  49.         case 11:
  50.             dni = 30;
  51.             break;
  52.     }
  53.     return dni;
  54. }
  55.  
  56. void ustaw_date (data* Data) {
  57.     int dzien, miesiac, rok;
  58.    
  59.     do {
  60.         printf ("Rok: ");
  61.         scanf ("%d", &rok);
  62.     } while ( !(rok>0) );
  63.    
  64.     do {
  65.         printf ("Miesiac: ");
  66.         scanf ("%d", &miesiac);
  67.     } while ( !(1<=miesiac && miesiac<=12) );
  68.    
  69.     do {
  70.         printf ("Dzien: ");
  71.         scanf ("%d", &dzien);
  72.     } while ( !(1<=dzien && dzien<=ile_dni_w_miesiacu(miesiac, rok)) );
  73.    
  74.     Data->dzien = dzien;
  75.     Data->miesiac = miesiac;
  76.     Data->rok = rok;
  77. }
  78.  
  79. void pokaz_date (const data* Data) {
  80.     printf("%d.%d.%d r.", Data->dzien, Data->miesiac, Data->rok);
  81. }
  82.  
  83. int ile_dni_od_zera (const data* Data) {
  84.     int dni = Data->dzien; /* Liczy dni z tego miesiaca */
  85.     int i;
  86.    
  87.     for (i=1;   i < Data->miesiac;   i++) /* Liczy dni z tego roku */
  88.         dni += ile_dni_w_miesiacu (i, Data->rok);
  89.        
  90.     for (i=1;   i < Data->rok;   i++)  /* Liczy dni od zera */
  91.         if (czy_przestepny(i))
  92.             dni += 366;
  93.         else
  94.             dni += 365;
  95.            
  96.     return dni;
  97. }
  98.  
  99. int ile_dni (const data* poczatek, const data* koniec) {
  100.     return ile_dni_od_zera(koniec) - ile_dni_od_zera(poczatek);
  101. }
  102.  
  103. unsigned long int ile_sekund (int dni) {
  104.     return (unsigned long int) dni*60*60*24;
  105. }
  106.  
  107. int czy_wczesniej (const data* poczatek, const data* koniec) {
  108.     int test = 0;
  109.    
  110.     if (poczatek->rok <= koniec->rok)
  111.         if (poczatek->miesiac <= koniec->miesiac)
  112.             if (poczatek->dzien <= koniec->dzien)
  113.                 test = 1;
  114.    
  115.     return test;
  116. }
  117.  
  118. int main (void) {
  119.     data poczatek;
  120.     data koniec;
  121.     int dni;
  122.     unsigned long int sekund;
  123.    
  124.     puts ("Podaj date poczatku...");
  125.     ustaw_date (&poczatek);
  126.     printf ("\npoczatek = ");
  127.     pokaz_date (&poczatek);
  128.     printf("\n\n\n");
  129.    
  130.     puts ("Podaj date konca...");
  131.     ustaw_date (&koniec);
  132.    
  133.     printf ("\nkoniec = ");
  134.     pokaz_date (&koniec);
  135.     printf("\n\n\n");
  136.    
  137.    
  138.     if ( !czy_wczesniej(&poczatek, &koniec) ) {
  139.         puts ("Poczatek mial miejsce pozniej niz koniec...");
  140.         return EXIT_FAILURE;
  141.     }
  142.    
  143.     dni = ile_dni (&poczatek, &koniec);
  144.     sekund = ile_sekund (dni);
  145.    
  146.     printf("Od  ");
  147.     pokaz_date (&poczatek);
  148.     printf("  do  ");
  149.     pokaz_date (&koniec);
  150.     printf("  minelo %d dni, czyli %lu sekund!\n", dni, sekund);
  151.    
  152.    
  153.     return EXIT_SUCCESS;
  154. }
  155.  
  156.  
  157.  
Advertisement
Add Comment
Please, Sign In to add comment