сряда, 9 февруари 2011 г.

Подпрограми процедури


Технически университет – София


Катедра ПКТ, ФКСУ


Изготвил: Георги Минчев
Фак. № 000000000, поток: 0, гр: 0


Приел: гл.ас. Д.Минковска

Протокол № 8
 дата: 13.11.2009

  

Подпрограми процедури

Процедури.Същност - подпрограма, която след изпълнението си може да връща произволен брой стоиности, една или нито една. Прдназначени са за реализиране на самостоятелни операции в програмата, за разделяне на програмата на по малки обособени части, за извършване на многократно повтарящи се изчисления в програмата, посредством обмен на параметри с главната програма и промяна на тяхната стойност.


Видове:
- стандартни процедури - това са процедури, които са описани във вградения модул System. Процедурите в този модул са достъпни без посочване името на модула в декларативната част на програмата.
- процедури, дефинирани от потребителя - те могат да обменят данни с извикващата ги програма или да не обменят, извършвайки самостоятелни действия. Възможни са следните случаи:
*процедурите получават входни данни и връщат изходни резултати 
*процедурите получават входни данни, но не връщат изходни резултати 
*процедурите не получават входни данни, а само връщат изходни резултати 
*процедурите не получават входни данни и не връщат изходни резултати

Дефиниране на процедурата. Описанието на процедурата се състои от заглавие(там се определя името с което се извиква процедурата), декларативна част(декларират се обекти,тези обекти се явяват локални за процедурата) и изпълнителна част(тя започва с begin и завършва с end, но за разлика от главната програма след end се поставя разделителят ; , а не точка).
Синтаксисът на описанието е:




procedure <име> [(<формални параметри>)];
<декларативна част на процедурата>
begin
<изпълнителна част на процедурата>
end;

където:
- procedure е служебна дума, поставена в началото на заглавието и показва, че следва описание на процедура;
- <име> е името на процедурата;
- <формални параметри> представлява списък с декларации на типа на променливи. Декларациите се поставят в кръгли скоби са подобли на декларациите  в декларативната част на една програма. Квадратните скоби показват, показват че списъкът с формални параметри не е задължителен.

-1-



        Извикване на процедурата. Процедурите се извикват в програмата черз сеоето име, използвано в качеството на оператор. Ако заглавието на процедурата при дефиницията в декларативната част на изискващата програма съдържа списък с формални параметри, то при извикването на тази процедура след името , заграден с кръгли скоби, се посочва списък с фактически параметри, разделени един от друг с запетая. Синтаксис:

procedure <име> [(<фактически параметри>)];

където:
- <име> е името на процедурата;
<фактически параметри> затворен в кръгли скоби списък от фактичеси параметри, разделени един от друг с разделител запетая ( , ).


Задача 1
Да се състави програма, която да използва процедура за изчисляване корените на квадратно 
уравнение. Коефициентите на квадратното уравнение да се въвеждат от клавиатурата.

program zadacha1;

uses crt;
var
K,L,M : real;
y1,y2,z1,z2 : real;
flag : boolean;
procedure roots(A,B,C:real; var x1,x2:real; var f1:boolean);
var
d :real;
begin
f1 := true;
if a = 0 then
begin
x1 := -c/b;
writeln('V tozi sluchei urawnenieto e lineino: ');
writeln('negoviqt koren e x= ',x1:6:2);
end
else
if c = 0 then
writeln('Uravnenieto ima reshenie pri X = 0')
else
begin
D := sqr(b) -4*a*c;
if d < 0 then
begin
writeln('Uravnenieto nqma realni koreni');
f1 := false;
end
else
if d = 0 then
begin
x1 := -b/(2*a);
x2 := x1;
writeln('Uravnenieto ima dva ravni korena: ');
end
else
begin
x1 := (- b + sqrt(d))/(2*a);
x2 := (- b - sqrt(d))/(2*a);
writeln('uravnenieto ima 2 realni korena: ')
end;
end;
end;
begin
clrscr;
writeln('reshenie na kvadratno uravnenie');
write('Vavedete koeficient a = ');
readln(k);
write('vavedete koeficient b = ');
readln(l);
write('vavedete koeficient c = ');
readln(m);
writeln;
roots(k,l,m,z1,z2,flag);
if flag then
writeln('z1 = ',z1:6:2,' z2 = ',z2:6:2);
readln;
end.
writeln(reshenie na vtoroto kvadratno uravnenie’);
write(’vavedete koeficient a: = ‘);
readln(k);
write(’vavedete koeficient b: = ‘);
readln(l);
write(’vavedete koeficient c: = ‘);
readln(m);
writeln;
roots(k,l,m,z1,z2,flag);
if flag then
writeln(’z1 = ,z1:6:2,’ z2 = ‘,z2:6:2);
readln;
end.



-2-



Задача 2
Да се състави програма, която да която да въвежда от клавиатурата стойности в двумерен масив с размерност 4х4 и да извежда на екрана въведените от матрицата стойности в подходящ вид. Да се съставят 2 процедури - първата да въвежда стойности в масива, а втората да извежда стойности на екрана..

program zadacha2;
uses Crt;
type
Mas2 = array[1..4,1..4] of Integer;
var
Q : Mas2;
procedure Enter(var A:Mas2);
var
I,J : Integer;
begin
for I := 1 to 4 do
for J := 1 to 4 do
begin
write('Q[',I,',',J,'] = ');
Readln(A[I,J]);
end;
end;
procedure Out(B:Mas2);
var
I,J : Integer;
begin
for I := 1 to 4 do
begin
Writeln;
for J := 1 to 4 do
Write(B[I,J]:4);
end;
end;
begin
Writeln('Vavedete stoinosti v masiva Q');
Enter(Q);
Writeln;
Writeln('Vavedenite stoinosti v masiva Q sa: ');
Out(Q);
Readln;
end.


-3-

  

Задача 3

Да се състави програма, която да извършва сортиране на два едномерни масива А и В. За целта да се се разработят три процедури: първата да въвежда стойности в масива, втората да го сортира, а третата да извежда масива на екрана.


program zadacha3;
const
k = 20;
type
masiv = array[1..k] of real;
var
a,b : masiv;
ma,mb : integer;
procedure datain(N : integer; name : char; var c : masiv);
var
I : integer;
begin
for I := 1 to n do
repeat
write('vavedete chisloto ot 0 so 99 - ',name,'[',i,'] = ');
readln(c[i]);
until ((c[i] >= 0) and (c[i] < 99));
end;
procedure dataout(n : integer; c: masiv);
var
i : integer;
begin
for i := 1 to n do
write(c[i]:6:1);
end;
procedure datasort(n:integer; name : char; var c : masiv);
var
i : integer;
rez : real;
flag : boolean;
begin
repeat
flag := true;
for i := 1 to n - 1 do
if c[i] > c[i+1] then
begin
flag := false;
rez := c[i];
c[i] := c[i+1];
c[i+1] := rez
end;
until flag;
writeln;
writeln('sortiraniqt masiv',name,' e: ');
end;
begin
writeln('vavedete danni v masiv a');
write('vavedete razmer na masiv a: ');
readln(ma);
datain(ma,'a',a);
writeln;
writeln('vavedete danni v masiv b');
write('vavedete razmer na masiv b: ');
readln(mb);
datain(mb,'b',b);
writeln;
writeln('vavedeniqt masiv b e: ');
dataout(mb,b);
writeln;
datasort(mb,'b',b);
writeln;
dataout(mb,b);
readln;
end.


-4-

0 коментара:

Публикуване на коментар

 

About this blog