Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Zadanie 6
- * Ten program oblicza czas, ktory minal od jakies daty.
- */
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct data data;
- struct data {
- int dzien;
- int miesiac;
- int rok;
- };
- int czy_przestepny (int rok) {
- if (rok%4 == 0)
- return 1;
- else
- return 0;
- }
- int ile_dni_w_miesiacu (int miesiac, int rok) {
- int dni = 0;
- switch (miesiac) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- dni = 31;
- break;
- case 2:
- if (czy_przestepny(rok))
- dni = 29;
- else
- dni = 28;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- dni = 30;
- break;
- }
- return dni;
- }
- void ustaw_date (data* Data) {
- int dzien, miesiac, rok;
- do {
- printf ("Rok: ");
- scanf ("%d", &rok);
- } while ( !(rok>0) );
- do {
- printf ("Miesiac: ");
- scanf ("%d", &miesiac);
- } while ( !(1<=miesiac && miesiac<=12) );
- do {
- printf ("Dzien: ");
- scanf ("%d", &dzien);
- } while ( !(1<=dzien && dzien<=ile_dni_w_miesiacu(miesiac, rok)) );
- Data->dzien = dzien;
- Data->miesiac = miesiac;
- Data->rok = rok;
- }
- void pokaz_date (const data* Data) {
- printf("%d.%d.%d r.", Data->dzien, Data->miesiac, Data->rok);
- }
- int ile_dni_od_zera (const data* Data) {
- int dni = Data->dzien; /* Liczy dni z tego miesiaca */
- int i;
- for (i=1; i < Data->miesiac; i++) /* Liczy dni z tego roku */
- dni += ile_dni_w_miesiacu (i, Data->rok);
- for (i=1; i < Data->rok; i++) /* Liczy dni od zera */
- if (czy_przestepny(i))
- dni += 366;
- else
- dni += 365;
- return dni;
- }
- int ile_dni (const data* poczatek, const data* koniec) {
- return ile_dni_od_zera(koniec) - ile_dni_od_zera(poczatek);
- }
- unsigned long int ile_sekund (int dni) {
- return (unsigned long int) dni*60*60*24;
- }
- int czy_wczesniej (const data* poczatek, const data* koniec) {
- int test = 0;
- if (poczatek->rok <= koniec->rok)
- if (poczatek->miesiac <= koniec->miesiac)
- if (poczatek->dzien <= koniec->dzien)
- test = 1;
- return test;
- }
- int main (void) {
- data poczatek;
- data koniec;
- int dni;
- unsigned long int sekund;
- puts ("Podaj date poczatku...");
- ustaw_date (&poczatek);
- printf ("\npoczatek = ");
- pokaz_date (&poczatek);
- printf("\n\n\n");
- puts ("Podaj date konca...");
- ustaw_date (&koniec);
- printf ("\nkoniec = ");
- pokaz_date (&koniec);
- printf("\n\n\n");
- if ( !czy_wczesniej(&poczatek, &koniec) ) {
- puts ("Poczatek mial miejsce pozniej niz koniec...");
- return EXIT_FAILURE;
- }
- dni = ile_dni (&poczatek, &koniec);
- sekund = ile_sekund (dni);
- printf("Od ");
- pokaz_date (&poczatek);
- printf(" do ");
- pokaz_date (&koniec);
- printf(" minelo %d dni, czyli %lu sekund!\n", dni, sekund);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment