Pascal bludisko
Pascal bludisko
ahoj. neviem sa pohnúť s obyčajným pascalovským bludiskom.prvý problém.potrebujem zadať počet prekážok, ktoré mi vygeneruje do matice.generuje mi ich, ale nikdy nesedí počet. prosím o pomoc, fakt si už neviem rady.
Re: Pascal bludisko
A máš aj nejaký kód? Nemáme ti veľmi s čím pomôcť.
Re: Pascal bludisko
mám toto. poc je zadany pocet prekazok. generuje mi ich, ale nikdy ich nieje tolko, koľko má byť. a neviem či to mám úplne zle alebo čo s tým (5 je znak pre prekazku)..
Kód: Vybrať všetko
repeat
p[random(m),random(n)]:=5;
prek:=prek+1;
until prek=poc; -
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Pascal bludisko
akú hodnotu má prek pred vojdením do cyklu? Inak toto nie je moc dobré riešenie, ty môžeš teoreticky vygenerovať prekážku dvakrát na tú istú pozíciu (lebo ich generuješ náhodne) a potom jasné že ti ich počet nebude sedieť. Čím menšia plocha do ktorej generuješ, tým je to pravdepodobnejšie že sa to stane
Re: Pascal bludisko
pred cyklom má hodnotu 0. presne o tomto viem, ale netuším ako to urobiť inak
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Pascal bludisko
pozreš sa či tam je hodnota 5 a ak áno, tak znova vygeneruješ novú pozíciu. Ak nie, tak ju tam dáš a zvýšiš počítadlo prekážok. Druhý cyklus v tom cykle. Ale potom pozor aby si si nezacyklil. Ak načítavaš rozmery aj počet prekážok od užívateľa, tak musíš tieto vstupy ošetriť aby sa nemohlo stať že bude prekážok viac ako možných pozícii, inak sa ti program zacyklí
Re: Pascal bludisko
Alebo to môžeš generovať tak, že maticu budeš prechádzať v dvoch for cykloch a vždy si vygeneruješ náhodné číslo (trebárs od 1 do 2) - ak ti výjde 1, dáš tam prekážku, ak ti nevýjde 1, ideš ďalej akoby nič.
Náhodné číslo si môžeš generovať pre pravdepodobnosť akú len chceš (tu je to pravdepodobnosť 50% pri ideálnom generátore náhodných čísel)
Ak to urobíš šikovne, vždy ti tam padne práve toľko prekážok koľko chceš a vtedy z cyklov vylezieš. Ak aj náhodou nie, pôjdeš v cykloch odznovu a políčka už obsadené prekážkami preskočíš.
Náhodné číslo si môžeš generovať pre pravdepodobnosť akú len chceš (tu je to pravdepodobnosť 50% pri ideálnom generátore náhodných čísel)
Ak to urobíš šikovne, vždy ti tam padne práve toľko prekážok koľko chceš a vtedy z cyklov vylezieš. Ak aj náhodou nie, pôjdeš v cykloch odznovu a políčka už obsadené prekážkami preskočíš.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Pascal bludisko
možností je kopec, ja som mu dal také, čo sa mu bude najlahšie implementovať keď už tam má takýto cyklus. Osobne by som vygeneroval prekážky na prvých n pozíciach a potom maticu zamiešal. To miešanie sa tiež dá spraviť inteligentne, aby som nemusel prechádzať celou maticou
Re: Pascal bludisko
Jasné, že je možností veľa. Ja som načrtol ďalšie jednoduché.
Re: Pascal bludisko
Ďakujem za nápady. Vyskúšam a idem sa trápiť ďalej 
Re: Pascal bludisko
Kód: Vybrať všetko
Program BLUDISKO;
uses Crt;
const
blud_x = 5; { velkost pola v x-ovej suradnici }
blud_y = 5; { y-ovej suradnici }
prekazky = 5; { pocet prekazok }
var
pole: array[0..blud_x - 1,0..blud_y - 1] of Byte;
x,y: Integer;
prekazka: Byte;
BEGIN
ClrScr;
Randomize;
prekazka := 0;
repeat
x := Random(blud_x);
y := Random(blud_y);
if pole[x,y] <> 1 then begin
pole[x,y] := 1;
inc(prekazka);
end;
until prekazka = prekazky;
{ vypis pola }
for y := 1 to blud_y do
for x := 1 to blud_x do begin
GoToXY(x,y);
Write(pole[x - 1,y - 1]);
end;
END.