» »

[NALOGA][C] iskanje petkov 13

[NALOGA][C] iskanje petkov 13

seawolf ::

Živjo!

Že par dni se mučim s tem programom ma mi enostavno ne uspe priti do konca.

Naloga:
V programskem jeziku C napišite program petek13, ki v danem časovnem intervalu, podanem kot parameter ukazne vrstice, izpiše vse petke 13. Program mora upoštevati tudi prestopna leta in izhajati iz trenutnega datuma in dneva.

Zgled:
petek13 1.1.2000 31.12.2002
izpiše
petek: 13.10.2000
petek: 13.4.2001
petek: 13.7.2001
petek: 13.9.2002
petek: 13.12.2002

Vse kar mi je do sedaj vspelo narediti je prebrati trenutni datum in parametre ukazne vrstice, naprej pa se mi ne sanja kako it. Ce kdo ve kaj je potrebno storiti bi mu bil hvalezen.

Hvala za morebitno pomoc.
If anything can go wrong, it will.

snow ::

Mislim da obstaja nek algoritem, ki ti iz datuma pove kateri dan je(enkrat smo o tem debatirali tudi v znanost in tehnologija). Pogooglaj malo.

No potem ko imaš algoritem se sprahodiš po vseh 13. tih dnevih vseh mesecev znotraj intervala in pogledaš če je to petek. Če je ga izpišeš.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

seawolf ::

ja sej katiri dan je trenutno vem to že dobim skupaj z datumom ampak potem kako preverit če je 13 dan petek ne vem, sklepam da je potrebno uporabiti kakšno for zanko ampak ne vem kako jo oblikovat.
If anything can go wrong, it will.

gumby ::

za prestopno leto obstaja nek preprost test - google it

vzames en datum, ki je petek (recimo 25.11.2005). nato v eni zanki pristejes vedno 7 dni in cekiras, ce pade na trinajstega. preverit moras tud, ce si prestopil v nov mesec ali leto, kar pa je spet dokaj enostavno za naredit

na tak nacin ne rabis nobenega fancy alogritma:)


btw imam obcutek, da se stvar zacne ponavljat po dolocenem stevilu let... bo to kak dezurni matematik potrdil ali ovrgel:)

snow ::

za vse 13.mesec.leto znotraj intervala.. poglej če je 13.mesec.leto po formuli iz strani: http://mathforum.org/dr.math/faq/faq.calendar.html (glej: How do I find the day of the week for any date?)


druga možnost je pa zgoraj ja. naštimaš dan na prvi petek (hmm kako že? ja najbrž bo treba en algoritem uporabit.. tak kot zgoraj imo).. nato pa prestavljaš dan po 7 naprej in ustrezno spreminjaš mesec in leto. če pade dan na 13 je to to.
ta varianta se mi zdi da rabi malo več dela? možno da gre tale verzija še malo hitreje.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

veteran ::

nato pa prestavljaš dan po 7 naprej

Hehe, a je kakšna varianta, da npr 20. v mesecu (če 13 prišteješ 7) pade na petek trinajstega? :))

Seawolf, zguglaj "Julian date day of week", boš našel eno funkcijo, ki ti vrne dan v tednu. Vzameš prvi 13 znotraj danega intervala, preveriš, če je petek in ga izpišeš, nato pa samo prištevaš mesece in leta in ponavljaš, dokler ne prideš do konca intervala. Ja?

gumby ::

ni fora v tem... na moj nacin ne rabis algoritma, ki ti pove kateri dan je na dolocen datum

veteran ::

Kako boš pa dobil prvi petek v intervalu? ;)

gumby ::

25.11.2005 je petek, saj sem napisal

veteran ::

Torej bi ti kar v program napisal, da je 25.11.2005 petek.

Aha, zgoraj piše 'Program mora upoštevati tudi prestopna leta in izhajati iz trenutnega datuma in dneva'. Očitno bo treba za trenutni datum ponucati funkcijo za izračun dneva (ali pa zahtevati vnos dneva in datuma), potlej pa malo telovaditi s prištevanjem ali odštevanjem. Zabavno. ;)

gumby ::

hmm... potem pa ne ostane drugo, kot algoritem za ugotavljanje dneva.
malo povrsno sem prebral nalogo:8)

seawolf ::

ugotoviti kateri dan ni problem, ima c to že vse noter in to sm tudi ugotovil kako narediti (uporabis ukaz time), prestopno leto ugotovis z if leto%4=0, mučilo me je zanka kaj naj dela in zdaj sem neko idejo dobil tako da hvala.
If anything can go wrong, it will.

Jernej L ::

če bi namesto c-ja bil delphi bi ti že pošiljal rešitev.. :/

McAjvar ::

pazi!

prestopno leto ugotovis z if leto%4=0

to ne drzi. na zgoraj omenjeni povezavi si lahko preberes:
Every fourth year is a leap year. However, every hundredth year is not a leap year. Every four hundred years, there's a leap year after all.


prestopna leta bos moral bolj natancno opredeliti, zgornji if ne zadosti vsem pogojem.
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov

seawolf ::

odločil sem se da bo program deloval kar na forumili ki je na zgornji strani (f = k + [(13*m-1)/5] + D + [D/4] + [C/4] - 2*C) tako ne bo potrebno ugotavljati nobenih prestopnih let ker potrebujem samo 13 v mesecu.
If anything can go wrong, it will.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Za težave s PS3 odgovoren ARM

Oddelek: Novice / Igre
103807 (3247) neoto
»

Ne prižigajte prvotnih PlayStation 3

Oddelek: Novice / Konzole
165511 (4364) fiore
»

[PHP]Timestamp in mysql

Oddelek: Programiranje
81540 (1205) C=64
»

petek, trinajstega

Oddelek: Loža
261112 (712) Azz_Kikr
»

Program....

Oddelek: Programiranje
8706 (515) virtual_reality

Več podobnih tem