Паскаль хэл дээрх процедур ба функцууд. Рекурс. Дэд программууд Ихэнхдээ даалгавар нь програмын янз бүрийн хэсэгт тодорхой дарааллыг давтахыг шаарддаг. Процедур ба чиг үүрэг Процедур ба чиг үүргийн танилцуулга

Паскаль хэл дээрх рекурсБагша: Тлекурай Ю.В. Хотын боловсролын байгууллага "8-р лицей" Та зургуудаас юу харж байна вэ? Урлагт энэ үзэгдлийг нэрлэдэг рекурс "Рекурсийг ойлгохын тулд эхлээд рекурсийг ойлгох хэрэгтэй." рекурси - объектыг өөрөө дамжуулан хэсэгчлэн тодорхойлох, өмнө нь тодорхойлсон зүйлийг ашиглан объектыг тодорхойлох. Шинжлэх ухааны хувьд: Рекурс - объект, аргуудын ангиллыг эхлээд түүний үндсэн тохиолдол, аргуудын нэг буюу хэд хэдэн (ихэвчлэн энгийн) зааж, дараа нь тэдгээрийн үндсэн дээр тодорхойлж буй ангиудыг бий болгох дүрмийг зааж өгөх арга. Петр Дойч Питер Дойч

Хүний давталт.

Рекурс нь Бурханаас ирсэн.

Физик дэх рекурсХэл ба уран зохиол дахь рекурс Хязгааргүй рекурсын сонгодог жишээ юм бие биенийхээ эсрэг талд байрлуулсан хоёр толь: тэдгээрийн дотор толины тусгал бүдгэрч хоёр коридор үүсдэг. Хязгааргүй рекурсын өөр нэг жишээ өөрийгөө өдөөх нөлөө (эерэг санал хүсэлт) y электрон хэлхээолз, гаралтын дохио нь оролтод хүрэх үед олшруулж, хэлхээний оролтод дахин хүрч, дахин нэмэгддэг. Энэ үйлдлийн горим стандарт болсон өсгөгчийг өөрөө осциллятор гэж нэрлэдэг. Толь бичгийн рекурсив бичилтийн жишээ: “Тахилч нохойтой байсан...” - ердийн рекурс Станислав Лемийн хэд хэдэн өгүүллэг нь хязгааргүй рекурс бүхий тохиолдлуудад зориулагдсан байдаг: Булшны тухай өгүүллэг (“Чимээгүй Жонны оддын өдрийн тэмдэглэл”), Үүнд баатар булшны тухай өгүүллээс булшны тухай нийтлэл рүү, тэндээс булшны тухай өгүүлэл рүү шилжсэн бөгөөд энэ нийтлэлд дахин "бушны тухай" өгүүллийг иш татсан болно. Тухайн асуудлыг шийдэхийн тулд ижил төстэй машин бүтээж, түүнд шийдлийг даатгах хангалттай оюун ухаан, залхуутай ухаалаг машины тухай түүх (үр дүн нь хязгааргүй рекурс юм. шинэ машинөөртэйгөө адилхан нэгийг барьж, түүнд даалгавраа хүлээлгэн өгсөн). Програмчлалын рекурс гэдэг нь тухайн процедур эсвэл функцийг бүрдүүлэгч операторуудыг гүйцэтгэх явцад өөрт нь хамаарах тооцооллын процессыг зохион байгуулах арга юм. Ийм дуудлага эцэс төгсгөлгүй байхын тулд дэд программын текст нь өөр ямар ч дуудлага хийхгүй байх нөхцөлийг агуулсан байх ёстой. Иймээс рекурсив дуудлагыг зөвхөн дэд программын аль нэгэнд нь оруулах боломжтой. Жишээ. Натурал тооны факториалыг тооцоолох n тооны факториалыг дараах байдлаар тооцдог рекурсив функцийг үүсгэ: функц f (n: бүхэл тоо): longint; эхлэх бол n = 1 бол f:= 1 өөр f:= n * f(n -1); (f функц өөрийгөө дууддаг)Рекурс ашиглан Паскал програмыг дуусгах: Var n: бүхэл тоо; а: урт удаан; функц факториал (n: бүхэл тоо): longint; эхлэх бол n = 1 бол факториал:= 1 өөр хүчин зүйл:= n * хүчин зүйл (n -1); Төгсгөл; Эхлэх бичих(‘n=’); Readln(n); A:= хүчин зүйл(n); Write(‘n!=’,a); Readln; Төгсгөл. Пиза Фибоначчийн Леонардо

Фибоначчийн тоонууд нь тооны дарааллын элементүүд юм

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..., дараагийн тоо бүр өмнөх хоёрын нийлбэртэй тэнцүү байна.

Даалгавар: n элементээс бүрдсэн Фибоначчийн тооны цувралыг харуул. Хувьсагчийн тодорхойлолт: n – цувралын элементийн тоо; a, b - цувралын сүүлийн хоёр элементийн утга; c – буфер (“нөөц”) хувьсагч; би - тоолуур. Асуудлыг шийдэх алгоритм: 1. n-ийн утгыг ол. 2. a ба b утгыг тус тус 0 ба 1 оноо (эдгээр нь Фибоначчийн цувралын эхний тоонууд юм). Тэдгээрийг дэлгэцэн дээр харуул. 3. 3-р элементээс n хүртэл: a) a ба b-ийн нийлбэрийг харуулах, б) b хувьсагчийн утгыг c-д хадгалах, в) a ба b-ийн нийлбэрийг b-д бичих, d) a-ийн утгыг оноох. в. Давталт ашигладаг Паскаль програм: Фибоначчийн хөтөлбөр; var a,b,c,i,n: бүхэл тоо; Эхлэх бичих("n = "); readln(n); a:= 0; бичих," "); b:= 1; бичих(b," "); i:=3-аас n-ээс эхэлнэ бичих(a+b," "); c:= b; b:= a + b; a:=c; Төгсгөл; readln; Төгсгөл. Рекурс ашиглах Паскал програм:Фибоначчийн тоог тооцоолох рекурсив тодорхойлолт нь дараах байдалтай байна: Фибоначчийн тоонуудын энэхүү тодорхойлолтыг рекурсив функц болгон хялбархан хөрвүүлж болно: function f(n: Integer) : longint; эхлэх Хэрэв n<= 1 Then f:= n else f:= f(n– 1) + f(n - 2); end; Program chislaFibonacci; var n,i: integer; a: longint; function fib (n: integer): longint; begin If n <= 1 Then fib:= n else fib:= fib(n– 1) + fib(n - 2); End; begin write(‘n=’); readln(n); for i:=0 to n do begin A:= fib (n); write (‘ ’,a); end; readln; end. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа АТэгээд б.Хэрэв А= б,дараа нь зангилаа ( А,б)=а.Хэрэв А>б,дараа нь зангилаа ( А,б)=зангилаа ( a -b,б).Хэрэв А< б,дараа нь зангилаа ( А,б)=зангилаа ( А,б-а). Хөтөлбөрийн noddvyxchisel; var a,b: longint; function nod(a,b:longint): longint; эхлэх Хэрэв a = b Дараа нь толгой дохих:= a else if a>b дараа нь толгой дохих:= толгой дохих(a-b,b) өөрөөр толгой дохих:= толгой дохих(a,b-a) Төгсгөл; бичиж эхлэх('a='); readln(a); бичих('b='); readln(b); A:= толгой дохих(a,b); бичих('толгойгоо дохих=',a); readln; Төгсгөл. Ханойн цамхагуудын тухай асуудал. Энэ тохиолдолд дараах дүрмийг чанд дагаж мөрдөх ёстой.

  • Та нэг удаад зөвхөн нэг дискийг зөөж болно;
  • том дискийг байрлуулах боломжгүй жижиг диск;
  • хасагдсан дискийг нөгөө дискийг салгахаас өмнө дурын зүү дээр тавих ёстой.
  • Шаргуу Буддын шашны лам нар өдөр шөнөгүй шилбэнээс шилбэ рүү зөөдөг. Лам нар ажлаа дуусгахад ертөнцийн төгсгөл ирнэ гэж домогт өгүүлдэг. 64 дисктэй асуудлыг шийдвэрлэхэд 264–1 нүүдэл хийх шаардлагатайг тооцоолж болно. Тиймээс дэлхийн төгсгөлийн тухайд гэвэл нэг диск нэг секундэд хөдөлдөг гэж үзвэл таван тэрбум зууны дараа тохионо. Гэсэн хэдий ч асуудал болон түүний домог хоёулаа 1883 онд Сент-Луигийн коллежийн математикч Эдуард Лукас зохион бүтээжээ.

Гурван алмаазан шонгийн нэг нь 64 дугуй алтан дисктэй. Дискнүүд нь өөр өөр радиустай бөгөөд радиусын бууралтын дарааллаар шон дээр байрладаг. Шаардлагатай бол гурав дахь шонг ашиглан дискийг эхний шонгаас хоёр дахь руу шилжүүлэх шаардлагатай.

Даалгавар. Ханойн цамхгийн тухай дээр тавьсан асуудлыг n (n = 1, 2, ...)-тэй тэнцүү дискний тоогоор шийдвэрлэх рекурсив программыг үүсгэ. Шийдэл. Шатахууны нэрийг оруулъя: a, b, c. Болъё ханой(n,a,b,c)- дискний хөдөлгөөний дарааллыг буцаадаг шаардлагатай функц адээр башиглах вдээр дурдсан дүрмийн дагуу. n=1 үед бид асуудлыг хэрхэн шийдэхээ мэддэг. Та зүгээр л "хөдөлгөөн" үйлдлийг гүйцэтгэх хэрэгтэй адээр б" n – 1 дискний хувьд энэ асуудлыг шийдэж чадна гэж бодъё. n–1 дискийг зөөнө үү адээр -тай. Дараа нь үлдсэн нэг дискийг зөөнө үү адээр бэцэст нь n–1 дискийг зөөнө вдээр б. Мэдээлэл оруулах: бэхэлгээний дискний тоо a; Гаралт: дараалал; Алхам0:(хувьсагчийн төрлийг тодорхойлох); Алхам 1: (үйл ажиллагааны дарааллыг харуулсан Ханой процедурын тайлбар); 1.1-р алхам:((n-1) дискүүдийг a-аас b-д шилжүүлнэ); Алхам1.2:(n-р дискийг a-аас c руу шилжүүлэх); Алхам1.3:((n-1) дискийг b-ээс c руу шилжүүлэх); (1.2-1.3 алхмуудыг рекурсив байдлаар гүйцэтгэдэг); Алхам 2:(үндсэн програм); Алхам2.1:(дискний тоог оруулна уу); Алхам 2.2: (ханой процедурыг дуудах). Pascal програмын bahnya дахь асуудлыг шийдвэрлэх; var n: бүхэл тоо; a,b,c: тэмдэгт; процедур ханой(n: бүхэл тоо;a,b,c: char); Хэрэв n>0 байвал эхлэх hanoi(n-1,a,c,b); writeln ("Peremestit disk so sterzhnya ",a," na sterzhen" ",b); hanoi(n-1,c,b,a); төгсгөл; төгсгөл; Эхлэх бичих ("Vvedite naturalnoe chislo n"); readln ( n);a:="a"; b:="b"; c:="c"; ханой (n,a,c,b); readln; төгсгөл.Гэрийн даалгавар Байгалийн хэмжигдэхүүнээр зэрэг тооцох программ бичих илтгэгч Өгөгдсөн: градусын суурь XЭкспонент руу Хэрэв k=0 байвал зэрэг(k,x)=1, Үгүй бол зэрэг(k,x)= x· градус(к-1,х) Програм stepen; var y: бодит; n:бүхэл тоо; функцийн алхам(k:бүхэл тоо, x:real): бодит; эхлэх Хэрэв k = 0 Дараа нь алхам:= 1 өөр алхам:= x * алхам(k-1,x) Төгсгөл; begin write(‘vvedite osnovanie stepeni x=’); readln(y); write(‘vvedite pokazatel stepeni k=’); Readln(n); write(‘x v stepeni k=’,step(n,y)); readln; Төгсгөл. Бие даасан ажил

  • Тооны цифрүүдийн нийлбэрийг ол
  • Өгөгдсөн натурал тоо анхных эсэхийг тодорхойл
  • Тооны эхний цифрийг ол
  • Аравтын бутархайн натурал тоог хөрвүүлэх. хоёртын систем рүү
  • 20 элементээс бүрдэх бүхэл тоон массивын элементүүдийн нийлбэрийг ол
  • Хоёр бүхэл тооны утгыг соль
  • Гурван хувьсагчийн утгыг эрэмбэл a, b, cөсөх дарааллаар
  • Цифрүүдийн тоог ол натурал тоо n
  • Өгөгдсөн гурван тооны хамгийн томыг нь ол
  • A, B, C, D дөрвөн эерэг тооны тоог ол
Бие даасан ажлын хариулт No2 Хөтөлбөр энгийн; var n, m, s: бүхэл тоо; функц prost(m, n:бүхэл тоо): boolean; эхлэх Хэрэв n = m Дараа нь prost:= true else prost:= (n mod m<>0) ба прост (m+1, n); Төгсгөл; бичиж эхлэх('n='); Readln(n); М:=2; Хэрэв prost(m,n) байвал бичнэ үү (n,’prostoechislo’) Өөр бичнэ үү (n,’sostavnoe’); readln; Төгсгөл.

програмын орчуулга;

процедур dvd(n:longint);

Хэрэв n >1 Дараа нь dvd (n div 2);

бичих (n mod 2);

Дэд программууд Ихэнхдээ даалгавар нь програмын янз бүрийн хэсэгт тодорхой дарааллыг давтахыг шаарддаг. Энэ дарааллыг нэг удаа тайлбарлаж, олон удаа ашиглахын тулд програмчлалын хэлүүд дэд програмуудыг ашигладаг. Дэд програм нь үндсэн программдаа дараа нь дахин ашиглах зориулалттай тусгайлан зохион бүтээсэн программын блок юм.Дэд программуудыг ашиглах нь хамгийн орчин үеийн програмчлалын аргуудын нэг болох бүтэцлэгдсэн програмчлалыг хэрэгжүүлэх боломжийг олгодог.


Дэд программууд нь програмчлалыг ихээхэн хөнгөвчлөх гурван чухал асуудлыг шийддэг: 1. Програмын текст дэх ижил төстэй хэсгүүдийг дахин дахин давтах хэрэгцээг арилгадаг. програмын хэмжээг багасгах; 2. программын бүтцийг сайжруулж, задлан шинжлэхэд ойлгоход хялбар болгоно; 3.Алдаа гарах магадлалыг бууруулж, програмчлалын алдаа болон өөрчлөлтийн явцад урьдчилан тооцоолоогүй үр дагаврыг эсэргүүцэх чадварыг нэмэгдүүлнэ.


Процедур ба функцууд Паскаль хэл дээр процедур (PROCEDURE) ба функц (FUNCTION) гэсэн хоёр төрлийн дэд програм байдаг. Паскал хэл дээрх журам, функцуудыг хувьсагчийн хэсгийн ард зарлах хэсэгт зарласан. Програмын нэр; VAR ... // үндсэн програмын хувьсагчдыг тайлбарлах хэсэг; процедурын нэр; var ... begin ...//Procedure body end; эхлэл // үндсэн програмын бие төгсгөл.


Функц ба процедур нь параметртэй (утга дамжуулдаг хувьсагч). Эдгээр нь хоёр төрөлтэй: 1) Албан ёсны - дэд программын тайлбарт байгаа зүйлс 2) Бодит - үндсэн програмаас функц эсвэл процедур руу шилжсэн. Бодит үзүүлэлтүүд нь тоо хэмжээ, дараалал, төрлөөр албан ёсны үзүүлэлттэй тохирч байх ёстой.




Процедурууд Дэд програм нь олон үр дүнг авах шаардлагатай үед процедурыг ашигладаг. Паскал хэл дээр хоёр төрлийн процедур байдаг: параметртэй ба параметргүй процедур. Процедурт процедурын нэрээр ханддаг бөгөөд үүний дараа бодит параметрүүд орно. Процедурыг дуудах үед бодит болон албан ёсны параметрүүдийн хооронд нэг нэгээр нь харилцаж, дараа нь хяналтыг процедурт шилжүүлдэг. Процедурыг гүйцэтгэсний дараа процедур дуудагдсаны дараа хяналтыг дуудаж буй програмын дараагийн оператор руу шилжүүлнэ.


Жишээ 1: 60 одтой мөр хэвлэдэг параметргүй процедур. журам pr; var i: бүхэл тоо; start for i:=1 to 60 do write (* "); writeln; end; begin pr; end.


Жишээ 2. c=5 ба d=7 хоёр тоог солих программ obmenDan программ зохио; var c,d:бүхэл тоо; процедурын солилцоо (a,b:бүхэл тоо); var m:бүхэл тоо; эхлэх m:=a; a:=b; b:=m; writeln(a,b); Төгсгөл; begin writeln("2 тоо оруулна уу:"); readln(c,d); солилцоо (c,d); writeln(c," ",d); Төгсгөл. c5 d 7 a 5 b 7 1) 5 ба 7 гэсэн хоёр параметр бүхий obmen процедурыг дуудах үед a ба b хувьсагчдад 5 ба 7 ижил тоонуудыг тус тус байрлуулна: 2) дараа нь процедурт санах ойн нүднүүдийн утгыг оруулна. a ба b-г өөрчилсөн: c5 d 7 a 7 b 5 3) гэхдээ c ба d хувьсагчдад өгөгдөл өөрчлөгдөөгүй, учир нь Тэд бусад санах ойн эсүүдэд байдаг


С ба d, a ба b хувьсагчдыг санах ойн ижил нүднүүдэд хамааруулахын тулд (хэрэв a ба b-ийн утгууд өөрчлөгдвөл c, d-ийн утга мөн өөрчлөгдөнө) албан ёсны параметрүүдийг тайлбарлахдаа энэ нь шаардлагатай хувьсагчийн өмнө VAR гэдэг үгийг нэмэх шаардлагатай: процедур солилцох (var a,b:integer); с5 d 7 a b


Жишээ 3. Бүхэл тоонуудын 3 өөр массив өгөгдсөн (тус бүрийн хэмжээ 15-аас хэтрэхгүй). Массив бүрээс элементүүдийн нийлбэр ба арифметик дундажийг ол. програмын процесс; var i, n, нийлбэр: бүхэл тоо; sr: бодит; процедурын ажил (r: бүхэл тоо; var s: бүхэл тоо; var s1: бодит); var mas: бүхэл тооны массив ; j:бүхэл тоо; эхлэх s:=0; for j:=1 to r do begin read (mas[j]); s:=s+mas [j]; Төгсгөл; s1:=s/r; Төгсгөл;


(үндсэн програм) i:=1-ээс 3 хүртэл эхлэх ба бичих ("Vvedite razmer",i, "masiva: "); readln(n); ажил(n, нийлбэр, sr); (дуудлагын процедурын ажил) writeln ("Summa elementov = ", нийлбэр); writeln("Srednearifmeticheskoe = ",sr:4:1); Төгсгөл; Төгсгөл.


Програмын үр дүн: Программ нь r, s, s1 албан ёсны хувьсагчдыг бодит n, sum, sr-ээр солих ажлын горимыг гурван удаа дууддаг. Процедур нь массивын элементүүдийг оруулж, нийлбэр ба дундажийг тооцдог. s ба s1 хувьсагчдыг үндсэн програм руу буцаадаг тул тэдгээрийн тайлбарын өмнө var үйлчилгээний үгийг байрлуулна. Мас, j орон нутгийн параметрүүд зөвхөн процедурт хүчинтэй байна. Глобал - i, n, sum, sr нь программын туршид байдаг.


Паскаль дахь функцууд Паскаль хэлэнд суулгасан функцуудын багц нь нэлээд өргөн (ABS, SQR, TRUNC гэх мэт). Хэрэв хөтөлбөрт шинэ, стандарт бус функц орсон бол түүнийг програмын текстэд тайлбарлах ёстой бөгөөд үүний дараа програмаас хандах боломжтой. Даалгаврын операторын баруун талд функцэд ханддаг бөгөөд энэ нь функцийн нэр болон бодит параметрүүдийг заана. Функц нь өөрийн гэсэн орон нутгийн тогтмол, төрөл, хувьсагч, процедур, функцтэй байж болно. Паскаль хэл дээрх функцүүдийн тайлбар нь процедурын тайлбартай төстэй юм.




Жишээ 4. a x зэрэгтэй дэд программыг бич, энд a, x нь дурын тоо. Томьёог ашиглая: a x = e x ln программ p2; var f, b, s, t, c, d: бодит; (глобал хувьсагч) функц stp (a, x: бодит) : бодит; var y: бодит; ( орон нутгийн хувьсагч) эхлэл y:= exp (x * ln (a)) ; stp:= y;(дэд программын тооцооллын үр дүнд функцийн нэр өгөх) төгсгөл; (функцийн тайлбар дууссан) эхлэл d:= stp (2.4, 5); (өөр өөр тоо болон хувьсагчийн хүчийг тооцоолох) writeln (d, stp (5,3.5)); унших (f, b, s, t); c:= stp (f, s)+stp (b, t); writeln(c); Төгсгөл.


Функцууд Дэд програм нь тусдаа синтаксийн бүтэц хэлбэрээр бүтээгдсэн, тусдаа асуудлыг шийдвэрлэх нэрээр (бие даасан програмын блок) хангагдсан програмын нэг хэсэг юм. Процедурын тайлбар: процедур () (орон нутгийн нэрийг гүйцэтгэх хэсэг) Эхлэх (операторуудыг гүйцэтгэх хэсэг) Төгсгөл; Функцийн тодорхойлолт: функц (): төрөл; (орон нутгийн нэрийг тайлбарлах хэсэг) Эхлэх (гүйцэтгэх боломжтой хэллэгийн хэсэг) := ; (шаардлагатай параметр) Төгсгөл; Процедурын дуудлага: (); Функцийн дуудлага: := (); 1. Даалгаврын операторын баруун талд. 2. Салаалсан операторын нөхцөл дэх илэрхийлэлд. 3. Гаралтын горимд функцийн үр дүнд. Дэд програмын тодорхойлолт Процедурууд


Паскаль дахь рекурсын процедур ба функцууд өөрсдийгөө дуудаж болно, i.e. рекурсив шинж чанартай байдаг. Рекурсив функц нь програмыг давталт үүсгэхгүйн тулд рекурсив байдлыг дуусгах нөхцөлийг агуулсан байх ёстой. Рекурсив дуудлага бүр локал хувьсагчийн шинэ багцыг үүсгэдэг. Өөрөөр хэлбэл, дуудагдсан функцийн гадна байрлах хувьсагч өөрчлөгддөггүй.


1 функц f (n: бүхэл тоо): бүхэл тоо; эхлэх бол n = 1 бол f:= 1 өөр f:= n * f (n -1); (f функц өөрийгөө дууддаг" title="Жишээ 5. n тооны факториалыг дараах байдлаар тооцдог рекурсив функцийг үүсгэ: n= 1 n!= (n -1) бол n! = 1! · n) хэрэв n > 1 бол f (n: бүхэл тоо): бүхэл тоо; эхлэх бол n = 1 бол f:= 1, өөрөөр хэлбэл f:= n * f (n -1); (f функц өөрийгөө дууддаг." class="link_thumb"> 19 !}Жишээ 5. n тооны факториалыг дараах байдлаар тооцдог рекурсив функцийг үүсгэ: n! = 1 бол n= 1 n!= (n -1)! · n бол n > 1 функц f (n: бүхэл тоо): бүхэл тоо; эхлэх бол n = 1 бол f:= 1 өөр f:= n * f (n -1); (f функц өөрийгөө дууддаг) төгсгөл; 1 функц f (n: бүхэл тоо): бүхэл тоо; эхлэх бол n = 1 бол f:= 1 өөр f:= n * f (n -1); (f функц өөрийгөө дууддаг"> 1 функц f (n: бүхэл тоо): бүхэл тоо; хэрэв n = 1 бол эхлэх бол f:= 1 өөр f:= n * f (n -1); (f функц өөрийгөө дууддаг) төгсгөл; " > 1 функц f (n: бүхэл тоо): бүхэл тоо; хэрэв n = 1 бол эхэлнэ f:= 1 өөр f:= n * f (n -1); (f функц нь өөрийгөө дууддаг" title=" Жишээ 5) n тооны факториалыг тооцоолох рекурсив функцийг дараах байдлаар үүсгэ: n!=1, хэрэв n= 1 бол n!= (n -1)!n, хэрэв n > 1 бол f (n: бүхэл тоо): бүхэл тоо; эхлэх бол n = 1 бол f:= 1 өөр f:= n * f (n -1); (f функц өөрийгөө дууддаг."> title="Жишээ 5. n тооны факториалыг дараах байдлаар тооцдог рекурсив функцийг үүсгэ: n! = 1 бол n= 1 n!= (n -1)! · n бол n > 1 функц f (n: бүхэл тоо): бүхэл тоо; эхлэх бол n = 1 бол f:= 1 өөр f:= n * f (n -1); (f функц өөрийгөө дууддаг"> !}



Слайд 1

Слайд 3

Дэд программууд: глобал ба локал хувьсагчид Бүх дэд программуудыг тайлбарын хэсэгт тайлбарласан байх ёстой. Дэд програм бүр нэртэй байх ёстой. Үндсэн програм болон дэд программуудын хоорондох мэдээллийг програмын аль ч хэсэгт ажилладаг, үндсэн програмд ​​тодорхойлсон нэртэй глобал параметрүүд (хувьсагч) дамжуулдаг. Орон нутгийн параметрүүдийг (хувьсагчдыг) дэд програм дотор ашиглаж болно - тэдгээрийн нэр, утгууд нь зөвхөн өгөгдсөн дэд програмын хүрээнд л утгатай бөгөөд дуудаж буй програмд ​​байхгүй.

Слайд 4

Албан ба бодит параметрүүд Дэд програмуудын тайлбарт параметрүүдийг зөвхөн нэрээр нь зааж өгсөн байдаг тул тэдгээрийг албан ёсны гэж нэрлэдэг. Дэд програмыг дуудах хүртэл тэдгээр нь ямар ч утгагүй болно. Тэд зөвхөн бодит параметрүүдэд зориулж орон зайг нөөцөлж, тэдгээрийн тоо, өгөгдлийн төрлийг засдаг. Бодит параметрийн төрлүүд: Утгын параметрүүд нь тодорхой дэд программын параметрт ямар утгыг оноохыг заадаг. Дэд програм дууссаны дараа тэдгээр нь дэд программд өөрчлөгдсөн байсан ч өмнөх утгуудаа авна. Дэд програмын хувьсах параметрүүд нь албан ёсны параметрүүдийн оронд ордог бөгөөд дэд программыг гүйцэтгэх явцад утгыг нь өөрчилж, дэд програмаас гарах үед өөрчлөлтийг хадгалах боломжтой (хувьсагчийн параметрүүдийн өмнө түлхүүр үг Var).

Слайд 5

Слайд 6

Процедурын тодорхойлолт Program Pr1; Const...Type...Var...Procedure(); Дүрслэх хэсэг Эхлэх Процедурын хэсэг Төгсгөл; Эхлэх...(); ... Төгсгөл. Процедурыг дуудах үед албан ёсны параметрүүдийг бодит үзүүлэлтээр солино.

Слайд 7

Хоёр тооны нийлбэрийг тооцоолох журам pr1 програм; Usescrt; Var a,b,s:real; процедурын хураангуй(x,y:real;var z:real); эхлэх z:=x+y; Төгсгөл; эхлэх clrscr; writeln("a,b оруулна уу"); readln(a,b); нийлбэр(a,b,s); writeln(" тоонуудын нийлбэр ",a:3:1," ба ",b:3:1," = ",s:3:1); readln; Төгсгөл. x,y,z – албан ёсны параметрүүд, орон нутгийн хувьсагч a,b,s– глобал хувьсагч a,b,s – бодит параметрүүд x y z a b s Утгын параметрүүд Параметр хувьсагч

Слайд 8

Слайд 9

Слайд 10

a:=(3n!+2m!)/(m+n) илэрхийллийн утгыг тооцоол! Факториалыг олохын тулд ямар төрлийн хувьсагч ашиглах нь тохиромжтой вэ? програм pr2; Usescrt; Var m,n,x,y,z:бүхэл тоо; а: бодит; процедурын баримт(d:integer;var q:integer); var i:бүхэл тоо; эхлэх q:=1; for i:=1 to d do q:=q*i; Төгсгөл; эхлэх clrscr; writeln("n, m утгыг оруулна уу"); readln(n,m); баримт(n,x); баримт (м, у); баримт(m+n,z); a:=(3*x+2*y)/z; writeln("m= ",m:4," ба n= ",n:4,"тэй тэнцүү",a:8:3-тай илэрхийллийн утга); readln; Төгсгөл. N!=1·2·3·…· N

Слайд 11

Нэг хэмжээст массивын элементүүдийн оролтын гаралт Random(X) функц нь бүхэл тоо эсвэл бодит төрлийн 0-ээс X хүртэлх санамсаргүй тоог үүсгэдэг (функцийг дуудахын өмнө Randomize процедурыг ашиглан эхлүүлэх шаардлагатай). Хэрэв X параметрийг заагаагүй бол үр дүн нь 0.0-ээс 1.0 хүртэлх Real төрлийн байна. Санамсаргүй (В-А+1)+А мужаас санамсаргүй бүхэл тооны массивыг авахын тулд Даалгавар: Санамсаргүй тоо үүсгэгч (утга -10-аас 20 хүртэлх утга) ашиглан нэг хэмжээст массивын элементүүдийн оролтыг томъёол. элементүүдийн гаралтыг процедур болгон . A=-10 B=20 санамсаргүй (20-(-10)+1)+(-10) хувьд

Слайд 12

Слайд 13

Слайд 14

Функцийн тайлбар Функцууд нь зөвхөн нэг утгыг тооцоолоход зориулагдсан байдаг, 1. Тиймээс түүний эхний ялгаа нь процедур нь хэд хэдэн параметрийн шинэ утгыг агуулж болох боловч функц нь зөвхөн нэг утгатай (үр дүн нь байх болно). 2. Хоёр дахь ялгаа нь функцын гарчиг юм. Энэ нь FUNCTION гэсэн үг, дараа нь функцийн нэр, дараа нь хаалтанд албан ёсны параметрүүдийн жагсаалт, дараа нь хоёр цэгээр тусгаарлагдсан функцийн үр дүнгийн төрлөөс бүрдэнэ. 3. Функцийн бие нь дор хаяж нэг томилох оператор агуулсан байх ёстой бөгөөд зүүн талд функцын нэр, баруун талд нь түүний утга байна. Функц (): Тодорхойлолт Эхлэх Функцийн бие:=; Төгсгөл;

Слайд 15

a:=(3n!+2m!)/(m+n) илэрхийллийн утгыг тооцоол! fn2 програм; Usescrt; Var m,n:бүхэл тоо; а: бодит; function fact(d:integer) :longint; var i:бүхэл тоо; Q: longint; эхлэх q:=1; for i:=1 to d do q:=q*i; баримт:=q; Төгсгөл; эхлэх clrscr; writeln("n, m утгыг оруулна уу"); readln(n,m); a:=(3*факт(н)+2*факт(м))/факт(м+н);; writeln("m= ",m:4," ба n= ",n:4,"тэй тэнцүү",a:8:3-тай илэрхийллийн утга); readln; Төгсгөл.

Слайд 16

Гараас оруулсан A ба В нь бүхэл тоо, B>0 байх ab буюу A тооны b-р хүчийг олох программ зохио. Процедурын программ pr2-оор функцийг сольж програм зохиох; Usescrt; Var a,b:бүхэл тоо; в: longint; Функц stepen(x,y:integer):longint; var i:бүхэл тоо; s: longint; эхлэх s:=1; for i:=1 to y do s:=s*x; алхам:=s; Төгсгөл; эхлэх clrscr; writeln("a, b утгыг оруулна уу"); readln(a,b); C:=алхам(a,b); writeln("s=",s); readln; Төгсгөл.

Слайд 17

Слайд 18

Функц ба процедурт параметр дамжуулах механизм Процедураар юу хэвлэгдэх вэ, программ юуг хэвлэх вэ? Глобал хувьсагч Локал хувьсагч a b 3 3 -3 Хаяг c a b c 48 Хаяг c A:=b+3 B:=3*a C:=a+b төлөв C 24 5 8 Хариулах

Слайд 19

8-р анги. ABC Pascal хэл дээр програмчлал

Уралын физик-математикийн НИС-ийн мэдээлэл зүйн багш Зеленов Борис Александрович


  • Оюутнууд асуудлыг шийдвэрлэхийн тулд процедур, функцийг ашигладаг
  • Оюутнууд том асуудлуудыг жижиг хэсгүүдэд хуваах замаар шийдэж сурдаг

  • Програмчлалын хэл дээрх процедур, функцуудын тухай ойлголтыг боловсруулах.

  • Оюутнууд "процедур" ба "функц" гэсэн ойлголтыг мэддэг, албан ёсны болон бодит параметрүүдийг тодорхойлдог

Хүлээгдэж буй үр дүн - Тодорхойлогч:

1.“Процедур” гэсэн тодорхойлолтыг мэддэг.

2.“Функц” гэсэн тодорхойлолтыг мэддэг.

3.Бодит болон албан ёсны параметрүүдийг тодорхойлно

4.Утга болон хувьсагчийн параметрүүдийг ялгана

5. Процедур эсвэл функцийн дуудлагыг олно програмын код



Эльвирагийн стандарт төлөвлөгөө

1. Цаасыг арилгах

2. Цэцгийг услах

3. Ширээ угаах

4. Шилийг арчина

Алгоритмын төгсгөл

Энэ үйл явцын зохион байгуулалтыг хэрхэн сайжруулах вэ?




Хичээлийн сэдэв

Дэд программууд:


Ишки багдарлама

Дэд програм

Процедур

Процедур

Параметрлер

Хэрэгтэй хэллэгүүд:

Процедур (функц) руу хувьсагчийн утгыг дамжуулахын тулд бодит параметрүүдийг ашигладаг ...

Процедурыг тайлбарлахын тулд эхлээд..., дараа нь...


Дэд програмын тухай ойлголт

Тодорхойлолт

Дэд програм- Энэ бол хөтөлбөрийн бие даасан функциональ хэсэг юм.

Дэд программууд

Процедурууд


  • програмын текст дэх ижил төстэй хэсгүүдийг дахин дахин давтах хэрэгцээг арилгах;
  • програмын бүтцийг сайжруулах, ойлгоход хялбар болгох;
  • программчлалын алдаа болон програмыг өөрчлөх үед урьдчилан тооцоолоогүй үр дагаврыг эсэргүүцэх чадварыг нэмэгдүүлэх.

  • Програмчлалын хэл ашиглан хашаа зур

Энэ даалгаварт та нэг фрагмент (пикет хашаа) зурах алгоритмыг гүйцэтгэх процедурыг үүсгэж, дараа нь үзэгний анхны байрлалыг өөрчлөх замаар энэ процедурыг байнга ашиглаж болно.


  • Програмчлалын орчинд гацуур модыг хэрхэн үр дүнтэй зурах талаар тайлбарлана уу

  • Эдгээр нь тусгай хэлбэрээр хийгдсэн, өөрийн гэсэн нэртэй програмын бие даасан хэсгүүд юм.

Үндсэн програм болон дэд программ хоорондын харилцан үйлчлэл



Блок диаграм

  • Дэд программ (процедур эсвэл функц) дуудлагын блок

Дэд программ (процедур эсвэл функц) нэр


Блок диаграм


Процедурын тайлбар нь дараах байдалтай байна.

журамнэр (албан ёсны параметрүүдийн жагсаалт); тайлбар хэсэг Эхлэхоператорууд Төгсгөл ;


Функцийн тайлбар дараах байдалтай байна.

функцнэр (албан ёсны параметрүүдийн жагсаалт): буцах төрөл;

тайлбар хэсэг Эхлэхоператорууд Төгсгөл ;


Програм дахь байршил

Програм ...;

//Тодорхойлолтын хэсэг Uses, Const, Var, ...

журам А ;

Эхлэх ....... Төгсгөл ;

журам Б ;

Эхлэх ........ Төгсгөл ;

Функц C ;

Эхлэх ........ Төгсгөл ;

//Үндсэн програм

Эхлэх ........ Төгсгөл .


  • Функц ба процедурын ялгаа нь функцийн биеийг бүрдүүлэгч операторуудыг гүйцэтгэсний үр дүн нь үргэлж нэг утгатай байдаг тул функцийг дуудах нь хувьсагч болон тогтмолуудын хамт тохирох илэрхийлэлд ашиглагдаж болно.

Процедурууд

Функцүүд

Олон үр дүн гарах эсвэл зарим үйлдэл хийх боломжтой

Функцийг зарлахдаа төрлийг нь тусад нь зааж өгсөн ганцхан үр дүнтэй байна.

Үр дүн нь ямар ч төрлийн утгууд байж болно - массив, мөр, тоо гэх мэт.

Үр дүн нь зөвхөн бодит, бүхэл тоо эсвэл char төрлийн утга байж болно.

Процедурын дуудлагын команд нь бие даан хэрэглэгдэх тусдаа команд юм

Функцийн дуудлагыг зөвхөн тохирох төрлийн илэрхийллийн бүрэлдэхүүн хэсэг болгон ашиглаж болно.

Функцийн бие нь зүүн талд функцийн нэр бүхий дор хаяж нэг томилох оператор агуулсан байх ёстой.


b дараа нь max:=a өөрөөр max:=b; Хамгийн их тоо:= хамгийн их; төгсгөл;" өргөн "640"

Процедур эсвэл функц үү?

MaxNumber(a,b: бүхэл тоо): бүхэл тоо;

var max: бүхэл тоо;

Хамгийн их тоо:= хамгийн их;


b дараа нь max:=a өөрөөр max:=b; төгсгөл;" өргөн "640"

Процедур эсвэл функц үү?

MaxNumber(a,b: бүхэл тоо; var max: бүхэл тоо);

хэрэв ab бол max:=a өөрөөр max:=b;


Процедур эсвэл функц үү?

Өнгө өөрчлөх(C1, C2: Word);

TextBackGround(C2)


Процедур эсвэл функц үү?

Add(X, Y: Integer): Бүхэл тоо;


Бодит

  • Програмын үндсэн хэсэгт заасан

Албан ёсны

  • Дэд программд заасан
  • Дэд программд заасан

Процедурыг дараах форматтай оператор дуудна:

процедурын нэр(бодит параметрүүдийн жагсаалт);

  • Бодит параметрүүдийн жагсаалт- энэ бол таслалаар тусгаарлагдсан тэдгээрийн жагсаалт юм.

  • Паскаль хэлний стандартад параметрүүдийг утгаараа болон лавлагаагаар хоёр аргаар дамжуулж болно. Утгаар дамжуулсан параметрүүдийг дуудна параметр-утгууд, лавлагаагаар дамжуулсан - параметр-хувьсагч. Сүүлийнх нь процедурын (функц) толгой хэсэгт var гэсэн үйлчилгээний үгийн өмнө байдгаараа ялгаатай.

Параметрүүдийг дамжуулах. Албан ёсны параметрүүд

Хувьсагч

Үнэ цэнэ

Утгаар параметрүүд

Албан ёсны параметрүүд

Хувьсагч


Албан ёсны параметрүүд

Утгаар параметрүүд

  • Эхний аргад (утгаар дамжих) бодит параметрүүдийн утгыг харгалзах албан ёсны параметрүүд рүү хуулна.

Процедур

Процедурын нэр (a, b: бүхэл тоо);

Үндсэн програм

Процедур (функц) гүйцэтгэх явцад эдгээр утгыг өөрчлөх үед анхны өгөгдөл (бодит параметрүүд) өөрчлөгдөх боломжгүй.


Var c, d: бүхэл тоо;

  • Лавлагаагаар дамжуулахдаа албан ёсны параметр бүхий процедурын (функц) биед гарч буй бүх өөрчлөлт нь холбогдох бодит параметрүүдэд нэн даруй ижил төстэй өөрчлөлтөд хүргэдэг.

Процедур

Процедурын нэр (a, b: бүхэл тоо, Var c: бодит);

Үндсэн програм

Дуудлагын блокийн хувьсагчдад өөрчлөлт гардаг тул гаралтын параметрүүдийг лавлагаагаар дамжуулдаг. Дуудлага хийх үед тэдгээрийн харгалзах бодит параметрүүд нь зөвхөн хувьсагч байж болно.


Та бичих:

1. Бодит параметрүүд___________

Процедур Квад(R: бодит; var S: бодит);

2. Албан ёсны параметрүүд ___________

3. Албан ёсны параметр-утга ___________

5. Процедурын нэр ___________

6. Програмаас журамд хандах _____________________


Интерактив даалгавар

http://www.bzfar.net/load/podprogrammy_procedury_i_funkcii_parametry/23-1-0-498


Эльвира бол ангийн удирдагч. Тэрээр ангидаа ерөнхий цэвэрлэгээ хийх төлөвлөгөө гаргах шаардлагатай болно: цаасыг арилгах, цэцэг услах, ширээ угаах, шил арчих. Тэр яаж ажлаа илүү сайн зохион байгуулах вэ? Эльвирадаа туслаач.


Эльвирагийн дэвшилтэт төлөвлөгөө

Дэд программууд:

Арсен - бичиг баримтаа тавив

Мила - цэцэг услах

Виталий - ширээ угаадаг

Индира - шил арчих

1. Арсеныг цаазл

2. Милаг ажиллуул

3. Виталийг цаазаар ав

4. Индираг ажиллуул

Алгоритмын төгсгөл


  • Өнөөдөр бид ямар шинэ програмчлалын хэлний бүтэцтэй танилцсан бэ?
  • Судалгаанд хамрагдсан параметрүүдийг нэрлэнэ үү
  • Процедурт параметрүүдийг хэрхэн дамжуулдаг вэ?

  • Хичээлийн хураангуй
  • "Орон нутгийн хувьсагч" ба "Глобал хувьсагч" гэсэн тодорхойлолтыг олоорой.
  • Процедур эсвэл функцийг ашиглаж болох хоёр даалгаврыг зохио.

  • Та хичээлийн сэдвийг хэрхэн тодорхойлох вэ? (өөрийнхөө нэрийг гаргаж ирээрэй)
  • Та дараагийн хичээлээр юу сурах ёстой гэж бодож байна вэ?

Уулзацгаая

дараагийн хичээл!

Хичээлийн зорилго

боловсролын

  • сурагчдын дунд нэгдсэн үзэл баримтлалын системжурам, чиг үүргийн тухай ойлголттой холбоотой;
  • Паскаль хэл дээрх асуудлыг шийдвэрлэхэд дэд програмуудыг хэрхэн ашиглахыг заах, мөн тодорхой асуудлыг шийдвэрлэхэд ямар төрлийн дэд програм хэрэгтэйг ойлгохыг заах;
  • дэд программуудыг ашиглах үндсэн техникийг харуулах;

боловсролын

  • нарийвчлал, анхаарал, зохион байгуулалтыг төлөвшүүлэх;
  • тооцоолох ур чадварын соёл;

хөгжиж байна

  • оюутнуудын логик сэтгэлгээ, алгоритмын соёлыг хөгжүүлэх;
  • Паскаль хэл дээр дэд программ зохиох, дибаг хийх мэдлэг, ур чадварыг хөгжүүлэх.

Оюутнууд:

  • параметргүй, параметртэй горим бичих дүрмийг мэддэг байх;
  • функц бичих дүрмийг мэдэх;
  • энгийн асуудлыг шийдвэрлэхийн тулд процедур, функцийг ашиглах чадвартай байх.

Хичээлийн үеэр

I. Org. мөч

II. Оршил. Хамааралтай байдал

Цаасан дээр даалгавар өг ( Хавсралт 1 ). Давталтыг олох.

Заримдаа програмын өөр өөр газруудад та өөр өөр анхны өгөгдөлтэй бараг ижил дараалсан үйлдлүүдийг хийх хэрэгтэй болдог. Ийм үйлдлийн дарааллыг гэж нэрлэгддэг хэлбэрээр албан ёсны болгож болно дэд програмууд (англи хэлнээс, дэд програм) -операторуудыг нэрээр болон дахин дахин хандах боломжтой блок болгон бүлэглэнэ.

Дэд программууд нь програмын текстийг богиносгож, тэдгээрийн гүйцэтгэлийн хугацааг мэдэгдэхүйц багасгаж, модульчлагдсан программ үүсгэх чадвартай програмистуудын амьдралыг хөнгөвчлөх, өөрөөр хэлбэл энгийн бүрэлдэхүүн хэсгүүдийн дууссан хэсгүүдээс нарийн төвөгтэй програмыг угсрах замаар. Энэ нь хэсэг бүлэг программистуудад томоохон хөтөлбөрүүдийг бий болгох, сургуулийн сурагчдад дэлхийн аливаа төслийг боловсруулж хэрэгжүүлэх боломжийг олгодог.

Дэд программуудыг процедур, функц гэж хуваадаг.

Баригдсан (стандарт) журам, функцууд нь хэсэгхэл бөгөөд нэрээр нь дуудаж болно урьдчилан тайлбаргүйгээр.Жишээлбэл , abs, sqrt, ln, sin... функцууд (үр дүнг буцаана), readln, write... нь процедур (үр дүнг буцаахгүй). Тэдний оршихуй нь хэрэглээний програмуудыг хөгжүүлэхэд ихээхэн хувь нэмэр оруулдаг. Гэсэн хэдий ч ихэнх тохиолдолд зарим нь тодорхойТухайн програмын хувьд үйлдлүүд нь Турбо Паскалийн номын сангаас шууд аналогийг олохгүй байгаа тул програмист өөрөө өөрийгөө хөгжүүлэх шаардлагатай болдог. стандарт бусжурам, чиг үүрэг.

III. Шинэ материалын тайлбар

Хэрэглэгчийн процедурыг бичсэн болно өөрсдөөхэлний синтаксийн дагуу программист дэд програмын тайлбар хэсэг.

Процедурын бүтэц нь програмын бүтцийг дагаж мөрддөг бөгөөд энэ нь "бяцхан хэлбэрийн програм" бөгөөд энэ нь мөн толгой ба их биеээр илэрхийлэгддэг.

Толгой хэсэг нь хадгалагдсан үгийн процедур, танигчаас бүрдэнэ (нэр)журам.

VAR ... // үндсэн програмын хувьсагчдыг тайлбарлах хэсэг

процедурын нэр;

//Үндсэн програмын хэсэг

Дараа нь гүйцэтгэх процедурын дуудлагыг тэмдэглэнэ үндсэн хөтөлбөрийн үндсэн хэсэгт.

Жишээ 1. Талбай ба периметрийг тооцоолох програм.

Дэд програмын давуу талууд:

  • Дэд программуудыг ашиглан бичсэн програмууд туршилт, дибаг хийхэд хялбар,тэдэнд илүү тодорхой байна логик бүтэц.
  • Дэд программуудын бие даасан шинж чанар нь тэдгээрийг бүтээх ажлыг янз бүрийн програмистуудад даатгах боломжийг олгодог. Ингэснээр програмчлалын ажил хуваагдаж, улмаар түүний гүйцэтгэл хурдасдаг;
  • Дэд програмуудыг ашиглах нь санах ойг хэмнэдэг. Дэд программд ашигласан хувьсагчдыг хадгалах санах ойг зөвхөн түүний ажиллах хугацаанд хуваарилдаг бөгөөд гүйцэтгэл дуусмагц чөлөөлөгдөнө.

Жишээ 2. Хэрэглэгч гурван тэгш өнцөгтийн хоёр талыг оруулна. Тэдний бүс нутгийг гарга.

Та асуудлыг дараах байдлаар шийдэж болно.

i:=1-ээс 3 хүртэл хийх

writeln('a, b-г оруулна уу:');

writeln(‘Талбай=’,a*b);

Процедуруудыг ашиглах нь сайн програмчлалын хэв маяг гэж тооцогддог. Тэгш өнцөгтийн талбайг тооцоолох процедур шаардлагатай. Үндсэн програм нь схемийн дагуу хэрхэн харагдахыг энд харуулав.

тооцоо

тооцоо

тооцоо

Текстийн процедур аль хэдийн байна (1-р жишээг үзнэ үү). Талбайг тооцоолох хоёр дахь процедурыг бий болгоё. Гэхдээ S-ийг тооцоолохын тулд та 2 талыг мэдэх шаардлагатай тул аль талыг нь үржүүлэхийг процедурт харуулах хэрэгтэй.

процедур pl (c,d: бүхэл тоо);

writeln(‘ талтай тэгш өнцөгтийн талбай ’,c, ‘ ‘ ,d, ‘=‘,S);

Параметр гэдэг нь утга өгөгдсөн хувьсагч юм. Орших албан ёсны параметрүүд , дэд программын толгой хэсэгт тодорхойлсон ба бодит параметрүүд - дэд хөтөлбөрт хандах үед тодорхой утгуудыг тодорхойлсон илэрхийллүүд.

Хэрэв та нэрээр нь дуудаж, бодит параметрүүдийг зааж өгвөл процедурыг гүйцэтгэх болно , таслалаар тусгаарлаж, хаалтанд бичнэ:

Бодит үзүүлэлтүүд нь төрөл, тоо хэмжээгээр албан ёсны үзүүлэлттэй тохирч байх ёстой.

Тиймээс, үндсэн програм:

i:=1-ээс 3 хүртэл хийх

Сэтгэгдэл.Энэ асуудлыг шийдэхдээ хэрэглэгчийн оруулсан тоонуудыг шалгах шаардлагатай (тэдгээр нь сөрөг байх ёсгүй, эс тэгвээс програм тасалдана).

Баталгаажуулах процедурыг үүсгэцгээе:

процедурын алдаа (f,g:бүхэл тоо);

хэрэв (f<0) or (g<0) then begin

writeln('тэгш өнцөгтийн талууд сөрөг байж болохгүй');

зогсох; // програмын тасалдал

Эцсийн хөтөлбөр - Хавсралт 4

Тиймээс процедурын формат:

Процедур<имя>(албан ёсны параметрүүд);

<операторы>;

Жишээ 3. c=5 ба d=7 хоёр тооны байршлыг солих програм бич.

програм солилцохДан;

var c,d:бүхэл тоо;

процедурын солилцоо (a,b:бүхэл тоо);

m:=a; a:=b; b:=m;

writeln("2 тоо оруулна уу:");

writeln(c," ",d);

Хөтөлбөрийг эхлүүлсний дараа албан ёсны параметрүүд (процедур дахь) газар өөрчлөгдсөн боловч бодит параметрүүд (үндсэн програмд ​​ашиглагддаг) өөрчлөгдөөгүй байгааг харж болно. RAM-ийн хэсгийг харуулсан зургийг харцгаая.

1) 5 ба 7 гэсэн хоёр параметр бүхий obmen процедурыг дуудах үед 5 ба 7 тоонуудыг a ба b хувьсагчдад мөн байрлуулна.

3) гэхдээ c ба d хувьсагчдад өгөгдөл өөрчлөгдөөгүй, учир нь Тэд бусад санах ойн эсүүдэд байдаг.

c ба d хувьсагчийн дарааллаар a, b ижил санах ойн нүднүүдийг иш татсан (хэрэв a ба b-ийн утга өөрчлөгдвөл c, d-ийн утга мөн өөрчлөгдөх болно) албан ёсны параметрүүдийг тайлбарлахдаа шаардлагатай хувьсагчдын өмнө VAR үгийг нэмэх шаардлагатай.

процедур солилцоо (var a,b:бүхэл тоо);

ObmenDan програмыг өөрчлөх:

Var-ын улмаас алдаа гарлаа. Тоонууд нь процедурт өөрчлөх боломжгүй тогтмолууд юм.

Жишээ 4. Зөвхөн тооцоолдог боловч үр дүнг дэлгэц дээр харуулахгүй процедурыг ашиглан тойргийн талбайг ол.

процедурын тойрог (r: бодит);

Уг процедур нь үр дүнг буцаах ёстой:

процедурын тойрог (r:real; var S:real);

readln(a, e);

Сэтгэгдэл:Процедурын үр дүнг үндсэн програм руу буцаахад S процедурын хувьсагчийг ашигладаг. Энэ нь өөрчлөгдөхөд дуудлагын програм дахь бодит параметр өөрчлөгддөг, өөрөөр хэлбэл. хувьсагч e.

Ихэнхдээ Паскал хэл дээр процедурын оронд функцуудыг (ямар нэгэн зүйлийг буцаадаг дэд програмууд) ашигладаг.

Функц нь процедуртай төстэй боловч хоёр ялгаа бий.

  • Функц нь ажлынхаа үр дүнг програм руу дамжуулдаг - нэг утга, зөөгч нь түүний функцийн нэр юм.
  • Функцийн нэр нь илэрхийлэлд операнд хэлбэрээр гарч ирж болно. Функц нь дуудлагын цэг рүү үр дүнг буцаана.

Жишээлбэл, sqr(x) – х утгыг квадрат болгож, х тооны квадратын тооцоолсон утгыг дуудлагын цэг рүү буцаана: y:=sqr(x);

Хэрэглэгчийн тодорхойлсон функц нь функцын толгой хэсэг болон функцийн хэсгээс бүрдэнэ. Функцийн бие нь программтай бүтцийн хувьд төстэй. Шошго, тогтмол, төрөл гэх мэтийн тодорхойлолт. зөвхөн энэ журмын хүрээнд хүчинтэй.

Чиг үүрэг<имя>(албан ёсны параметрүүд):<тип результата>;

<операторы>;

Мэдэгдлийн хэсэг нь функцийн нэрэнд утга оноох дор хаяж нэг хэллэг агуулсан байх ёстой. Сүүлийн даалгаврын үр дүнг дуудлагын цэг рүү буцаана.

Жишээ 5. Тойргийн талбайн талаархи асуудлыг дахин боловсруулъя.

функцийн тойрог (r:real): бодит;

a:=дугуй (5); (Заавал томилогдсон байх)

Жишээ 6. 1!+2!+…+n-г ол!

Бид факториал олох функцийг ашигладаг, учир нь бид үүнийг оролт болгон тэжээж, үр дүнг авдаг.

функцийн баримт (a:integer): бүхэл тоо;

i:=1 хийх

Факт:=факт*I гэсэн мөрөнд;

хөрвүүлэгч алдаа олох болно, учир нь баримтыг параметрийн хамт дуудах ёстой. Тиймээс үр дүнг байрлуулсан нэмэлт хувьсагчийг ихэвчлэн оруулдаг. Дараа нь энэ үр дүнг баримт хувьсагчид онооно:

програмын хүчин зүйл;

var sum,n,j: бүхэл тоо;

функцийн баримт (a: бүхэл тоо): бүхэл тоо;

var i,d: бүхэл тоо;

i:=1 хийх

j:=1-ээс n-ийн хийх

нийлбэр:=нийлбэр+баримт(j);

IV. Хичээлийн хураангуй

Энэ үед програмчлалын үйл явц болж хувирдаг аж үйлдвэрийн програм хангамжийн үйлдвэрлэлсуурилсан програмчлалын технологи. Ихэнх шинжээчид ийм байр суурьтай байдаг дээрээс доош программ зохиох арганарийн төвөгтэй асуудлыг шийдвэрлэхэд хамгийн тохиромжтой. Нэгдүгээрт, даалгаврыг ерөнхийд нь тодорхойлж, дараа нь түүний бүтцийг аажмаар тодруулна. Дараагийн алхамд дэд даалгавар бүрийг хэд хэдэн бусад зүйлд хуваана. Нарийн төвөгтэй асуудлын тусдаа фрагментийн шийдэл нь бие даасан програмын блок - дэд програм юм.

V. Гэрийн даалгавар

Асуудлыг шийдвэрлэх (бичгээр):

  1. Оруулсан мөр дэх бүх a үсгийг *-ээр солих процедурыг үүсгэ.
  2. Хоёр санал гаргаж байна. Тэдгээрийн нийт "n" үсгийн тоог ол. (Өгүүлбэр дэх “n” үсгийн тоог тооцоолох функцийг тодорхойл.)