|
Posledná zmena: 14.10.2002
|
polia
|
Polia
eratostenove sito
|
Napíšte procedúru, ktorá
metódou eratostenovho sita nájde
a vypíše (do Memo1) všetky prvočísla
do n - konštanta.
|
procedure esito;
const
n=1000;
var
e:array[2..n] of boolean;
i,j:integer;
s:string;
begin
Memo1.Lines.Clear; s:='';
for i:=2 to n do e[i]:=true;
for i:=2 to n do
if e[i] then begin
s:=s+IntToStr(i)+' ';
j:=i+i;
while j<=n do begin
e[j]:=false; inc(j,i);
end;
end;
Memo1.Lines.Add(s);
end;
|
frekvenčná tabuľka písmen
v súbore
|
Napíšte program, ktorý
prečíta zo vstupného súboru
text až po '.'
a vypíše v abecednom poradí
malé písmená, ktoré sa v
ňom vyskytli práve raz.
- dorobte tak, aby sa nerozlišovali malé
a veľké písmená
|
var
t:TextFile;
p:array['a'..'z'] of integer;
z:char;
begin
AssignFile(t,'test.txt'); Reset(t);
for z:=low(p) to high(p) do p[z]:=0;
z:=' ';
while not eof(t) and (z<>'.') do begin
read(t,z);
if (z>='a') and (z<='z') then inc(p[z]);
end;
CloseFile(t);
for z:=low(p) to high(p) do
if p[z]=1 then Memo1.Lines.Add(z);
end;
|
cyklický posun poľa
|
Procedúra posun cyklicky posunie prvky poľa o 1 jeden vpravo - nepoužije
pomocné pole. |
type
pole = array[1..10] of integer;
procedure posun(var p:pole);
var
i,p1:integer;
begin
p1:=p[high(p)];
for i:=high(p) downto low(p)+1 do
p[i]:=p[i-1];
p[low(p)]:=p1;
end;
|
pole čísel do reťazca
|
Funkcia PoleToStr vytvorí reťazec z prvkov celočíselneho
poľa - pripravený na výpis.
|
type
pole = array[1..10] of integer;
function PoleToStr(var p:pole):string;
var
i:integer;
begin
Result:='';
for i:=low(p) to high(p) do
Result:=Result+IntToStr(p[i])+' ';
end;
|
Ďalšie úlohy
- Máme pole cifier array [1..10] of 0..9 reprezentujúce desaťciferné
čísla. Vytvorte funkcie, ktoré z takéhoto typu vytvoria integer a naspäť – z
integeru daný typ. Vytvoriť funkciu na sčítanie dvoch takýchto
čísel.
- V poli A sú len 0 alebo 1. Napíšte procedúru, ktorá ho utriedi
vzostupne. Nie je povolené najprv spočítať
počet 0 a potom tento počet 0 priradiť do prvých
prvkov poľa a zvyšok doplniť 1. Môžete prvok
poľa uchovať do nejakej premennej a potom ho priradiť
do iného prvku, resp. vymeniť obsahy dvoch
premenných. Riešte túto úlohu, ak sú prvkami poľa 0, 1 a 2.
- Procedúra posunK cyklicky posunie prvky poľa o k prvkov
vpravo - nepoužije
pomocné pole, ani v cykle k-krát
neposúvajte o 1 prvok.
Pole korytnačiek
n-uholník
|
Najprv umiestnime n korytnačiek vo vrcholoch pravidelného n-uholníka
(na kružnici s polomerom d).
Potom sa natočia tak, že každá
je smerom k svojej nasledujúcej.
Konštanta p určuje o koľko je nasledujúca
korytnačka, napr. p=2 znamená, že
nasledujúcou 1 je 3.
Na záver všetky naraz
prejdú vzdialenosť k svovej nasledujúcej
krokom 1.
|
const
n=11; d=200; p=6;
var
k:array[1..n] of TKor;
i,j,v:integer;
begin
for i:=1 to n do begin
k[i]:=TKor.Create;
with k[i] do begin
PH; Smer:=i*360/n; Dopredu(d);
end;
end;
for i:=1 to n do
with k[i] do begin
j:=(i+p-1) mod n+1;
Smer:=Smerom(k[j].X,k[j].Y);
PD;
end;
v:=round(k[p mod n+1].Vzd(k[1].X,k[1].Y));
for j:=1 to v do begin
for i:=1 to n do
k[i].Dopredu(1);
cakaj(1);
end;
end;
|
krúženie n korytnačiek
|
Umiestnite rovnomerne n korytnačiek na vodorovnej priamke a každú
postupne natočte o 15 stupňov.
Potom
sa bude každá pohybovať po svojej
kružnici (Dopredu(4) a Vpravo(2)) pričom
v každom kroku vykreslíme úsečky,
ktoré spájajú dve susedné
korytnačky.
|
const
n=80;
var
i:integer;
k:array[1..n] of TKor;
xx,yy:real;
begin
for i:=1 to n do begin
k[i]:=TKor.Create(10*i+10,250,i*15);
k[i].HP:=5;
end;
while true do begin
for i:=1 to n do
with k[i] do begin
Dopredu(4); Vpravo(2);
end;
zmaz;
for i:=1 to n-1 do
with k[i] do begin
xx:=x; yy:=y; ZmenXY(k[i+1].X,k[i+1].Y);
ZmenXY(xx,yy);
end;
cakaj(1);
end;
end;
|
n poľovníkov naháňa
jednu korytnačku
|
n náhodne rozmiestnených korytnačiek naháňa
jednu korytnačku, ktorá chodí po obvode štvorca s
konštantným krokom d, naháňajúce korytnačky sa hýbu s krokom koef*d. Podľa
koeficientu koef budú vznikať rôzne krivky.
všimnite si, že pri nastavení náhodnej
farby sme použili
namiesto
RGB(random(256), random(256), random(256));
v tomto prípade to dáva
rovnaké výsledky
|
const
n=6; d=3; koef=0.6; stvorec=60;
var
k:array[0..n] of TKor;
i,j:integer;
begin
zmaz;
k[0]:=TKor.Create(200,300);
for i:=1 to n do begin
k[i]:=TKor.Create(random(sirka),random(vyska));
k[i].FP:=random(16777216);
k[i].HP:=2;
end;
for j:=1 to 500 do begin // počet krokov naháňačky
with k[0] do begin
Dopredu(d);
if j mod stvorec=0 then Vpravo(90);
end;
for i:=1 to n do
with k[i] do begin
Smer:=Smerom(k[0].X,k[0].Y);
Dopredu(d*koef);
end;
cakaj(1);
end;
end;
|
Ďalšie úlohy
- N korytnačiek je na začiatku rovnomerne rozostavených na vodorovnej
priamke - všetky sú natočené na sever
- korytnačky budú stále chodiť nejakou
rýchlosťou (napr. prvá krokom 1, druhá
krokom 2, ...). Ak prekročia hranicu +200 alebo
-200, tak sa otočia a idú opačným
smerom. Zabezpečte, aby korytnačky nikdy nevyšli
z hraníc +200 a -200.
- Na ploche je N náhodne rozostavených
korytnačiek. Prvá z nich chodí stále
rovno, len na okraji plochy sa odrazí ako
gulečníková guľa na okraji stola.
Všetky ostatné sa navzájom naháňaju:
druhá ide stále za prvou, tretia za
druhou, ...
- pomocou poľa korytnačiek nakreslite pravidelný N-uholník so všetkými
uhlopriečkami tak, že uhlopriečky sa budú vykresľovať naraz - každú
uhlopriečku bude kresliť jedna korytnačka - zabezpečte,
aby ju kreslila na 100 krokov vždy 1/100 dĺžky.
|
© 2002 AB, KVI blaho@fmph.uniba.sk
|