Pascal - kalendář

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod tomko665 15. 12. 2010 16:54

Zdravim. Chtěl bych vás poprosit o radu. Ve škole jsme dostali zadání příkladu v pascalu. Na vypracování máme Vánoční prázdniny. Program má funguvat tak, že se zadají dva datumy a ve výsledku dostanu počet dnů mezi něma. Samozřejmostí jsou přestupné roky. Sice už jsem to zkoušel, ale právě přestupné roky mi nějak nevychází. Nevim jak mám určit jejich rozpoznání, abych je mohl přičítat. Jsem v pascalu začátečník, začali jsme ho probírat až letos. Snad jsem na nic nezapomněl. Díky za odpovědi.
tomko665
Junior


Odeslat příspěvekod tomko665 15. 12. 2010 17:11

Moje chyba, měl jsem dopsat, že v zadání bylo orientovat se podle Gregoriánského kalendáře se spodním limitem 1.rok našeho letopočtu. O tom, že každých 100 let přestupný není, ale každých 400 let je, vím. Problém je spíš v tom, že když zadám např. 1.1.1603 a 1.1.1605, tak mi to vyplivne výsledek 730 dnů, místo 731. Prostě nevím jak docílit toho, aby program poznal, že právě 1604 je přestupný.
tomko665
Junior

Odeslat příspěvekod Wikan 15. 12. 2010 17:16

To jako vážně? To vědí i děti v polovině základní školy a je to i mimochodem v tom článku na wikipedii.
...se přestupný den vkládá každý rok, který je dělitelný čtyřmi...

A gregoriánský kalendář platí až od konce 16. století, v některých zemích (např. Rusko) ale začal platit teprve před necelými 100 lety.
Wikan
Pokročilý
Uživatelský avatar

Odeslat příspěvekod tomko665 15. 12. 2010 17:37

Takže by měl ten program vyhodnocovat rok po roku(dejme tomu 250 let) a zjišťovat jestli jsou dělitelné 4? Jak by se to realizovalo? Jinak k té platnosti. Je sice pravda, že nepaltí od té doby jako jsem uvedl já. Tu hranici si vymylslel učitel.
tomko665
Junior

Odeslat příspěvekod Wikan 15. 12. 2010 17:43

if rok mod 4 = 0 then ...
Wikan
Pokročilý
Uživatelský avatar

Odeslat příspěvekod tomko665 15. 12. 2010 17:56

Jo, tohle je řešení pro jeden konkrétní rok, které jsem chtěl použít, ale nevěděl jsem jak docílít toho, aby tahle funkce prověřila všecky roky v rozmezí dvou datumů. Vím, jsem otravný, ale jsem ohledně toho bezradný.
tomko665
Junior

Odeslat příspěvekod Wikan 15. 12. 2010 18:09

for cyklus znáš? Šlo by to i bez něj a bylo by to asi i lepší, ale cyklem je to jednodušší.
Wikan
Pokročilý
Uživatelský avatar

Odeslat příspěvekod gandor 15. 12. 2010 23:04

tomko665: este takto... Dostanes teda 2 datumi... Chces urcit priestupne roky. Zaujimaju ta teda mesiace a dni? V majorite pripadov nie... Takze ich mozeme odignorovat. Z toho dostavame, ze ked sa zada 1.1.1603 a 1.1.1605 tak si vsimame cisielka 1603 a 1605...

Teraz - existuje vec nazyvana cyklus. Na toto je najvhodnejsi for-cyklus. S paskalom som uz hodne dlho nerobil, takze ma ospravedln ak mam nejaku syntakticku chybu, ale principialne to funguje takto:
Kód: Vybrat vše
var i;
for i=1603 to 1605 do
begin
  // tento kod sa vykona 3x
  // tu treba testovat, ci je rok delitelny 4-mi a teda ci je priestupny...
end;
No a teraz ta zaujimava cast... Treba takto testovat prvy a posledny rok? No v tvojom pripade pociatocny treba ale koncovi som tam uz nemal davat... Podla coho som to urcil? No podla toho, ze 1.1.1603 je pred "potencialnym" 29.2.1603 zatial co 1.1.1605 je pred "potencialnym" 29.1.1605...
Ako toto zapracovat do kodu? Poradim, ze hodnoty 1603 a 1605 je dobre mat v premennych a pred spustenim na toho cyklu dat 2 podmienky. No a pokial je "nieco" splnene, tak teba "nieco" pripicitat/odpocitat k premennym... :)

Zakladny napad mas, zvysok by si mal byt schopny dorobit aj sam....
gandor
Mírně pokročilý

Odeslat příspěvekod tomko665 16. 12. 2010 15:20

Díky moc všem za ochotu, problém vyřešen, program napsán. Ještě jednou díky.
tomko665
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků