Procedure i funkcije u Pascalu. Rekurzija. Potprogrami Često zadatak zahtijeva ponavljanje određenog niza iskaza u različitim dijelovima programa. Procedure i funkcije Prikaz procedura i funkcija

Rekurzija u Pascalu Učitelj: Tlekhurai Yu.V. Općinska obrazovna ustanova "Licej br. 8" Što vidite na slikama? Ova pojava u umjetnosti tzv rekurzija "Da biste razumjeli rekurziju, prvo morate razumjeti rekurziju." rekurzija - djelomična definicija objekta kroz sebe, definicija objekta pomoću prethodno definiranih. Znanstveno govoreći: Rekurzija - metoda definiranja klase objekata ili metoda tako da se prvo specificira jedan ili više (obično jednostavnih) njenih osnovnih slučajeva ili metoda, a zatim se na njihovoj osnovi specificiraju pravila za konstrukciju klase koja se definira. 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 zrcala postavljena jedno nasuprot drugoga: u njima se formiraju dva hodnika od blijedih odraza ogledala. Drugi primjer beskonačne rekurzije je učinak samopobude (pozitivan Povratne informacije) g elektronički sklopovi dobiti, kada signal s izlaza dođe do ulaza, pojačava se, ponovno dolazi do ulaza sklopa i ponovno se pojačava. Pojačala kod kojih je ovaj način rada standardan nazivamo autooscilatorima. Primjer rekurzivnog rječničkog unosa: “Svećenik je imao psa...” - tipična rekurzija Nekoliko priča Stanislawa Lema posvećeno je incidentima s beskonačnim ponavljanjem: priča o grobovima (“Zvjezdani dnevnici Ivana Tihog”), u kojem se junak sukcesivno kreće od članka o sepulkama do članka o sepulaciji, odatle do članka o sepulkariji, koji opet sadrži referencu na članak “sepulkarija”. Priča o inteligentnom stroju koji je imao dovoljno pameti i lijenosti izgraditi sličan za rješavanje zadanog problema i povjeriti mu rješenje (rezultat je bila beskonačna rekurzija, kada svaki novi auto izgradila sličnu sebi i predala joj zadatak). Rekurzija u programiranju je način organiziranja računalnog procesa u kojem se procedura ili funkcija referira sama na sebe tijekom izvođenja svojih sastavnih operatora. Kako takav poziv ne bi bio beskonačan, tekst potprograma mora sadržavati uvjet po čijem se postizanju više ne poziva. dakle, rekurzivni poziv može biti uključen samo u jednu od grana potprograma. Primjer. Izračunavanje faktorijela prirodnog broja Napravite rekurzivnu funkciju koja izračunava faktorijel broja n na sljedeći način: funkcija f (n: cijeli broj): longint; start if n = 1 then f:= 1 else f:= n * f(n -1); (funkcija f poziva samu sebe) kraj Pascal programa korištenjem rekurzije: Var n: integer; a: dužina; funkcija faktorijal (n: cijeli broj): longint; start if n = 1 then factorial:= 1 else factorial:= n * factorial (n -1); Kraj; Započni pisanje (‘n=’); Readln(n); A:= faktorijel(n); Write('n!=',a); Readln; kraj. Leonardo iz Pise Fibonacci

Fibonaccijevi brojevi su elementi niza brojeva

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..., kod kojih je svaki sljedeći broj jednak zbroju dva prethodna.

Zadatak: Prikažite niz Fibonaccijevih brojeva koji se sastoji od n elemenata. Opis varijabli: n – broj elemenata niza; a, b – vrijednosti posljednja dva elementa niza; c – međuspremnik (“rezervna”) varijabla; i – brojač. Algoritam za rješavanje problema: 1. Dobiti vrijednost n. 2. Dodijelite a i b vrijednosti 0 odnosno 1 (ovo su prvi brojevi Fibonaccijevog niza). Prikažite ih na ekranu. 3. Počevši od 3. elementa do n: a) prikazati zbroj a i b, b) pohraniti vrijednost varijable b u c, c) zapisati zbroj a i b u b, d) dodijeliti vrijednost c do a. Pascal program koji koristi iteraciju: program Fibonacci; var a,b,c,i,n: cijeli broj; početi napisati("n = "); readln(n); a:= 0; napisati(a," "); 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 Fibonaccijevih brojeva je sljedeća: Ova se definicija Fibonaccijevih brojeva lako može 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 Then nod:= a else if a>b then nod:= nod(a-b,b) else nod:= nod(a,b-a) End; započeti pisanje ('a='); readln(a); napisati('b='); readln(b); A:= kimanje(a,b); napiši(‘kimaj=’,a); readln; kraj. Problem oko Hanojskih tornjeva. U tom slučaju potrebno je strogo poštivati ​​sljedeća pravila:

  • Možete pomicati samo jedan disk odjednom;
  • ne može se staviti veći disk manji disk;
  • uklonjeni disk mora se staviti na bilo koju iglu prije uklanjanja drugog diska.
  • Vrijedni budistički redovnici danju i noću nose diskove od tornja do tornja. Legenda kaže da će, kada redovnici završe svoj posao, doći kraj svijeta. Moglo bi se izračunati da bi rješavanje problema sa 64 diska zahtijevalo 264–1 poteza. Dakle, što se tiče smaka svijeta, on će nastupiti nakon pet milijardi stoljeća, ako uzmemo u obzir da se jedan disk pomakne u jednoj sekundi. Međutim, i problem i legendu za njega izmislio je 1883. matematičar Edouard Lucas s koledža Saint-Louis.

Jedan od tri dijamantna tornja nosi 64 okrugla zlatna diska. Diskovi imaju različite radijuse i nalaze se na šiljci silaznim redoslijedom radijusa od baze prema vrhu. Potrebno je prenijeti diskove s prvog šiljka na drugi, koristeći treći šiljak ako je potrebno.

Zadatak. Napravite rekurzivni program koji bi riješio gore postavljen problem o Hanojskim tornjevima s brojem diskova jednakim n (n = 1, 2, ...). Riješenje. Unesite imena za tornjeve: a, b, c. Neka hanoj (n,a,b,c)- potrebna funkcija koja vraća slijed kretanja diskova sa a na b korištenjem c prema gore opisanim pravilima. Kada je n=1 znamo kako riješiti problem. Vi samo trebate izvršiti operaciju "premjesti". a na b" Pretpostavimo da možemo riješiti ovaj problem za n – 1 diskova. Premjesti n–1 diskova iz a na S. Zatim premjestite jedan preostali disk iz a na b i konačno premjestiti n–1 diskova iz c na b. Ulazni podaci: broj diskova na klinu a; Izlaz: sekvenciranje; Korak0:(definirajte tip varijable); Korak 1: (opis hanoi procedure, koji prikazuje redoslijed radnji); Korak 1.1: (pomakni (n-1) diskova s ​​klina a na klin b); Korak 1.2: (pomaknite n-ti disk iz a u c); Korak1.3:(pomakni (n-1) disk iz b u c); (koraci 1.2-1.3 izvode se rekurzivno); Korak2:(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); start if n>0 then begin hanoi(n-1,a,c,b); writeln ("Peremestit disk so sterzhnya ",a," na sterzhen" ",b); hanoi(n-1,c,b,a); end; end; Begin write ("Vvedite naturalnoe chislo n"); readln ( n); a:="a"; b:="b"; c:="c"; hanoi (n,a,c,b); readln; kraj. Domaća zadaća Napišite program za izračun stupnja s prirodnim eksponent Zadano: stupanj baze x Eksponent Do Ako je k=0, onda stupanj(k,x)=1, Inače stupanj(k,x)= x· stupanj(k-1,x) Program stepen; var y: pravi; n:cijeli broj; funkcija korak(k:cijeli broj, x:stvarno): realno; begin If k = 0 Then step:= 1 else step:= x * step(k-1,x) End; begin write(‘vvedite osnovanie stepeni x=’); readln(y); write(‘uvedite pokazatel stepeni k=’); Readln(n); write(‘x v stepeni k=’,step(n,y)); readln; kraj. Samostalni rad

  • Nađi zbroj znamenki broja
  • Odrediti je li zadani prirodni broj prost
  • Pronađite prvu znamenku broja
  • Pretvorite prirodni broj iz decimalnog s.s. na binarno
  • Nađite zbroj elemenata niza cijelih brojeva koji se sastoji od 20 elemenata
  • Zamijenite vrijednosti dva cijela broja
  • Poredaj vrijednosti triju varijabli a, b, c uzlaznim redoslijedom
  • Pronađite broj znamenki u prirodni broj n
  • Pronađite najveći od tri navedena broja
  • Pronađite broj pozitivnih brojeva između četiri A, B, C, D
Odgovori za samostalan rad br. 2 Program jednostavan; var n, m, s: cijeli broj; funkcija prost(m, n:cijeli broj): boolean; begin If n = m Then prost:= true else prost:= (n mod m<>0) i prost (m+l, n); Kraj; započeti pisanje ('n='); Readln(n); M:=2; Ako prost(m,n) tada napišite (n,’prostoechislo’) Inače napišite (n,’sostavnoe’); readln; kraj.

prijevod programa;

procedura dvd(n:longint);

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

napisati (n mod 2);

Potprogrami Često zadatak zahtijeva ponavljanje određenog niza iskaza u različitim dijelovima programa. Kako bi opisali ovaj niz jednom i primijenili ga mnogo puta, programski jezici koriste potprograme. Potprogram je posebno dizajniran blok programa za njegovu kasniju ponovljenu upotrebu u glavnom programu. Korištenje potprograma omogućuje vam implementaciju jedne od najmodernijih metoda programiranja - strukturirano programiranje


Potprogrami rješavaju tri važna problema koji uvelike olakšavaju programiranje: 1. eliminiraju potrebu opetovanog ponavljanja sličnih fragmenata u tekstu programa, t.j. smanjiti veličinu programa; 2. poboljšat će strukturu programa, čineći ga lakšim za razumijevanje prilikom parsiranja; 3.smanjiti vjerojatnost pogrešaka, povećati otpornost na programske pogreške i nepredviđene posljedice tijekom modifikacije.


Procedure i funkcije U Pascalu postoje dvije vrste potprograma: postupak (PROCEDURE) i funkcija (FUNCTION). Procedure i funkcije u Pascalu deklarirane su u odjeljku deklaracije iza odjeljka varijabli. ProgramProgramName; VAR ... // odjeljak za opis varijabli glavnog programa; procedura Ime procedure; var ... početak ...//Kraj tijela postupka; početak //tijelo glavnog programa kraj.


Funkcije i procedure imaju parametre (varijable koje prosljeđuju vrijednost). Ima ih dvije vrste: 1) Formalne - one koje se nalaze u opisu potprograma 2) Stvarne - one koje se prenose iz glavnog programa u funkciju ili proceduru. Stvarni parametri moraju odgovarati formalnim u količini, redoslijedu i vrsti.




Procedure Procedure se koriste kada potprogram treba dobiti više rezultata. U Pascalu postoje dvije vrste procedura: procedure s parametrima i procedure bez parametara. Proceduri se pristupa imenom procedure, nakon kojeg mogu slijediti stvarni parametri. 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 je procedura izvršena, kontrola se prenosi na sljedećeg operatera pozivajućeg programa nakon poziva procedure.


Primjer 1: Postupak bez parametara koji ispisuje niz od 60 zvjezdica. postupak pr; var i: cijeli broj; početak za i:=1 do 60 do write (* "); writeln; kraj; početak pr; kraj.


Primjer 2. Napravite program za zamjenu dva broja c=5 i d=7 program obmenDan; var c,d:cijeli broj; procedura razmjene (a,b:cijeli broj); var m:cijeli broj; početak 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) pri pozivanju procedure obmen s dva parametra 5 i 7, isti brojevi 5 i 7 stavljaju se u varijable a odnosno b: 2) tada se u proceduri vrijednosti 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 stanicama


Kako bi se varijable c i d, a i b odnosile na iste memorijske ćelije (ako se vrijednosti a i b promijene, promijenit će se i vrijednosti c, d), kada se opisuju formalni parametri, potrebno je dodati riječ VAR ispred traženih varijabli: procedure exchange (var a,b:integer); s5 d 7 a b


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


(glavni program) begin for i:=1 to 3 do begin write ("Vvedite razmer",i, "masiva: "); readln(n); rad(n, zbroj, sr); (procedura poziva radi) writeln ("Summa elemenata = ",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, zbroj, sr. Procedura unosi elemente polja, izračunava zbroj i prosjek. Varijable s i s1 se vraćaju u glavni program, pa se ispred njihovog opisa stavlja servisna riječ var. Lokalni parametri mas, j vrijede samo u proceduri. Globalno - i, n, sum, sr dostupni su u cijelom programu.


Funkcije u Pascalu Skup ugrađenih funkcija u jeziku Pascal prilično je širok (ABS, SQR, TRUNC itd.). Ako je u program uključena neka nova, nestandardna funkcija, ona mora biti opisana u tekstu programa, nakon čega joj se može pristupiti iz programa. Funkciji se pristupa s desne strane operatora dodjele, označavajući naziv funkcije i stvarne parametre. Funkcija može imati vlastite lokalne konstante, tipove, varijable, procedure i funkcije. Opis funkcija u Pascalu sličan je opisu procedura.




Primjer 4. Napišite potprogramsku funkciju stupnja a x, gdje su a, x bilo koji brojevi. Upotrijebimo formulu: a x = e x ln programu p2; var f, b, s, t, c, d: stvarno; (globalne varijable) funkcija stp (a, x: real) : real; var y: pravi; ( lokalne varijable) begin y:= exp (x * ln (a)) ; stp:= y;(dodjeljivanje naziva funkcije rezultatu izračuna potprograma) end; (opis funkcije dovršen) begin d:= stp (2.4, 5); (izračunske snage 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 zasebna sintaktička struktura i opskrbljen imenom (neovisni programski blok), za rješavanje pojedinačnih problema. Opis procedure: procedure () (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 naredbe) := ; (obavezni parametar) End; Poziv postupka: (); Poziv funkcije: := (); 1. Na desnoj strani operatora dodjele. 2. U izrazu u uvjetu operatora grananja. 3. U postupku izlaza, kao rezultat funkcije. Opis potprograma Procedure


Rekurzivne procedure i funkcije u Pascalu mogu pozivati ​​same sebe, 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 stvara novi skup lokalnih varijabli. To jest, varijable koje se nalaze izvan pozvane funkcije se ne mijenjaju.


1 funkcija f (n: cijeli broj): cijeli broj; start if n = 1 then f:= 1 else f:= n * f (n -1); (funkcija f poziva samu sebe" title="Primjer 5. Napravite rekurzivnu funkciju koja izračunava faktorijel broja n na sljedeći način: n! = 1 ako je n= 1 n!= (n -1)! · n if n > 1 funkcija f (n: cijeli broj): cijeli broj; start if n = 1 then f:= 1 else f:= n * f (n -1); (funkcija f poziva samu sebe" class="link_thumb"> 19 !} Primjer 5. Napravite 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; start if n = 1 then f:= 1 else f:= n * f (n -1); (funkcija f poziva samu sebe) end; 1 funkcija f (n: cijeli broj): cijeli broj; start if n = 1 then f:= 1 else f:= n * f (n -1); (funkcija f poziva samu sebe"> 1 funkcija f (n: cijeli broj): cijeli broj; početak ako je n = 1 zatim f:= 1 inače f:= n * f (n -1); (funkcija f poziva samu sebe) kraj; " > 1 funkcija f (n: cijeli broj): cijeli broj; start if n = 1 then f:= 1 else f:= n * f (n -1); (funkcija f poziva samu sebe" title="Primjer 5 Stvorite 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; start if n = 1 then f:= 1 else f:= n * f (n -1); (funkcija f poziva samu sebe"> title="Primjer 5. Napravite 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; start if n = 1 then f:= 1 else f:= n * f (n -1); (funkcija f poziva samu sebe"> !}



Slajd 1

Slajd 3

Potprogrami: globalne i lokalne varijable Sve potprograme moraju biti opisane u odjeljku opisa. Svaki potprogram mora imati ime. Informacije između glavnog programa i potprograma prenose se globalnim parametrima (varijablama) koji djeluju u bilo kojem dijelu programa i imaju naziv opisan u glavnom programu. Lokalni parametri (varijable) mogu se koristiti unutar potprograma - njihova imena i vrijednosti imaju značenje samo unutar granica zadanog potprograma i nisu dostupni programu koji poziva

Slajd 4

Formalni i stvarni parametri U opisu potprograma parametri su označeni samo imenima pa se nazivaju formalni. Oni nemaju nikakvo značenje dok se ne pozove potprogram. Oni samo rezerviraju prostor za stvarne parametre, popravljajući njihov broj i vrstu podataka. Vrste stvarnih parametara: Parametri vrijednosti pokazuju koju vrijednost treba dodijeliti određenom parametru potprograma. Nakon što potprogram završi, oni preuzimaju svoje prethodne vrijednosti, čak i ako su promijenjeni u potprogramu. Varijabilni parametri u potprogramu zauzimaju mjesto formalnih, mogu promijeniti svoju vrijednost tijekom izvođenja potprograma i spremiti promjene pri izlasku iz potprograma (promjenjivim parametrima prethodi ključna riječ Var).

Slajd 5

Slajd 6

Opis postupka Program Pr1; Const...Tip...Var...Procedure(); Opisni dio Početak Tijelo postupka Kraj; Početi...(); ... kraj. Kada se pozove procedura, formalni parametri se zamjenjuju stvarnim.

Slajd 7

Postupak izračunavanja zbroja dva broja program pr1; Usescrt; Var a,b,s:stvarno; procedura summa(x,y:real;var z:real); početak z:=x+y; kraj; započeti clrscr; writeln("unesite a,b"); readln(a,b); suma(a,b,s); writeln(" zbroj 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 Varijabla parametra

Slajd 8

Slajd 9

Slajd 10

Izračunajte vrijednost izraza a:=(3n!+2m!)/(m+n)! Koju je vrstu varijabli prikladno koristiti za pronalaženje faktorijela? program pr2; Usescrt; Var m,n,x,y,z:cijeli broj; a:stvarno; procedura fact(d:cijeli broj;var q:cijeli broj); var i:cijeli broj; početak q:=1; za i:=1 do d do q:=q*i; kraj; započeti 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 s m= ",m:4," i n= ",n:4,"jednaka je",a:8:3); readln; kraj. N!=1·2·3·…· N

Slajd 11

Ulazni izlaz elemenata jednodimenzionalnog niza Funkcija Random(X) generira slučajni broj od 0 do X cjelobrojnog ili realnog tipa (prije poziva funkciju potrebno ju je inicijalizirati procedurom Randomize). Ako parametar X nije naveden, rezultat će biti tipa Real u rasponu od 0,0 do 1,0. Za dobivanje niza slučajnih cijelih brojeva iz raspona random(B-A+1)+A Zadatak: Formulirajte unos elemenata jednodimenzionalnog niza pomoću generatora slučajnih brojeva (raspon vrijednosti od -10 do 20) i izlaz elemenata kao postupak. Za A=-10 B=20 nasumično(20-(-10)+1)+(-10)

Slajd 12

Slajd 13

Slajd 14

Opis funkcije Funkcije su dizajnirane za izračunavanje samo jedne vrijednosti, 1. Stoga je prva razlika u tome što procedura može imati nove vrijednosti za nekoliko parametara, ali funkcija ima samo jednu (to će biti rezultat). 2. Druga razlika je u nazivu funkcije. Sastoji se od riječi FUNKCIJA, iza koje slijedi naziv funkcije, zatim popisa formalnih parametara u zagradama, nakon čega slijedi tip rezultata funkcije, odvojen dvotočkom. 3. Tijelo funkcije mora sadržavati barem jedan operator dodjele, pri čemu je naziv funkcije na lijevoj strani, a njena vrijednost na desnoj strani. Funkcija (): Opisni početak Tijelo funkcije:=; Kraj;

Slajd 15

Izračunajte vrijednost izraza a:=(3n!+2m!)/(m+n)! program fn2; Usescrt; Var m,n:cijeli broj; a:stvarno; funkcija fact(d:cijeli broj) :longint; var i:cijeli broj; q: longint; početak q:=1; za i:=1 do d do q:=q*i; činjenica:=q; kraj; započeti clrscr; writeln("unesite vrijednosti n, m"); readln(n,m); a:=(3*činjenica(n)+2*činjenica(m))/činjenica(m+n);; writeln("vrijednost izraza s m= ",m:4," i n= ",n:4,"jednaka je",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, a B>0, uneseni s tipkovnice. Sastaviti program zamjenom funkcije programom procedure pr2; Usescrt; Var a,b:cijeli broj; c:dužina; Funkcija stepen(x,y:integer):longint; var i:cijeli broj; s: longint; početak s:=1; za i:=1 do y napravite s:=s*x; korak:=s; kraj; započeti clrscr; writeln("unesite vrijednosti a, b"); readln(a,b); C:=korak(a,b); writeln("s=",s); readln; kraj.

Slajd 17

Slajd 18

Mehanizam za prosljeđivanje parametara funkcijama i procedurama Što će ispisati procedura, a što 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 Stanje C 24 5 8 Odgovor

Slajd 19

8. razred. Programiranje u ABC Pascalu

Učitelj informatike NIS-a Uralsk fizike i matematike Zelenov Boris Aleksandrovich


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

  • Razviti koncept procedura i funkcija u programskom jeziku.

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

Očekivani rezultati - deskriptori:

1. Poznaje definiciju "postupka"

2. Poznaje definiciju "funkcije"

3. Određuje stvarne i formalne parametre

4.Razlikuje vrijednosne i varijabilne parametre

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:


Iški bagdarlama

Potprogram

Postupak

Postupak

Parametarer

Korisne fraze:

Za prosljeđivanje varijabilnih vrijednosti proceduri (funkciji) koriste se stvarni parametri...

Da biste opisali postupak, prvo trebate..., zatim...


Pojam potprograma

Definicija

Potprogram- Ovo je zaseban funkcionalno samostalan dio programa.

Potprogrami

Postupci


  • eliminirati potrebu opetovanog ponavljanja sličnih fragmenata u tekstu programa;
  • poboljšati strukturu programa, čineći ga lakšim za razumijevanje;
  • povećati otpornost na programske pogreške i nepredviđene posljedice tijekom izmjena programa.

  • Nacrtajte ogradu pomoću programskog jezika

U ovom zadatku možete izraditi postupak koji će izvršiti algoritam za crtanje jednog fragmenta (ograda), a zatim se stalno pozivati ​​na ovaj postupak, mijenjajući početni položaj olovke


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

  • Oni su samostalni programski fragmenti, dizajnirani na poseban način i imaju svoje ime.

Interakcija između glavnog programa i potprograma



Blok dijagram

  • Blok poziva potprograma (procedure ili funkcije).

Naziv potprograma (procedure ili funkcije).


Blok dijagram


Opis postupka je sljedeći:

postupak naziv (popis formalnih parametara); odjeljak s opisima početi operateri kraj ;


Opis funkcije izgleda ovako:

funkcija ime(popis formalnih parametara): vrsta povrata;

odjeljak s opisima početi operateri kraj ;


Mjesto u programu

Program ...;

//Odjeljak opisa Koristi, Const, Var, ...

postupak A ;

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

postupak 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, pa se pozivanje funkcije može koristiti u odgovarajućim izrazima zajedno s varijablama i konstantama.

Postupci

Funkcije

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

Ima samo jedan rezultat, čiji se tip posebno navodi prilikom deklaracije 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 zasebna naredba koja se može koristiti neovisno

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

Tijelo funkcije mora sadržavati barem jedan operator dodjele s imenom funkcije na lijevoj strani.


b onda max:=a else max:=b; MaxBroj:= max; kraj;" širina="640"

Postupak ili funkcija?

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

var max: cijeli broj;

MaxBroj:= max;


b onda max:=a else max:=b; kraj;" širina="640"

Postupak ili funkcija?

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

if ab then max:=a else max:=b;


Postupak ili funkcija?

Promijeni boju(C1, C2: Riječ);

TextBackGround(C2)


Postupak ili funkcija?

Dodaj(X, Y: cijeli broj): cijeli broj;


Stvarno

  • Navedeno u odjeljku glavnog programa

Formalno

  • Navedeno u potprogramu
  • Navedeno u potprogramu

Proceduru poziva operator koji ima sljedeći format:

naziv procedure (popis stvarnih parametara);

  • Popis stvarnih parametara- ovo je njihov popis odvojen zarezima.

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

Prijenos parametara. Formalni parametri

Varijable

Vrijednosti

Parametri po vrijednosti

Formalni parametri

Varijable


Formalni parametri

Parametri po vrijednosti

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

Postupak

Naziv procedure (a, b: cijeli broj);

Glavni program

Prilikom promjene ovih vrijednosti tijekom izvođenja procedure (funkcije), izvorni podaci (stvarni parametri) ne mogu se promijeniti


Var c, d: cijeli broj;

  • Prilikom prolaska referencom, sve promjene koje se događaju u tijelu procedure (funkcije) s formalnim parametrima dovode do trenutnih sličnih promjena u odgovarajućim stvarnim parametrima.

Postupak

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

Glavni program

Promjene se događaju u varijablama pozivnog bloka, pa se izlazni parametri prosljeđuju referencom. Kada se pozovu, njihovi odgovarajući stvarni parametri mogu biti samo varijable.


Vi pišete:

1. Stvarni parametri ___________

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

2. Formalni parametri ___________

3. Formalni parametri-vrijednosti __________

5. Naziv postupka ___________

6. Pristup postupku iz programa _____________________


Interaktivni zadatak

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


Elvira je razrednica. Morat će napraviti plan generalnog čišćenja u učionici: ukloniti papire, zaliti cvijeće, oprati stolove, obrisati staklo. Kako može bolje organizirati svoj posao? Pomozite Elviri.


Elvirin napredni plan

Potprogrami:

Arsen - odlaže papire

Mila - zalijevanje cvijeća

Vitalij – pere stolove

Indira – briše staklo

1. Smaknuti Arsena

2. Trči Mila

3. Pogubi Vitalija

4. Pokreni Indiru

Kraj algoritma


  • Koje smo nove strukture programskih 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? (smisli svoje ime)
  • Što mislite da biste trebali naučiti u sljedećoj lekciji?

Nađimo se

sljedeća lekcija!

Svrha lekcije

obrazovni

  • formirati među učenicima jedinstvenu sustav pojmova vezano uz pojmove postupka i funkcije;
  • naučiti kako koristiti potprograme u rješavanju problema u Pascalu, a također naučiti razumjeti koja je vrsta potprograma potrebna pri rješavanju određenog problema;
  • pokazati osnovne tehnike korištenja potprograma;

obrazovni

  • njegovati točnost, pažnju, organiziranost;
  • kultura računalnih vještina;

razvijanje

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

Studenti moraju:

  • poznavati pravila za pisanje procedura bez parametara i s parametrima;
  • poznavati pravila pisanja funkcija;
  • moći primijeniti postupke i funkcije za rješavanje jednostavnih problema.

Tijekom nastave

I. Org. trenutak

II. Uvod. Relevantnost

Podijelite zadatak na papiriće ( Prilog 1 ). Pronađite ponavljanja.

Ponekad na različitim mjestima programa morate izvesti gotovo iste sekvence radnji s različitim početnim podacima. Takve sekvence radnji mogu se formalizirati u obliku tzv potprogrami (s engleskog, potprogram) – grupirajte operatore u blok kojem se može pristupiti imenom i više puta.

Potprogrami skraćuju tekst programa, značajno skraćuju vrijeme njihovog izvođenja i olakšavaju život programerima koji programe mogu kreirati modularno, odnosno sastavljanjem složenog programa od gotovih dijelova jednostavnijih komponenti. To omogućuje grupi programera da stvaraju velike programe, a grupi školaraca da razvijaju i implementiraju bilo kakve globalne projekte

Potprogrami se dijele na procedure i funkcije.

Ugrađeni (standardni) postupci i funkcije su dio jezik i može se zvati imenom bez prethodnog opisa. Na primjer , abs, sqrt, ln, sin... su funkcije (vraćaju rezultat), readln, write... su procedure (ne vraćaju rezultat). Njihova prisutnost uvelike olakšava razvoj aplikacijskih programa. Međutim, u većini slučajeva neki specifično za određeni program, akcije ne nalaze izravne analogije u Turbo Pascal bibliotekama, a zatim programer mora razviti vlastitu nestandardni procedure i funkcije.

III. Objašnjenje novog gradiva

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

Struktura procedure slijedi strukturu programa, to je "program u malom" - također je predstavljen zaglavljem i tijelom.

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

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

procedura Ime procedure;

//tijelo glavnog programa

Snima se poziv procedure za naknadno izvršenje u tijelu glavnog programa.

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

Prednosti potprograma:

  • Programi napisani pomoću potprograma lakše testirati i ispravljati pogreške, imaju jasniju logična struktura.
  • Neovisna priroda potprograma dopušta da se njihovo stvaranje povjeri različitim programerima. Na taj se način posao programiranja dijeli i time ubrzava njegov završetak;
  • Korištenje potprograma štedi memoriju. Memorija za pohranjivanje varijabli korištenih u potprogramu dodjeljuje se samo za vrijeme trajanja njegovog rada i oslobađa se čim njegovo izvršenje završi.

Primjer 2. Korisnik unosi dvije strane triju pravokutnika. Izvedite njihova područja.

Problem možete riješiti ovako:

za i:=1 do 3 učiniti

writeln('Unesite a i b:');

writeln('Područje=',a*b);

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

izračun

izračun

izračun

Tekstna 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 postupak treba pokazati 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. postojati formalni parametri , definiran u zaglavlju potprograma, i stvarni parametri – izrazi koji određuju određene vrijednosti prilikom pristupa potprogramu.

Procedura će se izvršiti ako je pozovete imenom i navedete stvarne parametre , odvojeni zarezima i zatvoreni u zagrade:

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

Dakle, glavni program:

za i:=1 do 3 učiniti

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

Kreirajmo postupak provjere:

pogreška procedure (f,g:cijeli broj);

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

writeln('stranice pravokutnika ne mogu biti negativne');

zaustaviti; // prekid programa

Konačni program – Dodatak 4

Dakle, format postupka:

Postupak<имя>(formalni parametri);

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

Primjer 3. Napišite program za zamjenu mjesta dva broja c=5 i d=7.

razmjena programaDan;

var c,d:cijeli broj;

procedura razmjene (a,b:cijeli broj);

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 stvarni (koji se koriste u glavnom programu) nisu se promijenili. Pogledajmo sliku koja prikazuje dio RAM-a:

1) pri pozivanju procedure obmen s dva parametra 5 i 7, brojevi 5 i 7 također se stavljaju u varijable a odnosno b:

3) ali u varijablama c i d podatak se nije promijenio, jer nalaze se u drugim memorijskim stanicama.

Da bi varijable c i d, a i b upućivali na iste memorijske ćelije (ako se promijene vrijednosti a i b, promijenit će se i vrijednosti c, d) pri opisivanju formalnih parametara potrebno je prije traženih varijabli dodati riječ VAR:

razmjena procedura (var a,b:integer);

Promijenite program obmenDan:

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

Primjer 4. Pronađite površinu kruga pomoću postupka koji samo izračunava, ali ne prikazuje rezultat na zaslonu.

kružnica postupka(r:stvarno);

Postupak bi trebao vratiti rezultat:

kružnica postupka (r:real; var S:real);

readln(a, e);

Komentar: Varijabla u proceduri S koristi se za vraćanje rezultata procedure u glavni program. Kada se promijeni, mijenja se i stvarni parametar u pozivnom 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 programu prenosi rezultat svoga rada - jednu vrijednost čiji je nositelj naziv njezine funkcije.
  • Naziv funkcije može se pojaviti u izrazu kao operand. Funkcija vraća rezultat na točku svog poziva.

Na primjer, sqr(x) – kvadrirat će vrijednost x i vratiti izračunatu vrijednost kvadrata broja x u pozivnu točku: y:=sqr(x);

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

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

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

Odjeljak izjave mora sadržavati barem jednu izjavu koja dodjeljuje vrijednost nazivu funkcije. Rezultat posljednjeg dodjeljivanja vraća se na pozivnu točku.

Primjer 5. Ponovimo problem o površini kruga.

funkcijski krug (r:real): pravi;

a:=krug(5); (MORA se dodijeliti)

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

Koristimo funkciju pronalaženja faktorijela jer ga unosimo kao ulaz i dobivamo rezultat.

funkcija fact (a:integer): cijeli broj;

za i:=1 učiniti

U retku činjenica:=činjenica*I;

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

faktorijel programa;

var sum,n,j: cijeli broj;

funkcija fact (a: integer): cijeli broj;

var i,d: cijeli broj;

za i:=1 učiniti

za j:=1 do n učiniti

zbroj:=zbroj+činjenica(j);

IV. Sažetak lekcije

U ovom trenutku se proces programiranja pretvara u industrijska proizvodnja softvera temeljen tehnologije programiranja. Većina stručnjaka je mišljenja da top-down metoda projektiranja programa najprikladniji za rješavanje složenih problema. Prvo se općenito definira zadatak, a zatim se postupno pojašnjava njegova struktura. U sljedećem koraku, svaki podzadatak se pak dijeli na nekoliko drugih. Rješenje zasebnog fragmenta složenog problema je neovisni programski blok - potprogram.

V. Domaća zadaća

Riješite zadatke (pismeno):

  1. Napravite proceduru koja sva slova a u unesenom nizu zamjenjuje 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.)