Názory ke článku Zaheslujte si svoj program
Sakra, neviem ako to je mozne :O...
Som to menil a aj som daval nbsp; za v,s,z,o,k... a teraz to tam nieje...
Tomu nechapem, uz 3x sa mi to stalo.
PS: Fixed...
v dieli - respektive v hoteli je lokal, takze je tam jota, ale ak by to nebolo lokal, je tam Y...
PS: Díík za upozornenie :)
21. 5. 2007
To Titto: Jota? To je nějaký užívaný termín pro měkké "i"? Že jsem to ještě nepotkal. Jsi asi trochu využil řeckou abecedu, co? ;)
21. 5. 2007
program (nápad) samotný je zajímavý, ale:
1.) ty goto nejsou úplně ideální, lepší je prostě repeat cyklus, má někdo jiný názor? tady by mě zajímaly vaše důvody k používaní skoku.
2.) co je to file of schuler?
3.) v těch proměnných je divný zmatek, pomohlo by používat lokální a globální už míň, no... třeba meno, f, g se navíc nikde nepoužívá
4.) no to odsazování, napsat to jinak (aspoň jednotně), bylo by to lepší, přehlednější...
21. 5. 2007
V příštím díle si ukážeme, jak připojit žárovku k baterii tak, aby baterie nezačala hořet. Žárovka pochopitelně svítit nebude.
Sri, jsem velmi jizlivý, je to už moje vlastnost. Ještě si neodpustím jedno. Zkušený programátor v jazyce pascal nepoužívá příkaz goto, neb basicovské moresy nepatří do programovacího jazyka, pominu-li fakt, že je to neskutečně nepřehledný, tak nemůžu pominout to, že leckterej kompilátor má trochu problémy s uklízením po goto. V uvedeným příkladě by to sice nemělo nastat, ale to není omluva. Pokud povypínám všemožné ochrany, tak na některejch kompilátorech půjde zkompilovat kod, kde pomocí goto vletím doprostřed for, while nebo repeat until, přičemž proměný, který ten lítající cirkus říděj, nemusí být inicializovaný, takže může následovat docela nepříjemnej průser. Obdobně je vhodné vletět do nějaké rekurze, což ovšem není tak tragický, jako když pomocí goto z té rekurze vyletíte (podotýkám, že je nutný povypínat všechny ochrany, aby to vůbec šlo zkompilovat a i tak u některejch kompilátorů nejde použít goto z funkce ven mimo tu funkci, u některejch bohužel jo, mám pocit, že přesně tohle člověka nechal udělat jeden z kompilátorů pascalu pro C64, ale je to už moc let na to, abych si to pamatoval), neb pak už stack neuklidí ani pámbu a skončí to v lepším případě zásahem OS, v horším případně se program po určitý době hryzne zásobníkem do zadnice a co se stane je v podstatě dílem náhody, pokud to teda hned ze startu neskončí na nějaký nealokovaný proměný. Už si nepamatuju, jak je v pascalu dělaný function call a procedure call, v principu to může bejt v různejch implementacích různě, ale vzhledem k tomu, že to není interpretovanej jazyk, tak silně pochybuju o tom, že by to šlo úplně mimo stack.
Teď konkrétně. Procedura login je dokladem programátorský neobratnosti nejhorší kategorie. Místo while a goto musí stačit while. Uchází mi smysl toho else, protože je jasný, že pokud se program dostane někam za goto, tak podmínka splněna nebyla. Není mi jasný, proč do c přiřazuju v každým průchodu cyklem, nikoliv jenom v případě, že je potřeba přiřadit ,,true'', čímž se dostávám k tomu, co jsem psal na začátku, tj. do c bych úplně v počátcích přiřadil false, pomocí or bych ho spojil s eof v podmínce while a v porovnávací podmínce bych jenom zvednul c na true, pádem čímž bych z while vyletěl normálním způsobem bez použití goto, ač použití goto by tady (pokud by se eliminovalo to else) mohlo znamenat zmenšení počtu vykonávanejch instrukcí. Pak by pochopitelně padala i ta druhá podmínka a or ve while, ovšem nepřipadá mi to úplně čistý, asi bych se zabýval tím, co kompilátor z něčeho takovýho vyplodí, jinými slovy, jestli je navrženej tak, že můžu beztrestně pomocí goto vyletět z while, což si myslím, že by měl.
dik za pripomienku, nadbytocne premenne som odstranil (boli tam preto, lebo som to kopiroval zo zdrojaku, co som pouzival do skoly a tam program pokracoval ...) co sa tyka lokalnych premennych je to asi dobry napad, ale ja ich akosi namam rad... (no a ked ich tam niekto chce mat, tak to uz je malickost si ich presunut)
pravda tiez je, ze goto nie je idealne riesenie, ale ten repeat tam robi problemy ...
a k bodu 4, nabuduce sa posnazim
a este raz dik za konstruktivny nazor a nie len kritizovanie do vetra :)
22. 5. 2007
Souhlasím, ten problém ve while už taky vidím. hraní s tím c je strašné, abych přidal i něco nového, takhle bych to asi udělal já:
procedure login;
begin
writeln('meno: ');
readln(meno2);
c:=false;
while not ( ( eof(po) ) or c ) do
begin
readln (po,n);
if meno2 = n then
c :=true;
end;
writeln;
if c = true then
writeln ('OK')
else
writeln ('NOT OK');
close(po);
end;
22. 5. 2007
Ježišmarjá, ono to nezachovává odsazení... Webmasteři programujte.cz, co ste to stvořili??
22. 5. 2007
To ChaoticRoman: Neboj, v nové verzi už zachovává. Ve staré už to nemá cenu opravovat, stejně všechno půjde do koše.
22. 5. 2007
no, snad niekto oceni aspon napad o ktory som sa chcel s vami podelit
22. 5. 2007
bravo... dalsi uzasny neprustrelny algoritmus... teda ja cumim... mas to kryty jak americkyho prezidenta :D
23. 5. 2007
no, nápad dobrý, zpracování už horší, jak sem říkal.
já sem ještě i v tom svém zpracování nechal tohle:
if c=true then...
to je samozřejmě zbytečné, podmínka se vyhodnotí kladně, pokud má logickou hodnotu true a vyrázy (c) a (c=true) jsou ekvivalentní.
if c then...
to je nejlepší takhle kritizovat a neukázat lepší řešení... Nejdřív napis článek a pak máš právo kritizovat...
28. 5. 2007
Ty jsi fakt komik. Takze dle tveho nazoru smi kritizovat pouze clovek, ktery napsal nejaky clanek - tj. je redaktorem ... Bravo objektvite... Zaloz si nejakou svoji diskuzi a dej pravo hodnotit pouze redaktorum ty joudo... Jsi uplne mimo misu, kdyz nasi zahrajou hovno v hokeji vidi to cely narod a nikdo neni lepsi hokejista nez oni...
lol, to netrvdím. Když má někdo k článku nějaké připomínky at slušně sepíše do nějakých bodů (popř nabídne lepší řešení) a nenapíše že je fakt algoritmus "na hovno". Kritizovat zvládne každej, lepší řešení nabídně málokdo...
Prostě mě nase*e když někdo řekne že se takovej článek ani nemusel psát, že to je stejně úplně debilní algoritmus. Nezapomínej že redaktoři nedostávaj za články peníze takže je to pouze jejich dobrá vůle že se snaží pomáhat začátečníkům, ale vždycky se najde někdo kdo jejich práci zkritizuje:(
29. 5. 2007
Davam ti za pravdu... Mas recht, ze je to zadarmo a kdyz to nekomu pomuze nejakou hodnotu to preci jen ma... :)
8. 7. 2007
Ten program je prasarna, prasarna, a prasarna. Pouzivani navesti v Pascalu se obecne povazuje za prasarnu, vzhled kodu je sileny, ...
4. 9. 2007
Tohle mě dokáže pěkně naštvat (hlavně v případě, že jde o cestu k BGI souborům):
assign(po,'E:\temp\tp\jojo.txt');
Představ si, že ten program zkompiluješ a že si ho pak bude chtít spustit někdo na jiném počítači, kde ale nemá ani disk E:, natož pak takovýhle adresář. Lepší je zadat adresu relativní:
assign(po,'jojo.txt');
a příslušný soubor hodit do stejného adresáře jako program. (A nějak ho zašifrovat, jinak je to opravdu celkem zbytečná práce - každý se do té databáze může připsat ručně.)
Na vyskočení z jakéhokoli cyklu se dá (kromě dobře zvolené podmínky) použít příkaz Break, Goto není potřeba. BTW, celý tenhle program jde napsat i bez jediného Goto :-).
Nevím, co se ti nelíbí na lokálních proměnných. Zlepšují přehlednost, šetří paměť (po skončení procedury se zruší) a předcházejí problémům (nechtěná změna některé globální proměnné nějakou procedurou).