Suma dni od 1.01.1990.

0

Witam.
Próbuję napisać funkcję, która będzie sumowała dni które upłynęły od 1.01.1990 do daty podanej przez użytkownika... Ogólnie w wyniku działania tej funkcji wynik wychodzi tylko w przybliżeniu dobry... nie mogę znaleźć błędu... Czy mógłby ktoś zerknąć "świeżym okiem" i podpowiedzieć mi czego nie uwzględniłem lub co może być źle??
Pozdrawiam.

int sumowanie(int ddd,int mmm,int rrr)
{
    int i,j,suma=0;
    for(i=1990;i<rrr;i++)
    {
        for(j=1;j<13;j++)
        {
        if(j==1||j==4||j==6||j==9||j==11) suma+=30;
            else if(j==2) suma+=28;
                else suma+=31;
        }
    if(i%4==0 && i%100!=0|| i%400==0)suma++;
    }
    i=1;
    for(i=1;i<mmm;i++)
    {
        if(i==1||i==4||i==6||i==9||i==11) suma+=30;
            else if(i==2) suma+=28;
                else suma+=31;
    if(rrr%4==0 && rrr%100!=0 || rrr%400==0)suma++;
    }
    ddd--;
    suma+=ddd;
    return suma;
}
4

Na pewno tu masz błąd w drugiej części programu gdy iterujesz po miesiącach (w pierwszej części ten warunek jest ok):

if (rrr % 4 == 0 && rrr % 100 != 0 || rrr % 400 == 0)
            suma++;

jak zamienisz na:

if (i==2 && (rrr % 4 == 0 && rrr % 100 != 0 || rrr % 400 == 0))

będzie ok (albo poza pętlą ale też sparawdzać czy ilość miesięcy jest > 2.

1

Jesteś pewny, że musisz iterować po wszystkich dniach, żeby dostać poprawny wynik?

0

Kurcze ktoś jeszcze, jakieś sugestie? :( Wynik nadal nie jest poprawny ;/

1

tak jak pisze @datdata. Nie lepiej policzyc?

mozna zalozyc ze rok ma 364.25 dni

int x = ceil(364.25 * 25); 

i liczymy ile dni jest w tym roku i dodajemy te dwie zmienne do siebie

0

Dobra, tamten kod naprawiony. :D Byłby ktoś uprzejmy i napisałby mi SAM fragment z mnożeniem? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1