[ lola1989 @ 14.01.2009. 12:27 ] @
Napisati funkciju za odredjivanje broja dana izmedju dva zadata
datuma. Pomocu posebne funkcije proveriti da li je datum korektno zadat. Koristeci napisane
funkcije, za niz ulaza od kojih svaki sadrzi redni broj osobe i datum rodjenja, odrediti redni broj prve
najstarije osobe. Takodje, za svaku osobu odrediti i stampati njen horoskopski znak.

da li mi neko moze pomoci oko provere korektnosti datuma? s obzirom da svaki mesec ima razlicit br.dana, a tu su i prestupne god..... :-)

HVALA UNAPRED!
[ emranonline @ 19.01.2009. 23:22 ] @
mozda moze i jednostavnije ali ovako sam ja to uradio.

Code:

#include <stdio.h>
#include <math.h>

int prestupnost(int godina) {
    if (godina%4==0 && (godina%100!=0 || godina%4==0))
        return 1; 
    else
        return 0; 

}

int provjera_datuma(int dan, int mjesec, int godina) {
    if (mjesec>12 || mjesec <1)
        return 0;

    if( mjesec==1 || mjesec==3 || mjesec==5 || mjesec==7 || mjesec==8 || mjesec==10 || mjesec==12) {
        if (dan>31 || dan <1)
            return 0;
    }
    if (mjesec==2) {
        if (prestupnost(godina)==1) {
            if (dan>29 || dan<1)
                return 0;
        }


        else {
            if (prestupnost(godina)==0)
                if (dan >28 || dan<1)
                    return 0;
        }
       }



    if (mjesec==4 || mjesec==6 || mjesec==9 || mjesec==1) {
        if (dan>30 || dan <1)
            return 0;

    }
    return 1;
}

int dani(int mjesec, int godina) {
    int ukupno=0,i;
    for (i=1; i<mjesec; i++) {
        if (i==2) {
            if (prestupnost(godina)==1)
                ukupno+=29;
            else
                ukupno+=28;
        }
        else if  (i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12) {
            ukupno+=31;
        }
        else {
            ukupno+=30;
        }
    }
    return (ukupno);

}


int period(int dan1, int dan2, int mjesec1, int mjesec2, int godina1, int godina2) {
    int i, ukupno=0;
    if (godina1>godina2) {
        for (i=godina2; i<godina1; i++) {
            if (prestupnost(i)==1)
                ukupno+=366;
            else
                ukupno+=365;

       }
        ukupno=ukupno + dani(mjesec1,godina1) - dani(mjesec2,godina2);
        ukupno=ukupno+dan1-dan2;

  }
  else if (godina1<godina2) {
    for (i=godina1; i<godina2; i++) {
        if (prestupnost(i)==1)
            ukupno+=366;
        else
            ukupno+=365;

    }
    ukupno= ukupno + dani(mjesec2, godina2) - dani(mjesec1,godina1);
    ukupno= ukupno+dan2-dan1;

  }
   else  if (godina1==godina2) {
        if (mjesec1>mjesec2) {
            ukupno= ukupno + dani(mjesec1,godina1) - dani(mjesec2,godina2);
            ukupno= ukupno +dan1-dan2;


        }
        else if (mjesec1<mjesec2){
            ukupno =ukupno + dani(mjesec2,godina2) - dani(mjesec1,godina1);
            ukupno=ukupno + dan2-dan1;


        }
        else if (mjesec1==mjesec2) {
            ukupno=ukupno+ dan1-dan2;

        }

    }
    return fabs(ukupno);


}


int main()
{
    int dan_prvi, mjesec_prvi, godina_prva,dan_drugi,mjesec_drugi,godina_druga,funkcija;
    do {
        printf("\n Unesite prvi datum (d,m,g): ");
        scanf("%d,%d,%d", &dan_prvi,&mjesec_prvi,&godina_prva);
        funkcija = provjera_datuma(dan_prvi,mjesec_prvi,godina_prva);
        if (funkcija==0)
            printf("\n Neispravan datum!");
    }while (funkcija!=1);
    do {
        printf("\n Unesite drugi datum (d,m,g): ");
        scanf("%d,%d,%d", &dan_drugi,&mjesec_drugi,&godina_druga);
        funkcija = provjera_datuma(dan_drugi,mjesec_drugi,godina_druga);
        if (funkcija==0)
            printf("\n Neispravan datum!");
    }while (funkcija!=1);
    printf("\n Izmedju datuma je proteklo %d dana. \n",period(dan_prvi, dan_drugi, mjesec_prvi,mjesec_drugi,godina_prva,godina_druga));
return 0;
}


[ lola1989 @ 21.01.2009. 11:38 ] @
Hvala na pomoci,puno mi je znacilo!