Diskuze: Dny mezi 2 daty

Ostatní jazyky Delphi Delphi (Pascal) Dny mezi 2 daty

Avatar
vgl
Člen
Avatar
vgl:

Zdravím,

potřeboval bych pomoci s tímto příkladem :
"Napište program v jazyku Object Pascal, kterým se určí počet dní, které uplynou mezi zadanými dvěma daty. Každé z dat je zadáno trojicí čísel ve tvaru den DD MM
RRRR."

Vím si rady pouze v případě, že bych měl zadávat pouze roky. Jsem na tohle docela jelito, takže vítám jakékoli popostrčení :).

 
Odpovědět 29.5.2015 20:58
Avatar
Fredep
Redaktor
Avatar
Odpovídá na vgl
Fredep:

Ahoj, moc ti toho neporadím, ale asi bych to udělal tak, že si vytvořím dvě proměnné typu TDate, do kterých uložím ty data. Poté je jen nějak odečtu od sebe. Už si bohužel nepamatuji, jak se to dělá, musel bys pohledat. :(
TDate počítá s přestupnými roky, takže by neměl být problém. :)

Nahoru Odpovědět 29.5.2015 21:34
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na vgl
Martin Dráb:

Ono je to spíš pracné než zábavné, pokud to máš dělat tak, jak by se vyučující(mu) líbilo, tzn. to ručně počítat. Je třeba dávat pozor na přestupné roky (každý čtvrtý, ale myslím, že každý stý a čtyřstý zase přestupné nejsou) a přestupné únory. Dá se v zásadě postupovat tak, že nejdříve spočítáš počet čistých let mezi dvěma daty (když je vzdálenost 2,5 roku, tak to znamená dva čisté roky), pak přejít na měsíce a případně na dny. Další možnost je, že každé datum si vyjádříš jako počet dní od určitého roku (třeba od roku 1600, nebo od roku 0) a pak je prostě odečteš.

Já používám (pravda, nepíšu ji multiplatformě) ve Windows následující postup:

  1. vyplním strukturu SYSTEMTIME prvním datem,
  2. přes SystemTimeToFi­leTime ji převedu na čas vyjádřený jako 64bitové číslo (jedná se o počet 100 ns jednotek od 1.1.1601),
  3. body 1) a 2) provedu s druhým datem,
  4. obě 64bitová čísla od sebe odečtu. Pak už stačí výsledek pouze vydělit číslem (86400*10000000), což je počet 100 ns jednotek za den a mělo by být hotovo.
Nahoru Odpovědět  +1 29.5.2015 22:47
2 + 2 = 5 for extremely large values of 2
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na vgl
Jan Vargovský:

Pekne reseni z uvy, pak pošlu inspiraci.

 
Nahoru Odpovědět 30.5.2015 11:28
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.