| Posledná zmena: 8.10.2002

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