Zdravím. Za ukol jsem dostal udělat program, co mi vypočítám kolik dní je to od zadaných datumů (asi stačí roky)
Zaklad programu samozřejmě mam příkazy celkem ovládam, jen nevím, co mam zadat do "proměnných" (k var).
přece nebudu sam počítat dny atd. i s přechodnýma rokama a pak to budu postupně zapisovat do pascalu ne?
1 by to učitel poznal
2 by ses sa s tim ... dlouho
Potřebudu nějakou proměnnou, co ma v sobě zadane všecna čísla ( něco jako real) ale k tomu potřebuju zadat, aby to každé 4 roky odečetlo z roku jeden den
díky
pascal a příkazy
- Fox8
- Level 4.5
- Příspěvky: 1703
- Registrován: listopad 07
- Bydliště: Uherský Brod
- Pohlaví:
- Stav:
Offline
pascal a příkazy
Intel Xeon E5-1650v3, 64GB RAM, GTX970, 1TB SSD, 2TB plotna
Re: pascal a příkazy
Nazdar, obávám se že tě to počítání nemine, ale neviděl bych to jako nějakou hrůzu, na to spočítání roků ti stačí jeden cyklus FOR a jestli je rok přestupný nebo ne se dá také poznat velmi snadno, podle pravidel Gregoriánského kalendáře:
1. rok JE přestupný když je dělitelný 4
2. rok NENÍ přestupný když je dělitelný 100
3. rok JE přestupný když je dělitelný 400
Takže například:
V Pascalu už jsem pár let nedělal, tak doufám že jsem tam přepisem z C nestvořil nějakou hrůzu Zkus to pochopit nebo si napiš vlastní, jestli tu podmínku nedokážeš učiteli vlastními slovy vysvětlit, a hlavně zjisti přesně zadání, třeba to nějak dáme společně dohromady.
JInak na výpočet počtu dní mezi dvěma libovolnými daty existuje nějaký geniální vzorec, ale nenapadá mě kde by se dal najít, je to něco podobného jako Gaussův výpočet data velikonočního pondělí, prostě to funguje a nikdo netuší jak
1. rok JE přestupný když je dělitelný 4
2. rok NENÍ přestupný když je dělitelný 100
3. rok JE přestupný když je dělitelný 400
Takže například:
Kód: Vybrat vše
readln(rok);
if( not( not(rok mod 4) and rok mod 100) and rok mod 400)
dni=365;
else
dni=366;
writeln(rok,dni);
V Pascalu už jsem pár let nedělal, tak doufám že jsem tam přepisem z C nestvořil nějakou hrůzu Zkus to pochopit nebo si napiš vlastní, jestli tu podmínku nedokážeš učiteli vlastními slovy vysvětlit, a hlavně zjisti přesně zadání, třeba to nějak dáme společně dohromady.
JInak na výpočet počtu dní mezi dvěma libovolnými daty existuje nějaký geniální vzorec, ale nenapadá mě kde by se dal najít, je to něco podobného jako Gaussův výpočet data velikonočního pondělí, prostě to funguje a nikdo netuší jak
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- Fox8
- Level 4.5
- Příspěvky: 1703
- Registrován: listopad 07
- Bydliště: Uherský Brod
- Pohlaví:
- Stav:
Offline
Re: pascal a příkazy
program dnipocet (input,output);
uses
crt;
const
mesic:array[1..12] of integer =
(31,29,31,30,31,30,31,31,30,31,30,31);
label
1,2,3,4;
var
rokpoc,mespoc,denpoc,rokkon,meskon,denkon:integer;
pocdnu:real;
r1,r2,r,konec:string;
i:integer;
begin
2: clrscr;
write('Pocatecni rok = ');
readln(rokpoc);
write('Pocatecni mesic = ');
readln(mespoc);
3: write('Pocatecni den = ');
readln(denpoc);
r2:='n';
if rokpoc/4=int(rokpoc/4) then r2:='a';
if rokpoc/100=int(rokpoc/100) then r2:='n';
if rokpoc/400=int(rokpoc/400) then r2:='a';
if ((denpoc=29) and (mespoc=2) and (r2='n')) then
begin
writeln('MŘsˇc m jen 28 dnˇ');
goto 3;
end;
writeln;
write('Konecny rok = ');
readln(rokkon);
write('Konecny mesic = ');
readln(meskon);
4: write('Konecny den = ');
readln(denkon);
r2:='n';
if rokkon/4=int(rokkon/4) then r2:='a';
if rokkon/100=int(rokkon/100) then r2:='n';
if rokkon/400=int(rokkon/400) then r2:='a';
if (denkon=29) and (meskon=2) and (r2='n') then
begin
writeln('MŘsˇc m jen 28 dnˇ');
goto 4;
end;
pocdnu:=0;
if (rokkon=rokpoc) and (mespoc=meskon) then
begin
pocdnu:=pocdnu+(denkon-denpoc+1);
goto 1;
end;
if rokkon=rokpoc then
begin
for i:=mespoc+1 to meskon-1 do
begin
pocdnu:=pocdnu+mesic[i];
if i=2 then
begin
r1:='n';
if rokpoc/4=int(rokpoc/4) then r1:='a';
if rokpoc/100=int(rokpoc/100) then r1:='n';
if rokpoc/400=int(rokpoc/400) then r1:='a';
if r1='n' then pocdnu:=pocdnu-1;
end;
end;
end;
if rokpoc<rokkon then
begin
for i:=mespoc+1 to 12 do
begin
pocdnu:=pocdnu+mesic[i];
if i=2 then
begin
r1:='n';
if rokpoc/4=int(rokpoc/4) then r1:='a';
if rokpoc/100=int(rokpoc/100) then r1:='n';
if rokpoc/400=int(rokpoc/400) then r1:='a';
if r1='n' then pocdnu:=pocdnu-1;
end;
end;
for i:=1 to meskon-1 do
begin
pocdnu:=pocdnu+mesic[i];
if i=2 then
begin
r1:='n';
if rokkon/4=int(rokkon/4) then r1:='a';
if rokkon/100=int(rokkon/100) then r1:='n';
if rokkon/400=int(rokkon/400) then r1:='a';
if r1='n' then pocdnu:=pocdnu-1;
end;
end;
end;
if rokkon-rokpoc>=2 then
begin
for i:=rokpoc+1 to rokkon-1 do
begin
r1:='n';
if i/4=int(i/4) then r1:='a';
if i/100=int(i/100) then r1:='n';
if i/400=int(i/400) then r1:='a';
if r1='n' then pocdnu:=pocdnu+365;
if r1='a' then pocdnu:=pocdnu+366;
end;
end;
pocdnu:=pocdnu+(mesic[mespoc]-denpoc+1);
r1:='n';
if rokpoc/4=int(rokpoc/4) then r1:='a';
if rokpoc/100=int(rokpoc/100) then r1:='n';
if rokpoc/400=int(rokpoc/400) then r1:='a';
if (r1='n') and (mespoc=2) then pocdnu:=pocdnu-1;
pocdnu:=pocdnu+denkon;
1: writeln;
writeln('Pocet dnu = ',pocdnu:18:0);
write('Konec (a/n) ');
readln(konec);
if konec = 'n' then goto 2;
end.
toto je asi ono jen sem moc nepochopil, jak to tam ma s tim rmesic ma 28 dni. Me stačí, když bych to nějak sesmolil jen rokpoc rokkon. taky u toho nechapu ten posledni krok 1 asi by se dal vynechat. jen nevim, jak to jednodušej upravit.
moc mi pomužeš, když se na to mrkneš, ne že bych byl uplny idiot na pascal, ale nějak nechapu matiku
--- Doplnění předchozího příspěvku (Stř Led 05, 2011 7:54 pm) ---
Když odmažu dny a měsice tak mi to už haže error. podle mě ten konec tam byt nemusí. Dny a měsíce taky ne, takže mi vypadne par proměnných no a nemusí tam byt ani ty kroky 1 2 3 a navrat k nim. Pak při měsíci s 28 dny to nechci aby mi to nevypočítalo a napsalo, že ma 28 dni, ale aby mi to prostě i s tim spočítalo
Kdyř z toho dostanu 2 nebo 3 budu štastný člověk taky mu mužu něco nakecat, že mi to trochu blblo on to opraví a mezi tim zapomene, že to nešlo a da mi dvojku
uses
crt;
const
mesic:array[1..12] of integer =
(31,29,31,30,31,30,31,31,30,31,30,31);
label
1,2,3,4;
var
rokpoc,mespoc,denpoc,rokkon,meskon,denkon:integer;
pocdnu:real;
r1,r2,r,konec:string;
i:integer;
begin
2: clrscr;
write('Pocatecni rok = ');
readln(rokpoc);
write('Pocatecni mesic = ');
readln(mespoc);
3: write('Pocatecni den = ');
readln(denpoc);
r2:='n';
if rokpoc/4=int(rokpoc/4) then r2:='a';
if rokpoc/100=int(rokpoc/100) then r2:='n';
if rokpoc/400=int(rokpoc/400) then r2:='a';
if ((denpoc=29) and (mespoc=2) and (r2='n')) then
begin
writeln('MŘsˇc m jen 28 dnˇ');
goto 3;
end;
writeln;
write('Konecny rok = ');
readln(rokkon);
write('Konecny mesic = ');
readln(meskon);
4: write('Konecny den = ');
readln(denkon);
r2:='n';
if rokkon/4=int(rokkon/4) then r2:='a';
if rokkon/100=int(rokkon/100) then r2:='n';
if rokkon/400=int(rokkon/400) then r2:='a';
if (denkon=29) and (meskon=2) and (r2='n') then
begin
writeln('MŘsˇc m jen 28 dnˇ');
goto 4;
end;
pocdnu:=0;
if (rokkon=rokpoc) and (mespoc=meskon) then
begin
pocdnu:=pocdnu+(denkon-denpoc+1);
goto 1;
end;
if rokkon=rokpoc then
begin
for i:=mespoc+1 to meskon-1 do
begin
pocdnu:=pocdnu+mesic[i];
if i=2 then
begin
r1:='n';
if rokpoc/4=int(rokpoc/4) then r1:='a';
if rokpoc/100=int(rokpoc/100) then r1:='n';
if rokpoc/400=int(rokpoc/400) then r1:='a';
if r1='n' then pocdnu:=pocdnu-1;
end;
end;
end;
if rokpoc<rokkon then
begin
for i:=mespoc+1 to 12 do
begin
pocdnu:=pocdnu+mesic[i];
if i=2 then
begin
r1:='n';
if rokpoc/4=int(rokpoc/4) then r1:='a';
if rokpoc/100=int(rokpoc/100) then r1:='n';
if rokpoc/400=int(rokpoc/400) then r1:='a';
if r1='n' then pocdnu:=pocdnu-1;
end;
end;
for i:=1 to meskon-1 do
begin
pocdnu:=pocdnu+mesic[i];
if i=2 then
begin
r1:='n';
if rokkon/4=int(rokkon/4) then r1:='a';
if rokkon/100=int(rokkon/100) then r1:='n';
if rokkon/400=int(rokkon/400) then r1:='a';
if r1='n' then pocdnu:=pocdnu-1;
end;
end;
end;
if rokkon-rokpoc>=2 then
begin
for i:=rokpoc+1 to rokkon-1 do
begin
r1:='n';
if i/4=int(i/4) then r1:='a';
if i/100=int(i/100) then r1:='n';
if i/400=int(i/400) then r1:='a';
if r1='n' then pocdnu:=pocdnu+365;
if r1='a' then pocdnu:=pocdnu+366;
end;
end;
pocdnu:=pocdnu+(mesic[mespoc]-denpoc+1);
r1:='n';
if rokpoc/4=int(rokpoc/4) then r1:='a';
if rokpoc/100=int(rokpoc/100) then r1:='n';
if rokpoc/400=int(rokpoc/400) then r1:='a';
if (r1='n') and (mespoc=2) then pocdnu:=pocdnu-1;
pocdnu:=pocdnu+denkon;
1: writeln;
writeln('Pocet dnu = ',pocdnu:18:0);
write('Konec (a/n) ');
readln(konec);
if konec = 'n' then goto 2;
end.
toto je asi ono jen sem moc nepochopil, jak to tam ma s tim rmesic ma 28 dni. Me stačí, když bych to nějak sesmolil jen rokpoc rokkon. taky u toho nechapu ten posledni krok 1 asi by se dal vynechat. jen nevim, jak to jednodušej upravit.
moc mi pomužeš, když se na to mrkneš, ne že bych byl uplny idiot na pascal, ale nějak nechapu matiku
--- Doplnění předchozího příspěvku (Stř Led 05, 2011 7:54 pm) ---
Když odmažu dny a měsice tak mi to už haže error. podle mě ten konec tam byt nemusí. Dny a měsíce taky ne, takže mi vypadne par proměnných no a nemusí tam byt ani ty kroky 1 2 3 a navrat k nim. Pak při měsíci s 28 dny to nechci aby mi to nevypočítalo a napsalo, že ma 28 dni, ale aby mi to prostě i s tim spočítalo
Kdyř z toho dostanu 2 nebo 3 budu štastný člověk taky mu mužu něco nakecat, že mi to trochu blblo on to opraví a mezi tim zapomene, že to nešlo a da mi dvojku
Intel Xeon E5-1650v3, 64GB RAM, GTX970, 1TB SSD, 2TB plotna
Re: pascal a příkazy
Ježkovy woka, to je příšernost, dlouhé jak zdroják Windows a navíc čtyři GOTO* v pascalském programu! To snad někdo přepsal z BASICu, ne? To je sice můj oblíbený jazyk, ale tohle mě fakt rozhodilo šťávy Ten poslední krok od labelu 1 je tam jen jako dotaz jestli chceš skončit nebo počítat nové zadání, takže tím se fakt nemusíš zabývat. To hlášení že měsíc má jen 28 dní tam je proto, kdybys zadal 29. února v nepřestupném roce, to by se dalo krásně a jednoduše řešit přes DO...
Takže jestli to dobře chápu, máš zadat jen počáteční a konečný rok, a spočítat kolik má to období dní. Takže například:
rokpoc=2008;
rokkon=2010;
(takže roky 2008+2009+2010)
pocdnu=366+365+365.
Je to tak?
* Go To Statement Considered Harmful - Edsger Dijkstra 1968
Takže jestli to dobře chápu, máš zadat jen počáteční a konečný rok, a spočítat kolik má to období dní. Takže například:
rokpoc=2008;
rokkon=2010;
(takže roky 2008+2009+2010)
pocdnu=366+365+365.
Je to tak?
* Go To Statement Considered Harmful - Edsger Dijkstra 1968
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- Fox8
- Level 4.5
- Příspěvky: 1703
- Registrován: listopad 07
- Bydliště: Uherský Brod
- Pohlaví:
- Stav:
Offline
Re: pascal a příkazy
Přesně tak. Ted si tu v poznamkovem bloku odmazavam ty dny a měsíce, ale pořád s errorem ...
stačí to smazat a je to ... jo je to přepsané. To go to by se mohlo smazat ale taky mi to dělás errorem ... chce to nějak zacelit asi
už to dělam od 3 hodin... ani s mojů si nepíšu chudina mam od ní 5 sms ...
stačí to smazat a je to ... jo je to přepsané. To go to by se mohlo smazat ale taky mi to dělás errorem ... chce to nějak zacelit asi
už to dělam od 3 hodin... ani s mojů si nepíšu chudina mam od ní 5 sms ...
Intel Xeon E5-1650v3, 64GB RAM, GTX970, 1TB SSD, 2TB plotna
Re: pascal a příkazy
Ten error, neodmazal jsi s těmi měsíci i některý z těch labelů? Pak ho to při kompilaci nenajde... Ale na to kašli, fakt bude jednodušší napsat to po svém než se tímhle salátem prokousávat.
Takže ty roky v cyklu jak jsem psal nahoře, dokonce bych si tipnul že právě na jeho procvičení je tahle úloha určená, co třeba takhle?
Pokud jsi nepobral tu podmínku na přestupný rok, dá se to udělat i jinak, buďto s větvením, nebo postupnými podmíněnými změnami hodnoty. Zvládneš to z toho už sestavit?
Mimochodem, co máš za Pascal, že to děláš v Poznámkovém bloku? Čekal bych že trápíš TurboPascal nebo Delphi v jeho vlastním editoru.
Takže ty roky v cyklu jak jsem psal nahoře, dokonce bych si tipnul že právě na jeho procvičení je tahle úloha určená, co třeba takhle?
Kód: Vybrat vše
pocdnu:=0;
for i=rokpoc to rokkon do
begin
...zjištění přestupnosti...
pocdnu:=pocdnu+delkaroku;
end;
Pokud jsi nepobral tu podmínku na přestupný rok, dá se to udělat i jinak, buďto s větvením, nebo postupnými podmíněnými změnami hodnoty. Zvládneš to z toho už sestavit?
Mimochodem, co máš za Pascal, že to děláš v Poznámkovém bloku? Čekal bych že trápíš TurboPascal nebo Delphi v jeho vlastním editoru.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- Fox8
- Level 4.5
- Příspěvky: 1703
- Registrován: listopad 07
- Bydliště: Uherský Brod
- Pohlaví:
- Stav:
Offline
Re: pascal a příkazy
Kód: Vybrat vše
...zjištění přestupnosti...
pocdnu:=pocdnu+delkaroku;
tohle mi nějak nepobrali moje dvě poslední buňky. Ne mam turbopascal, ale otevřených několik verzí a upravim to v bloku (jako pas) a jen přetahnu na ikonu pascalu a spustim ... v pascalu je aj a to mi trvá
Intel Xeon E5-1650v3, 64GB RAM, GTX970, 1TB SSD, 2TB plotna
Re: pascal a příkazy
Já jsem měl TP7 s počeštěnou nápovědou, ani už nevím jestli menu bylo také česky nebo zůstalo v angličtině.
Tedy uvnitř té smyčky stačí jedna podmínka:
Tedy uvnitř té smyčky stačí jedna podmínka:
Kód: Vybrat vše
if (rok je přestupný)
pocdnu:=pocdnu+366;
else
pocdnu:=pocdnu+365;
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- Fox8
- Level 4.5
- Příspěvky: 1703
- Registrován: listopad 07
- Bydliště: Uherský Brod
- Pohlaví:
- Stav:
Offline
Re: pascal a příkazy
Ne čeština ve psaní by se hodila :)
No tak asi to vzdavam a nějak se mu vykecam a udělam to v průběhu dalších dnů nějak už nemam mozek na psaní v pascalu. Vubec nevim o co jde už
mam jen tohle ....
--- Doplnění předchozího příspěvku (Stř Led 05, 2011 9:39 pm) ---
No zatim diky moc asi to tu budu smolit hodně dlouho diky
No tak asi to vzdavam a nějak se mu vykecam a udělam to v průběhu dalších dnů nějak už nemam mozek na psaní v pascalu. Vubec nevim o co jde už
mam jen tohle ....
--- Doplnění předchozího příspěvku (Stř Led 05, 2011 9:39 pm) ---
No zatim diky moc asi to tu budu smolit hodně dlouho diky
Intel Xeon E5-1650v3, 64GB RAM, GTX970, 1TB SSD, 2TB plotna
Re: pascal a příkazy
Ale no tak, snaž se trochu, to to mám za tebe udělat celé Všechno co potřebuješ už jsem ti tu napsal, akorát to musíš poskládat do sebe.
Co si vzpomínám, tak v TP už se nepsal k názvu programu (input,output), ale nemusely tam být aspoň ty závorky? Jestli mě teda nemate C, kde musí být u všeho.
Jak je to s inicializací proměnných, je v nich po spuštění programu automaticky nula nebo tam zůstal nějaký bordel, který byl zrovna na tom místě v paměti předtím a musíš jí vynulovat sám?
A ještě trochu zapracuj na úpravě, ať se v tom vyznáš až budeš mít v programu pár vnořených cyklů a strukturovaných podmínek, to odsazování je fakt dobrá věc, třeba v Pythonu je dokonce povinné, nahrazuje tam begin a end.
Takže když použiji ten tvůj začátek, napsal bych to nějak takhle:
Ještě si nejsem jistý jak je to s těmi středníky v podmínce, zkontroluj to a zkus přeložit, jestli to bude chodit a hlavně správně počítat.
Co si vzpomínám, tak v TP už se nepsal k názvu programu (input,output), ale nemusely tam být aspoň ty závorky? Jestli mě teda nemate C, kde musí být u všeho.
Jak je to s inicializací proměnných, je v nich po spuštění programu automaticky nula nebo tam zůstal nějaký bordel, který byl zrovna na tom místě v paměti předtím a musíš jí vynulovat sám?
A ještě trochu zapracuj na úpravě, ať se v tom vyznáš až budeš mít v programu pár vnořených cyklů a strukturovaných podmínek, to odsazování je fakt dobrá věc, třeba v Pythonu je dokonce povinné, nahrazuje tam begin a end.
Takže když použiji ten tvůj začátek, napsal bych to nějak takhle:
Kód: Vybrat vše
program pocetdnu();
uses crt;
var prvrok, druhrok, pocdnu, i :integer;
begin
clrscr;
{zadani vstupnich dat}
pocdnu=0;
write('Zadej pocatecni rok: );
readln(prvrok);
write('Zadej koncovy rok: );
readln(druhrok);
{vypocet}
for i=prvrok to druhrok do
begin
if (not(not(i mod 4) and i mod 100) and i mod 400)
pocdnu:=pocdnu+365;
else
pocdnu:=pocdnu+366;
end;
{zobrazeni vysledku}
writeln('Pocet dni: ',pocdnu);
end.
Ještě si nejsem jistý jak je to s těmi středníky v podmínce, zkontroluj to a zkus přeložit, jestli to bude chodit a hlavně správně počítat.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- Fox8
- Level 4.5
- Příspěvky: 1703
- Registrován: listopad 07
- Bydliště: Uherský Brod
- Pohlaví:
- Stav:
Offline
Re: pascal a příkazy
V pascalu žadne složitosti s vymazavanim. Je to tam v celku jednoduché u textu musí byt zavorky ale jak u čeho no. Stejně nechapu na co to je, když je t ojen učební pomůcka diky za rady toto potřebuju ted už se v tom vyznam.... díííky moc
Intel Xeon E5-1650v3, 64GB RAM, GTX970, 1TB SSD, 2TB plotna
Re: pascal a příkazy
Účel je jeden - Pascal byl vymyšlený speciálně pro výuku strukturovaného programování a algoritmizace, má proto pár vlastností, kterými tě donutí napsat program natolik slušně, aby ses z něj za pár let nepozvracel, až ho někde vyhrabeš, a tyhle zásady ti má dostat do krve. Například je strašně ukecaný, všechno musíš deklarovat předem, všude samé begin a end, všechno hlídá a jakmile se někde vyskytne sebemenší problém, tak ti ho hned omlátí o hlavu. Ale to oceníš až někdy za deset let, když si kvůli tomu nenabiješ hubu na nějaké úplně zbytečné ptákovině (a nemusí to být při programování). Na druhou stranu se v něm zase strašně blbě dělají velké projekty, i když i to jde, někdo v Pascalu dokonce napsal operační systém! To je věc na kterou se opravdu nehodí.
Perlička na závěr, víš že celý pascalský program můžeš mít v jednom jediném řádku? Akorát za end. na konci musíš odentrovat. Ale zkus se v takovém programu vyznat a udělat v něm sebemenší opravu
Ještě alternativní způsob té podmínky, takhle je to pochopitelnější, pokud dostatečně nerozumíš tomu složenému logickému výrazu:
P.S. pořádně ten program otestuj, já jsem sice ty hlavní kousky odladil u mě, ale mohla se vloudit chybička při přepisování z Céčka a pak při jejich skládání. Hodí se například intervaly 1990-2010 a 1890-1910, protože rok 2000 byl přestupný, zatímco rok 1900 nebyl, takže výsledky se musí lišit o jeden den: 7670 a 7669.
Perlička na závěr, víš že celý pascalský program můžeš mít v jednom jediném řádku? Akorát za end. na konci musíš odentrovat. Ale zkus se v takovém programu vyznat a udělat v něm sebemenší opravu
Ještě alternativní způsob té podmínky, takhle je to pochopitelnější, pokud dostatečně nerozumíš tomu složenému logickému výrazu:
Kód: Vybrat vše
for i=prvrok to druhrok do
begin
if i mod 4
pocdnu:=pocdnu+365; {je zbytek po dělení 4, např. 2005 - není přestupný}
else
if i mod 100 {sem se dostane jen když je dělitelný 4}
pocdnu:=pocdnu+366; {je zbytek po dělení 100, např. 2008 - je přestupný}
else
if i mod 400 {sem se dostane jen když je dělitelný 4 i 100}
pocdnu:=pocdnu+365; {je zbytek po dělení 400. např. 1900 - není přestupný}
else
pocdnu:=pocdnu+366; {např. 2000 - je přestupný}
end;
P.S. pořádně ten program otestuj, já jsem sice ty hlavní kousky odladil u mě, ale mohla se vloudit chybička při přepisování z Céčka a pak při jejich skládání. Hodí se například intervaly 1990-2010 a 1890-1910, protože rok 2000 byl přestupný, zatímco rok 1900 nebyl, takže výsledky se musí lišit o jeden den: 7670 a 7669.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
-
Prosím o pomoc s příkazy v Powershell Příloha(y)
od Peťa » 08 kvě 2024 10:45 » v Windows 11, 10, 8... - 3
- 761
-
od petr22
Zobrazit poslední příspěvek
08 kvě 2024 11:26
-
-
- 2
- 2708
-
od Kopusek
Zobrazit poslední příspěvek
02 pro 2023 10:13
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů