3. príklady


Posledná zmena: 8.10.2002

Banner Text podmienky a procedúry

Korytnačky kreslia pomocou procedúr

  • vo všetkých úlohách predpokladáme, že v globálna premenná k typu TKor je už inicializovaná, t.j. korytnačka už existuje niekde v ploche
  • v úlohách môžete predpokladať, že existuje "preddefinovaná" procedúra poly s tromi parametrami: počet opakovaní, dĺžka kroku a uhol

šesťuholníky

napíšte procedúru
    ule(n:integer; a:real);
nakreslí vedľa seba n šesťuholníkov so stranou a

 

var
  k:TKor;

procedure poly(n:integer; d,u:real);
begin
  while n>0 do begin
    k.Dopredu(d);
    k.Vpravo(u);
    dec(n);
  end;
end;

procedure ule(n:integer; a:real);
begin
  while n>0 do begin
    poly(10,a,60);
    k.Vpravo(120);
    dec(n);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  k:=TKor.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  zmaz; k.PresunXY(50,200);
  ule(10,30);
end;

slnko

procedúra
    slnko(n:integer; d,s:real);
nakreslí slnko s n lúčmi, pričom dĺžka lúča je d a dĺžka oblúka (dĺžka strany n-uholníka) je s

 

procedure slnko(n:integer; d,s:real);
var
  i:integer;
begin
  for i:=1 to n do begin
    k.Dopredu(s);
    k.Vlavo(90-180/n);
    k.Dopredu(d); k.Dopredu(-d);
    k.Vpravo(90+180/n);
  end;
end;

štvorce

procedúra
  stvorce(n:integer; a:real);
nakreslí n prekrývajúch sa štvorcov veľkosti a, pričom sa navzájom prekrývajú v 1/3 strany

procedure stvorce(n:integer; a:real);
var
  i:integer;
begin
  for i:=1 to n do begin
    k.Vlavo(90); k.Dopredu(a/3);
    k.Vpravo(90); k.Dopredu(a*2/3);
  end;
  for i:=1 to n do begin
    k.Dopredu(a/3); k.Vpravo(90);
    k.Dopredu(a); k.Vpravo(90);
    k.Dopredu(a); k.Vpravo(90);
    k.Dopredu(a*2/3); k.Vpravo(90);
  end;
end;

schody

procedúra
  schody(n:integer; a:real);
nakreslí z rôzne veľkých obdĺžnikov

procedure schody(n:integer; a:real);
var
  i,j:integer;
begin
  for i:=n downto 1 do
    for j:=1 to 2 do begin
      k.Dopredu(i*a); k.Vpravo(90);
      k.Dopredu((n-i+1)*a); k.Vpravo(90);
    end;
end;

Náhodné prechádzky

mesiac

metódou stráženej náhodnej prechádzky zabezpečte, aby korytnačka nevyšla z oblasti "mesiac":
- musí byť v prvej kružnici s polomerom 50 a stredom (250,200)
- nesmie byť v druhej kružnici s polomerom 50 a stredom (300,200)

 

begin
  zmaz; k.PresunXY(250,200);
  while true do begin
    k.Vpravo(random(360)); k.Dopredu(5);
    if (k.Vzd(250,200)>50) or (k.Vzd(300,200)<50) then
      k.Dopredu(-5);
    cakaj(1);
  end;
end;

farebné sústredné kruhy

metódou stráženej náhodnej prechádzky vyfarbite dva sústredné kruhy:
- vnútorný žltou - polomer 30
- vonkajší červenou - polomer 50

 

begin
  zmaz; k.PresunXY(250,200);
  while true do begin
    k.Vpravo(random(360)); k.Dopredu(5);
    if k.Vzd(250,200)<30 then k.FP:=clYellow
    else if k.Vzd(250,200)<50 then k.FP:=clRed
    else k.Dopredu(-5);
    cakaj(1);
  end;
end;

farebný mesiac

metódou stráženej náhodnej prechádzky vyfarbite mesiac žltou, prienik kruhov tmavomodrou - celé na čiernom pozadí
- musí byť v prvej kružnici s polomerom 50 a stredom (250,200)
- nesmie byť v druhej kružnici s polomerom 50 a stredom (300,200)

begin
  zmaz(clBlack); k.PresunXY(250,200);
  while true do begin
    k.Vpravo(random(360)); k.Dopredu(5);
    if k.Vzd(250,200)>50 then k.Dopredu(-5)
    else if k.Vzd(300,200)>50 then k.FP:=clYellow
    else k.FP:=clNavy;
    cakaj(1);
  end;
end;

zemeguľa

Naprogramujte náhodnú prechádzku 3 korytnačiek, ktoré sú vytvorené v strede plochy s chránenou oblasťou kruhom s polomerom 50, pričom každá korytnačka má hrubé pero s farbami žltá, modrá a zelená a pohybuje sa krokom 5.

var
  k1,k2,k3:TKor;
  x,y:real;
begin
  k1:=Tkor.Create; k1.FP:=clBlue; k1.HP:=4;
  k2:=Tkor.Create; k2.FP:=clGreen; k2.HP:=4;
  k3:=Tkor.Create; k3.FP:=clYellow; k3.HP:=4;
  x:=k1.X; y:=k1.Y;
  while true do begin
    k1.vpravo(random(360)); k1.Dopredu(5);
    k2.vpravo(random(360)); k2.Dopredu(5);
    k3.vpravo(random(360)); k3.Dopredu(5);
    if k1.vzd(x,y)>50 then k1.Dopredu(-5);
    if k2.vzd(x,y)>50 then k2.Dopredu(-5);
    if k3.vzd(x,y)>50 then k3.Dopredu(-5);
    cakaj(1);
  end;
end;

Korytnačky sa navzájom "vidia"

sínus

Nakreslite graf funkcie f(x)=sin(x) nasledujúcim spôsobom:
- jedna korytnačka sa bude hýbať po kružnici,
- druhá korytnačka bude rovnomerne zväčšovaľ svoju x-ovú súradnicu a y-ovú súradnicu bude mať totožnú s y-ovou súradnicou prvej korytnačky.

var
  k1,k2:TKor;
begin
  k1:=TKor.Create(150,200);
  k2:=TKor.Create(160,200);
  while k2.X<sirka do begin
    k1.Dopredu(2); k1.Vlavo(3);
    k2.ZmenXY(k2.X+1,k1.Y);
    cakaj(1);
  end;
end;


© 2002 AB, KVI
blaho@fmph.uniba.sk