|
Posledná zmena: 13.10.2002
|
funkcie a znakové reťazce
|
Číselné funkcie
Fibonacciho čísla
|
Napíšte celočíselnú
funkciu, ktorá pre vstupný
parameter N vypočíta N-té
Fibonacciho číslo. Napr. Fibonacci(0)
= 1 Fibonacci(1) = 1 Fibonacci(2)
= 2 Fibonacci(3) = 3 Fibonacci(4)
= 5 Snažte sa minimalizovať počet lokálnych
premenných.
|
function Fibonacci(n:integer):integer;
var
f0,f1:integer;
begin
f0:=1; f1:=1; Result:=f1;
while n>1 do begin
Result:=f0+f1;
f0:=f1; f1:=Result;
dec(n);
end;
end;
|
počet deliteľov
|
Napíšte funkciu pocdel(n:integer),
ktorá zistí počet deliteľov
čísla n, počítame len
deliteľov od 1 menšie ako n.
Pomocou
nej zadefinujte funkciu, ktorá zistí,
či je nejaké číslo prvočíslo.
|
function pocdel(n:integer):integer;
var
i:integer;
begin
Result:=0;
for i:=1 to n div 2 do
if n mod i = 0 then inc(Result);
end;
function jeprvocislo(n:integer):boolean;
begin
Result:=pocdel(n)=1;
end;
|
je prvočíslo
|
Napíšte funkciu, ktorá
zistí, či dané číslo
je prvočíslo (bez funkcie pocdel).
|
function jeprvocislo(n:integer):boolean;
var
i:integer;
begin
Result:=n>1; i:=2;
while Result and (i<=n div 2) do begin
Result:=n mod i<>0; inc(i);
end;
end;
|
súčet deliteľov
|
Napíšte funkciu sucdel(n:integer),
ktorá spočíta všetkých
deliteľov
čísla n, počítame len
deliteľov od 1 menšie ako n.
Pomocou
nej zadefinujte funkciu, ktorá zistí,
či je nejaké číslo dokonalé
- číslo sa rovná súčtu
svojich deliteľov.
|
function sucdel(n:integer):integer;
var
i:integer;
begin
Result:=0;
for i:=1 to n div 2 do
if n mod i = 0 then inc(Result,i);
end;
function jedokonale(n:integer):boolean;
begin
Result:=sucdel(n)=n;
end;
|
spriatelené čísla
|
Napíšte procedúru, ktorá
nájde všetky dvojice spriatelených
čísel menších ako dané
n. Spriatelenými sa nazývajú
dve prirodzené čísla, ak o
každom z nich platí, že je súčtom
všetkých deliteľov druhého
čísla. Známe sú napr. (220,284);
(1184, 1210)
|
procedure spriatelene(n:integer);
var
i,j:integer;
begin
for i:=1 to n do begin
j:=sucdel(i);
if (j<=n) and (sucdel(j)=i) then
Memo1.Lines.Add(IntToStr(i)+','+IntToStr(j));
end;
end;
|
i-ta cifra čísla
|
Funkcia cifra(n,i:integer) vráti
i-tu cifru čísla - cifry počítame
od najnižšieho rádu.
|
function cifra(n,i:integer):integer;
begin
while (n>0) and (i>1) do begin
n:=n div 10; dec(i);
end;
Result:=n mod 10;
end;
|
Ďalšie úlohy
- Napíšte celočíselnú funkciu
s tromi parametrami c, k a n, ktorá vsunie
cifru c na k-te miesto sprava v čísle n (teda
vráti zmodifikované číslo n).
Ak sa to urobiť nedá (k je väčšie ako
počet cifier čísla n), vráti nezmenené
číslo n.
- Napíšte procedúru, ktorá
pre prirodzené číslo n a
nájde všetky dvojice čísel z intervalu
<n, 2*n>, ktoré sú blížencami.
Blížencami sa nazývajú dve
prvočísla, ktorých rozdiel je 2, napr.
41 a 43 sú blíženci.
Znakové reťazce
palindromy
|
Napíšte funkciu, ktorá vráti true, ak reťazec, ktorý je jej parametrom je
palindrom, inak vráti false. Palindrom je taký reťazec,
ktorý sa rovnako číta spredu
aj odzadu. Napr. ťahať, abcddcba
|
function palindrom(s:string):boolean;
var
i:integer;
begin
i:=1; Result:=true;
while Result and (i<=length(s) div 2) do begin
Result:= s[i]=s[length(s)-i+1];
inc(i);
end;
end;
|
celý súbor do jedného
znakového reťazca
|
Napíšte funkciu FileToStr, ktorá otvorí textový
súbor a celý jeho obsah načíta
do jediného veľkého znakového
reťazca - reťazec má obsahovať
aj konce riadkov. Parametrom funkcie je
meno súboru a výsledkom je
načítaný reťazec.
|
function FileToStr(meno:string):string;
var
t:TextFile;
r:string;
begin
AssignFile(t,meno); Reset(t); Result:='';
while not eof(t) do begin
readln(t,r); Result:=Result+r+#13#10;
end;
CloseFile(t);
end;
|
Ďalšie úlohy
- Vylepšite funkciu palindorm tak, že ignoruje
medzery a nerozlišuje malé a veľké
písmená. Napr. aj toto sú palindromy:
"Jelenovi pivo nelej" alebo "Kobyla
Ma Maly Bok".
- Napíšte procedúru, ktorá vo vstupnom reťazci nahradí všetky výskyty ' '
sa nahradia '* *' – vsunutú medzeru už nenahrádzajte!
|

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