Had-zajímavý problém – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Had-zajímavý problém – Pascal – Fórum – Programujte.comHad-zajímavý problém – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
zed
~ Anonymní uživatel
3 příspěvky
27. 10. 2007   #1
-
0
-

Zdravim,mam zajimavý problém,jedná se o to že mi v tomto programu časem dojde pole(sem sem dal 100 aby bylo rychle videt co to delá za chyby) a pascal se neak ukončí a ešte pred tim to dělá naky divný čáry. tohle je pouze kostra programu.nechtel sem to tady zahlcovat
Nevíte nekdo co tim????




program had;

uses ch_200,crt,graph;
const up=#72;
down=#80;
left=#75;
right=#77;
esc=#27;

var xpole,ypole:array[1..100] of integer;
GDriver,GMode,i,xHlava,yHlava,DelkaHada:integer;
klavesa:char;

procedure PohybHada;
begin
delay(500);
if keypressed then klavesa:=readkey;
if klavesa=esc then halt;


setcolor(green);
line(xHlava,yHlava,xpole[i],ypole[i]); {aktualne vykreslovana cara}
i:=i+1;

xpole[i]:=xHlava;
ypole[i]:=yHlava;

setcolor(black); {cerny had ktery jede za zelenym a "zere" mu ocas}
line(xpole[i-delkahada],ypole[i-delkahada],xpole[i-delkaHada-1],
ypole[i-delkaHada-1]); {v podstate si "pamatuje" kudy jel a tam mu zere
ocas}
end;

begin

initgraph(GDriver,GMode,'');
xHlava:=320;
yHlava:=240;
delkaHada:=10;
xpole[i]:=xHlava;
ypole[i]:=yHlava;

repeat
if keypressed then klavesa:=readkey;


if klavesa=left then repeat {doleva}
PohybHada;

xHlava:=xHlava-5;
until (klavesa=down) or (klavesa=up);


if klavesa=right then repeat {doprava}
PohybHada;
xHlava:=xHlava+5;
until (klavesa=down) or (klavesa=up);


if klavesa=up then repeat {nahoru}
PohybHada;
yHlava:=yHlava-5;
until (klavesa=left) or (klavesa=right);


if klavesa=down then repeat {dolu}
PohybHada;
yHlava:=yHlava+5;
until (klavesa=left) or (klavesa=right);


until klavesa=esc;
end.

Nahlásit jako SPAM
IP: 82.202.12.–
Reklama
Reklama
Laaca0
Stálý člen
27. 10. 2007   #2
-
0
-

Na můj vkus je to naprogramovaný trochu divně, já bych to dělal jinak, ale to je jedno.
Problém je uvnitř procedury PohybHada, v řádku i:=i+1;
I se totiž nikde dál v programu nenuluje, takže se pořád zvětšuje a zvětšuje a v řádce xpole[i]:=xHlava;
se vlastně provede xpole[101]:=xHlava; což znamená přetečení pole.

Taky nemáš inicializovaný proměnný, ale to je, předpokládám, tím, jak jsi ze zdrojáku narychlo vyseknul tenhle fragment.

Nahlásit jako SPAM
IP: 82.208.37.–
DOS-u-akbar
Zed
~ Anonymní uživatel
3 příspěvky
27. 10. 2007   #3
-
0
-

Jasne ze jsem chtel I snížit aby nedošlo k přetečení,když dosahne třeba té 100vky,ale je velkej problem aby fungoval ten "cernej had" kterej ho maze.

protože line(xpole[i-delkahada],ypole[i-delkahada],xpole[i-delkaHada-1],

ypole[i-delkaHada-1]);
při změně I nebude chvilku mazat za nim,v podstate na obrazovce zustane nehybne stat kopie toho zelenýho hada.

Nahlásit jako SPAM
IP: 82.202.12.–
Mircosoft+1
Věrný člen
27. 10. 2007   #4
-
0
-

Jestli je na začátku programu i=0, tak to znamená, že indexy pro kreslení toho černého hada (i-delkahada) vycházejí záporné a tak čteš souřadnice uložené "před" těmi poli. A samozřejmě to nejsou souřadnice, ale nějaká nesmyslná data, takže se černý had kreslí kdovíkde (to jsou ty divný čáry) a nemaže ti zeleného.
Možné řešení: na začátku programu nastav i rovné Delkahada+1.

Každopádně počítej s tím, že na tuhle úlohu potřebuješ kruhovou frontu. Čili buď pole, kde při přejetí konce skočíš s indexem zpátky na začátek (stejně tak při podjetí začátku skočíš na konec), nebo spojový seznam, který mi přijde jednodušší na naprogramování a nemá pevně určený počet prvků.

Nahlásit jako SPAM
IP: 85.132.158.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zed
~ Anonymní uživatel
3 příspěvky
27. 10. 2007   #5
-
0
-

JJ dekuju,mužete mi prosím eště vysvětlit co to je ten "spojový seznam"

Nahlásit jako SPAM
IP: 82.202.12.–
Mircosoft+1
Věrný člen
27. 10. 2007   #6
-
0
-

To je taková datová struktura složená z recordů a v každém z nich je ukazatel na ten následující. Celé se to alokuje dynamicky procedurou New.
Podrobnější info třeba tady: http://mircosoft.ic.cz/texty/UKAZ.TXT

Nahlásit jako SPAM
IP: 85.132.158.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý