Pascal bludisko

Programovacie jazyky, rady, poradňa...
sashi
Amateur
Amateur
Príspevky: 12
Registrovaný: 17 dec 2012, 19:24

Pascal bludisko

Príspevok od používateľa sashi »

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.:)
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Pascal bludisko

Príspevok od používateľa pcsiete »

A máš aj nejaký kód? Nemáme ti veľmi s čím pomôcť.
sashi
Amateur
Amateur
Príspevky: 12
Registrovaný: 17 dec 2012, 19:24

Re: Pascal bludisko

Príspevok od používateľa sashi »

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
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Pascal bludisko

Príspevok od používateľa audiotrack »

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
sashi
Amateur
Amateur
Príspevky: 12
Registrovaný: 17 dec 2012, 19:24

Re: Pascal bludisko

Príspevok od používateľa sashi »

pred cyklom má hodnotu 0. presne o tomto viem, ale netuším ako to urobiť inak
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Pascal bludisko

Príspevok od používateľa audiotrack »

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í
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pascal bludisko

Príspevok od používateľa BX »

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číš.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Pascal bludisko

Príspevok od používateľa audiotrack »

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
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pascal bludisko

Príspevok od používateľa BX »

Jasné, že je možností veľa. Ja som načrtol ďalšie jednoduché.
sashi
Amateur
Amateur
Príspevky: 12
Registrovaný: 17 dec 2012, 19:24

Re: Pascal bludisko

Príspevok od používateľa sashi »

Ďakujem za nápady. Vyskúšam a idem sa trápiť ďalej :)
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: Pascal bludisko

Príspevok od používateľa Gregi »

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.
Napísať odpoveď