Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 2.883 pregleda

Najnovija ↓

Odredjivanje dana u tjednu 21.05.2011. u 16:05 · pre 188 meseci #1
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 ?
Potpis
ex. malak
Re: Odredjivanje dana u tjednu 21.05.2011. u 16:36 · pre 188 meseci
izmenjeno 1 put, poslednji put Aleksandar Ružičić 21.05.2011. u 16:47
  1. Aleksandar Ružičić21.05.2011. u 16:47zapis iz teksta poruke
#2
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..
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: Odredjivanje dana u tjednu 23.05.2011. u 11:52 · pre 188 meseci
izmenjeno 1 put, poslednji put chaami 23.05.2011. u 12:18
  1. chaami23.05.2011. u 12:18zapis iz teksta poruke
#4
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?
Re: Odredjivanje dana u tjednu 23.05.2011. u 13:56 · pre 188 meseci #5
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.
Re: Odredjivanje dana u tjednu 23.05.2011. u 14:32 · pre 188 meseci #6
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.
Potpis
ex. malak
Re: Odredjivanje dana u tjednu 23.05.2011. u 19:19 · pre 188 meseci #7
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme