Procedure i funkcije u Pascalu. Rekurzija. Potprogrami Često zadatak zahtijeva da ponovite određeni niz naredbi u različitim dijelovima programa. Procedure i funkcije Prezentacija procedura i funkcija

Rekurzija u Pascalu Učitelj: Tlekhurai Yu.V. Opštinska obrazovna ustanova "Licej br. 8" Šta vidite na slikama? Ovaj fenomen u umjetnosti se zove rekurzija “Da biste razumjeli rekurziju, prvo morate razumjeti rekurziju.” rekurzija - parcijalna definicija objekta kroz sebe, definicija objekta koristeći prethodno definisane. naucno govoreci: Rekurzija - metoda definisanja klase objekata ili metoda tako što se prvo specificira jedan ili više (obično jednostavnih) njenih osnovnih slučajeva ili metoda, a zatim se na osnovu njih specificiraju pravila za konstruisanje klase koja se definiše. Peter Deutsch Peter Deutsch

Ljudska iteracija.

Rekurzija je od Boga.

Rekurzija u fizici Rekurzija u jeziku i književnosti Klasičan primjer beskonačne rekurzije je dva ogledala postavljena jedno naspram drugog: u njima se formiraju dva hodnika od blijedećih odsjaja ogledala. Drugi primjer beskonačne rekurzije je efekat samouzbude (pozitivan povratne informacije) y elektronska kola dobitak, kada signal sa izlaza dođe do ulaza, pojačava se, ponovo dolazi do ulaza kola i ponovo se pojačava. Pojačala za koje je ovaj način rada standardni nazivaju se autooscilatori. Primjer rekurzivnog rječničkog zapisa: “Svećenik je imao psa...” - tipična rekurzija Nekoliko priča Stanislawa Lema posvećeno je incidentima s beskonačnim ponavljanjem: Priča o grobnicama (“Zvjezdani dnevnici Ivana Tihog”), u kojoj junak sukcesivno prelazi sa članka o sepulcima na članak o sepulcariji, a odatle na članak o sepulcariji, koji opet sadrži referencu na članak „sepulcaria“. Priča o inteligentnoj mašini koja je imala dovoljno inteligencije i lenjosti da napravi sličnu za rešavanje zadatog problema i da joj poveri rešenje (rezultat je bila beskonačna rekurzija, kada je svaki novo auto napravila sebi sličnu i predala joj zadatak). Rekurzija u programiranju je način organiziranja računskog procesa u kojem se procedura ili funkcija poziva na sebe tokom izvršavanja njenih sastavnih operatora. Kako takav poziv ne bi bio beskonačan, tekst potprograma mora sadržavati uvjet nakon kojeg se više ne javlja poziv. stoga, rekurzivni poziv može biti uključen samo u jednu od grana potprograma. Primjer. Izračunavanje faktorijala prirodnog broja Kreirajte rekurzivnu funkciju koja izračunava faktorijel broja n na sljedeći način: funkcija f (n: cijeli broj): longint; početi ako je n = 1 onda f:= 1 inače f:= n * f(n -1); (funkcija f sama sebe poziva) kraj Pascal programa koristeći rekurziju: Var n: cijeli broj; a: longint; faktorijel funkcije (n: cijeli broj): longint; početi ako je n = 1 onda faktorijal:= 1 ostalo faktorijel:= n * faktorijel (n -1); End; Započni pisanje(‘n=’); Readln(n); A:= faktorijel(n); Write(‘n!=’,a); Readln; kraj. Leonardo iz Pize Fibonači

Fibonačijevi brojevi su elementi brojevnog niza

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..., u kojima je svaki sljedeći broj jednak zbiru prethodna dva.

Zadatak: Prikazati niz Fibonačijevih brojeva koji se sastoji od n elemenata. Opis varijabli: n – broj elemenata serije; a, b – vrijednosti posljednja dva elementa serije; c – bafer („rezervna”) varijabla; i – brojač. Algoritam za rješavanje problema: 1. Dobiti vrijednost n. 2. Dodijelite a i b vrijednosti 0 i 1 (ovo su prvi brojevi Fibonačijevog niza). Prikažite ih na ekranu. 3. Počevši od 3. elementa do n: a) prikaži zbir a i b, b) pohrani vrijednost varijable b u c, c) upiši zbir a i b u b, d) dodijeli vrijednost c do a. Pascal program koji koristi iteraciju: program Fibonacci; var a,b,c,i,n: cijeli broj; početi write("n = "); readln(n); a:= 0; napiši," "); b:= 1; napisati(b," "); za i:=3 do n početi napisati(a+b," "); c:= b; b:= a + b; a:=c; kraj; readln; kraj. Pascal program koji koristi rekurziju: Rekurzivna definicija za izračunavanje Fibonačijevih brojeva je sljedeća: Ova definicija Fibonačijevih brojeva može se lako pretvoriti u rekurzivnu funkciju: funkcija f(n: Integer) : longint; početi Ako 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 I b. Ako A= b, zatim čvor ( A,b)=a. Ako A>b, zatim čvor ( A,b)=čvor ( a -b,b). Ako A< b, zatim čvor ( A,b)=čvor ( A,b-a). Program noddvyxchisel; var a,b: longint; funkcija nod(a,b:longint): longint; begin If a = b Onda nod:= a else if a>b then nod:= nod(a-b,b) else nod:= nod(a,b-a) End; begin write('a='); readln(a); write('b='); readln(b); A:= nod(a,b); write('nod=',a); readln; kraj. Problem u vezi sa kulama u Hanoju. U tom slučaju morate se strogo pridržavati sljedećih pravila:

  • Možete premjestiti samo jedan disk odjednom;
  • veći disk se ne može staviti na manji disk;
  • uklonjeni disk se mora staviti na bilo koji pin prije nego što se drugi disk ukloni.
  • Vredni budistički monasi danju i noću nose diskove od tornja do tornja. Legenda kaže da će, kada monasi završe svoj posao, doći smak sveta. Moglo bi se izračunati da bi rješavanje problema sa 64 diska zahtijevalo 264–1 potez. Dakle, što se tiče kraja svijeta, on će nastupiti nakon pet milijardi stoljeća, ako uzmemo u obzir da se jedan disk pomjeri u jednoj sekundi. Međutim, i problem i legendu za njega izmislio je 1883. matematičar Edouard Lucas sa koledža Saint-Louis.

Jedan od tri dijamantska tornjeva nosi 64 okrugla zlatna diska. Diskovi imaju različite radijuse i nalaze se na tornju u opadajućem redoslijedu radijusa od osnove do vrha. Potrebno je prenijeti diskove sa prvog stuba na drugi, koristeći treći toranj ako je potrebno.

Zadatak. Kreirajte rekurzivni program koji bi riješio gore postavljeni problem o Hanojskim kulama sa brojem diskova jednakim n (n = 1, 2, ...). Rješenje. Unesite nazive za tornjeve: a, b, c. Neka hanoj (n,a,b,c)- potrebna funkcija koja vraća redoslijed kretanja diskova sa a on b koristeći c prema gore opisanim pravilima. Kada je n=1 znamo kako riješiti problem. Vi samo trebate izvršiti operaciju "premještanja". a on b" Pretpostavimo da ovaj problem možemo riješiti za n – 1 diskova. Premjestite n–1 diskova iz a on With. Zatim premjestite jedan preostali disk sa a on b i konačno premjestiti n–1 diskova iz c on b. Ulazni podaci: broj diskova na klin a; Izlaz: sekvenciranje; Korak0:(definirajte tip varijable); Korak 1: (opis hanoi procedure, koji prikazuje redosled akcija); Korak 1.1:(premjestiti (n-1) diskove sa klina a na klin b); Korak 1.2:(premjestite n-ti disk iz a u c); Korak 1.3:(premjestiti (n-1) disk sa b na c); (koraci 1.2-1.3 se izvode rekurzivno); Korak 2: (glavni program); Korak 2.1:(unesite broj diskova); Korak 2.2: (pozivanje hanoi procedure). Rješavanje problema u Pascal Programu bahnya; var n: cijeli broj; a,b,c: char; procedura hanoi(n: cijeli broj;a,b,c: char); započeti ako je n>0 onda započeti hanoi(n-1,a,c,b); writeln ("Peremestit disk so sterzhnya ",a," na sterzhen" ",b); hanoi(n-1,c,b,a); end; end; Počni pisati ("Vvedite naturalnoe chislo n"); readln ( n); a:="a"; b:="b"; c:="c"; hanoi (n,a,c,b); readln; end. Domaća zadaća Napisati program za izračunavanje stepena sa prirodnim eksponent Dato: stepen osnove X Eksponent To Ako je k=0, onda stepen(k,x)=1, inače stepen(k,x)= x· stepen(k-1,x) Stepen programa; var y: real; n:integer; korak funkcije(k:integer, x:real): real; početak Ako je k = 0 Zatim korak:= 1 else korak:= x * korak(k-1,x) Kraj; begin write('vvedite osnovanie stepeni x='); readln(y); write(‘vvedite pokazatel stepeni k=’); Readln(n); write(‘x v stepeni k=’,step(n,y)); readln; kraj. Samostalan rad

  • Pronađite zbir cifara broja
  • Odredite da li je dati prirodni broj prost
  • Pronađite prvu cifru broja
  • Pretvori prirodni broj iz decimalnog s.s. na binarni
  • Pronađite zbir elemenata niza cijelih brojeva koji se sastoji od 20 elemenata
  • Zamijenite vrijednosti dva cijela broja
  • Naručite vrijednosti tri varijable a, b, c u rastućem redosledu
  • Pronađite broj cifara u prirodni broj n
  • Pronađite najveći od tri data broja
  • Pronađite broj pozitivnih brojeva između četiri A, B, C, D
Odgovori za samostalni rad br. 2 Program jednostavan; var n, m, s: cijeli broj; funkcija prost(m, n:integer): boolean; početi Ako je n = m Tada prost:= istina inače prost:= (n mod m<>0) i prost (m+1, n); End; begin write('n='); Readln(n); M:=2; Ako prost(m,n) onda napiši (n,’prostoechislo’) Drugo napiši (n,’sostavnoe’); readln; kraj.

prevođenje programa;

procedura dvd(n:longint);

Ako je n >1 Onda dvd (n div 2);

napisati (n mod 2);

Potprogrami Često zadatak zahtijeva da ponovite određeni niz naredbi u različitim dijelovima programa. Da bi jednom opisali ovaj niz i primijenili ga više puta, programski jezici koriste potprograme. Potprogram je posebno dizajniran blok programa za njegovu naknadnu ponovnu upotrebu u glavnom programu.Upotreba potprograma vam omogućava da implementirate jednu od najmodernijih metoda programiranja - strukturirano programiranje


Potprogrami rješavaju tri bitna problema koji uvelike olakšavaju programiranje: 1. eliminišu potrebu za ponovnim ponavljanjem sličnih fragmenata u tekstu programa, tj. smanjiti veličinu programa; 2. poboljšaće strukturu programa, čineći ga lakšim za razumevanje prilikom raščlanjivanja; 3.smanjiti vjerovatnoću grešaka, povećati otpornost na greške u programiranju i nepredviđene posljedice tokom modifikacije.


Procedure i funkcije Postoje dvije vrste potprograma u Pascalu: procedura (PROCEDURE) i funkcija (FUNCTION). Procedure i funkcije u Pascalu su deklarirane u sekciji za deklaracije iza sekcije varijabli. ProgramProgramName; VAR ... // odjeljak za opisivanje varijabli glavnog programa; procedure ProcedureName; var ... početak ...//kraj tijela procedure; begin //tijelo glavnog programa end.


Funkcije i procedure imaju parametre (varijable koje prenose vrijednost). Oni su dva tipa: 1) Formalni - oni koji se nalaze u opisu potprograma 2) Stvarni - oni koji se prenose iz glavnog programa u funkciju ili proceduru. Stvarni parametri moraju odgovarati formalnim po količini, redu i vrsti.




Procedure Procedure se koriste kada potprogram treba da dobije više rezultata. Postoje dvije vrste procedura u Pascalu: procedure sa parametrima i bez parametara. Proceduri se pristupa po imenu procedure, koje može biti praćeno stvarnim parametrima. Kada se pozove procedura, uspostavlja se korespondencija jedan-na-jedan između stvarnih i formalnih parametara, a zatim se kontrola prenosi na proceduru. Nakon što se procedura izvrši, kontrola se prenosi na sljedećeg operatera pozivajućeg programa nakon poziva procedure.


Primjer 1: Procedura bez parametara koja ispisuje niz od 60 zvjezdica. procedura pr; var i: cijeli broj; begin for i:=1 do 60 do write (* "); writeln; end; begin pr; end.


Primjer 2. Kreirati program za zamjenu dva broja c=5 i d=7 program obmenDan; var c,d:integer; razmjena procedura (a,b:integer); var m:integer; započeti m:=a; a:=b; b:=m; writeln(a,b); kraj; begin writeln("Unesite 2 broja: "); readln(c,d); razmjena(c,d); writeln(c," ",d); kraj. c5 d 7 a 5 b 7 1) kada se poziva obmen procedura sa dva parametra 5 i 7, isti brojevi 5 i 7 stavljaju se u varijable a i b, respektivno: 2) zatim u proceduri vrednosti memorijskih ćelija a i b su preuređeni: c5 d 7 a 7 b 5 3) ali u varijablama c i d podaci se nisu promijenili, jer nalaze se u drugim memorijskim ćelijama


Da bi se varijable c i d, a i b odnosile na iste memorijske ćelije (ako se promijene vrijednosti a i b, tada će se promijeniti i vrijednosti c, d), pri opisivanju formalnih parametara potrebno je dodati riječ VAR ispred traženih varijabli: procedure exchange (var a,b:integer); s5 d 7 a b


Primjer 3. Date su 3 različita niza cijelih brojeva (veličina svakog ne prelazi 15). U svakom nizu pronađite zbir elemenata i aritmetičku sredinu. program proc; var i, n, suma: cijeli broj; sr: real; rad procedure (r:integer; var s:integer; var s1:real); var mas: niz cijelih brojeva; j:integer; početak s:=0; za j:=1 do r počinje čitanje (mas[j]); s:=s+mas[j]; kraj; s1:=s/r; kraj;


(glavni program) begin for i:=1 do 3 do begin write ("Vvedite razmer",i, "masiva: "); readln(n); rad(n, zbir, sr); (poziv procedure rad) writeln ("Summa elementov = ",sum); writeln("Srednearifmeticheskoe = ",sr:4:1); kraj; kraj.


Rezultat programa: Program tri puta poziva radnu proceduru u kojoj se formalne varijable r, s, s1 zamjenjuju stvarnim n, sum, sr. Procedura unosi elemente niza, izračunava zbir i prosjek. Promenljive s i s1 se vraćaju glavnom programu, pa se servisna reč var stavlja ispred njihovog opisa. Lokalni parametri mas, j vrijede samo u proceduri. Globalni - i, n, sum, sr dostupni su u cijelom programu.


Funkcije u Pascal-u Skup ugrađenih funkcija u Pascal jeziku je prilično širok (ABS, SQR, TRUNC, itd.). Ako je u program uključena nova, nestandardna funkcija, ona mora biti opisana u tekstu programa, nakon čega joj se može pristupiti iz programa. Funkcija se pristupa na desnoj strani operatora dodjeljivanja, što ukazuje na naziv funkcije i stvarne parametre. Funkcija može imati svoje lokalne konstante, tipove, varijable, procedure i funkcije. Opis funkcija u Pascalu sličan je opisu procedura.




Primjer 4. Napišite potprogramsku funkciju stepena a x, gdje su a, x bilo koji brojevi. Koristimo formulu: a x = e x ln program p2; var f, b, s, t, c, d: real; (globalne varijable) funkcija stp (a, x: real) : real; var y: real; ( lokalne varijable) počinju y:= exp (x * ln (a)) ; stp:= y;(dodeljivanje imena funkcije rezultatu proračuna potprograma) end; (opis funkcije završen) begin d:= stp (2.4, 5); (izračunavanje snaga različitih brojeva i varijabli) writeln (d, stp (5,3.5)); pročitaj(f, b, s, t); c:= stp (f, s)+stp (b, t); writeln(c); kraj.


Funkcije Potprogram je dio programa, dizajniran kao posebna sintaktička struktura i opremljen imenom (nezavisni programski blok), za rješavanje pojedinačnih problema. Opis procedure: procedura () (odjeljak za izvršavanje lokalnih imena) Begin (odjeljak za izvršavanje operatora) End; Opis funkcije: funkcija (): tip; (odjeljak za opisivanje lokalnih imena) Begin (odjeljak za izvršne izraze) := ; (potreban parametar) End; Poziv procedure: (); Poziv funkcije: := (); 1. Na desnoj strani operatora dodjeljivanja. 2. U izrazu u uvjetu operatora grananja. 3. U izlaznoj proceduri, kao rezultat funkcije. Opis potprograma Procedure


Rekurzivne procedure i funkcije u Pascal-u mogu se pozvati, tj. imaju svojstvo rekurzivnosti. Rekurzivna funkcija mora nužno sadržavati uvjet za završetak rekurzivnosti kako ne bi izazvala petlju programa. Svaki rekurzivni poziv kreira novi skup lokalnih varijabli. To jest, varijable koje se nalaze izvan pozvane funkcije se ne mijenjaju.


1 funkcija f (n: cijeli broj): cijeli broj; početi ako je n = 1 onda f:= 1 inače f:= n * f (n -1); (funkcija f sama sebe poziva" title="Primjer 5. Kreirajte rekurzivnu funkciju koja izračunava faktorijel broja n na sljedeći način: n! = 1 ako je n= 1 n!= (n -1)! · n ako je n > 1 funkcija f (n: cijeli broj): cijeli broj; počinje ako je n = 1 onda f:= 1 else f:= n * f (n -1); (funkcija f poziva samu sebe" class="link_thumb"> 19 !} Primjer 5. Kreirajte rekurzivnu funkciju koja izračunava faktorijel broja n na sljedeći način: n! = 1 ako je n= 1 n!= (n -1)! · n ako je n > 1 funkcija f (n: cijeli broj): cijeli broj; početi ako je n = 1 onda f:= 1 inače f:= n * f (n -1); (funkcija f sama sebe poziva) end; 1 funkcija f (n: cijeli broj): cijeli broj; početi ako je n = 1 onda f:= 1 inače f:= n * f (n -1); (funkcija f sama sebe poziva"> 1 funkcija f (n: cijeli broj): cijeli broj; početak ako je n = 1 onda f:= 1 inače f:= n * f (n -1); (funkcija f poziva samu sebe) end; " > 1 funkcija f (n: cijeli broj): cijeli broj; počinje ako je n = 1 onda f:= 1 inače f:= n * f (n -1); (funkcija f poziva samu sebe" title="Primjer 5 Kreirajte rekurzivnu funkciju koja izračunava faktorijel broja n na sljedeći način: n! = 1, ako je n= 1 n!= (n -1)!n, ako je n > 1 funkcija f (n: cijeli broj): cijeli broj; počinje ako je n = 1 onda f:= 1 inače f:= n * f (n -1); (funkcija f poziva samu sebe"> title="Primjer 5. Kreirajte rekurzivnu funkciju koja izračunava faktorijel broja n na sljedeći način: n! = 1 ako je n= 1 n!= (n -1)! · n ako je n > 1 funkcija f (n: cijeli broj): cijeli broj; početi ako je n = 1 onda f:= 1 inače f:= n * f (n -1); (funkcija f poziva samu sebe"> !}



Slajd 1

Slajd 3

Potprogrami: globalne i lokalne varijable Svi potprogrami moraju biti opisani u odjeljku opisa. Svaki potprogram mora imati ime. Informacija između glavnog programa i potprograma se prenosi globalnim parametrima (varijable) koji rade u bilo kojem dijelu programa i imaju naziv opisan u glavnom programu. Lokalni parametri (varijable) se mogu koristiti unutar potprograma - njihova imena i vrijednosti imaju značenje samo unutar granica datog potprograma i nisu dostupni programu koji poziva

Slajd 4

Formalni i stvarni parametri U opisu potprograma parametri su naznačeni samo imenima, pa se nazivaju formalni. Oni nemaju značenje dok se potprogram ne pozove. Oni samo rezervišu prostor za stvarne parametre, fiksirajući njihov broj i tip podataka. Tipovi stvarnih parametara: Parametri vrijednosti pokazuju koja vrijednost treba biti dodijeljena određenom parametru potprograma. Nakon što potprogram završi, oni preuzimaju svoje prethodne vrijednosti, čak i ako su promijenjene u potprogramu. Varijabilni parametri u potprogramu zauzimaju mjesto formalnih, mogu promijeniti svoju vrijednost tokom izvršavanja potprograma i sačuvati promjene prilikom izlaska iz potprograma (promjenjivim parametrima prethodi ključna riječ Var).

Slajd 5

Slajd 6

Opis procedure Program Pr1; Const...Type...Var...Procedure(); Opisni dio Početak Tijelo procedure Kraj; Počni...(); ... kraj. Kada se pozove procedura, formalni parametri se zamenjuju stvarnim.

Slajd 7

Postupak za izračunavanje zbira dva broja program pr1; Usescrt; Var a,b,s:real; procedura summa(x,y:real;var z:real); početak z:=x+y; kraj; begin clrscr; writeln("unesite a,b"); readln(a,b); suma(a,b,s); writeln(" zbir brojeva ",a:3:1," i ",b:3:1," = ",s:3:1); readln; kraj. x,y,z – formalni parametri, lokalni varijable a,b,s– globalne varijable a,b,s – stvarni parametri x y z a b s Parametri vrijednosti Parametarska varijabla

Slajd 8

Slajd 9

Slajd 10

Izračunajte vrijednost izraza a:=(3n!+2m!)/(m+n)! Da biste pronašli faktorijel, koju vrstu varijabli je prikladno koristiti? program pr2; Usescrt; Var m,n,x,y,z:integer; a:real; procedure fact(d:integer;var q:integer); var i:integer; početak q:=1; za i:=1 do d do q:=q*i; kraj; begin clrscr; writeln("unesite vrijednosti n, m"); readln(n,m); činjenica(n,x); činjenica(m,y); činjenica(m+n,z); a:=(3*x+2*y)/z; writeln("vrijednost izraza sa m= ",m:4," i n= ",n:4,"je jednaka sa",a:8:3); readln; kraj. N!=1·2·3·…· N

Slajd 11

Ulazni izlaz elemenata jednodimenzionalnog niza Funkcija Random(X) generiše nasumični broj od 0 do X cjelobrojnog ili realnog tipa (prije pozivanja funkcije, mora se inicijalizirati pomoću procedure Randomize). Ako X parametar nije specificiran, rezultat će biti tipa Real u rasponu od 0,0 do 1,0. Da biste dobili niz nasumičnih cijelih brojeva iz raspona random(B-A+1)+A Zadatak: Formulirajte unos elemenata jednodimenzionalnog niza koristeći generator slučajnih brojeva (opseg vrijednosti od -10 do 20) i izlaz elemenata kao procedura. Za A=-10 B=20 nasumično(20-(-10)+1)+(-10)

Slajd 12

Slajd 13

Slajd 14

Opis funkcije Funkcije su dizajnirane da izračunaju samo jednu vrijednost, 1. Stoga je njena prva razlika u tome što procedura može imati nove vrijednosti za nekoliko parametara, ali funkcija ima samo jedan (to će biti rezultat). 2. Druga razlika je u naslovu funkcije. Sastoji se od riječi FUNCTION, nakon čega slijedi naziv funkcije, zatim lista formalnih parametara u zagradama, nakon čega slijedi tip rezultata funkcije, odvojenih dvotočkom. 3. Tijelo funkcije mora sadržavati najmanje jedan operator dodjeljivanja, gdje je naziv funkcije na lijevoj strani, a njena vrijednost na desnoj strani. Funkcija (): Opisni početak Funkcija tijelo:=; End;

Slajd 15

Izračunajte vrijednost izraza a:=(3n!+2m!)/(m+n)! program fn2; Usescrt; Var m,n:integer; a:real; funkcija fact(d:integer) :longint; var i:integer; q:longint; početak q:=1; za i:=1 do d do q:=q*i; činjenica:=q; kraj; begin clrscr; writeln("unesite vrijednosti n, m"); readln(n,m); a:=(3*činjenica(n)+2*činjenica(m))/činjenica(m+n);; writeln("vrijednost izraza sa m= ",m:4," i n= ",n:4,"je jednaka sa",a:8:3); readln; kraj.

Slajd 16

Napravite program koji će pronaći ab, odnosno b-tu potenciju broja A, gdje su A i B cijeli brojevi i B>0, uneseni s tastature. Sastavite program zamjenom funkcije proceduralnim programom pr2; Usescrt; Var a,b:integer; c:longint; Funkcija stepen(x,y:integer):longint; var i:integer; s:longint; početak s:=1; za i:=1 do y radi s:=s*x; korak:=s; kraj; begin clrscr; writeln("unesite vrijednosti a, b"); readln(a,b); C:=korak(a,b); writeln("s=",s); readln; kraj.

Slajd 17

Slajd 18

Mehanizam za prosleđivanje parametara funkcijama i procedurama Šta će štampati procedura, a šta program? Globalne varijable Lokalne varijable a b 3 3 -3 Adresa c a b c 48 Adresa c A:=b+3 B:=3*a C:=a+b Država C 24 5 8 Odgovor

Slajd 19

8. razred. Programiranje u ABC Pascalu

Nastavnik informatike NIS Uralska fizike i matematike Zelenov Boris Aleksandrovič


  • Učenici koriste procedure i funkcije za rješavanje problema
  • Učenici uče rješavati velike probleme razlažući ih na manje

  • Razviti koncept procedura i funkcija u programskom jeziku.

  • Studenti poznaju pojmove “procedure” i “funkcije”, određuju formalne i stvarne parametre

Očekivani rezultati - Deskriptori:

1. Poznaje definiciju "procedura"

2. Poznaje definiciju "funkcije"

3. Određuje stvarne i formalne parametre

4.Razlikuje između parametara vrijednosti i varijabli

5. Pronalazi poziv procedure ili funkcije u programski kod



Elvirin standardni plan

1. Uklonite papire

2. Zalijte cvijeće

3. Operite stolove

4. Obrišite staklo

Kraj algoritma

Kako poboljšati organizaciju ovog procesa?




Tema lekcije

Potprogrami:


Ishki bagdarlama

Potprogram

Procedura

Procedura

Parameterler

Korisne fraze:

Za prosljeđivanje varijabilnih vrijednosti u proceduru (funkciju), koriste se stvarni parametri...

Da biste opisali proceduru, prvo bi trebalo..., zatim...


Koncept potprograma

Definicija

Potprogram- Ovo je poseban funkcionalno nezavisan dio programa.

Potprogrami

Procedure


  • eliminirati potrebu za ponovnim ponavljanjem sličnih fragmenata u tekstu programa;
  • poboljšati strukturu programa, čineći ga lakšim za razumijevanje;
  • povećati otpornost na greške u programiranju i nepredviđene posljedice tokom izmjena programa.

  • Nacrtajte ogradu koristeći programski jezik

U ovom zadatku možete kreirati proceduru koja će izvesti algoritam za crtanje jednog fragmenta (ograda), a zatim se stalno pozivati ​​na ovu proceduru, mijenjajući početni položaj olovke


  • Opišite kako efikasno nacrtati božićno drvce u programskom okruženju

  • Oni su nezavisni programski fragmenti, osmišljeni na poseban način i imaju svoje ime.

Interakcija između glavnog programa i potprograma



Blok dijagram

  • Blok poziva potprograma (procedura ili funkcija).

Ime potprograma (procedure ili funkcije).


Blok dijagram


Opis postupka je sljedeći:

procedura ime (lista formalnih parametara); odeljak opisa početi operateri kraj ;


Opis funkcije izgleda ovako:

funkcija ime(lista formalnih parametara): tip povratka;

odeljak opisa početi operateri kraj ;


Lokacija u programu

Program ...;

//Description section Uses, Const, Var, ...

procedura A ;

početi ....... kraj ;

procedura B ;

početi ........ kraj ;

Funkcija C ;

početi ........ kraj ;

//Glavni program

početi ........ kraj .


  • Razlika između funkcije i procedure je u tome što je rezultat izvršavanja operatora koji čine tijelo funkcije uvijek jedna vrijednost, tako da se pozivanje funkcije može koristiti u odgovarajućim izrazima zajedno sa varijablama i konstantama.

Procedure

Funkcije

Može imati više rezultata ili izvršiti neku radnju

Ima samo jedan rezultat, čiji se tip posebno specificira prilikom deklariranja funkcije.

Rezultati mogu biti vrijednosti bilo koje vrste - nizovi, nizovi, brojevi itd.

Rezultat može biti samo vrijednost tipa real, integer ili char.

Naredba poziva procedure je posebna naredba koja se može koristiti nezavisno

Poziv funkcije može se koristiti samo kao komponenta izraza odgovarajućeg tipa.

Tijelo funkcije mora sadržavati najmanje jedan operator dodjeljivanja s imenom funkcije na lijevoj strani.


b onda max:=a ostalo max:=b; MaxBroj:= max; end;" width="640"

Procedura ili funkcija?

Maksimalni broj(a,b: cijeli broj): cijeli broj;

var max: cijeli broj;

MaxBroj:= max;


b onda max:=a ostalo max:=b; end;" width="640"

Procedura ili funkcija?

MaxBroj(a,b: cijeli broj; var max: cijeli broj);

ako ab onda max:=a ostalo max:=b;


Procedura ili funkcija?

Promijeni boju(C1, C2: Word);

Pozadina teksta (C2)


Procedura ili funkcija?

Dodaj(X, Y: Integer): Integer;


Stvarno

  • Navedeno u glavnom dijelu programa

Formalno

  • Navedeno u potprogramu
  • Navedeno u potprogramu

Proceduru poziva operator koji ima sljedeći format:

naziv procedure (lista stvarnih parametara);

  • Lista stvarnih parametara- ovo je njihov popis odvojenih zarezima.

  • U standardu jezika Pascal, parametri se mogu proslijediti na dva načina - po vrijednosti i po referenci. Pozivaju se parametri proslijeđeni vrijednosti parametri-vrijednosti, preneseno referencom - parametri-varijable. Potonji se razlikuju po tome što im u zaglavlju procedure (funkcije) prethodi servisna riječ var.

Prenos parametara. Formalni parametri

Varijable

Vrijednosti

Parametri po vrijednosti

Formalni parametri

Varijable


Formalni parametri

Parametri po vrijednosti

  • U prvoj metodi (prolaskom po vrijednosti), vrijednosti stvarnih parametara se kopiraju u odgovarajuće formalne parametre.

Procedura

Naziv procedure (a, b: cijeli broj);

Glavni program

Prilikom promjene ovih vrijednosti tokom izvršavanja procedure (funkcije), originalni podaci (stvarni parametri) se ne mogu promijeniti


Var c, d: cijeli broj;

  • Prilikom prolaska po referenci, sve promjene koje se dešavaju u tijelu procedure (funkcije) sa formalnim parametrima dovode do trenutnih sličnih promjena u odgovarajućim stvarnim parametrima.

Procedura

Ime procedure (a, b: cijeli broj, Var c: real);

Glavni program

Promjene se dešavaju na varijablama pozivajućeg bloka, tako da se izlazni parametri prosljeđuju referencom. Kada se pozovu, njihovi odgovarajući stvarni parametri mogu biti samo varijable.


Pišete:

1.Stvarni parametri___________

Procedura Kvad(R: real; var S: real);

2. Formalni parametri ___________

3. Formalni parametri-vrijednosti __________

5. Naziv procedure ___________

6. Pristup proceduri iz programa _____________________


Interaktivni zadatak

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


Elvira je voditeljica razreda. Morat će napraviti plan generalnog čišćenja u učionici: ukloniti papire, zaliti cvijeće, oprati stolove, obrisati staklo. Kako da bolje organizuje svoj posao? Pomozi Elviri.


Elvirin napredni plan

Potprogrami:

Arsen - odlaže papire

Mila - zalivanje cveća

Vitalij – pere stolove

Indira – brisanje stakla

1. Pogubite Arsena

2. Trči Mila

3. Pogubite Vitaly

4. Pokrenite Indiru

Kraj algoritma


  • Koje smo nove strukture programskog jezika danas upoznali?
  • Imenujte proučavane parametre
  • Kako se parametri prosljeđuju proceduri?

  • Sažetak lekcije
  • Pronađite definicije: “Lokalne varijable” i “Globalne varijable”
  • Sastavite dva zadatka u kojima možete koristiti procedure ili funkcije.

  • Kako biste odredili temu lekcije? (izmisli svoje ime)
  • Šta mislite da biste trebali naučiti u sljedećoj lekciji?

Hajde da se upoznamo

sledeća lekcija!

Svrha lekcije

obrazovni

  • formirati među studentima jedinstvenu sistem pojmova vezano za koncepte procedure i funkcije;
  • naučiti kako koristiti potprograme u rješavanju problema u Pascalu, a također naučiti razumjeti koji tip potprograma je potreban za rješavanje određenog problema;
  • pokazati osnovne tehnike za korišćenje potprograma;

obrazovni

  • neguju tačnost, pažnju, organizovanost;
  • kultura kompjuterskih vještina;

razvoj

  • razvijati logičko mišljenje, algoritamsku kulturu učenika;
  • razviti znanje i vještine za sastavljanje i otklanjanje grešaka u potprogramima u Pascalu.

Studenti moraju:

  • poznaju pravila za pisanje postupaka bez parametara i sa parametrima;
  • poznaju pravila za pisanje funkcija;
  • biti u stanju primijeniti procedure i funkcije za rješavanje jednostavnih problema.

Tokom nastave

I. Org. momenat

II. Uvod. Relevantnost

Dajte zadatak na komade papira ( Aneks 1 ). Pronađite ponavljanja.

Ponekad na različitim mjestima programa morate izvršiti gotovo iste sekvence radnji s različitim početnim podacima. Takvi nizovi radnji mogu se formalizirati u obliku tzv potprogrami (sa engleskog, potprogram) – grupirati operatore u blok kojem se može pristupiti po imenu i više puta.

Potprogrami skraćuju tekst programa, značajno skraćuju vreme njegovog izvršavanja i olakšavaju život programerima koji mogu da kreiraju programe modularno, odnosno sklapanjem složenog programa od završenih delova jednostavnijih komponenti. Ovo omogućava grupi programera da kreira velike programe, a grupi školaraca da razvija i implementira sve globalne projekte

Potprogrami su podijeljeni na procedure i funkcije.

Ugrađene (standardne) procedure i funkcije su dio jeziku i može se nazvati imenom bez prethodnog opisa. Na primjer , abs, sqrt, ln, sin... su funkcije (vraćaju rezultat), readln, write... su procedure (ne vraćaju rezultat). Njihovo prisustvo uvelike olakšava razvoj aplikativnih programa. Međutim, u većini slučajeva neke specifično za dati program, akcije ne nalaze direktne analoge u Turbo Pascal bibliotekama, i tada programer mora razviti vlastiti nestandardni procedure i funkcije.

III. Objašnjenje novog materijala

Korisničke procedure su napisane sebe programer u skladu sa sintaksom jezika u odjeljak opisa potprograma.

Struktura procedure prati strukturu programa; to je "program u malom" - takođe je predstavljen zaglavljem i tijelom.

Zaglavlje se sastoji od procedure rezervirane riječi, identifikatora (ime) procedure.

VAR ... // odjeljak za opisivanje varijabli glavnog programa

procedure ProcedureName;

//tijelo glavnog programa

Poziv procedure za naknadno izvršenje se snima u tijelu glavnog programa.

Primjer 1. Program za izračunavanje površine i perimetra.

Prednosti potprograma:

  • Programi napisani pomoću potprograma lakši za testiranje i otklanjanje grešaka, imaju jasnije logička struktura.
  • Nezavisna priroda potprograma omogućava da se njihovo kreiranje povjeri raznim programerima. Na taj način se programski rad dijeli i na taj način ubrzava njegov završetak;
  • Korištenje potprograma štedi memoriju. Memorija za pohranjivanje varijabli koje se koriste u potprogramu dodjeljuje se samo za vrijeme trajanja njegovog rada i oslobađa se čim se njegovo izvršenje završi.

Primjer 2. Korisnik unosi dvije strane tri pravokutnika. Izvedite njihove oblasti.

Problem možete riješiti na sljedeći način:

za i:=1 do 3 do

writeln('Unesite a i b:');

writeln('Oblast=',a*b);

Smatra se dobrim stilom programiranja za korištenje procedura. Potreban je postupak koji će izračunati površinu pravokutnika. Evo kako će glavni program izgledati shematski:

proračun

proračun

proračun

Tekstualna procedura već postoji (vidi primjer 1). Kreirajmo drugu proceduru koja izračunava površinu. Ali da biste izračunali S, morate znati 2 strane, tako da procedura treba da pokaže koje strane treba pomnožiti.

procedura pl (c,d: cijeli broj);

writeln(‘površina pravokutnika sa stranicama’,c, ‘’ ,d, ‘=’,S);

Parametar je varijabla kojoj je dodijeljena vrijednost. Postoji formalni parametri , definisan u zaglavlju potprograma, i stvarni parametri – izrazi koji specificiraju određene vrijednosti prilikom pristupa potprogramu.

Procedura će se izvršiti ako je pozovete po imenu i navedete stvarne parametre , odvojeno zarezima i zatvoreno u zagrade:

Stvarni parametri moraju odgovarati formalnim po vrsti i količini.

Dakle, glavni program:

za i:=1 do 3 do

Komentar. Prilikom rješavanja ovog problema potrebno je provjeriti brojeve koje je unio korisnik (ne smiju biti negativni, inače će program biti prekinut).

Kreirajmo proceduru verifikacije:

greška procedure (f,g:integer);

ako (f<0) or (g<0) then begin

writeln('strane pravougaonika ne mogu biti negativne');

stop; // programski prekid

Završni program – Dodatak 4

Dakle, format procedure:

Procedura<имя>(formalni parametri);

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

Primjer 3. Napisati program za zamjenu mjesta dva broja c=5 i d=7.

program exchangeDan;

var c,d:integer;

razmjena procedura (a,b:integer);

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

writeln("Unesite 2 broja: ");

writeln(c," ",d);

Nakon pokretanja programa, možete vidjeti da su formalni parametri (u proceduri) promijenili mjesta, ali se stvarni (koji se koriste u glavnom programu) nisu promijenili. Pogledajmo sliku koja prikazuje dio RAM-a:

1) kada se poziva obmen procedura sa dva parametra 5 i 7, brojevi 5 i 7 se takođe stavljaju u varijable a i b, respektivno:

3) ali u varijablama c i d podaci se nisu promijenili, jer nalaze se u drugim memorijskim ćelijama.

Da bi varijable c i d, a i b referencirao iste memorijske ćelije (ako se promijene vrijednosti a i b, tada će se promijeniti i vrijednosti c, d) prilikom opisivanja formalnih parametara potrebno je dodati riječ VAR ispred traženih varijabli:

razmjena procedura (var a,b:integer);

Promijenite program obmenDan:

Greška zbog var. Brojevi su konstante koje se ne mogu mijenjati u proceduri.

Primjer 4. Pronađite površinu kruga koristeći proceduru koja samo izračunava, ali ne prikazuje rezultat na ekranu.

proceduralni krug(r:real);

Procedura bi trebala vratiti rezultat:

krug procedure (r:real; var S:real);

readln(a, e);

komentar: Varijabla u proceduri S se koristi za vraćanje rezultata procedure glavnom programu. Kada se promijeni, mijenja se i stvarni parametar u pozivajućem programu, tj. varijabla e.

Češće se za to u Pascalu, umjesto procedura, koriste funkcije (potprogrami koji nešto vraćaju).

Funkcija je slična proceduri, ali postoje dvije razlike.

  • Funkcija prenosi rezultat svog rada u program - jednu vrijednost, čiji je nosilac ime njene funkcije.
  • Ime funkcije može se pojaviti u izrazu kao operand. Funkcija vraća rezultat na tačku svog poziva.

Na primjer, sqr(x) – kvadrirat će vrijednost x i vratiti izračunatu vrijednost kvadrata broja x pozivnoj tački: y:=sqr(x);

Korisnički definirana funkcija sastoji se od zaglavlja funkcije i tijela funkcije. Tijelo funkcije je po strukturi slično programu. Opis oznaka, konstanti, tipova itd. važi samo u okviru ovog postupka.

Funkcija<имя>(formalni parametri):<тип результата>;

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

Odjeljak izraza mora sadržavati najmanje jednu naredbu koja dodjeljuje vrijednost imenu funkcije. Rezultat posljednje dodjele se vraća pozivnoj točki.

Primjer 5. Hajde da preradimo problem o površini kruga.

funkcijski krug (r:real): realan;

a:=krug(5); (MORA biti dodijeljen)

Primjer 6. Pronađite 1!+2!+…+n!

Koristimo funkciju pronalaženja faktorijala, jer ga unosimo kao ulaz i dobijamo rezultat.

činjenica funkcije (a:integer): cijeli broj;

za i:=1 uraditi

U redu fact:=fact*I;

kompajler će pronaći grešku, jer se fakt mora pozvati sa parametrima. Stoga se obično uvodi dodatna varijabla u koju se stavlja rezultat. A onda se ovaj rezultat dodjeljuje varijabli činjenica:

faktorijel programa;

var suma,n,j: cijeli broj;

činjenica funkcije (a: cijeli broj): cijeli broj;

var i,d: cijeli broj;

za i:=1 uraditi

za j:=1 do n do

suma:=suma+činjenica(j);

IV. Sažetak lekcije

U ovom trenutku, proces programiranja se pretvara u proizvodnja industrijskog softvera zasnovano tehnologije programiranja. Većina stručnjaka je mišljenja da metoda dizajna programa odozgo prema dolje najpogodniji za rješavanje složenih problema. Prvo se generalno definiše zadatak, a zatim se postepeno razjašnjava njegova struktura. U sljedećem koraku, svaki podzadatak se, pak, dijeli na niz drugih. Rješenje zasebnog fragmenta složenog problema je nezavisni programski blok - potprogram.

V. Domaći

Riješite probleme (pismeno):

  1. Kreirajte proceduru koja zamjenjuje sva slova a u unesenom nizu sa *.
  2. Daju se dva prijedloga. Pronađite ukupan broj slova "n" u njima. (Definirajte funkciju za izračunavanje broja slova “n” u rečenici.)