Технически университет – София | |
Катедра ПКТ, ФКСУ | |
Изготвил: Георги Минчев Фак. № 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 коментара:
Публикуване на коментар