Cig Fibonacciego zosta omwiony podczas zaj jako jeden z
bardziej interesujcych problemw algorytmicznych. Program ten to praktyczna
realizacja tego realizacja tego zagadnienia.
PROGRAM Ciag_Fibonacciego_1;
USES Crt;
n,licznik,pierwsza,druga,z_p: LONGINT;
BEGIN
ClrScr;
Write ('Podaj ilosc
tworzonych liczb cigu Fibonacciego n>=2, n = ');
Readln (n);
pierwsza:=0;
druga:=1;
Writeln;
Writeln ('Liczby ciagu
Fibonacciego: ');
Writeln;
Write
(pierwsza:10,druga:10);
FOR licznik:= 1
TO n-2 DO
BEGIN
z_p:=pierwsza+druga;
pierwsza:=druga;
druga:=z_p;
Write (druga:10);
END;
END.
program ciag_fibonacciego_kwadraty_szesciany ;
var n,i,j,l: longint;
a: array[1..46] of
longint;
x,y: real;
k:char;
begin
Write(' Drukowanie
wszystkich elementw cigu Fibonacciego
(n<=46),');
writeln('ktre s
kwadratami lub szecianami liczb naturalnych.');
j:=1;
while j=1
begin
Writeln(' Podaj n-ty
numer ciagu');
readln(n);
if (n<=0) then
writeln('Ze dane');
else
begin
writeln('f(1)=1');
if n>1 then
writeln ('f(2)=1');
if n>2 then
begin
a[1]:=1;
a[2]:=1;
for i:=2 to n do
begin
a[i]:=a[i-1]+a[i-2];
l:=0;
repeat
l:=l+1;
x:=l*l;
until x>=a[i];
l:=0;
repeat
l:=l+1;
y:=l*l*l;
until y>=a[i];
if a[i]=x then writeln ('f(',i,')=' , a[i],' ');
if a[i]=y then writeln ('f(',i,')=' , a[i],' ');
end;
end;
end;
writeln('czy
chcesz pracowa dalej? ('t/n');
readln(k);
if k='n' then j:=0
end;
end.
Zajmijmy si teraz
sposobem zamiany liczb dziesitnych na binarne wykorzystujc do tego celu
tablice. Przykadowy program z komentarzem
PROGRAM dz_na_bin; {
Zmiana ukadu z dziesitnego na dwjkowy }
var cyfry : Array[1..16] of Integer; { tu zapiszemy kolejne cyfry w ukadzie dwjkowym }
x, i : Integer; {
x-liczba w ukadzie dziesitnym; i
zmienna pomocnicza }
begin { wprowadzamy
liczby }
repeat
writeln('Podaj liczb
cakowit 0 <= n <= 32767');
readln(x)
until x >= 0;
for i:=1 to 16 do
cyfry[i]:=0; { zerujemy cyfry "dwjkowe"}
{ wypeniamy tablic
cyframi od pozycji najmniej znaczcej }
i:=1;
while x>0 do
begin
cyfry[17-i]:=x mod
2; { kolejna (od koca) cyfra jest
reszt z dzielenia przez 2 }
x:=x div 2; { przesuwamy si o jedn cyfr w
lewo w zapisie dwjkowym }
inc(i)
end;
{ przeskakujemy
pocztkowe zera w tablicy 'cyfry'}
i:=1; while (cyfry[i]=0)
and (i<16) do inc(i);
{ wyprowadzamy liczb w
zapisie dwjkowy na ekran }
write('W zapisie
dwjkowym = ');
while i<=16 do
begin
write(cyfry[i]);
inc(i);
end;
writeln;
readln
end.
Zbudujmy teraz
program, ktry pozwoli oceni znajomo tabliczki mnoenia oraz wywietla
procentowo prawidowe wyniki
program test;
uses crt;
var
a,b:array[1..10] of integer;
i:integer;
pop:integer;
wynik:integer;
begin
clrscr;
randomize;
pop:=0;
for i:=1 to 10 do begin
a[i]:=random(11);
b[i]:=random(11);
end;
for i:=1 to 10 do begin
write('jaki wynik ', a[i],'*',b[i],'=');
readln(wynik);
if
wynik=(a[i]*b[i]) then pop:=pop+10;
end;
writeln('uzyskales
',pop,'% ','odpowiedzi ');
readln
end.
Wielomian w postaci wn(x)=(...((a0x+a)x+a2)x+.....+an-1)x+an jak i wynikajcy z tego sposb obliczenia
wielomianu nazywamy schematem Hornera. Chcemy obliczy wn(z) czyli
warto wielomianu dla wartoci argumentu x=z oznaczamy t warto przez y
wtedy obliczenia przebiegaj zgodnie z wzorami:
y:= ao y:=yn+ai I= 1,2, 3 ,..n
z powyszych wzorw wynika, e obliczenie wartoci wielomianu
stopnia n wymaga wykonania n mnoe i dodawa. Prosz przeanalizowa ten
program
PROGRAM alg_hor; { Warto wielomianu wg algorytmu Hornera }
const
MaxStWiel = 10; {
maksymalny stopie wielomianu }
type
t_a =
array[0..MaxStWiel] of Real; { typ
tablicy zawierajcej
wspczynniki przy kolejnych potgach x }
var
n : Integer; { n - stopnie wielomianu }
i : Integer; { zmienna pomocnicza }
x : Real; { argument }
a : t_a; { wspczynniki wielomianu }
y : Real; { wynik }
begin
write('Ktrego stopnia ma
by wielomian (max =', MaxStWiel, ')? ');
readln(n);
writeln('Podaj kolejne
wartoci wspczynnikw wielomianu');
writeln('od wyrazu
wolnego do stojcego przy najwyszej potdze x');
for i := 0 to n do
begin
write('a[', i, ']:=');
readln(a[i])
end;
write('Dla jakiego x
obliczy warto wielomianu? ');
readln(x);
y := 0.0; { przed rozpoczciem oblicze warto
wyniku zerujemy }
for i := 0 to n do y :=
y*x + a[n-i]; { obliczamy warto wielomianu }
writeln('y= ', y);
readln
end.
Przedstawiam teraz inny program analizy
rozwizania wielomianu
Program Wartosc_wielomianu;
uses crt;
var a:array [0..10] of integer;
n,x,y:integer;
i:byte;
begin
clrscr;
Writeln ('Podaj stopien n wielomianu max 10');
read (n);
for i:=0 to n do
begin
writeln
('Podaj ',i,' wspczynnik wielomianu');
read (a[i]);
end;
writeln ('Podaj argument x ');
read (x);
y:=a[0];
i:=0;
while i<n do
begin
i:=i+1;
y:=y*x+a[i];
end;
writeln ('WYNIK TEGO WIELOMIANU JEST',y);
repeat until keypressed;
end.
W tym programie pokazano w jaki sposb mona zamienia midzy sob
wiersze w tablicy
PROGRAM zmiana_wierszy; {
Zamiana miejscami i-tego i j-tego wiersza }
const n=5; { rozmiary
macierzy n - wierszy i m - kolumn }
m=6;
type t_a=Array[1..n,1..m] of Integer; { definiujemy typ t_a }
const a:t_a=((1,2,3,4,5,6),
{ definicja staej typu t_a }
(1,1,1,3,4,1),
(3,4,5,6,7,1),
(0,0,0,0,0,1),
(5,5,4,4,1,1));
var i, j, k : Integer;
x : Integer;
begin
writeln('Macierz przed
przestawieniem wierszy:');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i?tGHjѨDƿ?ެ zʬUϚb]減|s}ѳ>Vd҅fx̛}j!+n][QjXu<:ݮ 7or|_?Jew$UN%#k_}.K
6k}5o
4$#+큚/&ϙo7FDZV>)xoQѼ ̶?>ʮߛ<׳J^