
Nájdite dve logické chyby v programe
Poznáme tieto druhy chýb:
1. Syntaktická - preklepy, nevhodné priradenia atď.
2. Behová - chyba za behu programu - prekročenie zásobníka, rozsahu vstupu alebo tiež napr. pokus o čítanie neexistujúceho súboru - program sa zrúti
3. Logická - tieto chyby sú najzávažnejšie a najťažšie sa hľadajú. Pri týchto chybách sa program nezrúti, ale môže sa stať, že predsa skončí behovou chybou, ale až na následky tejto chyby, čiže niekedy to môže byť aj omnoho neskôr ako procesor spracuje príkaz, ktorý obsahuje logickú chybu. Samozrejme, aby sme to my programátori nemali ľahké, program na následky tejto chyby nezrúti a my sa môžme aj zblázniť, pretože nevieme, prečo ten program dáva taký výstup, aký nemá dávať.
Vašou úlohou je v programe nájsť dve logické chyby. Budete mať k dispozícii skompilovaný program a jeho zdrojový kód so všetkým čo k tomu patrí, aby sa vám náhodou nestalo, že vám to váš kompilátor odmietne skompilovať. Ak by náhodou predsa vznikol nejaký problém s oživením programu, tak to nejako poriešime.
A čo budete k tomu potrebovať:
1. Možnosť práce s DOSom - takže ak máte vo Windows XP problémy s DOSom, tak treba DOSBox, ale myslím, že by to problém robiť nemalo, lebo v tomto prípade mne stačí aj emulácia DOSu vo Windows XP.
2. Prekladač Turbo Pascalu - najlepšie bude, ak budete mať verziu 7.0, pretože program bol napísaný v ňom, ale s drobnými úpravami vám pobeží aj vo verzii 6.0.
Link na stiahnutie kompletného balíka:
wurmi.zip
BTW, chyby hľadajte v engine hry, nie v menu.
To ozaj nikto nedokáže stiahnuť alebo ste to nechali tak?
To je dost komplexna tematika, nie je cas/chut. A autor evidentne povazuje komentare za zbytocny luxus...

Este dobre ze tam nie su premenne s nazvami aa, a1, aa1, a2, a3, a4, a5, a6 
som az cumel.
P.S. a s takymi nazvami premennych ake tam su (citujem: f, a, wx, wy, w0, w1, pa, over, pc, pn, pl, ps, px, wl0, wt0, pa0, z0) sa to musi logickymi chybami len hemzit
Ale hra je to pekna, dokonca mi isla aj na W2k aj so zvukom so speakeru
Hint: Stačí si zahrať a určite sa niečo nebude pozdávať. Autor komentáre za luxus nepovažuje, len v rýchlosti na ne zabudol (ja).
Zahral som si a ziadnu chybu som nevidel
Napis co nejde napisem ti kde je chyba v zdrojakoch 
Resp. radsej nie, ptz ten program je od urciteho bodu takmer necitatelny, kvoli tym globalnym premennym a ich nazvom, keby som mal za ulohu to opravit tak to cele zmazem a urobim to slusne a tym padom bez chyb na prvy pokus ;)
Stiahlo sa to normalne. Spustil som to v XP a fungovalo to normalne i so speakerom. Ked ten cervik narazi na svoj stale sa zvacsujuci chvost tak sa hra neukonci ale pokracuje dalej a skrati jeho chvost a taktiez sa znizi o tuto dlzku pocitadlo vpravo hore na obrazovke. Ked som to skusal niekolko krat za sebou tak ma to nakoniec z hry vihodilo. Mozno to sposoblili i nejake ine programi co mi tu bezia.
To je zatial jedina vec ktoru som si vsimol.
Neviem kolko casu zabralo autorovi programovanie tejto hry ale ja zo svojimi sucasnymi znalostami by som to urcite nenaprogramoval.
To nie je chyba ale schvalne naprogramovane
ale fakt sa mi nechce lustit v tej kope glob.premennych ci niekde nezomotal premennu aka tam nema byt (alebo preco ta to potom z hry vyhodilo).
Schválne je naprogramované vlastné "zožranie sa", ale nemá to z hry vyhodiť.
Ved vidim ze to nema z hry vyhodit, ale je utrpenie v takom programe/premennych hladat chybu. Ale mozno ma dnes premoze masochisticka nalada ked sa budem moc nudit, a najdem ti to
Pre buducnost nepouzivaj globalne premenne, nazvy premennych a funkcii tak aby bolo jasne co je v nich ulozene / co robia, a najdolezitejsie: kedze nebudes mat glob.prem. tak budes vediet kazdu funkciu skontrolovat osobitne ci robi to co chces aby robila (nezavisle na zvysku pgm), a tym padom budes vediet do urcitej miery garantovat ze pgm neobsahuje chyby.
A keby to robil MS tak ako pisem tak by nemohli Win obsahovat 40000 znamych chyb
V TP som bol zvyknutý na krátke názvy premenných ako sú aj v tu. Keď som sa začal zaujímať o nadstavbu Turbo Vision ("predchodca" Object Pascalu, ale pod DOSom), tak tam som začal aj výstižnejšími názvami. No a v Delphi vďaka Code Insight používam už radšej výstižnejšie názvy. Nič nehovoriace názvy používam na dočasné premenné ako cykly, počítadlá, prípadne lokálne objekty v procedúrach, ak sa nejedná o veľmi dôležitý objekt (napr. dočaný objekt na uloženie adresy objektu, s ktorým idem pracovať).
Ano, tak. Pomocne premenne stacia i,j,k apod.
By som povedal ze aj tu vidno prinos OOP, ktore nuti programatora takto (vola sa to "extreme programming" - rychlo napisat cokolvek bez konceptu) neprogramovat
P.S. extreme programming je sice cely koncept, a ma to aj dost zaujimave idey, mam pocit ze vysledok moc presvedcivy nebude 
tak to prrrrr...... "Extreme Programming" neni zadny "rychlo napisat cokolvek bez konceptu"
www.extremeprogramming.org
Extreme_programming
No hej ale ak sa zacina uplne najjednoduchsim co moze fungovat ked clovek ani nepozna celu funkcionalitu, tak si tazko moze navrhnut slusny datovy model atd. Je to na polemiku, pisal som (sice az v P.S.) ze aj XP ma zaujimave a uzitocne myslienky, ale co z toho vyleze za produkt, hmm no neviem, moze sa to aj osvedcit, nehadam sa, hlavne to asi imponuje ludom z marketingu, ktori potrebuju rychlo rychlo predat nieco co ako tak funguje a potom nechapu co tam este ten programator tolko robi, ved to predsa uz pred mesiacom "fungovalo"...
..myslis simple.html ?
Mas pravdu, ze kazdej na to muze mit jiny nazory, ale celkove mi ta filozofie xp pripada dost dobra, rozhodne si nemyslim, ze by nejak znesnadnovala navrh slusnyho datovyho modelu. Celkove mi ty pravidla prijdou dobre vymysleny, kdyz se ma neco udelat - a rozhodne ne s kompromisama v kvalite, spis naopak.
Počas vývoja verzie pod Windows občas nahliadnem do verzie 3.0. Tam komentáre mám. Čiže tie komentáre chýbajú ozaj len v tejto prvej verzii. Táto posledná verzia (vo vývoji) je prehľadná až až.
No takze ta chyba s tym "vyhodenim z programu" je IMHO v tom, ze po prejdeni sekcie "body:" v fcii "writewurmi" je dlzka (premenna "wl") o jedno mensia ako by mala byt (pri kazdom prechode tej fcie sa musi raz zvysit "w1" bez toho aby sa znizilo "wl").
T.j. po kazdom zozrani sameho seba je dlzka mensia o 1 ako by mala byt.
Presne tak. Samozrejme to je už opravené. No a ešte ostala tretia chyba. Tú zatiaľ nikto nespomenul.
Ponaucenie: neukladat si zbytocne data ktore zavisia od inych dat, tazko sa to potom udrziava na spravnej hodnote. To vidim dost casto, neviem preco ludi laka mat vsetko kdesi v milion premennych. Pre casovo kriticke operacie sa to da vyratat pred casovo kritickou operaciou a ulozit do docasnej premennej (resp. rovno ako parameter casovo kritickej fcie). Dlzka je predsa:
alebo jednym riadkom
wmax+1 preto, lebo je pole definovane ako 0..wmax (t.j. wmax+1) prvkov (to tiez nie je moc obvykle, v C by som urobil pole Wurm[MAX_WURM_LEN] co by vytvorilo pole s indexami 0..(MAX_WURM_LEN-1), je to obvyklejsie, v tom pripade by som mal
iWurmLength = w0>=w1 ? w0-w1 : w0-w1+MAX_WURM_LEN
To vsetko plati ak to chces mat tak ako teraz (ze ak je samotna hlava tak sa to povazuje za dlzku=0, neviem ci si to tak chcel alebo je to chyba).
Áno dá sa aj tak, ale tu išlo o efekt skracovania, takže po skrátení to malo byť v poriadku, no ale ako som neskôr zistil, odčítal som jednotku navyše. Išlo o to, (teraz som si spomenul, že ak Wurmi bol stočený do 4 bodov:
x - telo
O - hlava
tak sa stalo to, že ak bol otočený k telu, tak sa neposunul a zožral si chvosť, hoci mu koniec nezmizol a a potom sa posunul. Ide o to, že sa mal posunúť a chvost si nemal zožrať. Kontrola na zožratie sa mala vykonať až po posunutí a to bola chyba.
To je ale tretia chyba ktoru som chcel prave napisat
Ak nasmerujem hlavu za chvost (je jedno aka je dlzka, moze byt dlhy aj 100), tak si pri kazdom kroku zere chvost t.j. najprv treba uvolnit chvost az potom testovat dalsi krok.
)
Su tam este dalsie chyby? (daj nejaky hint ze v com konkretnejsie
No to súvisí s tým žraním vlastného tela. Opravou tej chyby sa opravilo aj toto.
Hint pre tretiu chybu: Koľko sekúnd je 5 minút?
nie nie, to su dve uplne rozdielne chyby
Jedna je nespravna dlzka po akomkolvek zozrani sameho seba, druha je ze ak idem za chvostom tak sa furt zere chvost (ak by si opravil len dlzku, tak tam stale vadi to, ze to stale pipne akokeby si si zral chvost ked mas hlavu za chvostom).
Cas sa mi zdal ze ide nejak divne, ja by som to ratanie riesil inac, ale ani v tom tvojom nevidim v ratani casu problem (okrem toho ze to moze namiesto dvoch sekund vziat jednu ak sa to dlhsie zdrzi vo writewurmi, ale to by nemalo nastavat), si si isty ze v tych zdrojakoch je problem s casom?
//edit: aha uz vidim ze si neupdatujes t0, to by mohlo robit problem, cele ratanie casu by som tam prerobil (ja mam najradsej ratanie tickov s tym nie je nikdy problem
). P.S. na to ratanie casu som sa dival uz predvcerom, som dost krutil hlavou 
Veď aj ja som zakrútil hlavou, keď som prišiel na to, kde bol problém s časom. Potom som to prerobil a už to je odvtedy v poriadku. No ale prečo ten problém vzniká?
Edit: Je to jedna a tá istá chyba (to žranie chvosta. Ono totiž chvost nezožere, pretože sa posunie, ale odpočíta jednotku a to práveže nesmie.