[ Danijel Bulic @ 21.05.2011. 15:05 ] @
Moze mala pomoc, trebam unijeti godinu i onda preko funkcija napisati koji je dan taj datum. Algoritam sam nasao na netu negdje, otprilike mi je jasno kako radi samo sto program ne ispisuje dobar rezultat, npr. za danasnji dan kaze srijeda a subota ako smak svijeta nije nesto poremetio :D
Code:
#include <iostream>

using namespace std;

int nadnevakUbroj(int dan, int mj, long godina);
void danUtjednu(int);

int main()
{
    danUtjednu(nadnevakUbroj(21,5,2011));
    return 0;
}

int nadnevakUbroj(int dan, int mj, long godina)
{
    // odredjivanje dana na osovnu datuma
    long datum;
    int m,g,x;
    x =(14-mj)/12;
    g = godina - x;
    m = mj - 2 + 12*x;
    datum = dan + 31*mj/12 - 2 + g + g/4 - g/100 + g/400;
    return datum%7;
}

void danUtjednu(int n)
{
    switch (n)
    {
        case 0:
        cout << "Ponedjeljak" << endl;
        break;
        case 1:
        cout << "Utorak" << endl;
        break;
        case 2:
        cout << "Srijeda" << endl;
        break;
        case 3:
        cout << "Cetvrtak" << endl;
        break;
        case 4:
        cout << "Petak" << endl;
        break;
        case 5:
        cout << "Subota" << endl;
        break;
        default:
        cout << "Nedjelja" << endl;
    }
return 0;
}



Jel moze neki savjet ili pomoc ?
[ Aleksandar Ružičić @ 21.05.2011. 15:36 ] @
Ne programiram u C++u ali evo ti pseudo, mozda pomogne:
Code:

/* 
 day: 1 .. 31 
 month: 1 .. 12
*/
function weekDay(day, month, year) {

   days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

   num_days = 0;

   month -= 1;

   for (i = 0; i < month; i++) {
      num_days += days_in_month[i];
   }

   if (month > 1 && year % 4 == 0) {
      num_days += 1;
   }

   num_days += day;

   return num_days % 7;
}


posto je pseudo kod nisam testirao, ali mislim da je to to :)

weekDay ce da ti vrati broj od 0 do 6 (0 = ponedeljak, 6 = nedelja)

edit: sad skontah da ce ovo da radi samo ako je prvi januar ponedeljak :/ ipak mora malo komplikovaniji kod..

[Ovu poruku je menjao Aleksandar Ružičić dana 21.05.2011. u 16:47 GMT+1]
[ X Files @ 21.05.2011. 19:49 ] @
Pogledaj i druge algoritme (kljucna rec: DayOfWeek):

http://www.planet-source-code....sp?txtCodeId=2857&lngWId=3
http://everything2.com/user/lo...y+of+the+week+for+a+given+date

(Naravno, uvek proveri kakav autoritet stoji iza koda, da ne bude posle...)
[ chaami @ 23.05.2011. 10:52 ] @
Imaš jednu malu gršku u kodu.

datum = dan + 31*m/12 - x + g + g/4 - g/100 + g/400 - 1;

Deo koji ti računa sa kojim danom počinje mesec je: 31*m/12-x umesto: 31*mj/12-2
ono -1 na kraju je moralo da se doda jer si u switch stavio da ti dani kreću od ponedeljka,
ako to ispraviš i kreneš od nedelje, pošto je prvog januara prve godine bila nedelja (zar se ne sećaš :)),
onda ćeš izbaciti to -1.

Druga greška ti je funkcija danUtjednu koja je void (šta će ti u njoj return 0;)

I jedno pitanje. Koji je ovo algoritam, kako se zove i gde si ga našao?

[Ovu poruku je menjao chaami dana 23.05.2011. u 12:18 GMT+1]
[ chaami @ 23.05.2011. 12:56 ] @
Citat:
chaami: Imaš jednu malu gršku u kodu.

datum = dan + 31*m/12 - x + g + g/4 - g/100 + g/400 - 1;

Deo koji ti računa sa kojim danom počinje mesec je: 31*m/12-x umesto: 31*mj/12-2
ono -1 na kraju je moralo da se doda jer si u switch stavio da ti dani kreću od ponedeljka,
ako to ispraviš i kreneš od nedelje, pošto je prvog januara prve godine bila nedelja (zar se ne sećaš :)),
onda ćeš izbaciti to -1.

Druga greška ti je funkcija danUtjednu koja je void (šta će ti u njoj return 0;)

I jedno pitanje. Koji je ovo algoritam, kako se zove i gde si ga našao?

[Ovu poruku je menjao chaami dana 23.05.2011. u 12:18 GMT+1]


Mnogo se bre ti pravis pametan.

datum = dan + 31*m/12 - x + godina + g/4 - g/100 + g/400 - 1; // ide godina a ne g

i prvi januar prve godine je bio ponedeljak, tako da je switch dobar, ali ono -1 mora da ide.
[ Danijel Bulic @ 23.05.2011. 13:32 ] @
Citat:
chaami: Imaš jednu malu gršku u kodu.

datum = dan + 31*m/12 - x + g + g/4 - g/100 + g/400 - 1;

Deo koji ti računa sa kojim danom počinje mesec je: 31*m/12-x umesto: 31*mj/12-2
ono -1 na kraju je moralo da se doda jer si u switch stavio da ti dani kreću od ponedeljka,
ako to ispraviš i kreneš od nedelje, pošto je prvog januara prve godine bila nedelja (zar se ne sećaš :)),
onda ćeš izbaciti to -1.

Druga greška ti je funkcija danUtjednu koja je void (šta će ti u njoj return 0;)

I jedno pitanje. Koji je ovo algoritam, kako se zove i gde si ga našao?

[Ovu poruku je menjao chaami dana 23.05.2011. u 12:18 GMT+1]


www.fsb.hr/.../ZS/.../kako_iz_datuma_odrediti_dan_u_tjednu.pdf

Mislim da cu ipak procesljati jos koji algoritam :D

ako nista vracam se ovoj metodi i savjetima.
[ chaami @ 23.05.2011. 18:19 ] @
Sad sam gledao na ovoj stranici za koju si stavio link i to je u stvari neka verzija zellerevog sistema koji za prvi mesec racuna mart. Ala sam se ja nalupao gore. Ono -x+godina mu dodje isto sto i +g.
Lepo je covek napisao formulu koja radi perfektno: datum = dan + 31*m/12 + g + g/4 - g/100 + g/400