pascal a příkazy
- Fox8
- Level 4.5
- Příspěvky: 1703
- Registrován: listopad 07
- Bydliště: Uherský Brod
- Pohlaví:
- Stav:
Offline
Re: pascal a příkazy
funguje mi to ,ale u roku 2000 - 2001 mi to spočítá 732 dní to same rok 2010 a 2011
Intel Xeon E5-1650v3, 64GB RAM, GTX970, 1TB SSD, 2TB plotna
Re: pascal a příkazy
No, v Céčku mi to dává 731 a 730, takže bude problém někde jinde, jak je to u Pascalu s prioritou vyhodnocování u té podmínky? Zkus to takhle:
Ono je možné že and se vyhodnotí dřív než spočítá mod! Kdyby to pořád nešlo, zkus tam místo toho dát ten druhý kód, s tím větvením.
Vyzkoušej i jednotlivé roky, když zadáš třeba 2001 2001 tak to musí spočítat 365. A když je zadáš opačně, tak se nestane nic, vyjde nula.
Kód: Vybrat vše
if (not(not(i mod 4) and (i mod 100)) and (i mod 400))
Ono je možné že and se vyhodnotí dřív než spočítá mod! Kdyby to pořád nešlo, zkus tam místo toho dát ten druhý kód, s tím větvením.
Vyzkoušej i jednotlivé roky, když zadáš třeba 2001 2001 tak to musí spočítat 365. A když je zadáš opačně, tak se nestane nic, vyjde nula.
"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)
Re: pascal a příkazy
Tak jsem rozchodil TP pod DOSBoxem (protože Linux) a nebylo to úplně jednoduché, některé funkce mi ho shodí, třeba dost užitečné Ctrl+F9
To mi řekni jak jsi to vůbec zkompiloval? S takovou hromadou chyb co jsem tam nasázel! Číslo není logický výraz, před else nesmí být středník, zato mi tam chyběl then... Tos' mi to nemohl říct? Je vidět že za ty roky jsem toho fakt hodně zapomněl, v C je to trochu jednodušší (a jednotnější). Nakonec mě dostal šestnáctibitový integer, nevešel se tam ani součet celého století, takže jsem musel moc vzpomínat jak se zrovna v Pascalu jmenuje ten dvaatřicetibitový typ - až na třetí pokus jsem se trefil
Nebo zkráceně, ale méně přehledně:
Ještě by tam neuškodila kontrola vstupních dat, protože se zápornými roky to bude počítat nesmysly a rok nula vůbec není, navíc by se dalo počítat až od roku 1600, protože gregoriánský kalendář byl zavedený v roce 1582, ale aby to nebylo tak jednoduché, tak spoustě zemí trvalo dost let než na něj přešly, třeba Řecko až v roce 1923! I tak to bylo ale o dost dřív než v Anglii dostaly ženy volební právo


Kód: Vybrat vše
program pocetdnu;
uses crt;
var prvrok, druhrok, i:integer;
var pocdnu:longint;
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 i mod 4 > 0 then
pocdnu:=pocdnu+365
else
if i mod 100 > 0 then
pocdnu:=pocdnu+366
else
if i mod 400 > 0 then
pocdnu:=pocdnu+365
else
pocdnu:=pocdnu+366;
end;
{zobrazeni vysledku}
writeln('Pocet dnu: ',pocdnu);
readln;
end.
Nebo zkráceně, ale méně přehledně:
Kód: Vybrat vše
for i:=prvrok to druhrok do
begin
if not(not(i mod 4 > 0)and(i mod 100 > 0))and(i mod 400 > 0) then
pocdnu:=pocdnu+365
else
pocdnu:=pocdnu+366;
end;
Ještě by tam neuškodila kontrola vstupních dat, protože se zápornými roky to bude počítat nesmysly a rok nula vůbec není, navíc by se dalo počítat až od roku 1600, protože gregoriánský kalendář byl zavedený v roce 1582, ale aby to nebylo tak jednoduché, tak spoustě zemí trvalo dost let než na něj přešly, třeba Řecko až v roce 1923! I tak to bylo ale o dost dřív než v Anglii dostaly ženy volební právo

"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
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
1:
if not((i mod 4=0) and (i mod 100=0) and (i mod 400=0)) then
pocdnu:=pocdnu+365;
goto 3;
2:
if (i mod 4 =0)then
pocdnu:=pocdnu+0
else
if (i mod 100=0)then
pocdnu:=pocdnu+366
else
if (i mod 400=0)then
pocdnu:=pocdnu+365
else
pocdnu:=pocdnu+366;
end;
3:
{zobrazeni vysledku}
writeln('Pocet dni: ',pocdnu);
writeln('pro ukonceni programu stisknete K:');
readkey;
end.
Ja to mam nějak takto ale pořád mi to nefunguje. zkoušel jsem i přepisovat těch 365 nebo 366 a furt to počítá blbě.
Intel Xeon E5-1650v3, 64GB RAM, GTX970, 1TB SSD, 2TB plotna
Re: pascal a příkazy
Tyhle řádky úplně vyházej:
Sem doplň 365:
pocdnu:=pocdnu+0
A místo =0 do těch podmínek dej >0.
Používání GOTO se úplně vyhni, dokud nebudeš psát programy které mají aspoň pět tisíc řádků
Jestli chceš takhle otestovat dva různé kousky kódu, je lepší jeden z nich zakomentovat pomocí dvou prázdných řádků s { a }, aspoň na první pohled podle jiné barvy písma poznáš který z nich je zrovna vypnutý.
--- Doplnění předchozího příspěvku (08 Led 2011 21:58) ---
Ještě něco na závěr, pokud ti není jasné proč v těch podmínkách musí být > a ne =, tak z tohohle to uvidíš.
Kód: Vybrat vše
1:
if not((i mod 4=0) and (i mod 100=0) and (i mod 400=0)) then
pocdnu:=pocdnu+365;
goto 3;
2:
3:
Sem doplň 365:
pocdnu:=pocdnu+0
A místo =0 do těch podmínek dej >0.
Používání GOTO se úplně vyhni, dokud nebudeš psát programy které mají aspoň pět tisíc řádků

--- Doplnění předchozího příspěvku (08 Led 2011 21:58) ---
Ještě něco na závěr, pokud ti není jasné proč v těch podmínkách musí být > a ne =, tak z tohohle to uvidíš.
"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)
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 2 hosti