Postopki in funkcije v Pascalu. Rekurzija. Podprogrami Pogosto naloga zahteva, da ponovite določeno zaporedje stavkov v različnih delih programa. Postopki in funkcije Predstavitev postopkov in funkcij

Rekurzija v Pascalu Učitelj: Tlekhurai Yu.V. Mestna izobraževalna ustanova "Licej št. 8" Kaj vidite na slikah? Ta pojav v umetnosti se imenuje rekurzija "Da bi razumeli rekurzijo, jo morate najprej razumeti." rekurzija - delna definicija objekta skozi samega sebe, definicija objekta z uporabo predhodno definiranih. Znanstveno povedano: Rekurzija - metoda definiranja razreda objektov ali metod tako, da se najprej določi eden ali več (običajno preprostih) njegovih osnovnih primerov ali metod, nato pa se na njihovi podlagi določijo pravila za konstrukcijo definiranega razreda. Peter Deutsch Peter Deutsch

Človeška ponovitev.

Rekurzija je od Boga.

Rekurzija v fiziki Rekurzija v jeziku in literaturi Klasičen primer neskončne rekurzije je dve ogledali, postavljeni drug nasproti drugega: v njih iz bledečih odsevov ogledal nastaneta dva hodnika. Drug primer neskončne rekurzije je učinek samovzburjenja (pozitiven povratne informacije) y elektronska vezja dobiček, ko signal iz izhoda doseže vhod, se ojača, ponovno doseže vhod vezja in se ponovno ojača. Ojačevalniki, za katere je ta način delovanja standardni, se imenujejo samooscilatorji. Primer rekurzivnega slovarskega stavka: "Duhovnik je imel psa ..." - tipična rekurzija Več zgodb Stanislawa Lema je posvečenih incidentom z neskončno rekurzijo: zgodba o grobnicah ("Zvezdni dnevniki Janeza Tihega"), v katerem junak zaporedno preide iz članka o sepulkah v članek o sepulaciji , od tam pa v članek o sepulkariji, ki spet vsebuje sklicevanje na člen “sepulcaria”. Zgodba o inteligentnem stroju, ki je imel dovolj pameti in lenobe, da je zgradil podobnega za rešitev danega problema in mu zaupal rešitev (rezultat je bila neskončna rekurzija, ko je vsak nov avto zgradila sebi podobno in ji predal nalogo). Rekurzija v programiranju je način organiziranja računalniškega procesa, v katerem se postopek ali funkcija sklicuje nase med izvajanjem svojih sestavnih operaterjev. Da takšen klic ne bi bil neskončen, mora besedilo podprograma vsebovati pogoj, ob doseganju katerega ne pride do nadaljnjega klica. tako je lahko rekurzivni klic vključen le v eno od vej podprograma. Primer. Izračun faktoriala naravnega števila Ustvarite rekurzivno funkcijo, ki izračuna faktorial števila n na naslednji način: funkcija f (n: celo število): longint; začeti če je n = 1 potem f:= 1 sicer f:= n * f(n -1); (funkcija f pokliče samo sebe) konec programa Pascal z uporabo rekurzije: Var n: celo število; a: longint; funkcija faktorial (n: celo število): longint; začni, če je n = 1, potem faktorial:= 1 drugače faktorial:= n * faktorial (n -1); Konec; Začni pisanje ('n='); Readln(n); A:= faktoriel(n); Write('n!=',a); Readln; konec. Leonardo iz Pise Fibonacci

Fibonaccijeva števila so elementi številskega zaporedja

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..., pri katerih je vsako naslednje število enako vsoti prejšnjih dveh.

Naloga: Prikaži niz Fibonaccijevih števil, sestavljen iz n elementov. Opis spremenljivk: n – število elementov serije; a, b - vrednosti zadnjih dveh elementov serije; c – spremenljivka medpomnilnika (»rezervna«); i – števec. Algoritem za rešitev problema: 1. Pridobite vrednost n. 2. Dodelite a in b vrednosti 0 oziroma 1 (to so prve številke Fibonaccijeve serije). Prikažite jih na zaslonu. 3. Začenši od 3. elementa do n: a) prikaži vsoto a in b, b) shrani vrednost spremenljivke b v c, c) zapiši vsoto a in b v b, d) dodeli vrednost c do a. Program Pascal z uporabo iteracije: program Fibonacci; var a,b,c,i,n: celo število; začeti napiši ("n = "); readln(n); a:= 0; Napiši a," "); b:= 1; napiši (b," "); za i:=3 do n začni zapiši(a+b," "); c:= b; b:= a + b; a:=c; konec; readln; konec. Program Pascal z uporabo rekurzije: Rekurzivna definicija za izračun Fibonaccijevih števil je naslednja: To definicijo Fibonaccijevih števil je mogoče zlahka pretvoriti v rekurzivno funkcijo: function f(n: Integer) : longint; začeti Če 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 in b.če A= b, nato vozlišče ( A,b)=a.če A>b, nato vozlišče ( A,b)= vozlišče ( a -b,b).če A< b, nato vozlišče ( A,b)= vozlišče ( 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; začetek pisanja ('a='); readln(a); write('b='); readln(b); A:= prikimavanje(a,b); write('nod=',a); readln; konec. Težava glede Hanojskih stolpov. V tem primeru je treba strogo upoštevati naslednja pravila:

  • Hkrati lahko premaknete le en disk;
  • večjega diska ni mogoče namestiti manjši disk;
  • odstranjeni disk morate namestiti na kateri koli zatič, preden odstranite drugi disk.
  • Pridni budistični menihi podnevi in ​​ponoči nosijo diske od zvonika do vrha. Legenda pravi, da bo konec sveta, ko bodo menihi končali svoje delo. Lahko bi izračunali, da bi reševanje problema s 64 diski zahtevalo 264–1 potez. Kar se tiče konca sveta, bo do tega prišlo čez pet milijard stoletij, če upoštevamo, da se en disk premakne v eni sekundi. Vendar pa je tako problem kot legendo zanj leta 1883 izumil matematik Edouard Lucas s kolidža Saint-Louis.

Eden od treh diamantnih zvonikov nosi 64 okroglih zlatih kolutov. Diski imajo različne radije in so nameščeni na konici v padajočem vrstnem redu radijev od baze do vrha. Diske je potrebno prenesti s prvega kroga na drugega, po potrebi s tretjim krogom.

Naloga. Ustvarite rekurziven program, ki bi rešil zgoraj zastavljen problem o Hanojskih stolpih s številom diskov enakim n (n = 1, 2, ...). rešitev. Vnesimo imena za zvonike: a, b, c. Pustiti hanoj (n,a,b,c)- zahtevana funkcija, ki vrne zaporedje premikov diskov z a na b uporabo c po zgoraj opisanih pravilih. Ko je n=1, vemo, kako rešiti problem. Izvesti morate le operacijo »premakniti«. a na b" Predpostavimo, da lahko rešimo ta problem za n – 1 diskov. Premakni n–1 disk iz a na z. Nato premaknite preostali disk iz a na b in končno premaknite n–1 disk iz c na b. Vhodni podatki: število diskov na klinu a; Izhod: zaporedje; Korak0:(določite vrsto spremenljivke); 1. korak: (opis postopka hanoi, ki prikazuje zaporedje dejanj); Korak 1.1: (premakni (n-1) diskov s klina a na klin b); Korak1.2:(premaknite n-ti disk iz a v c); Korak 1.3: (premakni (n-1) disk iz b v c); (koraki 1.2-1.3 se izvajajo rekurzivno); 2. korak: (glavni program); Korak2.1:(vnesite število diskov); Korak 2.2: (priklic postopka hanoi). Reševanje problema v programu Pascal Program bahnya; var n: celo število; a,b,c: char; postopek hanoi(n: celo število;a,b,c: char); začni, če je n>0, začni 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; konec. Domača naloga Napiši program za izračun stopnje z naravnim eksponent Podano: stopnja osnove X Eksponent Za Če je k=0, potem stopinja(k,x)=1, Sicer stopnja(k,x)= x·stopnja(k-1,x) Programski stepen; var y: resnično; n:celo število; korak funkcije (k:celo število, x:real): real; začetek If k = 0 Then step:= 1 else step:= x * step(k-1,x) End; begin write(‘vvedite osnovanie stopnje x=’); readln(y); write(‘vvedite kazalnik stopnje k=’); Readln(n); write(‘x v stopnji k=’,step(n,y)); readln; konec. Samostojno delo

  • Poiščite vsoto števk števila
  • Ugotovi, ali je dano naravno število praštevilo
  • Poiščite prvo števko števila
  • Pretvori naravno število iz decimalnih s.s. v dvojiško
  • Poiščite vsoto elementov niza celih števil, sestavljenega iz 20 elementov
  • Zamenjajte vrednosti dveh celih števil
  • Naročite vrednosti treh spremenljivk a, b, c v naraščajočem vrstnem redu
  • Poiščite število števk v naravno število n
  • Poiščite največje od treh danih števil
  • Poiščite število pozitivnih števil med štirimi A, B, C, D
Odgovori za samostojno delo št. 2 Program preprost; var n, m, s: celo število; funkcija prost(m, n:celo število): boolean; begin If n = m Then prost:= true else prost:= (n mod m<>0) in prost (m+1, n); Konec; začetek pisanja ('n='); Readln(n); M:=2; Če prost(m,n), potem pišite (n,'prostoechislo') Drugače pišite (n,'sostavnoe'); readln; konec.

prevajanje programov;

postopek dvd(n:longint);

Če je n >1, potem dvd (n div 2);

pisanje (n mod 2);

Podprogrami Pogosto naloga zahteva, da ponovite določeno zaporedje stavkov v različnih delih programa. Da bi to zaporedje opisali enkrat in ga uporabili večkrat, programski jeziki uporabljajo podprograme. Podprogram je posebej zasnovan blok programa za njegovo kasnejšo večkratno uporabo v glavnem programu.Uporaba podprogramov vam omogoča izvajanje ene najsodobnejših metod programiranja - strukturirano programiranje


Podprogrami rešujejo tri pomembne težave, ki zelo olajšajo programiranje: 1. odpravijo potrebo po večkratnem ponavljanju podobnih fragmentov v besedilu programa, tj. zmanjšajte velikost programa; 2. bo izboljšal strukturo programa, kar bo olajšalo razumevanje pri razčlenjevanju; 3.zmanjšajte verjetnost napak, povečajte odpornost na programske napake in nepredvidene posledice med spreminjanjem.


Postopki in funkcije V Pascalu obstajata dve vrsti podprogramov: postopek (PROCEDURE) in funkcija (FUNCTION). Postopki in funkcije v Pascalu so deklarirani v razdelku za deklaracije za odsekom spremenljivk. ProgramProgramName; VAR ... // razdelek za opis spremenljivk glavnega programa; procedura ProcedureName; var ... začetek ... // Konec telesa postopka; začetek //telo glavnega programa konec.


Funkcije in postopki imajo parametre (spremenljivke, ki posredujejo vrednost). So dveh vrst: 1) Formalni - tisti, ki so v opisu podprograma 2) Dejanski - tisti, ki so preneseni iz glavnega programa v funkcijo ali proceduro. Dejanski parametri morajo ustrezati formalnim po količini, vrstnem redu in vrsti.




Postopki Postopki se uporabljajo, ko mora podprogram pridobiti več rezultatov. V Pascalu obstajata dve vrsti postopkov: postopki s parametri in postopki brez parametrov. Do postopka dostopamo z imenom postopka, ki mu lahko sledijo dejanski parametri. Ko je postopek poklican, se med dejanskimi in formalnimi parametri vzpostavi ujemanje ena proti ena, nato pa se nadzor prenese na postopek. Po izvedbi postopka se nadzor prenese na naslednjega operaterja klicnega programa po priklicu postopka.


Primer 1: Postopek brez parametrov, ki natisne niz 60 zvezdic. postopek pr; var i: celo število; začetek za i:=1 do 60 do write (* "); writeln; konec; začetek pr; konec.


Primer 2. Izdelajte program za zamenjavo dveh števil c=5 in d=7 program obmenDan; var c,d:celo število; izmenjava postopkov (a,b:celo število); var m:celo število; začetek m:=a; a:=b; b:=m; writeln(a,b); konec; begin writeln("Vnesite 2 številki: "); readln(c,d); izmenjava(c,d); writeln(c," ",d); konec. c5 d 7 a 5 b 7 1) pri klicu postopka obmen z dvema parametroma 5 in 7 sta enaki številki 5 in 7 postavljeni v spremenljivki a oziroma b: 2) nato v postopku vrednosti pomnilniških celic a in b sta preurejena: c5 d 7 a 7 b 5 3) v spremenljivkah c in d pa se podatki niso spremenili, ker so v drugih spominskih celicah


Da bi se spremenljivki c in d, a in b nanašali na iste pomnilniške celice (če se spremenita vrednosti a in b, se spremenita tudi vrednosti c, d), je pri opisovanju formalnih parametrov je potrebno dodati besedo VAR pred zahtevanimi spremenljivkami: procedure exchange (var a,b:integer); s5 d 7 a b


Primer 3. Podani so 3 različni nizi celih števil (velikost vsakega ne presega 15). V vsakem nizu poiščite vsoto elementov in aritmetično sredino. program proc; var i, n, vsota: celo število; sr: pravi; delo postopka (r:celo število; var s:celo število; var s1:real); var mas: niz celih števil; j:celo število; začetek s:=0; za j:=1 do r začni brati (mas[j]); s:=s+mas[j]; konec; s1:=s/r; konec;


(glavni program) begin for i:=1 to 3 do begin write ("Vvedite razmer",i, "masiva: "); readln(n); delo(n, vsota, sr); (delovanje postopka klica) writeln ("Summa elementov = ",sum); writeln("Srednearifmeticheskoe = ",sr:4:1); konec; konec.


Rezultat programa: Program trikrat prikliče delovno proceduro, v kateri se formalne spremenljivke r, s, s1 zamenjajo z dejanskimi n, vsota, sr. Postopek vnese elemente polja, izračuna vsoto in povprečje. Spremenljivki s in s1 se vrneta v glavni program, zato je pred njunim opisom postavljena servisna beseda var. Lokalni parametri mas, j so veljavni samo v postopku. Globalno - i, n, vsota, sr so na voljo v celotnem programu.


Funkcije v Pascalu Nabor vgrajenih funkcij v jeziku Pascal je precej širok (ABS, SQR, TRUNC itd.). Če je v program vključena nova, nestandardna funkcija, mora biti opisana v besedilu programa, nato pa je dostopna iz programa. Funkcija je dostopna na desni strani operatorja dodelitve, ki označuje ime funkcije in dejanske parametre. Funkcija ima lahko svoje lokalne konstante, vrste, spremenljivke, postopke in funkcije. Opis funkcij v Pascalu je podoben opisu postopkov.




Primer 4. Napišite podprogramsko funkcijo stopnje a x, kjer sta a, x poljubna števila. Uporabimo formulo: a x = e x ln programu p2; var f, b, s, t, c, d: resnično; (globalne spremenljivke) funkcija stp (a, x: realno) : realno; var y: resnično; ( lokalne spremenljivke) begin y:= exp (x * ln (a)) ; stp:= y;(dodelitev imena funkcije rezultatu podprogramskih izračunov) end; (opis funkcije končan) begin d:= stp (2.4, 5); (izračun potenc različnih števil in spremenljivk) writeln (d, stp (5,3.5)); branje (f, b, s, t); c:= stp (f, s)+stp (b, t); writeln(c); konec.


Funkcije Podprogram je del programa, zasnovan kot samostojna sintaktična struktura in opremljen z imenom (samostojen programski blok), za reševanje posameznih problemov. Opis postopka: procedure () (odsek za izvajanje lokalnih imen) Begin (odsek za izvajanje operatorjev) End; Opis funkcije: funkcija (): vrsta; (oddelek za opis lokalnih imen) Begin (odsek za izvedljive stavke) := ; (zahtevan parameter) End; Klic postopka: (); Klic funkcije: := (); 1. Na desni strani operatorja dodelitve. 2. V izrazu v pogoju operatorja razvejanja. 3. V izhodnem postopku, kot rezultat funkcije. Opis podprogramov Postopki


Rekurzijski postopki in funkcije v Pascalu lahko kličejo same sebe, tj. imajo lastnost rekurzivnosti. Rekurzivna funkcija mora nujno vsebovati pogoj za konec rekurzivnosti, da ne povzroči zanke programa. Vsak rekurziven klic ustvari nov niz lokalnih spremenljivk. To pomeni, da se spremenljivke, ki se nahajajo zunaj klicane funkcije, ne spremenijo.


1 funkcija f (n: celo število): celo število; začeti če je n = 1 potem f:= 1 sicer f:= n * f (n -1); (funkcija f kliče samo sebe" title="Primer 5. Ustvarite rekurzivno funkcijo, ki izračuna faktoriel števila n na naslednji način: n! = 1, če je n= 1 n!= (n -1)! · n če je n > 1 funkcija f (n: celo število): celo število; začetek če je n = 1 potem f:= 1 sicer f:= n * f (n -1); (funkcija f pokliče samo sebe" class="link_thumb"> 19 !} Primer 5. Ustvarite rekurzivno funkcijo, ki izračuna faktorijel števila n na naslednji način: n! = 1, če je n= 1 n!= (n -1)! · n če je n > 1 funkcija f (n: celo število): celo število; začeti če je n = 1 potem f:= 1 sicer f:= n * f (n -1); (funkcija f pokliče samo sebe) end; 1 funkcija f (n: celo število): celo število; začeti če je n = 1 potem f:= 1 sicer f:= n * f (n -1); (funkcija f pokliče samo sebe"> 1 funkcija f (n: celo število): celo število; začetek, če je n = 1, potem f:= 1 sicer f:= n * f (n -1); (funkcija f pokliče samo sebe) konec; " > 1 funkcija f (n: celo število): celo število; začni, če je n = 1, nato f:= 1 sicer f:= n * f (n -1); (funkcija f pokliče samo sebe" title="Primer 5 Ustvarite rekurzivno funkcijo, ki izračuna faktorijel števila n na naslednji način: n!= 1, če je n= 1 n!= (n -1)!n, če je n > 1 funkcija f (n: celo število): celo število; začni, če je n = 1, potem f:= 1 sicer f:= n * f (n -1); (funkcija f pokliče samo sebe"> title="Primer 5. Ustvarite rekurzivno funkcijo, ki izračuna faktorijel števila n na naslednji način: n! = 1, če je n= 1 n!= (n -1)! · n če je n > 1 funkcija f (n: celo število): celo število; začeti če je n = 1 potem f:= 1 sicer f:= n * f (n -1); (funkcija f kliče samo sebe"> !}



Diapozitiv 1

Diapozitiv 3

Podprogrami: globalne in lokalne spremenljivke Vse podprograme je treba opisati v razdelku z opisom. Vsak podprogram mora imeti ime. Informacije med glavnim programom in podprogrami se prenašajo z globalnimi parametri (spremenljivkami), ki delujejo v kateremkoli delu programa in imajo ime, opisano v glavnem programu. Lokalne parametre (spremenljivke) je mogoče uporabiti znotraj podprograma - njihova imena in vrednosti imajo pomen samo znotraj meja danega podprograma in niso na voljo klicnemu programu

Diapozitiv 4

Formalni in dejanski parametri Pri opisu podprogramov so parametri označeni samo z imeni, zato jih imenujemo formalni. Nimajo pomena, dokler ni priklican podprogram. Rezervirajo le prostor za dejanske parametre, določijo njihovo število in vrsto podatkov. Vrste dejanskih parametrov: Parametri vrednosti kažejo, katero vrednost je treba dodeliti določenemu parametru podprograma. Po koncu podprograma prevzamejo prejšnje vrednosti, tudi če so bile spremenjene v podprogramu. Spremenljivi parametri v podprogramu prevzamejo mesto formalnih, lahko spremenijo svojo vrednost med izvajanjem podprograma in shranijo spremembe ob izhodu iz podprograma (pred spremenljivimi parametri je ključna beseda Var).

Diapozitiv 5

Diapozitiv 6

Opis postopka Program Pr1; Const...Type...Var...Procedure(); Opisni del Začetek Telo postopka Konec; Začeti...(); ... konec. Ko je postopek poklican, se formalni parametri zamenjajo z dejanskimi.

Diapozitiv 7

Postopek izračuna vsote dveh števil program pr1; Usescrt; Var. a,b,s:real; procedura summa(x,y:real;var z:real); začetek z:=x+y; konec; začeti clrscr; writeln("vnesite a,b"); readln(a,b); vsota(a,b,s); writeln(" vsota števil ",a:3:1," in ",b:3:1," = ",s:3:1); readln; konec. x,y,z – formalni parametri, lokalno spremenljivke a,b,s– globalne spremenljivke a,b,s – dejanski parametri x y z a b s Parametri vrednosti Parameter spremenljivka

Diapozitiv 8

Diapozitiv 9

Diapozitiv 10

Izračunajte vrednost izraza a:=(3n!+2m!)/(m+n)! Kakšno vrsto spremenljivk je primerno uporabiti za iskanje faktoriala? program pr2; Usescrt; Var m,n,x,y,z:celo število; a: resnično; postopek fact(d:integer;var q:integer); var i:celo število; začetek q:=1; za i:=1 do d naredite q:=q*i; konec; začeti clrscr; writeln("vnesite vrednosti n, m"); readln(n,m); dejstvo(n,x); dejstvo(m,y); dejstvo(m+n,z); a:=(3*x+2*y)/z; writeln("vrednost izraza z m= ",m:4," in n= ",n:4,"je enaka",a:8:3); readln; konec. N!=1·2·3·…· N

Diapozitiv 11

Vhodni izhod elementov enodimenzionalne matrike Funkcija Random(X) generira naključno število od 0 do X celega ali realnega tipa (pred klicem funkcije jo moramo inicializirati s proceduro Randomize). Če parameter X ni podan, bo rezultat tipa Real v območju od 0,0 do 1,0. Za pridobitev matrike naključnih celih števil iz obsega random(B-A+1)+A Naloga: Formulirajte vnos elementov enodimenzionalne matrike z uporabo generatorja naključnih števil (razpon vrednosti od -10 do 20) in izhod elementov kot postopek. Za A=-10 B=20 naključno(20-(-10)+1)+(-10)

Diapozitiv 12

Diapozitiv 13

Diapozitiv 14

Opis funkcije Funkcije so zasnovane za izračun samo ene vrednosti, 1. Zato je njena prva razlika v tem, da ima postopek lahko nove vrednosti za več parametrov, funkcija pa ima samo eno (to bo rezultat). 2. Druga razlika je v nazivu funkcije. Sestavljen je iz besede FUNKCIJA, ki ji sledi ime funkcije, nato seznam formalnih parametrov v oklepajih, ki ji sledi vrsta rezultata funkcije, ločena z dvopičjem. 3. Telo funkcije mora vsebovati vsaj en operator dodelitve, pri čemer je na levi strani ime funkcije, na desni pa njena vrednost. Funkcija (): opisni začetek Telo funkcije:=; Konec;

Diapozitiv 15

Izračunajte vrednost izraza a:=(3n!+2m!)/(m+n)! program fn2; Usescrt; Var m,n:celo število; a: resnično; funkcija fact(d:integer) :longint; var i:celo število; q:dolžina; začetek q:=1; za i:=1 do d naredite q:=q*i; dejstvo:=q; konec; začeti clrscr; writeln("vnesite vrednosti n, m"); readln(n,m); a:=(3*dejstvo(n)+2*dejstvo(m))/dejstvo(m+n);; writeln("vrednost izraza z m= ",m:4," in n= ",n:4,"je enaka",a:8:3); readln; konec.

Diapozitiv 16

Ustvarite program, ki bo našel ab, to je b-to potenco števila A, kjer sta A in B celi števili in B>0, vnesena s tipkovnice. Sestavite program tako, da funkcijo zamenjate s programom procedure pr2; Usescrt; Var. a,b:celo število; c:dolžina; Funkcija stepen(x,y:integer):longint; var i:celo število; s:dolžina; začetek s:=1; za i:=1 do y naredi s:=s*x; korak:=s; konec; začeti clrscr; writeln("vnesite vrednosti a, b"); readln(a,b); C:=korak(a,b); writeln("s=",s); readln; konec.

Diapozitiv 17

Diapozitiv 18

Mehanizem za posredovanje parametrov funkcijam in proceduram Kaj bo natisnila procedura in kaj program? Globalne spremenljivke Lokalne spremenljivke a b 3 3 -3 Naslov c a b c 48 Naslov c A:=b+3 B:=3*a C:=a+b Stanje C 24 5 8 Odgovor

Diapozitiv 19

8. razred. Programiranje v ABC Pascal

Učitelj informatike fizike in matematike NIS Uralsk Zelenov Boris Aleksandrovič


  • Učenci uporabljajo postopke in funkcije za reševanje problemov
  • Učenci se naučijo reševati velike probleme tako, da jih razdelijo na manjše

  • Razviti koncept postopkov in funkcij v programskem jeziku.

  • Študent pozna pojma »postopki« in »funkcije«, določi formalne in dejanske parametre

Pričakovani rezultati – deskriptorji:

1. Pozna definicijo "postopka"

2. Pozna definicijo "funkcije"

3. Določa dejanske in formalne parametre

4. Razlikuje med vrednostnimi in spremenljivimi parametri

5. Najde klic procedure ali funkcije v programsko kodo



Elvirin standardni načrt

1. Odstranite papirje

2. Zalijte rože

3. Pomijte mize

4. Obrišite steklo

Konec algoritma

Kako izboljšati organizacijo tega procesa?




Tema lekcije

Podprogrami:


Ishki bagdarlama

Podprogram

Postopek

Postopek

Parameterler

Uporabne fraze:

Za prenos spremenljivih vrednosti v proceduro (funkcijo) se uporabljajo dejanski parametri ...

Za opis postopka morate najprej ..., nato ...


Koncept podprograma

Opredelitev

Podprogram- To je ločen funkcionalno neodvisen del programa.

Podprogrami

Postopki


  • odpraviti potrebo po večkratnem ponavljanju podobnih fragmentov v besedilu programa;
  • izboljšati strukturo programa, zaradi česar je lažje razumljiv;
  • povečati odpornost na programske napake in nepredvidene posledice med spreminjanjem programa.

  • Narišite ograjo s pomočjo programskega jezika

V tej nalogi lahko ustvarite postopek, ki bo izvedel algoritem za risanje enega fragmenta (ograja), nato pa se nenehno sklicujte na ta postopek in spremenite začetni položaj peresa


  • Opišite, kako učinkovito narisati božično drevo v programskem okolju

  • So samostojni programski fragmenti, oblikovani na poseben način in imajo svoje ime.

Interakcija med glavnim programom in podprogramom



Blok diagram

  • Klicni blok podprograma (postopka ali funkcije).

Ime podprograma (postopka ali funkcije).


Blok diagram


Opis postopka je naslednji:

postopek ime (seznam formalnih parametrov); razdelek z opisi začeti operaterji konec ;


Opis funkcije izgleda takole:

funkcijo ime (seznam formalnih parametrov): povratni tip;

razdelek z opisi začeti operaterji konec ;


Lokacija v programu

Program ...;

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

postopek A ;

začeti ....... konec ;

postopek B ;

začeti ........ konec ;

Funkcija C ;

začeti ........ konec ;

//Glavni program

začeti ........ konec .


  • Razlika med funkcijo in proceduro je v tem, da je rezultat izvajanja operatorjev, ki tvorijo telo funkcije, vedno ena sama vrednost, zato je mogoče klicanje funkcije uporabiti v ustreznih izrazih skupaj s spremenljivkami in konstantami.

Postopki

Funkcije

Ima lahko več rezultatov ali izvede neko dejanje

Ima samo en rezultat, katerega tip je posebej določen pri deklaraciji funkcije.

Rezultati so lahko vrednosti katere koli vrste - nizi, nizi, števila itd.

Rezultat je lahko le vrednost tipa real, integer ali char.

Ukaz za klic procedure je ločen ukaz, ki ga je mogoče uporabiti neodvisno

Klic funkcije je mogoče uporabiti samo kot komponento izraza ustreznega tipa.

Telo funkcije mora vsebovati vsaj en operator dodelitve z imenom funkcije na levi strani.


b nato max:=a else max:=b; MaxNumber:= max; konec;" širina="640"

Postopek ali funkcija?

MaxNumber(a,b: celo število): celo število;

var max: celo število;

MaxNumber:= max;


b nato max:=a else max:=b; konec;" širina="640"

Postopek ali funkcija?

MaxNumber(a,b: celo število; var max: celo število);

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


Postopek ali funkcija?

Spremeni barvo (C1, C2: Beseda);

TextBackGround(C2)


Postopek ali funkcija?

Dodaj(X, Y: Celo število): Celo število;


Dejansko

  • Navedeno v razdelku glavnega programa

Formalno

  • Določeno v podprogramu
  • Določeno v podprogramu

Postopek kliče operater v naslednji obliki:

ime postopka (seznam dejanskih parametrov);

  • Seznam dejanskih parametrov- to je njihov seznam, ločen z vejicami.

  • V standardu jezika Pascal lahko parametre posredujemo na dva načina - po vrednosti in po sklicu. Pokličejo se parametri, posredovani z vrednostjo parametri-vrednosti, posredovano s sklicevanjem - parametri-spremenljivke. Slednji se razlikujejo po tem, da je v glavi procedure (funkcije) pred njimi službena beseda var.

Posredovanje parametrov. Formalni parametri

Spremenljivke

Vrednote

Parametri po vrednosti

Formalni parametri

Spremenljivke


Formalni parametri

Parametri po vrednosti

  • Pri prvi metodi (prehajanje po vrednosti) se vrednosti dejanskih parametrov kopirajo v ustrezne formalne parametre.

Postopek

Ime postopka (a, b: celo število);

Glavni program

Pri spreminjanju teh vrednosti med izvajanjem postopka (funkcije) se prvotni podatki (dejanski parametri) ne morejo spremeniti


Var c, d: celo število;

  • Pri prehodu s sklicevanjem vse spremembe, ki se zgodijo v telesu postopka (funkcije) s formalnimi parametri, povzročijo takojšnje podobne spremembe v ustreznih dejanskih parametrih.

Postopek

Ime postopka (a, b: celo število, Var c: realno);

Glavni program

Spremembe se zgodijo v spremenljivkah klicnega bloka, zato se izhodni parametri posredujejo po sklicu. Pri klicu so lahko njihovi ustrezni dejanski parametri le spremenljivke.


Pišete:

1. Dejanski parametri ___________

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

2. Formalni parametri ___________

3. Formalni parametri-vrednosti ​​__________

5. Ime postopka ___________

6. Dostop do postopka iz programa _____________________


Interaktivna naloga

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


Elvira je vodja razreda. Narediti bo morala načrt za generalno čiščenje učilnice: odstraniti papirje, zaliti rože, pomiti mize, obrisati steklo. Kako lahko bolje organizira svoje delo? Pomagaj Elviri.


Elvirin napredni načrt

Podprogrami:

Arsen - pospravi papirje

Mila - zalivanje rož

Vitaly – pomiva pisalne mize

Indira – brisanje stekla

1. Usmrtite Arsena

2. Teci Mila

3. Usmrtite Vitalija

4. Zaženite Indiro

Konec algoritma


  • Katere nove strukture programskega jezika smo spoznali danes?
  • Poimenujte proučevane parametre
  • Kako se parametri posredujejo proceduri?

  • Povzetek lekcije
  • Poiščite definicije: “Lokalne spremenljivke” in “Globalne spremenljivke”
  • Sestavite dve nalogi, v katerih lahko uporabite procedure ali funkcije.

  • Kako bi določili temo lekcije? (izmisli si svoje ime)
  • Kaj misliš, da bi se moral naučiti v naslednji lekciji?

Spoznajva se

naslednja lekcija!

Namen lekcije

izobraževalni

  • oblikovati med učenci enotno sistem pojmov povezana s konceptoma postopka in funkcije;
  • naučiti, kako uporabljati podprograme pri reševanju problemov v Pascalu, in tudi naučiti razumeti, kakšen tip podprograma je potreben pri reševanju določenega problema;
  • pokazati osnovne tehnike uporabe podprogramov;

izobraževalni

  • gojiti natančnost, pozornost, organiziranost;
  • kultura računalniških veščin;

razvoju

  • razvijati logično mišljenje, algoritmično kulturo učencev;
  • razvijati znanje in spretnosti za sestavljanje in odpravljanje napak v podprogramih v Pascalu.

Študenti morajo:

  • poznati pravila za pisanje postopkov brez parametrov in s parametri;
  • poznati pravila pisanja funkcij;
  • znati uporabiti postopke in funkcije za reševanje preprostih problemov.

Med poukom

I. Org. trenutek

II. Uvod. Ustreznost

Nalogo razdelite na liste papirja ( Priloga 1 ). Poiščite ponovitve.

Včasih morate na različnih mestih programa izvesti skoraj enaka zaporedja dejanj z različnimi začetnimi podatki. Takšna zaporedja dejanj je mogoče formalizirati v obliki ti podprogrami (iz angleščine, podprogram) – združite operaterje v blok, do katerega lahko dostopate po imenu in večkrat.

Podprogrami skrajšajo besedilo programa, občutno skrajšajo čas njihovega izvajanja in olajšajo življenje programerjem, ki lahko programe ustvarjajo modularno, torej tako, da iz dokončanih kosov enostavnejših komponent sestavijo kompleksen program. To omogoča skupini programerjev, da ustvarijo velike programe, in skupini šolarjev, da razvijejo in izvajajo kakršne koli globalne projekte.

Podprogrami so razdeljeni na postopke in funkcije.

Vgrajeni (standardni) postopki in funkcije so del jezik in ga lahko pokličete po imenu brez predhodnega opisa. Na primer , abs, sqrt, ln, sin... so funkcije (vrnejo rezultat), readln, write... so procedure (ne vrnejo rezultata). Njihova prisotnost močno olajša razvoj aplikacijskih programov. Vendar pa v večini primerov nekateri specifična za določen program dejanja ne najdejo neposrednih analogov v knjižnicah Turbo Pascal, nato pa mora programer razviti svojo nestandardno postopke in funkcije.

III. Razlaga nove snovi

Uporabniški postopki so napisani sebe programer v skladu s sintakso jezika v razdelek z opisom podprograma.

Struktura postopka sledi strukturi programa, gre za »program v malem« – predstavljata ga tudi glava in telo.

Glava je sestavljena iz rezervirane besede procedure, identifikatorja (ime) postopkov.

VAR ... // razdelek za opis spremenljivk glavnega programa

procedura ProcedureName;

// telo glavnega programa

Klic postopka za nadaljnjo izvedbo se zabeleži v telesu glavnega programa.

Primer 1. Program za izračun površine in obsega.

Prednosti podprogramov:

  • Programi, napisani z uporabo podprogramov lažje testiranje in odpravljanje napak, imajo jasnejšo logična struktura.
  • Neodvisna narava podprogramov omogoča, da se njihovo ustvarjanje zaupa različnim programerjem. Na ta način se programsko delo razdeli in s tem pospeši njegovo dokončanje;
  • Uporaba podprogramov prihrani pomnilnik. Pomnilnik za shranjevanje spremenljivk, uporabljenih v podprogramu, je dodeljen samo za čas njegovega delovanja in se sprosti takoj, ko se njegovo izvajanje konča.

Primer 2. Uporabnik vnese dve strani treh pravokotnikov. Izpeljite njihova območja.

Težavo lahko rešite takole:

za i:=1 do 3 do

writeln('Vnesite a in b:');

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

Za dober stil programiranja velja uporaba postopkov. Potreben je postopek, ki bo izračunal površino pravokotnika. Tukaj je shematično videti glavni program:

izračun

izračun

izračun

Besedilni postopek že obstaja (glej primer 1). Ustvarimo drugi postopek, ki izračuna površino. Če pa želite izračunati S, morate poznati 2 strani, zato mora postopek pokazati, katere strani naj pomnoži.

postopek pl (c,d: celo število);

writeln(‘površina pravokotnika s stranicami ’,c, ‘ ‘ ,d, ‘=‘,S);

Parameter je spremenljivka, ki ji je dodeljena vrednost. obstajati formalni parametri , definiran v glavi podprograma, in dejanski parametri – izrazi, ki določajo določene vrednosti pri dostopu do podprograma.

Postopek se bo izvedel, če ga pokličete po imenu in podate dejanske parametre , ločeni z vejicami in v oklepajih:

Dejanski parametri se morajo po vrsti in količini ujemati s formalnimi.

Torej, glavni program:

za i:=1 do 3 do

Komentiraj. Pri reševanju te težave je potrebno preveriti številke, ki jih je vnesel uporabnik (ne smejo biti negativne, sicer bo program prekinjen).

Ustvarimo postopek preverjanja:

napaka postopka (f,g:celo število);

če (f<0) or (g<0) then begin

writeln('stranice pravokotnika ne morejo biti negativne');

zaustavitev; // prekinitev programa

Končni program – Dodatek 4

Torej oblika postopka:

Postopek<имя>(formalni parametri);

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

Primer 3. Napišite program za zamenjavo mest dveh števil c=5 in d=7.

izmenjava programovDan;

var c,d:celo število;

izmenjava postopkov (a,b:celo število);

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

writeln("Vnesite 2 številki: ");

writeln(c," ",d);

Po zagonu programa lahko vidite, da so formalni parametri (v postopku) zamenjali mesta, dejanski (ki se uporabljajo v glavnem programu) pa se niso spremenili. Poglejmo sliko, ki prikazuje del RAM-a:

1) pri klicu postopka obmen z dvema parametroma 5 in 7 sta številki 5 in 7 postavljeni tudi v spremenljivki a oziroma b:

3) v spremenljivkah c in d pa se podatki niso spremenili, ker so v drugih spominskih celicah.

Da bi spremenljivki c in d, a in b sklicevali na iste pomnilniške celice (če se spremenita vrednosti a in b, se bodo spremenile tudi vrednosti c, d) pri opisovanju formalnih parametrov je treba pred zahtevanimi spremenljivkami dodati besedo VAR:

izmenjava postopkov (var a,b:integer);

Spremenite program obmenDan:

Napaka zaradi var. Številke so konstante, ki jih v postopku ni mogoče spremeniti.

Primer 4. Poiščite površino kroga s postopkom, ki samo izračuna, vendar ne prikaže rezultata na zaslonu.

krog postopka (r:real);

Postopek bi moral vrniti rezultat:

krožnica postopka (r:real; var S:real);

readln(a, e);

komentar: Spremenljivka v proceduri S se uporablja za vrnitev rezultatov procedure v glavni program. Ko se spremeni, se spremeni tudi dejanski parameter v klicnem programu, tj. spremenljivka e.

Pogosteje se za to v Pascalu namesto postopkov uporabljajo funkcije (podprogrami, ki nekaj vrnejo).

Funkcija je podobna postopku, vendar obstajata dve razliki.

  • Funkcija posreduje programu rezultat svojega dela - eno samo vrednost, katere nosilec je ime njene funkcije.
  • Ime funkcije se lahko pojavi v izrazu kot operand. Funkcija vrne rezultat na točko svojega klica.

Na primer, sqr(x) – kvadrira vrednost x in vrne izračunano vrednost kvadrata števila x v klicno točko: y:=sqr(x);

Uporabniško definirana funkcija je sestavljena iz glave funkcije in telesa funkcije. Telo funkcije je po strukturi podobno programu. Opis oznak, konstant, tipov itd. velja le v okviru tega postopka.

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

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

Razdelek s stavkom mora vsebovati vsaj en stavek, ki imenu funkcije dodeli vrednost. Rezultat zadnje dodelitve se vrne na klicno točko.

Primer 5. Ponovno obdelajmo problem o površini kroga.

funkcijski krog (r:real): pravi;

a:=krog(5); (MORA biti dodeljen)

Primer 6. Poišči 1!+2!+...+n!

Uporabljamo funkcijo iskanja faktoriala, ker jo podajamo kot vhod in dobimo rezultat.

funkcija dejstvo (a:celo število): celo število;

za i:=1 narediti

V vrstici fact:=fact*I;

prevajalnik bo našel napako, ker je treba fact klicati s parametri. Zato se običajno uvede dodatna spremenljivka, v katero se uvrsti rezultat. In potem je ta rezultat dodeljen spremenljivki dejstva:

program faktorial;

var sum,n,j: celo število;

funkcija dejstvo (a: celo število): celo število;

var i,d: celo število;

za i:=1 narediti

za j:=1 do n narediti

vsota:=vsota+dejstvo(j);

IV. Povzetek lekcije

V tem času se proces programiranja spremeni v proizvodnja industrijske programske opreme temelji tehnologije programiranja. Večina strokovnjakov je mnenja, da metoda oblikovanja programa od zgoraj navzdol najbolj primeren za reševanje kompleksnih problemov. Najprej je naloga definirana na splošno, nato se postopoma razjasni njena struktura. V naslednjem koraku je vsaka podnaloga po vrsti razdeljena na več drugih. Rešitev ločenega fragmenta kompleksnega problema je neodvisen programski blok - podprogram.

V. Domača naloga

Reši naloge (pisno):

  1. Ustvarite postopek, ki vse črke a v vnesenem nizu zamenja z *.
  2. Podana sta dva predloga. Poiščite skupno število črk "n" v njih. (Definirajte funkcijo za izračun števila črk »n« v stavku.)