Gymnázium sv. Cyrila a Metoda v Nitre

Náhodná prechádzka

Tento rok sme ponúkli rozširujúci seminár z informatiky (SEN 3). Po bleskovom preopakovaní prakticky celého učiva potrebného k maturite (okrem programovania) počas cca 8 seminárov sme sa s chuťou pustili do programovania zaujímavých úloh. O jednu z nich sa chcem s vami podeliť.

Úloha znie takto:

 

 

 

 

Náhodná prechádzka

V strede štvorcového obrázka stojí človek, volajme ho Michal. Dokáže sa hýbať 4 smermi (hore, dole, doprava, doľava) vždy o jeden krok (dĺžku kroku viem meniť). Jeho pohyb je vždy náhodný. Náhodná prechádzka končí v momente, keď Michal narazí na koniec obrázka (na niektorú zo 4 hrán).

Vizualizácia tejto úlohy si nevyžaduje zložitejšie programátorské schopnosti a je zvládnuteľná aj v nižšom ročníku. Zaujímavé sú útvary, ktoré Michal pri svojom náhodnom pohybe vytvára. Tu je ukážka niektorých z nich (dĺžka kroku bola nastavená na 1-2 pixely).

Dievčatko, ktoré drží šarkana

Džin a jeho lampa

Hravý pes

Káčer Donald nesie darček

Mačka kráča vpred

Rozpučená žaba

Sokrates z profilu

Strom života

Svet z inej perspektívy

("to čierne" je akoby stopa, kadiaľ Michal prešiel, kým sa dostal na koniec svojej prechádzky)

Doplňujúcou úlohou bolo zistiť, koľko krokov je priemerne treba urobiť, aby sa Michal dostal na koniec papiera. Samozrejme, toto číslo závisí od dĺžky kroku (čím dlhší krok, tým menej krokov).

Na záver sme zistili, že závislosť medzi dĺžkou kroku a počtom potrebných krokov nie je zďaleka lineárna a počet potrebných krokov s rastúcou dĺžkou kroku prudko klesá (asi tak prudko ako klesá funkcia 1/x2 pre kladné čísla x – ale o tom niekedy inokedy v článku zo sekcie matematika :) ).

(text: Mgr. Vladimír Ondrejka, foto: Michal Fibich)

PS: Nezabudnite, koľko jazykov vieš, toľkokrát si programátorom.

PS2: Náhodná prechádzka prírodou vôbec nemusí byť v týchto jesenných dňoch zlý nápad.

 

Ukážka zdrojového kódu tohto programu:

 

var poc,krok,x,y,dir:integer;
begin
poc:=0;
krok:=spinedit1.Value;
x:=100;
y:=100;
randomize;
image1.Canvas.Rectangle(0,0,200,200);
image1.Canvas.MoveTo(x,y);
 repeat
  dir:=random(4);
  inc(poc);
  case dir of
  0:begin image1.Canvas.LineTo(x,y-krok); y:=y-krok end;
  1:begin image1.Canvas.LineTo(x+krok,y); x:=x+krok end;
  2:begin image1.Canvas.LineTo(x,y+krok); y:=y+krok end;
  3:begin image1.Canvas.LineTo(x-krok,y); x:=x-krok end;
  end;
until (x>199) or (y>199) or (x<0) or (y<0);
label1.Caption:=('Počet krokov je '+inttostr(poc)+'.');
end;
Novinky v kocke
  • Vážení rodičia a priaznivci našej školy! ... / viac
  • Spojená katolícka škola, Farská 19, 949 01... / viac
  • Spojená katolícka škola, Farská 19, 949 01... / viac
  • Spojená katolícka škola, Farská 19, 949 01... / viac
  •   2 % z dane  podporte naše gymnázium a ... / viac
  • Výberové konanie SKŠ Nitra Vyberove_konan... / viac