Příklady na procedury
Sestavte proceduru pro seřazení posloupnosti reálných čísel do nerostoucí poslopnosti. Použijte ji v programu: Na vstupu je dáno přirozené čislo N z intervalu <2,100> a dále posloupnost N reálných čísel. Sestavte program, který vytiskne zadanou posloupnost, setříděnou posloupnost (nerostoucí) a setříděnou posloupnost absolutních hodnot zadané posloupnosti.
program Trideni; {$APPTYPE CONSOLE} type pole=array[1..100] of real; procedure Setrid(n:integer;var a:pole); var i,j:integer; p:real; begin for i:=1 to n-1 do for j:=i+1 to n do if a[j]>a[i] then begin p:=a[i];a[i]:=a[j];a[j]:=p; end;
procedure Tiskni(n:integer;a:pole); var i:integer; begin for i:=1 to n do begin write(a[i]:8:2); if i mod 5 = 0 then writeln; end;
var i,n:integer; a,b:pole; f:text; begin writeln('Program pro trideni posloupnosti:'); writeln('*********************************'); writeln; assign(f,'data.txt'); reset(f); read(f,n); for i:=1 to n do begin read(f,a[i]); b[i]:=abs(a[i]); end; writeln('Zadana posloupnost: '); Tiskni(n,a); writeln;writeln;
writeln('Setridena posloupnost: '); Setrid(n,a); Tiskni(n,a); writeln;writeln; writeln('Setridena posloupnost absolutnich hodnot: '); Setrid(n,b); Tiskni(n,b); writeln('Enter-konec'); readln; end.
Sestavte proceduru pro vynásobení dvou obdélníkových matic Sestavte proceduru pro vynásobení dvou obdélníkových matic. Použijte ji v programu: Na vstupu je dáno přirozené číslo N z intervalu <2,20> a dále čtvercová matice reálných čísel A řádu N. Sestavte program, který vytiskne matici A a dále matici A2 a matici A3.
program MocninyMatice; {$APPTYPE CONSOLE} type matice=array[1..20,1..20] of real; procedure SoucinMatic(m,n,p:integer;a,b:matice; var c:matice); var i,j,k:integer; s:real; begin for i:=1 to m do for j:=1 to p do begin s:=0; for k:=1 to n do s:=s+a[i,k]*b[k,j]; c[i,j]:=s; end;
procedure TiskMatice(m,n:integer;a:matice); var i,j:integer; begin for i:=1 to m do begin for j:=1 to n do write(a[i,j]:8:2); writeln; end;
var i,j,n:integer; a,b,c:matice; f:text; begin writeln('Program pro tisk mocnin matice:'); writeln('*******************************'); writeln; assign(f,'data.txt'); reset(f); read(f,n); for i:=1 to n do for j:=1 to n do read(f,a[i,j]); writeln('Zadana matice: '); TiskMatice(n,n,a);
SoucinMatic(n,n,n,a,a,b); writeln('Druha mocnina matice: '); writeln; TiskMatice(n,n,b); SoucinMatic(n,n,n,b,a,c); writeln('Treti mocnina matice: '); TiskMatice(n,n,c); writeln('Enter-konec'); readln; end.
Sestavte proceduru pro převod obdélníkové matice reálných čísel typu M, N do posloupnosti o P = M * N členech (po řádcích) a proceduru pro převod opačný - posloupnosti o P = M * N členech na matici typu M, N (po řádcích). Procedury použijte v programu: Na vstupu jsou dána přirozená čísla M, N z intervalu <2,30> a dále matice typu M, N reálných čísel. Vytiskněte matici typu M, N, která vznikne z původní matice uspořádáním všech prvků matice podle velikosti od největšího po nejmenší - prvky budou setříděny po řádcích (matice se převede na posloupnost, setřídí a převede zpět na matici).
program TrideniMatice; {$APPTYPE CONSOLE} type matice=array[1..30,1..30] of real; vektor=array[1..900] of real; procedure preved1(m,n:integer;a:matice;var v:vektor); var i,j,k:integer; begin k:=0; for i:=1 to m do for j:=1 to n do begin inc(k); v[k]:=a[i,j]; end;
procedure preved2(m,n:integer;v:vektor;var a:matice); i,j,k:integer; begin k:=0; for i:=1 to m do for j:=1 to n do begin inc(k); a[i,j]:=v[k]; end; procedure setrid(p:integer;var v:vektor); i,j:integer; x:real; for i:=1 to p-1 do for j:=i+1 to p do if v[j]>v[i] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x;
var i,j,m,n:integer; a,b:matice; v:vektor; f:text; begin writeln('Program pro setrideni prvku matice po radcich'); writeln('*********************************************'); writeln; assign(f,'data.txt'); reset(f); read(f,m,n); for i:=1 to m do for j:=1 to n do read(f,a[i,j]); preved1(m,n,a,v); setrid(m*n,v); preved2(m,n,v,b); writeln('Zadana matice:'); for i:=1 to m do begin write(a[i,j]:12:2); end;
writeln; writeln('Setridena matice:'); for i:=1 to m do begin for j:=1 to n do write(b[i,j]:12:2); end; writeln('Konec-enter'); readln; end.
Příklady na funkce
Sestavte funkci pro nalezení maximální hodnoty v posloupnosti n reálných čísel a použijte ji v programu: Na vstupu je dáno přirozené číslo n z intervalu <2,1000> a dále posloupnost n nenulových reálných čísel. Sestavte program pro nalezení maximální hodnoty dané posloupnosti a dále maximální hodnoty z posloupnosti absolutních hodnot a z posloupnosti převrácených hodnot původní posloupnosti.
program MaximumPosloupnosti; {$APPTYPE CONSOLE} type pole=array[1..1000] of real; function Maximum(n:integer;a:pole):real; var i:integer; max:real; begin max:=-1e30; for i:=1 to n do if a[i]>max then max:=a[i]; result:=max; end; procedure TiskniPosloupnost(n:integer;a:pole); for i:=1 to n do begin write(a[i]:10:4); if i mod 5 = 0 then writeln if n mod 5 <> 0 then writeln;
var i,n:integer; a,b,c:pole; f:text; begin writeln('Program pro nalezeni maxima posloupnosti'); writeln('****************************************'); writeln; assign(f,'data.txt');reset(f); read(f,n); for i:=1 to n do read(f,a[i]); writeln('Zadana posloupnost:'); TiskniPosloupnost(n,a); writeln('Maximum = ',Maximum(n,a):8:2); b[i]:=abs(a[i]); writeln('Posloupnost absolutnich hodnot:'); TiskniPosloupnost(n,b); writeln('Maximum = ',Maximum(n,b):8:2);
writeln; for i:=1 to n do c[i]:=1/a[i]; writeln('Posloupnost prevracenych hodnot:'); TiskniPosloupnost(n,c); writeln('Maximum = ',Maximum(n,c):8:4); writeln('Konec-enter'); readln; end.
Sestavte funkci pro výpočet vzdálenosti dvou bodů v prostoru Sestavte funkci pro výpočet vzdálenosti dvou bodů v prostoru. Funkci použijte v programu: Vstupní textový soubor obsahuje na každém řádku trojici reálných čísel - souřadnic bodů v prostoru. Řádků je maximálně 1000. Najděte maximální vzdálenost mezi body a dvojici bodů v této maximální vzdálenosti.
program MaximalneVzdaleneBody; {$APPTYPE CONSOLE} function vzd(x1,y1,z1,x2,y2,z2:real):real; begin result:=sqrt(sqr(x2-x1)+sqr(y2-y1)+sqr(z2-z1)); end; var i,j,n,imax1,imax2:integer; x,y,z:array[1..1000] of real; max,v:real; f:text; assign(f,'data.txt');reset(f); n:=0; while not eof(f) do begin inc(n); readln(f,x[n],y[n],z[n]); writeln('Program pro nalezeni maximalne vzdalenych bodu'); writeln('**********************************************'); writeln; writeln('Zadane body:'); for i:=1 to n do writeln(i:3,x[i]:6:2,y[i]:6:2,z[i]:6:2);
max:=-1e30; for i:=1 to n-1 do for j:=i+1 to n do begin v:=vzd(x[i],y[i],z[i],x[j],y[j],z[j]); if v>max then begin max:=v; imax1:=i;imax2:=j; end; writeln('Maximalni vzdalenost: ',max:8:3); writeln(' i x y z'); writeln(imax1:4,x[imax1]:6:2,y[imax1]:6:2,z[imax1]:6:2); writeln(imax2:4,x[imax2]:6:2,y[imax2]:6:2,z[imax2]:6:2); writeln; writeln('Enter-konec'); readln; end.
Sestavte funkci pro výpočet hodnoty daného polynomu v daném bodě Sestavte funkci pro výpočet hodnoty daného polynomu v daném bodě. Funkci použijte v programu, který vytiskne tabulku hodnot polynomu na zadaném intervalu se zadaným krokem.
program TabelacePolynomu; {$APPTYPE CONSOLE} type tpoly=array[0..100] of real; function poly(n:integer;a:tpoly;x:real):real; var i:integer; s:real; begin s:=a[n]; for i:=n-1 downto 0 do s:=s*x+a[i]; result:=s; end;
const radek='***************************************'; var DolniMez,HorniMez,Krok,x,y1,y2:real; i,n:integer; a:tpoly; f:text; begin assign(f,'data.txt');reset(f); read(f,n); for i:=n downto 0 do read(f,a[i]); read(f,DolniMez,HorniMez,Krok); writeln('Program pro tabelaci hodnot polynomu'); writeln('************************************'); writeln; writeln('Stupen polynomu: ',n); writeln('Koeficienty polynomu:'); write(a[i]:6:2); writeln('Zadana dolni mez: ',DolniMez:6:2,' horni mez: ',HorniMez:6:2,' krok: ',Krok:6:2);
writeln(radek); writeln('* x * hodnota polynomu *'); x:=DolniMez;i:=0; while x<=HorniMez do begin writeln('*',x:13:3,' *',poly(n,a,x):17:3,' *'); inc(i); if i mod 5 = 0 then writeln(radek); x:=x+Krok; end; if i mod 5 <> 0 then writeln(radek); writeln; writeln('Enter-konec'); readln; end.
Sestavte funkci pro výpočet největšího společného dělitele dvou přirozených čísel a použijte ji v programu pro nalezení největšího společného dělitele zadané n-členné posloupnosti přirozených čísel.
program NSDzNCisel; {$APPTYPE CONSOLE} function nsd(x,y:integer):integer; begin while x<>y do if x>y then x:=x-y else y:=y-x; nsd:=x; end; var i,n,x,y:integer; a:array[1..100] of integer; f:text; writeln('Program pro nalezeni NSD n cisel'); writeln('********************************'); writeln; assign(f,'data.txt'); reset(f); read(f,n); for i:=1 to n do read(f,a[i]);
writeln('Zadana cisla: '); for i:=1 to n do begin write(a[i]:8); if i mod 5 = 0 then writeln; end; x:=a[1]; for i:=2 to n do begin y:=a[i]; x:=nsd(x,y); writeln;writeln; writeln('NSD z n cisel = ',x); writeln('Konec - Enter'); readln; end.
Příklady na rekurzi
Sestavte rekurzivní funkci pro výpočet přirozené mocniny xn a použijte ji v programu pro výpočet xn pro zadané reálné číslo x a přirozené číslo n.
program PrirozenaMocnina; {$APPTYPE CONSOLE} function Mocnina (x:real;n:integer):real; begin if n=0 then Mocnina := 1 else Mocnina := x * Mocnina(x, n - 1) end; var x:real; n:integer; writeln('Program pro vypocet prirozene mocniny cisla'); writeln('*******************************************'); writeln; write('Zadej cislo x: '); readln(x); write('Zadej cislo n: '); readln(n); writeln('x^n = ',Mocnina(x,n):10:4); writeln('Konec-enter'); readln; end.
Sestavte rekurzivní funkci pro výpočet n-tého členu rekurentně definované posloupnosti: a1 = 3, an+1 = 3*an - 2. Funkci použijte v programu pro výpočet n-tého členu posloupnosti pro zadané n.
program ClenPosloupnosti; {$APPTYPE CONSOLE} function Clen(n:integer):integer; begin if n=1 then Clen := 3 else Clen:= 3*Clen(n-1)-2; end; var n:longint; writeln('Program pro vypocet n-teho clenu posloupnosti'); writeln('*********************************************'); writeln; write('Zadej cislo n: '); readln(n); writeln('n-ty clen = ',Clen(n)); writeln('Konec-enter'); readln; end.
Sestavte rekurzivní funkci pro výpočet součtu cifer přirizeného čísla a použijte ji v programu pro výpočet součtu cifer zadaného přirozeného čísla.
program CifernySoucet; {$APPTYPE CONSOLE} function CifSou(n:longint):longint; begin if n<10 then CifSou := n else CifSou := n mod 10 + CifSou(n div 10) end; var n:longint; writeln('Program pro vypocet souctu cifer cisla'); writeln('**************************************'); writeln; write('Zadej cislo n: '); readln(n); writeln('Ciferny soucet = ',CifSou(n)); writeln('Konec-enter'); readln; end.
Sestavte rekurzivní proceduru pro výpočet největšího společného dělitele dvou čísel.
program RekurzivniEukleiduvAlgoritmus; // Eukleiduv algoritmus pro nalezení nejvetšího spolecného // dělitele dvou přirozených čísel pomocí rekurze. {$APPTYPE CONSOLE} var x,y,a,b,p:integer; procedure nsd1; begin if y<>0 then begin p:=y;y:=x mod y;x:=p; nsd1; end; function nsd2(x,y:integer):integer; nsd2:=nsd2(y,x mod y); end else nsd2:=x;
function nsd3(x,y:integer):integer; begin if x>y then nsd3:=nsd3(x-y,y) else if x<y then nsd3:=nsd3(x,y-x) if x=y then nsd3:=x; end; writeln('Program pro nalezeni nejvetsiho spolecneho delitele'); writeln('***************************************************'); writeln; write('Zadej dve cisla: '); readln(a,b); {prirazeni pro nsd1} x:=a; y:=b; nsd1; writeln('NSD1(',a,',',b,') = ',x); writeln('NSD2(',a,',',b,') = ',nsd2(a,b)); writeln('NSD3(',a,',',b,') = ',nsd3(a,b)); writeln('Konec - ENTER'); readln; end.
Sestavte rekurzivní proceduru pro převod čísla do dvojkové soustavy.
program DvojkovaSoustava; {$APPTYPE CONSOLE} procedure Bin(n:longint); begin if n<>0 then begin Bin(n div 2); write(n mod 2); end; var x:longint; writeln('Program pro prevod cisla do dvojkove soustavy'); writeln('*********************************************'); writeln; write('Zadej cislo: '); readln(x); bin(x); writeln('Konec-enter'); readln; end.