Procedūras un funkcijas programmā Pascal. Rekursija. Apakšprogrammas Bieži vien uzdevums prasa atkārtot noteiktu paziņojumu secību dažādās programmas daļās. Procedūras un funkcijas Procedūru un funkciju prezentācija
Rekursija Paskālā Skolotājs: Tlekhurai Yu.V. Pašvaldības izglītības iestāde "Licejs Nr.8" Ko redzi gleznās? Šo fenomenu mākslā sauc rekursija "Lai saprastu rekursiju, vispirms ir jāsaprot rekursija." rekursija - objekta daļēja definīcija caur sevi, objekta definīcija, izmantojot iepriekš definētos. Zinātniski runājot: Rekursija - objektu vai metožu klases definēšanas metode, vispirms norādot vienu vai vairākus (parasti vienkāršus) tās pamatgadījumus vai metodes un pēc tam, pamatojoties uz tiem, precizējot definējamās klases konstruēšanas noteikumus. Pēteris Deutsch Peter Deutsch
Cilvēka iterācija.
Rekursija ir no Dieva.
Rekursija fizikā Rekursija valodā un literatūrā Klasisks bezgalīgas rekursijas piemērs ir divi spoguļi novietoti viens otram pretī: tajos veidojas divi gaiteņi no izgaistošiem spoguļu atspīdumiem. Vēl viens bezgalīgas rekursijas piemērs ir pašiedvesma efekts (pozitīvs atsauksmes) g elektroniskās shēmas iegūt, kad signāls no izejas sasniedz ieeju, tiek pastiprināts, atkal sasniedz ķēdes ieeju un atkal tiek pastiprināts. Pastiprinātājus, kuriem šis darbības režīms ir standarta, sauc par pašoscilatoriem. Rekursīva vārdnīcas ieraksta piemērs: “Priesterim bija suns...” - tipiska rekursija Vairāki Staņislava Lema stāsti ir veltīti incidentiem ar bezgalīgu rekursiju: Stāsts par kapiem (“Jāņa Klusā zvaigžņu dienasgrāmatas”), kurā varonis secīgi pāriet no raksta par kapiem uz rakstu par sepullāciju, no turienes uz rakstu par sepulkāriju, kurā atkal ir atsauce uz rakstu “sepulcaria”. Stāsts par inteliģentu mašīnu, kurai pietika prāta un slinkuma, lai izveidotu līdzīgu, lai atrisinātu doto problēmu, un uzticētu tai risinājumu (rezultāts bija bezgalīga rekursija, kad katra jauna mašīna uzcēla sev līdzīgu un nodeva uzdevumu viņai). Rekursija programmēšanā ir veids, kā organizēt skaitļošanas procesu, kurā procedūra vai funkcija atsaucas uz sevi tās veidojošo operatoru izpildes laikā. Lai šāds izsaukums nebūtu bezgalīgs, apakšprogrammas tekstā ir jābūt nosacījumam, kuru sasniedzot, turpmākais izsaukums nenotiek. tādējādi rekursīvo izsaukumu var iekļaut tikai vienā no apakšprogrammas atzariem. Piemērs. Naturāla skaitļa faktoriāla aprēķināšana Izveidojiet rekursīvu funkciju, kas aprēķina skaitļa n faktoriāli šādi: funkcija f (n: integer): longint; sākt, ja n = 1, tad f:= 1 cits f:= n * f(n -1); (funkcija f izsauc sevi) beigas Pascal programma, izmantojot rekursiju: Var n: integer; a: longint; funkcija faktoriāls (n: vesels skaitlis): longint; sākt, ja n = 1, tad faktoriāls:= 1 else faktoriāls:= n * faktoriāls (n -1); Beigas; Sākt rakstīt ('n='); Readln(n); A:= faktoriāls(n); Write('n!=',a); Readln; beigas. Leonardo no Pizas FibonačiFibonači skaitļi ir skaitļu virknes elementi
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..., kurā katrs nākamais skaitlis ir vienāds ar divu iepriekšējo skaitļu summu.
Uzdevums: Parādiet Fibonači skaitļu sēriju, kas sastāv no n elementiem. Mainīgo lielumu apraksts: n – sērijas elementu skaits; a, b – sērijas pēdējo divu elementu vērtības; c – bufera (“rezerves”) mainīgais; i – skaitītājs. Uzdevuma risināšanas algoritms: 1. Iegūstiet n vērtību. 2. Piešķiriet a un b vērtības attiecīgi 0 un 1 (tie ir pirmie Fibonači sērijas skaitļi). Parādiet tos ekrānā. 3. Sākot no 3. elementa līdz n: a) parāda a un b summu, b) saglabā mainīgā b vērtību c, c) ieraksta a un b summu uz b, d) piešķir a vērtību c. Pascal programma, izmantojot iterāciju: programma Fibonači; var a,b,c,i,n: vesels skaitlis; sākt rakstīt ("n = "); readln(n); a:= 0; uzraksti," "); b:= 1; rakstīt (b," "); i:=3 līdz n sāciet rakstīt(a+b," "); c:= b; b:= a + b; a:=c; beigas; readln; beigas. Pascal programma, kas izmanto rekursiju: Rekursīvā definīcija Fibonači skaitļu aprēķināšanai ir šāda: Šo Fibonači skaitļu definīciju var viegli pārvērst rekursīvā funkcijā: funkcija f(n: Integer) : longint; sākt Ja 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 Un b. Ja A= b, tad mezgls ( A,b)=a. Ja A>b, tad mezgls ( A,b)= mezgls ( a -b,b). Ja A< b, tad mezgls ( A,b)= mezgls ( A,ba). Programma noddvyxchisel; var a,b: longint; funkcija nod(a,b:longint): longint; begin If a = b Tad nod:= a else if a>b then nod:= nod(a-b,b) else nod:= nod(a,b-a) End; sākt rakstīt('a='); readln(a); write('b='); readln(b); A:= nod(a,b); write('nod=',a); readln; beigas. Problēma par Hanojas torņiem. Šajā gadījumā ir stingri jāievēro šādi noteikumi:
- Vienlaikus var pārvietot tikai vienu disku;
- lielāku disku nevar ievietot mazāks disks;
- noņemtais disks ir jāuzliek uz jebkuras tapas, pirms tiek noņemts otrs disks. Strādīgi budistu mūki dienu un nakti nēsā diskus no smailes uz smaili. Leģenda vēsta, ka tad, kad mūki pabeigs savu darbu, pienāks pasaules gals. Varētu aprēķināt, ka problēmas atrisināšanai ar 64 diskiem būtu nepieciešamas 264–1 kustības. Tāpēc, kas attiecas uz pasaules galu, tas notiks pēc pieciem miljardiem gadsimtu, ja ņemam vērā, ka viens disks pārvietojas vienā sekundē. Tomēr gan problēmu, gan leģendu par to 1883. gadā izgudroja matemātiķis Edouard Lucas no Senluisas koledžas.
Vienā no trim dimanta smailēm ir 64 apaļi zelta diski. Diskiem ir dažādi rādiusi, un tie atrodas uz smailes dilstošā rādiusu secībā no pamatnes uz augšu. Ir nepieciešams pārnest diskus no pirmās smailes uz otro, nepieciešamības gadījumā izmantojot trešo.
Uzdevums. Izveidojiet rekursīvu programmu, kas atrisinātu iepriekš uzdoto problēmu par Hanojas torņiem ar disku skaitu, kas vienāds ar n (n = 1, 2, ...). Risinājums. Ievadīsim smailēm nosaukumus: a, b, c. Ļaujiet hanoja (n,a,b,c)- nepieciešamā funkcija, kas atgriež disku kustību secību ar a ieslēgts b izmantojot c saskaņā ar iepriekš aprakstītajiem noteikumiem. Ja n=1, mēs zinām, kā atrisināt problēmu. Jums vienkārši jāveic “pārvietošanas” darbība a ieslēgts b" Pieņemsim, ka šo uzdevumu varam atrisināt n – 1 diskiem. Pārvietojiet n–1 disku no a ieslēgts Ar. Pēc tam pārvietojiet vienu atlikušo disku no a ieslēgts b un visbeidzot pārvietojiet n–1 disku no c ieslēgts b. Ievadiet datus: disku skaits uz tapas a; Izvade: sekvencēšana; Step0:(definējiet mainīgā tipu); Step1: (hanojas procedūras apraksts, kas parāda darbību secību); Step1.1:(pārvietojiet (n-1) diskus no piesaistes a uz tapu b); Step1.2:(pārvietojiet n-to disku no a uz c); Step1.3:(pārvietot (n-1) disku no b uz c); (soļi 1.2-1.3 tiek veikti rekursīvi); Step2:(galvenā programma); Step2.1:(ievadiet disku skaitu); 2.2. darbība: (Hanojas procedūras izsaukšana). Problēmas risināšana Pascal programmā bahnya; var n: vesels skaitlis; a,b,c: char; procedūra hanoi(n: integer;a,b,c: char); sākas, ja n>0, tad sākas hanoi(n-1,a,c,b); writeln ("Peremestit disks so sterzhnya ",a," na sterzhen" ",b); hanoi(n-1,c,b,a); beigas; beigas; Sākt rakstīt ("Vvedite naturalnoe chislo n"); readln ( n); a:="a"; b:="b"; c:="c"; hanoja (n,a,c,b); readln; end. Mājas darbs Uzrakstiet programmu grāda aprēķināšanai ar naturālu eksponents Dots: grādu bāze X Eksponents Uz Ja k=0, tad grāds(k,x)=1, Citādi grāds(k,x)= x· grāds(k-1,x) Programma stepen; var y: reāls; n:integer; funkcijas solis(k:vesels skaitlis, x:reāls): reāls; sākums Ja k = 0 Tad solis:= 1 cits solis:= x * solis(k-1,x) Beigas; begin write(‘vvedite osnovanie stepeni x=’); readln(y); write(‘vvedite pokazatel stepeni k=’); Readln(n); write(‘x v stepeni k=’,solis(n,y)); readln; beigas. Patstāvīgs darbs
- Atrodiet skaitļa ciparu summu
- Nosakiet, vai dotais naturālais skaitlis ir pirmskaitlis
- Atrodiet skaitļa pirmo ciparu
- Pārvērst naturālo skaitli no decimāldaļas s.s. uz bināro
- Atrodiet veselu skaitļu masīva, kas sastāv no 20 elementiem, elementu summu
- Apmainiet divu veselu skaitļu vērtības
- Pasūtiet trīs mainīgo vērtības a, b, c augošā secībā
- Atrodiet ciparu skaitu dabiskais skaitlis n
- Atrodiet lielāko no trim dotajiem skaitļiem
- Atrodiet pozitīvo skaitļu skaitu starp četriem A, B, C, D
programmu tulkošana;
procedura dvd(n:longint);
Ja n >1 Tad dvd (n div 2);
write(n mod 2);
Apakšprogrammas Bieži vien uzdevums prasa atkārtot noteiktu paziņojumu secību dažādās programmas daļās. Lai vienreiz aprakstītu šo secību un izmantotu to vairākas reizes, programmēšanas valodas izmanto apakšprogrammas. Apakšprogramma ir īpaši izstrādāts programmas bloks tās turpmākai atkārtotai izmantošanai galvenajā programmā Apakšprogrammu izmantošana ļauj realizēt vienu no modernākajām programmēšanas metodēm - strukturētu programmēšanu.
Apakšprogrammas atrisina trīs svarīgas problēmas, kas ievērojami atvieglo programmēšanu: 1. tās novērš nepieciešamību atkārtoti atkārtot līdzīgus fragmentus programmas tekstā, t.i. samazināt programmas apjomu; 2. uzlabos programmas struktūru, padarot to vieglāk saprotamu parsējot; 3.samazināt kļūdu iespējamību, palielināt izturību pret programmēšanas kļūdām un neparedzētām sekām modifikācijas laikā.
Procedūras un funkcijas Paskālā ir divu veidu apakšprogrammas: procedūra (PROCEDURE) un funkcija (FUNCTION). Pascal procedūras un funkcijas tiek deklarētas deklarācijas sadaļā aiz mainīgā sadaļas. ProgrammasProgrammas nosaukums; VAR ... // sadaļa galvenās programmas mainīgo aprakstīšanai; procedūra ProcedureName; var ... begin ...//Procedure body end; sākums // galvenās programmas pamatteksts beigas.
Funkcijām un procedūrām ir parametri (mainīgie, kas nodod vērtību). Tie ir divu veidu: 1) Formālie - tie, kas ir apakšprogrammas aprakstā 2) Faktiskie - tie, kas tiek pārnesti no galvenās programmas uz funkciju vai procedūru. Faktiskajiem parametriem pēc daudzuma, pasūtījuma un veida jāatbilst formālajiem.
Procedūras Procedūras tiek izmantotas, ja apakšprogrammai ir jāiegūst vairāki rezultāti. Pascal ir divu veidu procedūras: procedūras ar parametriem un bez parametriem. Procedūrai var piekļūt, izmantojot procedūras nosaukumu, kam var sekot faktiskie parametri. Kad tiek izsaukta procedūra, starp faktiskajiem un formālajiem parametriem tiek noteikta atbilstība viens pret vienu, pēc tam kontrole tiek nodota procedūrai. Pēc procedūras izpildes vadība tiek nodota nākamajam izsaucošās programmas operatoram pēc procedūras izsaukšanas.
1. piemērs: procedūra bez parametriem, kas izdrukā 60 zvaigžņu virkni. procedūra pr; var i: vesels skaitlis ; sākums i:=1 līdz 60 do rakstīt (* "); writeln; beigas; sākums pr; beigas.
Piemērs 2. Izveidot programmu divu skaitļu c=5 un d=7 apmaiņai programma obmenDan; var c,d:integer; procedūru apmaiņa (a,b:integer); var m:integer; sākt m:=a; a:=b; b:=m; writeln(a,b); beigas; begin writeln("Ievadiet 2 ciparus: "); readln(c,d); maiņa(c,d); writeln(c," ",d); beigas. c5 d 7 a 5 b 7 1) izsaucot obmen procedūru ar diviem parametriem 5 un 7, mainīgajos a un b tiek ievietoti tie paši skaitļi 5 un 7: 2) tad procedūrā atmiņas šūnu vērtības a un b ir pārkārtoti: c5 d 7 a 7 b 5 3) bet mainīgajos c un d dati nav mainījušies, jo tie atrodas citās atmiņas šūnās
Lai mainīgie c un d, a un b atsauktos uz tām pašām atmiņas šūnām (ja mainās a un b vērtības, tad mainīsies arī c, d vērtības), aprakstot formālos parametrus, tas pirms nepieciešamajiem mainīgajiem ir nepieciešams pievienot vārdu VAR: procedure exchange (var a,b:integer); с5 d 7 a b
Piemērs 3. Doti 3 dažādi veselu skaitļu masīvi (katra izmērs nepārsniedz 15). Katrā masīvā atrodiet elementu summu un vidējo aritmētisko. programma proc; var i, n, summa: vesels skaitlis; sr: īsts; procedūras darbs (r:integer; var s:integer; var s1:real); var mas: veselu skaitļu masīvs ; j:integer; sākt s:=0; j:=1 līdz r sāk lasīt (mas[j]); s:=s+mas [j]; beigas; s1:=s/r; beigas;
(galvenā programma) begin for i:=1 to 3 do begin write ("Vvedite razmer",i, "masiva: "); readln(n); darbs(n, summa, sr); (izsaukuma procedūras darbs) writeln ("Summa elementov = ",sum); writeln("Srednearifmeticheskoe = ",sr:4:1); beigas; beigas.
Programmas rezultāts: Programma trīs reizes izsauc darba procedūru, kurā formālie mainīgie r, s, s1 tiek aizstāti ar faktisko n, summa, sr. Procedūra ievada masīva elementus, aprēķina summu un vidējo. Mainīgie lielumi s un s1 tiek atgriezti galvenajā programmā, tāpēc servisa vārds var tiek ievietots pirms to apraksta. Vietējie parametri mas, j ir spēkā tikai procedūrā. Globālie — i, n, summa, sr ir pieejami visā programmā.
Funkcijas Pascal valodā Iebūvēto funkciju kopums Pascal valodā ir diezgan plašs (ABS, SQR, TRUNC utt.). Ja programmā ir iekļauta jauna, nestandarta funkcija, tad tā ir jāapraksta programmas tekstā, pēc kā tai var piekļūt no programmas. Funkcijai tiek piekļūts piešķiršanas operatora labajā pusē, norādot funkcijas nosaukumu un faktiskos parametrus. Funkcijai var būt savas lokālās konstantes, veidi, mainīgie, procedūras un funkcijas. Funkciju apraksts programmā Pascal ir līdzīgs procedūru aprakstam.
4. piemērs. Uzrakstiet a x pakāpes apakšprogrammas funkciju, kur a, x ir jebkuri skaitļi. Izmantosim formulu: a x = e x lprogrammā p2; var f, b, s, t, c, d: reāls; (globālie mainīgie) funkcija stp (a, x: real) : reāls; var y: reāls; ( lokālie mainīgie) begin y:= exp (x * ln (a)) ; stp:= y;(funkcijas nosaukuma piešķiršana apakšprogrammas aprēķinu rezultātam) end; (funkcijas apraksts pabeigts) begin d:= stp (2.4, 5); (dažādu skaitļu un mainīgo pakāpju aprēķina) writeln (d, stp (5,3.5)); lasīt(f, b, s, t); c:= stp (f, s)+stp (b, t); writeln(c); beigas.
Funkcijas Apakšprogramma ir programmas daļa, kas veidota kā atsevišķa sintaktiska struktūra un nodrošināta ar nosaukumu (neatkarīgs programmas bloks), kas paredzēta atsevišķu problēmu risināšanai. Procedūras apraksts: procedūra () (sadaļa vietējo nosaukumu izpildei) Begin (sadaļa izpildoperatoriem) Beigs; Funkcijas apraksts: funkcija (): tips; (sadaļa vietējo nosaukumu aprakstīšanai) Begin (sadaļa izpildāmiem priekšrakstiem) := ; (obligāts parametrs) End; Procedūras izsaukums: (); Funkcijas izsaukums: := (); 1. Piešķiršanas operatora labajā pusē. 2. Izteiksmē zarojuma operatora stāvoklī. 3. Izvades procedūrā, funkcijas rezultātā. Apakšprogrammu apraksts Procedūras
Rekursija Pascal procedūras un funkcijas var sevi saukt, t.i. piemīt rekursivitātes īpašība. Rekursīvajai funkcijai obligāti jāietver nosacījums rekursivitātes izbeigšanai, lai neizraisītu programmas cilpu. Katrs rekursīvs izsaukums rada jaunu lokālo mainīgo kopu. Tas nozīmē, ka mainīgie, kas atrodas ārpus izsauktās funkcijas, netiek mainīti.
1 funkcija f (n: vesels skaitlis): vesels skaitlis; sākt, ja n = 1, tad f:= 1 cits f:= n * f (n -1); (funkcija f izsauc sevi" title="Piemērs 5. Izveidojiet rekursīvu funkciju, kas aprēķina skaitļa n faktoriālu šādi: n! = 1, ja n= 1 n!= (n -1)! ja n > 1 funkcija f (n: vesels skaitlis): vesels skaitlis; sākt, ja n = 1, tad f:= 1 else f:= n * f (n -1); (funkcija f izsauc pati sevi" class="link_thumb"> 19 !} Piemērs 5. Izveidojiet rekursīvu funkciju, kas aprēķina skaitļa n faktoriālu šādi: n! = 1, ja n= 1 n!= (n -1)! · n, ja n > 1 funkcija f (n: vesels skaitlis): vesels skaitlis; sākt, ja n = 1, tad f:= 1 cits f:= n * f (n -1); (funkcija f izsauc sevi) end; 1 funkcija f (n: vesels skaitlis): vesels skaitlis; sākt, ja n = 1, tad f:= 1 cits f:= n * f (n -1); (funkcija f izsauc sevi"> 1 funkcija f (n: vesels skaitlis): vesels skaitlis; sākas, ja n = 1, tad f:= 1 else f:= n * f (n -1); (funkcija f izsauc sevi) beigas; " > 1 funkcija f (n: vesels skaitlis): vesels skaitlis; sāciet, ja n = 1, tad f:= 1 else f:= n * f (n -1); (funkcija f izsauc sevi" title="Piemērs 5 Izveidojiet rekursīvo funkciju, kas aprēķina skaitļa n faktoriālu šādi: n = 1, ja n= 1 n!= (n -1)!n, ja n > 1 funkcija f (n: vesels skaitlis): vesels skaitlis; sākt, ja n = 1, tad f:= 1 cits f:= n * f (n -1); (funkcija f izsauc sevi"> title="Piemērs 5. Izveidojiet rekursīvu funkciju, kas aprēķina skaitļa n faktoriālu šādi: n! = 1, ja n= 1 n!= (n -1)! · n, ja n > 1 funkcija f (n: vesels skaitlis): vesels skaitlis; sākt, ja n = 1, tad f:= 1 cits f:= n * f (n -1); (funkcija f izsauc sevi"> !}
1. slaids
3. slaids
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img2.jpg)
4. slaids
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img3.jpg)
5. slaids
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img4.jpg)
6. slaids
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img5.jpg)
7. slaids
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img6.jpg)
8. slaids
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img7.jpg)
9. slaids
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img8.jpg)
10. slaids
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img9.jpg)
11. slaids
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img10.jpg)
12. slaids
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img11.jpg)
13. slaids
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img12.jpg)
14. slaids
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img13.jpg)
15. slaids
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img14.jpg)
16. slaids
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img15.jpg)
17. slaids
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img16.jpg)
18. slaids
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img17.jpg)
19. slaids
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img18.jpg)
8. klase. Programmēšana ar ABC Pascal
Uralskas fizikas un matemātikas NIS informātikas skolotājs Zeļenovs Boriss Aleksandrovičs
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_1.jpg)
- Problēmu risināšanai studenti izmanto procedūras un funkcijas
- Studenti mācās atrisināt lielas problēmas, sadalot tās mazākās
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_2.jpg)
- Izstrādāt procedūru un funkciju koncepciju programmēšanas valodā.
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_3.jpg)
- Studenti zina jēdzienus “procedūras” un “funkcijas”, nosaka formālos un faktiskos parametrus
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_4.jpg)
Paredzamie rezultāti — deskriptori:
1. zina “procedūras” definīciju
2. zina “funkcijas” definīciju
3.Nosaka faktiskos un formālos parametrus
4.Atšķir vērtību un mainīgo parametrus
5. Atrod izsaukumu uz procedūru vai funkciju programmas kods
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_5.jpg)
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_6.jpg)
Elvīras standarta plāns
1. Izņemiet papīrus
2. Laistiet ziedus
3. Nomazgājiet rakstāmgaldus
4. Noslaukiet stiklu
Algoritma beigas
Kā uzlabot šī procesa organizāciju?
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_7.jpg)
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_8.jpg)
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_9.jpg)
Nodarbības tēma
Apakšprogrammas:
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_10.jpg)
Ishki bagdarlama
Apakšprogramma
Procedūra
Procedūra
Parametrs
Noderīgas frāzes:
Lai nodotu mainīgās vērtības procedūrai (funkcijai), tiek izmantoti faktiskie parametri...
Lai aprakstītu procedūru, vispirms vajadzētu..., tad...
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_11.jpg)
Apakšprogrammas jēdziens
Definīcija
Apakšprogramma- Šī ir atsevišķa funkcionāli neatkarīga programmas daļa.
Apakšprogrammas
Procedūras
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_12.jpg)
- novērst nepieciešamību atkārtoti atkārtot līdzīgus fragmentus programmas tekstā;
- uzlabot programmas struktūru, padarot to vieglāk saprotamu;
- palielināt izturību pret programmēšanas kļūdām un neparedzētām sekām programmas modifikāciju laikā.
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_13.jpg)
- Uzzīmējiet žogu, izmantojot programmēšanas valodu
Šajā uzdevumā varat izveidot procedūru, kas izpildīs viena fragmenta (sētas žoga) zīmēšanas algoritmu, un pēc tam pastāvīgi atsaukties uz šo procedūru, mainot pildspalvas sākotnējo stāvokli.
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_14.jpg)
- Aprakstiet, kā programmēšanas vidē efektīvi uzzīmēt Ziemassvētku eglīti
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_15.jpg)
- Tie ir neatkarīgi programmu fragmenti, kas izstrādāti īpašā veidā un kuriem ir savs nosaukums.
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_16.jpg)
Galvenās programmas un apakšprogrammas mijiedarbība
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_17.jpg)
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_18.jpg)
Blokshēma
- Apakšprogrammas (procedūras vai funkcijas) izsaukuma bloks
Apakšprogrammas (procedūras vai funkcijas) nosaukums
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_19.jpg)
Blokshēma
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_20.jpg)
Procedūras apraksts ir šāds:
procedūru nosaukums(formālo parametru saraksts); aprakstu sadaļa sākt operatoriem beigas ;
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_21.jpg)
Funkcijas apraksts izskatās šādi:
funkciju nosaukums (formālo parametru saraksts): atgriešanās veids;
aprakstu sadaļa sākt operatoriem beigas ;
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_22.jpg)
Atrašanās vieta programmā
Programma ...;
//Apraksta sadaļa Lietošanas, Const, Var, ...
procedūru A ;
sākt ....... beigas ;
procedūru B ;
sākt ........ beigas ;
Funkcija C ;
sākt ........ beigas ;
//Galvenā programma
sākt ........ beigas .
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_23.jpg)
- Atšķirība starp funkciju un procedūru ir tāda, ka operatoru, kas veido funkcijas pamattekstu, izpildes rezultāts vienmēr ir viena vērtība, tāpēc funkcijas izsaukšanu var izmantot atbilstošās izteiksmēs kopā ar mainīgajiem un konstantēm.
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_24.jpg)
Procedūras
Funkcijas
Var būt vairāki rezultāti vai veikt dažas darbības
Ir tikai viens rezultāts, kura veids tiek norādīts atsevišķi, deklarējot funkciju.
Rezultāti var būt jebkura veida vērtības - masīvi, virknes, skaitļi utt.
Rezultāts var būt tikai vērtība, kuras veids ir real, integer vai char.
Procedūras izsaukšanas komanda ir atsevišķa komanda, ko var izmantot neatkarīgi
Funkcijas izsaukumu var izmantot tikai kā atbilstošā tipa izteiksmes sastāvdaļu.
Funkcijas pamattekstā ir jābūt vismaz vienam piešķiršanas operatoram ar funkcijas nosaukumu kreisajā pusē.
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_25.jpg)
Procedūra vai funkcija?
MaxNumber(a,b: integer): vesels skaitlis;
var max: vesels skaitlis;
MaxNumber:= max;
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_26.jpg)
Procedūra vai funkcija?
MaxNumber(a,b: vesels skaitlis; var max: vesels skaitlis);
ja ab, tad max:=a else max:=b;
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_27.jpg)
Procedūra vai funkcija?
ChangeColor(C1, C2: Word);
TextBackGround (C2)
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_28.jpg)
Procedūra vai funkcija?
Pievienot(X, Y: vesels skaitlis): vesels skaitlis;
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_29.jpg)
Faktiskais
- Norādīts galvenajā programmas sadaļā
Formāls
- Norādīts apakšprogrammā
- Norādīts apakšprogrammā
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_30.jpg)
Procedūru izsauc operators ar šādu formātu:
procedūras nosaukums (faktisko parametru saraksts);
- Faktisko parametru saraksts- šis ir to saraksts, kas atdalīts ar komatiem.
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_31.jpg)
- Pascal valodas standartā parametrus var nodot divos veidos – pēc vērtības un pēc atsauces. Tiek izsaukti parametri, kas nodoti pēc vērtības parametri-vērtības, nodots ar atsauci - parametri-mainīgie. Pēdējie atšķiras ar to, ka procedūras (funkcijas) galvenē tiem priekšā ir pakalpojuma vārds var.
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_32.jpg)
Parametru nodošana. Formālie parametri
Mainīgie lielumi
Vērtības
Parametri pēc vērtības
Formālie parametri
Mainīgie lielumi
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_33.jpg)
Formālie parametri
Parametri pēc vērtības
- Pirmajā metodē (pārejot pēc vērtības) faktisko parametru vērtības tiek kopētas attiecīgajos formālos parametros.
Procedūra
Procedūras nosaukums (a, b: vesels skaitlis);
Galvenā programma
Mainot šīs vērtības procedūras (funkcijas) izpildes laikā, sākotnējie dati (faktiskie parametri) nevar mainīties
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_34.jpg)
Var c, d: vesels skaitlis;
- Pārejot ar atsauci, visas izmaiņas, kas notiek procedūras (funkcijas) ar formāliem parametriem pamattekstā, nekavējoties izraisa līdzīgas izmaiņas attiecīgajos faktiskajos parametros.
Procedūra
Procedūras nosaukums (a, b: vesels skaitlis, Var c: reāls);
Galvenā programma
Izsaucošā bloka mainīgajos notiek izmaiņas, tāpēc izvades parametri tiek nodoti pēc atsauces. Izsaucot, to atbilstošie faktiskie parametri var būt tikai mainīgie.
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_35.jpg)
Tu raksti:
1.Faktiskie parametri___________
Procedūra Kvad(R: reāls; var S: reāls);
2. Formālie parametri ___________
3. Formālie parametri-vērtības__________
5.Procedūras nosaukums ___________
6. Piekļuve procedūrai no programmas _________________________
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_36.jpg)
Interaktīvs uzdevums
http://www.bzfar.net/load/podprogrammy_procedury_i_funkcii_parametry/23-1-0-498
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_37.jpg)
Elvīra ir klases vadītāja. Viņai būs jāsastāda vispārējās uzkopšanas plāns klasē: jānoņem papīri, jāaplej puķes, jānomazgā galdi, jānoslauka stikli. Kā viņa var labāk organizēt savu darbu? Palīdzi Elvīrai.
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_38.jpg)
Elvīras uzlabotais plāns
Apakšprogrammas:
Arsens - noliek papīrus
Mila - ziedu laistīšana
Vitālijs – mazgā rakstāmgaldus
Indira – slauka stiklu
1. Izpildīt Arsenu
2. Palaidiet Milu
3. Izpildīt Vitāliju
4. Skrien Indira
Algoritma beigas
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_39.jpg)
- Kādas jaunas programmēšanas valodas struktūras mēs šodien esam satikuši?
- Nosauciet pētītos parametrus
- Kā parametri tiek nodoti procedūrai?
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_40.jpg)
- Nodarbības kopsavilkums
- Atrodiet definīcijas: “Vietējie mainīgie” un “Globālie mainīgie”
- Izveidojiet divus uzdevumus, kuros varat izmantot procedūras vai funkcijas.
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_41.jpg)
- Kā jūs noteiktu nodarbības tēmu? (izdomā savu vārdu)
- Kas, jūsuprāt, būtu jāiemācās nākamajā nodarbībā?
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_42.jpg)
Satiekamies
nākamā nodarbība!
Nodarbības mērķis
izglītojošs
- veidot studentu vidū vienotu jēdzienu sistēma saistīti ar procedūras un funkcijas jēdzieniem;
- iemācīt izmantot apakšprogrammas uzdevumu risināšanā Paskālā, kā arī iemācīt saprast, kāda veida apakšprogramma ir nepieciešama, risinot noteiktu problēmu;
- parādīt apakšprogrammu lietošanas pamatmetodes;
izglītojošs
- audzināt precizitāti, uzmanību, organizētību;
- skaitļošanas prasmju kultūra;
attīstot
- attīstīt studentu loģisko domāšanu, algoritmisko kultūru;
- attīstīt zināšanas un prasmes, lai izveidotu un atkļūdotu apakšprogrammas Pascal.
Studentiem ir:
- zināt noteikumus rakstīšanas procedūrām bez parametriem un ar parametriem;
- pārzināt rakstīšanas funkciju noteikumus;
- prast pielietot procedūras un funkcijas vienkāršu problēmu risināšanai.
Nodarbību laikā
I. Org. brīdis
II. Ievads. Atbilstība
Izsniedziet uzdevumu uz papīra lapiņām ( 1.pielikums ). Atrodiet atkārtojumus.
Dažkārt dažādās programmas vietās ir jāveic gandrīz vienādas darbību secības ar dažādiem sākuma datiem. Šādas darbību secības var formalizēt t.s apakšprogrammas (no angļu valodas, apakšprogramma) - sagrupējiet operatorus blokā, kuram var piekļūt pēc nosaukuma un atkārtoti.
Apakšprogrammas saīsina programmas tekstu, ievērojami samazina to izpildes laiku un atvieglo dzīvi programmētājiem, kuri var izveidot programmas modulāri, tas ir, saliekot sarežģītu programmu no pabeigtām vienkāršāku komponentu daļām. Tas ļauj programmētāju grupai izveidot lielas programmas un skolēnu grupai izstrādāt un īstenot jebkādus globālus projektus.
Apakšprogrammas ir sadalītas procedūrās un funkcijās.
Iebūvētās (standarta) procedūras un funkcijas ir daļa valodā un to var saukt vārdā bez iepriekšēja apraksta. Piemēram , abs, sqrt, ln, sin... ir funkcijas (atgriež rezultātu), readln, write... ir procedūras (neatgriež rezultātu). To klātbūtne ievērojami atvieglo lietojumprogrammu izstrādi. Tomēr vairumā gadījumu daži specifisks konkrētai programmai darbības neatrod tiešus analogus Turbo Pascal bibliotēkās, un tad programmētājam ir jāizstrādā savs. nestandarta procedūras un funkcijas.
III. Jaunā materiāla skaidrojums
Lietotāja procedūras ir uzrakstītas mēs paši programmētājs saskaņā ar valodas sintaksi apakšprogrammas apraksta sadaļa.
Procedūras struktūra atbilst programmas struktūrai, tā ir "programma miniatūrā" - to attēlo arī galvene un pamatteksts.
Galvene sastāv no rezervētās vārda procedūras, identifikatora (vārds) procedūras.
VAR ... // sadaļa galvenās programmas mainīgo aprakstīšanai
procedūra ProcedureName;
//galvenās programmas pamatteksts
Procedūras aicinājums turpmākai izpildei tiek ierakstīts galvenās programmas pamattekstā.
1. piemērs. Programma platības un perimetra aprēķināšanai.
Apakšprogrammu priekšrocības:
- Programmas, kas rakstītas, izmantojot apakšprogrammas vieglāk pārbaudīt un atkļūdot, viņiem ir skaidrāks loģiskā struktūra.
- Apakšprogrammu neatkarīgais raksturs ļauj to izveidi uzticēt dažādiem programmētājiem. Tādā veidā programmēšanas darbs tiek sadalīts un līdz ar to tiek paātrināta tā pabeigšana;
- Apakšprogrammu izmantošana ietaupa atmiņu. Atmiņa apakšprogrammā izmantoto mainīgo lielumu glabāšanai tiek piešķirta tikai uz tās darbības laiku un tiek atbrīvota, tiklīdz tās izpilde beidzas.
2. piemērs. Lietotājs ievada trīs taisnstūru divas malas. Atvasiniet to apgabalus.
Jūs varat atrisināt problēmu šādi:
i:=1 līdz 3 darīt
writeln('Ievadiet a un b:');
writeln('Apgabals=',a*b);
Procedūru izmantošana tiek uzskatīta par labu programmēšanas stilu. Ir nepieciešama procedūra, kas aprēķinās taisnstūra laukumu. Lūk, kā shematiski izskatīsies galvenā programma:
aprēķins
aprēķins
aprēķins
Teksta procedūra jau pastāv (sk. 1. piemēru). Izveidosim otru procedūru, kas aprēķina laukumu. Bet, lai aprēķinātu S, ir jāzina 2 malas, tāpēc procedūrā jāparāda, kuras puses tai jāreizina.
procedūra pl (c,d: vesels skaitlis);
writeln(‘taisnstūra laukums ar malām ’,c, ‘’ ,d, ‘=’,S);
Parametrs ir mainīgais, kam tiek piešķirta vērtība. Pastāv formālie parametri , kas definēts apakšprogrammas galvenē, un faktiskie parametri – izteiksmes, kas norāda konkrētas vērtības, piekļūstot apakšprogrammai.
Procedūra tiks izpildīta, ja to izsauksit pēc nosaukuma un norādīsiet faktiskos parametrus , atdalīts ar komatiem un likts iekavās:
Faktiskajiem parametriem pēc veida un daudzuma ir jāatbilst formālajiem.
Tātad, galvenā programma:
i:=1 līdz 3 darīt
komentēt. Risinot šo problēmu, ir jāpārbauda lietotāja ievadītie skaitļi (tie nedrīkst būt negatīvi, pretējā gadījumā programma tiks pārtraukta).
Izveidosim verifikācijas procedūru:
procedūras kļūda (f,g:integer);
ja (f<0) or (g<0) then begin
writeln('taisnstūra malas nevar būt negatīvas');
apstāties; // programmas pārtraukums
Noslēguma programma - 4. pielikums
Tātad procedūras formāts:
Procedūra<имя>(formālie parametri);
<операторы>;
3. piemērs. Uzrakstiet programmu divu skaitļu c=5 un d=7 vietu samainīšanai.
programmu apmaiņaDan;
var c,d:integer;
procedūru apmaiņa (a,b:integer);
m:=a; a:=b; b:=m;
writeln("Ievadiet 2 ciparus: ");
writeln(c," ",d);
Pēc programmas palaišanas var redzēt, ka formālie parametri (procedūrā) ir mainījušies vietām, bet faktiskie (kas tiek lietoti galvenajā programmā) nav mainījušies. Apskatīsim attēlu, kas parāda daļu no RAM:
1) izsaucot obmen procedūru ar diviem parametriem 5 un 7, skaitļus 5 un 7 ievieto arī attiecīgi mainīgajos a un b:
3) bet mainīgajos c un d dati nav mainījušies, jo tie atrodas citās atmiņas šūnās.
Lai mainīgajiem c un d, a un b atsaucās uz tām pašām atmiņas šūnām (ja mainās a un b vērtības, mainīsies arī c, d vērtības) aprakstot formālos parametrus, pirms nepieciešamajiem mainīgajiem jāpievieno vārds VAR:
procedūru apmaiņa (var a,b:integer);
Mainiet programmu obmenDan:
Kļūda, jo var. Skaitļi ir konstantes, kuras nevar mainīt procedūrā.
4. piemērs. Atrodiet apļa laukumu, izmantojot procedūru, kas tikai aprēķina, bet nerāda rezultātu ekrānā.
procedūru aplis(r:real);
Procedūrai jāatgriež rezultāts:
procedūru aplis (r:real; var S:real);
readln(a, e);
komentēt: Mainīgais procedūrā S tiek izmantots, lai atgrieztu procedūras rezultātus galvenajā programmā. Kad tas mainās, mainās arī faktiskais parametrs izsaucošajā programmā, t.i. mainīgais e.
Biežāk šim nolūkam Paskālā procedūru vietā tiek izmantotas funkcijas (apakšprogrammas, kas kaut ko atgriež).
Funkcija ir līdzīga procedūrai, taču ir divas atšķirības.
- Funkcija pārraida programmai sava darba rezultātu - vienu vērtību, kuras nesējs ir tās funkcijas nosaukums.
- Funkcijas nosaukums izteiksmē var parādīties kā operands. Funkcija atgriež rezultātu tās izsaukuma punktā.
Piemēram, sqr(x) – liks kvadrātā vērtību x un atgriezīs izsaukuma punktā aprēķināto skaitļa x kvadrāta vērtību: y:=sqr(x);
Lietotāja definēta funkcija sastāv no funkcijas galvenes un funkcijas pamatteksta. Funkcijas pamatteksts pēc struktūras ir līdzīgs programmai. Etiķešu apraksts, konstantes, veidi utt. spēkā tikai šīs procedūras ietvaros.
Funkcija<имя>(formālie parametri):<тип результата>;
<операторы>;
Paziņojuma sadaļā ir jābūt vismaz vienam priekšrakstam, kas funkcijas nosaukumam piešķir vērtību. Pēdējā uzdevuma rezultāts tiek atgriezts izsaukuma punktā.
5. piemērs. Pārstrādāsim problēmu par apļa laukumu.
funkciju aplis (r:real): reāls;
a:=aplis(5); (OBLIGĀTI jāpiešķir)
6. piemērs. Atrodi 1!+2!+…+n!
Mēs izmantojam faktoriāla atrašanas funkciju, jo mēs to ievadām kā ievadi un iegūstam rezultātu.
funkcijas fakts (a:integer): vesels skaitlis;
i:=1, kas jādara
Rindā fakts:=fakts*I;
kompilators atradīs kļūdu, jo fakts ir jāizsauc ar parametriem. Tāpēc parasti tiek ieviests papildu mainīgais, kurā tiek ievietots rezultāts. Un tad šis rezultāts tiek piešķirts fakta mainīgajam:
programmas faktoriāls;
var summa,n,j: vesels skaitlis;
funkcijas fakts (a: vesels skaitlis): vesels skaitlis;
var i,d: vesels skaitlis;
i:=1, kas jādara
j:=1 līdz n darīt
summa:=summa+fakts(j);
IV. Nodarbības kopsavilkums
Šajā laikā programmēšanas process pārvēršas par rūpnieciskās programmatūras ražošana pamatā programmēšanas tehnoloģijas. Lielākā daļa ekspertu uzskata, ka programmas izstrādes metode no augšas uz leju vispiemērotākais sarežģītu problēmu risināšanai. Pirmkārt, uzdevums tiek definēts vispārīgi, pēc tam pakāpeniski tiek noskaidrota tā struktūra. Nākamajā solī katrs apakšuzdevums, savukārt, tiek sadalīts vairākos citos. Sarežģītas problēmas atsevišķa fragmenta risinājums ir neatkarīgs programmas bloks - apakšprogramma.
V. Mājas darbs
Atrisiniet problēmas (rakstiski):
- Izveidojiet procedūru, kas visus burtus a ievadītajā virknē aizstāj ar *.
- Ir divi priekšlikumi. Atrodiet tajos esošo burtu “n” kopējo skaitu. (Definējiet funkciju, lai aprēķinātu burtu “n” skaitu teikumā.)