Prosedyrer og funksjoner i Pascal. Rekursjon. Subrutiner Ofte krever en oppgave at du gjentar en bestemt sekvens av utsagn i ulike deler av programmet. Prosedyrer og funksjoner Presentasjon av prosedyrer og funksjoner
Rekursjon i Pascal Lærer: Tlekhurai Yu.V. Kommunal utdanningsinstitusjon "Lyceum nr. 8" Hva ser du på maleriene? Dette fenomenet i kunsten kalles rekursjon "For å forstå rekursjon, må du først forstå rekursjon." rekursjon - delvis definisjon av et objekt gjennom seg selv, definisjon av et objekt ved å bruke tidligere definerte. Vitenskapelig sett: Rekursjon - en metode for å definere en klasse av objekter eller metoder ved først å spesifisere en eller flere (vanligvis enkle) av dens grunnleggende tilfeller eller metoder, og deretter spesifisere på grunnlag av disse reglene for å konstruere klassen som defineres. Peter Deutsch Peter Deutsch
Menneskelig iterasjon.
Rekursjon er fra Gud.
Rekursjon i fysikk Rekursjon i språk og litteratur Et klassisk eksempel på uendelig rekursjon er to speil plassert overfor hverandre: to korridorer er dannet i dem fra falmende refleksjoner av speil. Et annet eksempel på uendelig rekursjon er selveksitasjonseffekt (positiv tilbakemelding) y elektroniske kretser gevinst, når signalet fra utgangen når inngangen, forsterkes, når igjen inngangen til kretsen og forsterkes igjen. Forsterkere som denne driftsmodusen er standard for kalles selvoscillatorer. Et eksempel på et rekursivt ordbokoppslag: “Presten hadde en hund...” - typisk rekursjon Flere historier av Stanislaw Lem er viet hendelser med uendelig rekursjon: En historie om graver (“The Star Diaries of John the Quiet”), der helten suksessivt går fra en artikkel om graver til en artikkel om graver, derfra til en artikkel om sepulcaria, som igjen inneholder en referanse til artikkelen "sepulcaria". En historie om en intelligent maskin som hadde nok intelligens og latskap til å bygge en lignende for å løse et gitt problem, og betro løsningen til det (resultatet var en uendelig rekursjon, når hver ny bil bygget en som ligner henne selv og overlot oppgaven til henne). Rekursjon i programmering er en måte å organisere en beregningsprosess der en prosedyre eller funksjon refererer til seg selv under utførelsen av dens konstituerende operatører. For at et slikt anrop ikke skal være uendelig, må teksten til subrutinen inneholde en betingelse ved å nå frem som ingen ytterligere anrop skjer. dermed kan et rekursivt anrop bare inkluderes i en av grenene til subrutinen. Eksempel. Beregne faktorialet til et naturlig tall Lag en rekursiv funksjon som beregner faktorialet til tallet n som følger: funksjon f (n: heltall): longint; begynne hvis n = 1 så f:= 1 ellers f:= n * f(n -1); (funksjon f kaller seg selv) avslutte Pascal-program ved bruk av rekursjon: Var n: heltall; a: longint; funksjon faktoriell (n: heltall): longint; begynne hvis n = 1 så faktoriell:= 1 ellers faktoriell:= n * faktoriell (n -1); Slutt; Begynn å skrive('n='); Lesln(n); A:= faktorial(n); Skriv(‘n!=’,a); Readln; slutt. Leonardo fra Pisa FibonacciFibonacci-tall er elementer i en tallrekke
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..., der hvert påfølgende tall er lik summen av de to foregående.
Oppgave: Vis en serie med Fibonacci-tall som består av n elementer. Beskrivelse av variabler: n – antall elementer i serien; a, b - verdier av de to siste elementene i serien; c – buffer ("reserve") variabel; i – teller. Algoritme for å løse problemet: 1. Få verdien av n. 2. Tilordne a og b verdiene 0 og 1 henholdsvis (dette er de første tallene i Fibonacci-serien). Vis dem på skjermen. 3. Start fra det 3. elementet til n: a) vis summen av a og b, b) lagre verdien av variabelen b i c, c) skriv summen av a og b til b, d) tilordne verdien av c til a. Pascal-program som bruker iterasjon: programmet Fibonacci; var a,b,c,i,n: heltall; begynne skriv("n = "); readln(n); a:= 0; Skriv en," "); b:= 1; skriv(b," "); for i:=3 til n begynner skriv(a+b," "); c:= b; b:= a + b; a:=c; slutt; readln; slutt. Pascal-program som bruker rekursjon: Den rekursive definisjonen for å beregne Fibonacci-tall er som følger: Denne definisjonen av Fibonacci-tall kan enkelt konverteres til en rekursiv funksjon: funksjon f(n: Heltall) : longint; begynne Hvis 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. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа EN Og b. Hvis EN= b, deretter node ( EN,b)=a. Hvis EN>b, deretter node ( EN,b)= node ( a -b,b). Hvis EN< b, deretter node ( EN,b)= node ( EN,b-a). Program noddvyxchisel; var a,b: longint; funksjonnikk(a,b:langint): longint; begynne Hvis a = b Så nikk:= a annet hvis a>b så nikk:= nikk(a-b,b) annet nikk:= nikk(a,b-a) Slutt; begynne å skrive('a='); readln(a); skriv('b='); readln(b); A:= nikk(a,b); skriv(‘nikk=’,a); readln; slutt. Problem om tårnene i Hanoi. I dette tilfellet må følgende regler overholdes:
- Du kan bare flytte én disk om gangen;
- større disk kan ikke plasseres på mindre disk;
- den fjernede disken må settes på en hvilken som helst pinne før den andre disken fjernes. Hardtarbeidende buddhistiske munker bærer skiver fra spir til spir dag og natt. Legenden hevder at når munkene er ferdige med arbeidet sitt, vil verdens undergang komme. Man kan beregne at å løse et problem med 64 disker ville kreve 264–1 trekk. Derfor, når det gjelder verdens ende, vil det skje etter fem milliarder århundrer, hvis vi tar i betraktning at en disk beveger seg på ett sekund. Imidlertid ble både problemet og legenden om det oppfunnet i 1883 av matematikeren Edouard Lucas fra College of Saint-Louis.
Ett av de tre diamantspirene bærer 64 runde gullskiver. Skivene har forskjellige radier og er plassert på spiret i synkende rekkefølge av radier fra bunn til topp. Det er nødvendig å overføre skivene fra det første spiret til det andre, ved å bruke det tredje spiret om nødvendig.
Oppgave. Lag et rekursivt program som vil løse problemet ovenfor om Towers of Hanoi med antall disker lik n (n = 1, 2, ...). Løsning. La oss skrive inn navn på spirene: a, b, c. La hanoi(n,a,b,c)- den nødvendige funksjonen som returnerer sekvensen av diskbevegelser med en på b ved hjelp av c i henhold til reglene beskrevet ovenfor. Når n=1 vet vi hvordan vi skal løse problemet. Du trenger bare å utføre "flytte"-operasjonen en på b" La oss anta at vi kan løse dette problemet for n – 1 disker. Flytt n–1 disker fra en på Med. Deretter flytter du den gjenværende disken fra en på b og til slutt flytte n–1 disker fra c på b. Inndata: antall skiver på pinne a; Produksjon: sekvensering; Step0:(definer variabeltype); Trinn 1: (beskrivelse av hanoi-prosedyren, som viser handlingssekvensen); Trinn 1.1:(flytt (n-1) disker fra pinne a til pinne b); Trinn 1.2:(flytt den n'te disken fra a til c); Trinn 1.3:(flytt (n-1) disk fra b til c); (trinn 1.2-1.3 utføres rekursivt); Trinn 2:(hovedprogram); Trinn 2.1:(skriv inn antall disker); Trinn 2.2: (kaller hanoi-prosedyren). Løse problemet i Pascal Program bahnya; var n: heltall; a,b,c: char; prosedyre hanoi(n: heltall;a,b,c: char); start hvis n>0 så begynner hanoi(n-1,a,c,b); writeln ("Peremestit disk so sterzhnya ",a," na sterzhen" ",b); hanoi(n-1,c,b,a); slutt; slutt; Begynn å skrive ("Vvedite naturalnoe chislo n"); readln ( n); a:="a"; b:="c"; hanoi (n,a,c,b); X Eksponent Til Hvis k=0, så grad(k,x)=1, Ellers grad(k,x)= x· grad(k-1,x) Program stepen; var y: ekte; n:heltall; funksjonstrinn(k:heltall, x:reell): reell; begynne Hvis k = 0 Så trinn:= 1 annet trinn:= x * trinn(k-1,x) Slutt; begynne å skrive('vvedite osnovanie stepeni x='); readln(y); skriv(‘vvedite pokazatel stepeni k=’); Lesln(n); skriv(‘x v stepeni k=’,trinn(n,y)); readln; slutt. Selvstendig arbeid
- Finn summen av sifrene til et tall
- Bestem om et gitt naturlig tall er primtall
- Finn det første sifferet i et tall
- Konverter naturlig tall fra desimal s.s. til binær
- Finn summen av elementene i en heltallsmatrise som består av 20 elementer
- Bytt om verdiene til to heltall
- Bestill verdiene til tre variabler a, b, c i stigende rekkefølge
- Finn antall sifre i naturlig tall n
- Finn det største av tre gitte tall
- Finn antall positive tall blant fire A, B, C, D
program oversettelse;
prosedyre dvd(n:longint);
Hvis n >1 Så dvd (n div 2);
skriv(n mod 2);
Subrutiner Ofte krever en oppgave at du gjentar en bestemt sekvens av utsagn i ulike deler av programmet. For å beskrive denne sekvensen én gang og bruke den mange ganger, bruker programmeringsspråk subrutiner. En subrutine er en spesialdesignet blokk av et program for påfølgende gjentatt bruk i hovedprogrammet Bruken av subrutiner lar deg implementere en av de mest moderne programmeringsmetodene - strukturert programmering
Subrutiner løser tre viktige problemer som i stor grad letter programmeringen: 1. de eliminerer behovet for gjentatte gjentakelser av lignende fragmenter i programteksten, dvs. redusere størrelsen på programmet; 2. vil forbedre strukturen til programmet, noe som gjør det lettere å forstå når du analyserer; 3.redusere sannsynligheten for feil, øke motstanden mot programmeringsfeil og uforutsette konsekvenser under modifisering.
Prosedyrer og funksjoner Det er to typer subrutiner i Pascal: prosedyre (PROSEDYRE) og funksjon (FUNKSJON). Prosedyrer og funksjoner i Pascal er deklarert i deklarasjonsdelen bak variabeldelen. ProgramProgramName; VAR ... // seksjon for å beskrive variabler i hovedprogrammet; prosedyre Prosedyrenavn; var ... begin ...//Procedure body end; start //body av hovedprogrammet slutt.
Funksjoner og prosedyrer har parametere (variabler som passerer en verdi). De kommer i to typer: 1) Formelle - de som er i beskrivelsen av subrutinen 2) Faktiske - de som overføres fra hovedprogrammet til en funksjon eller prosedyre. De faktiske parameterne må samsvare med de formelle i mengde, rekkefølge og type.
Prosedyrer Prosedyrer brukes når en subrutine trenger å oppnå flere resultater. Det er to typer prosedyrer i Pascal: prosedyrer med parametere og uten parametere. En prosedyre åpnes av prosedyrenavnet, som kan følges av faktiske parametere. Når en prosedyre kalles, etableres en en-til-en-korrespondanse mellom de faktiske og formelle parameterne, deretter overføres kontrollen til prosedyren. Etter at prosedyren er utført, overføres kontrollen til neste operatør av det anropende programmet etter å ha kalt prosedyren.
Eksempel 1: En prosedyre uten parametere som skriver ut en streng med 60 stjerner. prosedyre pr; var i: heltall ; begynne for i:=1 til 60 skriv (* "); skrivln; slutt; begynne pr; slutt.
Eksempel 2. Lag et program for å bytte to tall c=5 og d=7 program obmenDan; var c,d:heltall; prosedyreutveksling (a,b:heltall); var m:heltall; begynne m:=a; a:=b; b:=m; skrivln(a,b); slutt; begin writeln("Skriv inn 2 tall: "); readln(c,d); bytte(c,d); writeln(c," ",d); slutt. c5 d 7 a 5 b 7 1) når du kaller obmen-prosedyren med to parametere 5 og 7, plasseres de samme tallene 5 og 7 i henholdsvis variablene a og b: 2) deretter i prosedyren verdiene til minneceller a og b er omorganisert: c5 d 7 a 7 b 5 3) men i variablene c og d er dataene ikke endret, fordi de er i andre minneceller
For at variablene c og d, a og b skal referere til de samme minnecellene (hvis verdiene til a og b endres, vil verdiene til c, d også endres), når man beskriver formelle parametere, er nødvendig for å legge til ordet VAR før de nødvendige variablene: prosedyreutveksling (var a,b:heltall); с5 d 7 a b
Eksempel 3. Gitt 3 forskjellige arrays av heltall (størrelsen på hver overstiger ikke 15). I hver matrise, finn summen av elementene og det aritmetiske gjennomsnittet. program proc; var i, n, sum: heltall; sr: ekte; prosedyrearbeid (r:heltall; var s:heltall; var s1:virkelig); var mas: rekke av heltall ; j:heltall; begynner s:=0; for j:=1 til r begynner lesingen (mas[j]); s:=s+mas [j]; slutt; sl:=s/r; slutt;
(hovedprogram) start for i:=1 til 3 begynn å skrive ("Vvedite razmer",i, "masiva: "); readln(n); arbeid(n, sum, sr); (anropsprosedyrearbeid) writeln ("Summa elementov = ",sum); writeln("Srednearifmeticheskoe = ",sr:4:1); slutt; slutt.
Resultat av programmet: Programmet kaller opp arbeidsprosedyren tre ganger, hvor de formelle variablene r, s, s1 erstattes med faktisk n, sum, sr. Prosedyren legger inn matriseelementer, beregner sum og gjennomsnitt. Variablene s og s1 returneres til hovedprogrammet, så tjenesteordet var plasseres foran beskrivelsen. Lokale parametere mas, j er kun gyldige i prosedyren. Global - i, n, sum, sr er tilgjengelig gjennom hele programmet.
Funksjoner i Pascal Settet med innebygde funksjoner i Pascal-språket er ganske bredt (ABS, SQR, TRUNC, etc.). Hvis en ny, ikke-standard funksjon er inkludert i programmet, må den beskrives i programteksten, deretter kan den nås fra programmet. En funksjon er tilgjengelig på høyre side av tilordningsoperatøren, som indikerer funksjonsnavnet og faktiske parametere. En funksjon kan ha sine egne lokale konstanter, typer, variabler, prosedyrer og funksjoner. Beskrivelsen av funksjoner i Pascal ligner på beskrivelsen av prosedyrer.
Eksempel 4. Skriv en subrutinefunksjon av grad a x, der a, x er alle tall. La oss bruke formelen: a x = e x l i et program p2; var f, b, s, t, c, d: ekte; (globale variabler) funksjon stp (a, x: reell) : reell; var y: ekte; (lokale variabler) begynner y:= exp (x * ln (a)); stp:= y;(tildele et funksjonsnavn til resultatet av subrutineberegninger) end; (funksjonsbeskrivelse fullført) start d:= stp (2.4, 5); (beregne potenser av forskjellige tall og variabler) writeln (d, stp (5,3.5)); les(f, b, s, t); c:= stp (f, s) + stp (b, t); skrivln(c); slutt.
Funksjoner En subrutine er en del av et program, utformet som en egen syntaktisk struktur og utstyrt med et navn (en uavhengig programblokk), for å løse individuelle problemer. Beskrivelse av prosedyren: prosedyre () (del for utføring av lokale navn) Start (del for utføring av operatører) Slutt; Funksjonsbeskrivelse: funksjon (): type; (del for å beskrive lokale navn) Start (del for kjørbare setninger) := ; (påkrevd parameter) Slutt; Prosedyrekall: (); Funksjonsanrop: := (); 1. På høyre side av oppdragsoperatøren. 2. I uttrykket i tilstanden til forgreningsoperatøren. 3. I utdataprosedyren, som et resultat av funksjonen. Beskrivelse av subrutiner Prosedyrer
Rekursjon Prosedyrer og funksjoner i Pascal kan kalle seg, d.v.s. har egenskapen rekursivitet. En rekursiv funksjon må nødvendigvis inneholde en betingelse for å avslutte rekursivitet for ikke å få programmet til å gå i loop. Hvert rekursivt kall skaper et nytt sett med lokale variabler. Det vil si at variabler som ligger utenfor den kalte funksjonen ikke endres.
1 funksjon f (n: heltall): heltall; begynne hvis n = 1 så f:= 1 ellers f:= n * f (n -1); (funksjon f kaller seg selv" title="Eksempel 5. Lag en rekursiv funksjon som beregner faktorialet til tallet n på følgende måte: n! = 1 hvis n= 1 n!= (n -1)! · n hvis n > 1 funksjon f (n: heltall): begynner hvis n = 1 så f:= 1 ellers f:= n * f (n -1);" class="link_thumb"> 19 !} Eksempel 5. Lag en rekursiv funksjon som beregner faktoren til tallet n som følger: n! = 1 hvis n= 1 n!= (n -1)! · n hvis n > 1 funksjon f (n: heltall): heltall; begynne hvis n = 1 så f:= 1 ellers f:= n * f (n -1); (funksjon f kaller seg selv) slutt; 1 funksjon f (n: heltall): heltall; begynne hvis n = 1 så f:= 1 ellers f:= n * f (n -1); (funksjon f kaller seg selv"> 1 funksjon f (n: heltall): heltall; begynne hvis n = 1 så f:= 1 ellers f:= n * f (n -1); (funksjon f kaller seg selv) slutt; " > 1 funksjon f (n: heltall): begynn hvis n = 1 så f:= 1 ellers f:= n * f (n -1) (funksjon f kaller seg selv" title="Eksempel 5). Lag en rekursiv funksjon som beregner faktoren til tallet n som følger: n = 1 n! 1 så f:= 1 ellers f:= n * f (n -1);"> title="Eksempel 5. Lag en rekursiv funksjon som beregner faktoren til tallet n som følger: n! = 1 hvis n= 1 n!= (n -1)! · n hvis n > 1 funksjon f (n: heltall): heltall; begynne hvis n = 1 så f:= 1 ellers f:= n * f (n -1); (funksjon f kaller seg selv"> !}
Lysbilde 1
Lysbilde 3
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img2.jpg)
Lysbilde 4
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img3.jpg)
Lysbilde 5
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img4.jpg)
Lysbilde 6
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img5.jpg)
Lysbilde 7
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img6.jpg)
Lysbilde 8
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img7.jpg)
Lysbilde 9
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img8.jpg)
Lysbilde 10
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img9.jpg)
Lysbilde 11
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img10.jpg)
Lysbilde 12
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img11.jpg)
Lysbilde 13
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img12.jpg)
Lysbilde 14
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img13.jpg)
Lysbilde 15
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img14.jpg)
Lysbilde 16
![](https://i2.wp.com/bigslide.ru/images/7/6344/389/img15.jpg)
Lysbilde 17
![](https://i1.wp.com/bigslide.ru/images/7/6344/389/img16.jpg)
Lysbilde 18
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img17.jpg)
Lysbilde 19
![](https://i0.wp.com/bigslide.ru/images/7/6344/389/img18.jpg)
8. klasse. Programmering i ABC Pascal
Informatikklærer ved NIS i Uralsk fysikk og matematikk Zelenov Boris Aleksandrovich
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_1.jpg)
- Elevene bruker prosedyrer og funksjoner for å løse problemer
- Elevene lærer å løse store problemer ved å dele dem opp i mindre
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_2.jpg)
- Utvikle et konsept av prosedyrer og funksjoner i et programmeringsspråk.
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_3.jpg)
- Studentene kjenner begrepene "prosedyrer" og "funksjoner", bestemmer formelle og faktiske parametere
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_4.jpg)
Forventede resultater – beskrivelser:
1.Kjenner definisjonen av "prosedyre"
2.Kjenner definisjonen av "funksjon"
3. Bestemmer faktiske og formelle parametere
4.Skiller mellom verdi og variable parametere
5. Finner et kall til en prosedyre eller funksjon i programkode
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_5.jpg)
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_6.jpg)
Elviras standardplan
1. Fjern papirer
2. Vann blomstene
3. Vask pultene
4. Tørk av glasset
Slutt på algoritmen
Hvordan forbedre organiseringen av denne prosessen?
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_7.jpg)
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_8.jpg)
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_9.jpg)
Leksjonens tema
Subrutiner:
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_10.jpg)
Ishki bagdarlama
Subrutine
Fremgangsmåte
Fremgangsmåte
Parameterer
Nyttige setninger:
For å overføre variable verdier til en prosedyre (funksjon), brukes faktiske parametere...
For å beskrive fremgangsmåten bør du først..., deretter...
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_11.jpg)
Konseptet med en subrutine
Definisjon
Subrutine– Dette er en egen funksjonelt uavhengig del av programmet.
Subrutiner
Prosedyrer
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_12.jpg)
- eliminere behovet for å gjenta lignende fragmenter gjentatte ganger i programteksten;
- forbedre strukturen til programmet, noe som gjør det lettere å forstå;
- øke motstanden mot programmeringsfeil og uforutsette konsekvenser under programmodifikasjoner.
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_13.jpg)
- Tegn et gjerde ved hjelp av et programmeringsspråk
I denne oppgaven kan du lage en prosedyre som vil utføre algoritmen for å tegne ett fragment (plukkgjerde), og deretter stadig referere til denne prosedyren, endre startposisjonen til pennen
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_14.jpg)
- Beskriv hvordan du effektivt kan tegne et juletre i et programmeringsmiljø
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_15.jpg)
- De er uavhengige fragmenter av programmer, designet på en spesiell måte og har sitt eget navn.
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_16.jpg)
Interaksjon mellom hovedprogrammet og subrutinen
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_17.jpg)
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_18.jpg)
Blokkdiagram
- Subrutine (prosedyre eller funksjon) anropsblokk
Subrutinenavn (prosedyre eller funksjon).
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_19.jpg)
Blokkdiagram
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_20.jpg)
Beskrivelsen av prosedyren er som følger:
fremgangsmåte navn (liste over formelle parametere); beskrivelsesdelen begynne operatører slutt ;
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_21.jpg)
Funksjonsbeskrivelsen ser slik ut:
funksjon navn (liste over formelle parametere): returtype;
beskrivelsesdelen begynne operatører slutt ;
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_22.jpg)
Plassering i programmet
Program ...;
//Beskrivelsesdel Bruker, Const, Var, ...
fremgangsmåte EN ;
begynne ....... slutt ;
fremgangsmåte B ;
begynne ........ slutt ;
Funksjon C ;
begynne ........ slutt ;
//Hovedprogram
begynne ........ slutt .
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_23.jpg)
- Forskjellen mellom en funksjon og en prosedyre er at resultatet av å utføre operatorene som danner kroppen til funksjonen alltid er en enkelt verdi, så å kalle en funksjon kan brukes i passende uttrykk sammen med variabler og konstanter.
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_24.jpg)
Prosedyrer
Funksjoner
Kan ha flere resultater eller utføre en handling
Har bare ett resultat, hvis type spesifiseres separat når funksjonen deklareres.
Resultatene kan være verdier av enhver type - matriser, strenger, tall, etc.
Resultatet kan bare være en verdi av typen reell, heltall eller char.
Prosedyrekall-kommandoen er en egen kommando som kan brukes uavhengig
Et funksjonskall kan bare brukes som en komponent av et uttrykk av den aktuelle typen.
Funksjonskroppen må inneholde minst én tilordningsoperatør med funksjonsnavnet på venstre side.
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_25.jpg)
Prosedyre eller funksjon?
MaksTall(a,b: heltall): heltall;
var maks: heltall;
MaxNumber:= maks;
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_26.jpg)
Prosedyre eller funksjon?
MaksTall(a,b: heltall; var maks: heltall);
hvis ab så max:=a annet max:=b;
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_27.jpg)
Prosedyre eller funksjon?
ChangeColor(C1, C2: Word);
TextBackGround(C2)
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_28.jpg)
Prosedyre eller funksjon?
Add(X, Y: Heltall): Heltall;
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_29.jpg)
Faktiske
- Angitt i hovedprogramdelen
Formell
- Spesifisert i subrutinen
- Spesifisert i subrutinen
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_30.jpg)
Prosedyren kalles av en operatør med følgende format:
prosedyrenavn (liste over faktiske parametere);
- Liste over faktiske parametere- Dette er en liste over dem adskilt med komma.
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_31.jpg)
- I Pascal-språkstandarden kan parametere sendes på to måter - etter verdi og ved referanse. Parametre som sendes av verdi kalles parametere-verdier, overført ved referanse - parametere-variabler. Sistnevnte skiller seg ut ved at de i prosedyre-(funksjons)-overskriften er innledet med tjenesteordet var.
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_32.jpg)
Passerer parametere. Formelle parametere
Variabler
Verdier
Parametre etter verdi
Formelle parametere
Variabler
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_33.jpg)
Formelle parametere
Parametre etter verdi
- I den første metoden (som passerer ved verdi), blir verdiene til de faktiske parameterne kopiert til de tilsvarende formelle parameterne.
Fremgangsmåte
Prosedyrenavn (a, b: heltall);
Hovedprogram
Når du endrer disse verdiene under utførelsen av en prosedyre (funksjon), kan ikke de opprinnelige dataene (faktiske parametere) endres
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_34.jpg)
Var c, d: heltall;
- Ved referanse vil alle endringer som skjer i hoveddelen av en prosedyre (funksjon) med formelle parametere føre til umiddelbare lignende endringer i de tilsvarende faktiske parameterne.
Fremgangsmåte
Prosedyrenavn (a, b: heltall, Var c: ekte);
Hovedprogram
Endringer skjer i variablene til den kallende blokken, så utdataparametere sendes ved referanse. Når de kalles, kan deres tilsvarende faktiske parametere bare være variabler.
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_35.jpg)
Du skriver:
1. Faktiske parametere___________
Prosedyre Kvad(R: ekte; var S: ekte);
2. Formelle parametere ___________
3. Formelle parametere-verdier __________
5. Prosedyrenavn ___________
6. Få tilgang til en prosedyre fra programmet __________________
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_36.jpg)
Interaktiv oppgave
http://www.bzfar.net/load/podprogrammy_procedury_i_funkcii_parametry/23-1-0-498
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_37.jpg)
Elvira er klasseleder. Hun må lage en plan for generell rengjøring i klasserommet: fjern papirer, vann blomster, vask pulter, tørk av glass. Hvordan kan hun organisere arbeidet sitt bedre? Hjelp Elvira.
![](https://i1.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_38.jpg)
Elviras avanserte plan
Subrutiner:
Arsen - legger fra seg papirene
Mila - vanning av blomster
Vitaly – vasker skrivebord
Indira – tørker av glasset
1. Utfør Arsen
2. Løp Mila
3. Utfør Vitaly
4. Kjør Indira
Slutt på algoritmen
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_39.jpg)
- Hvilke nye programmeringsspråkstrukturer har vi møtt i dag?
- Navngi de studerte parameterne
- Hvordan overføres parametere til en prosedyre?
![](https://i0.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_40.jpg)
- Leksjonssammendrag
- Finn definisjoner: "Lokale variabler" og "Globale variabler"
- Komponer to oppgaver der du kan bruke prosedyrer eller funksjoner.
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_41.jpg)
- Hvordan vil du bestemme temaet for leksjonen? (kom opp med ditt eget navn)
- Hva synes du du bør lære i neste leksjon?
![](https://i2.wp.com/fsd.kopilkaurokov.ru/uploads/user_file_539972e58b710/img_user_file_539972e58b710_42.jpg)
La oss møtes
neste leksjon!
Hensikten med leksjonen
pedagogisk
- å danne et samlet blant studentene begrepssystem relatert til begrepene prosedyre og funksjon;
- lære hvordan du bruker subrutiner for å løse problemer i Pascal, og også lære å forstå hvilken type subrutine som er nødvendig når du løser et bestemt problem;
- vise grunnleggende teknikker for bruk av subrutiner;
pedagogisk
- dyrke nøyaktighet, oppmerksomhet, organisering;
- kultur for databehandling;
utvikle seg
- utvikle logisk tenkning, algoritmisk kultur for studenter;
- utvikle kunnskap og ferdigheter for å komponere og feilsøke subrutiner i Pascal.
Studentene må:
- kjenne reglene for å skrive prosedyrer uten parametere og med parametere;
- kjenne reglene for å skrive funksjoner;
- kunne bruke prosedyrer og funksjoner for å løse enkle problemer.
I løpet av timene
I. Org. øyeblikk
II. Introduksjon. Relevans
Gi ut oppgaven på lapper ( Vedlegg 1 ). Finn repetisjoner.
Noen ganger på forskjellige steder i programmet må du utføre nesten de samme handlingssekvensene med forskjellige innledende data. Slike handlingsrekkefølger kan formaliseres i form av såkalte subrutiner (fra engelsk, subrutine) – grupper operatører i en blokk som kan nås med navn og gjentatte ganger.
Subrutiner forkorter teksten til et program, reduserer utføringstiden betydelig og gjør livet enklere for programmerere som kan lage programmer modulært, det vil si ved å sette sammen et komplekst program fra ferdige deler av enklere komponenter. Dette lar en gruppe programmerere lage store programmer, og en gruppe skoleelever å utvikle og implementere alle globale prosjekter
Subrutiner er delt inn i prosedyrer og funksjoner.
Innebygde (standard) prosedyrer og funksjoner er del språk og kan kalles ved navn uten forutgående beskrivelse. For eksempel , abs, sqrt, ln, sin... er funksjoner (retur et resultat), readln, write... er prosedyrer (returnerer ikke et resultat). Deres tilstedeværelse letter i stor grad utviklingen av applikasjonsprogrammer. Men i de fleste tilfeller noen spesifikk for dette handlingsprogrammet er det ingen direkte analoger i bibliotekene Turbo Pascal, og så må programmereren utvikle sin egen ikke-standard prosedyrer og funksjoner.
III. Forklaring av nytt materiale
Brukerprosedyrer er skrevet oss programmerer i samsvar med syntaksen til språket i delrutinebeskrivelsesdelen.
Strukturen til prosedyren følger strukturen til programmet, det er et "program i miniatyr" - det er også representert av en overskrift og en kropp.
Overskriften består av den reserverte ordprosedyren, identifikatoren (Navn) prosedyrer.
VAR ... // seksjon for å beskrive variabler i hovedprogrammet
prosedyre Prosedyrenavn;
//body av hovedprogrammet
Prosedyrekallet for påfølgende utførelse registreres i hoveddelen av hovedprogrammet.
Eksempel 1. Program for å beregne areal og omkrets.
Fordeler med subrutiner:
- Programmer skrevet ved hjelp av subrutiner lettere å teste og feilsøke, de har en klarere logisk struktur.
- Den uavhengige naturen til subrutiner gjør at opprettelsen av dem kan overlates til forskjellige programmerere. På denne måten blir programmeringsarbeidet delt, og fullføringen blir dermed fremskyndet;
- Bruk av subrutiner sparer minne. Minne for lagring av variabler brukt i en subrutine tildeles bare for varigheten av operasjonen og frigjøres så snart utførelsen avsluttes.
Eksempel 2. Brukeren legger inn to sider av tre rektangler. Utlede sine områder.
Du kan løse problemet slik:
for i:=1 til 3 do
writeln('Skriv inn a og b:');
writeln(‘Område=’,a*b);
Det anses som god programmeringsstil å bruke prosedyrer. En prosedyre er nødvendig som vil beregne arealet til et rektangel. Her er hvordan hovedprogrammet vil se ut skjematisk:
beregning
beregning
beregning
Tekstprosedyren eksisterer allerede (se eksempel 1). La oss lage en andre prosedyre som beregner arealet. Men for å regne ut S må du kjenne 2 sider, så prosedyren må vise hvilke sider den skal multiplisere.
prosedyre pl (c,d: heltall);
writeln('areal av et rektangel med sider',c, '',d, '=',S);
En parameter er en variabel som er tildelt en verdi. Eksistere formelle parametere , definert i subrutineoverskriften, og faktiske parametere – uttrykk som spesifiserer spesifikke verdier når du får tilgang til en subrutine.
Prosedyren vil bli utført hvis du kaller den ved navn og spesifiserer de faktiske parameterne , atskilt med komma og omsluttet i parentes:
De faktiske parameterne må samsvare med de formelle i type og mengde.
Så, hovedprogrammet:
for i:=1 til 3 do
Kommentar. Når du løser dette problemet, er det nødvendig å sjekke tallene som er angitt av brukeren (de må ikke være negative, ellers vil programmet bli avbrutt).
La oss lage en bekreftelsesprosedyre:
prosedyrefeil (f,g:heltall);
hvis (f<0) or (g<0) then begin
writeln('sidene av et rektangel kan ikke være negative');
stanse; // programavbrudd
Endelig program – Vedlegg 4
Så formatet på prosedyren:
Fremgangsmåte<имя>(formelle parametere);
<операторы>;
Eksempel 3. Skriv et program for å bytte to tall c=5 og d=7.
programutvekslingDan;
var c,d:heltall;
prosedyreutveksling (a,b:heltall);
m:=a; a:=b; b:=m;
writeln("Skriv inn 2 tall: ");
writeln(c," ",d);
Etter å ha startet programmet, kan du se at de formelle parameterne (i prosedyren) har endret plass, men de faktiske (som brukes i hovedprogrammet) er ikke endret. La oss se på figuren som viser en del av RAM:
1) når du kaller obmen-prosedyren med to parametere 5 og 7, blir tallene 5 og 7 også plassert i henholdsvis variablene a og b:
3) men i variablene c og d har ikke dataene endret seg, fordi de er i andre minneceller.
For variablene c og d, a og b refererte til de samme minnecellene (hvis verdiene til a og b endres, vil verdiene til c, d også endres) når du beskriver formelle parametere, er det nødvendig å legge til ordet VAR før de nødvendige variablene:
prosedyreutveksling (var a,b:heltall);
Endre obmenDan-programmet:
Feil på grunn av var. Tall er konstanter som ikke kan endres i en prosedyre.
Eksempel 4. Finn arealet av en sirkel ved å bruke en prosedyre som bare utfører en beregning, men som ikke viser resultatet på skjermen.
prosedyre sirkel(r:ekte);
Prosedyren skal returnere resultatet:
prosedyresirkel (r:real; var S:real);
readln(a, e);
Kommentar: Variabelen i prosedyre S brukes til å returnere resultatene av prosedyren til hovedprogrammet. Når den endres, endres også den faktiske parameteren i det anropende programmet, dvs. variabel e.
Oftere, for dette i Pascal, i stedet for prosedyrer, brukes funksjoner (subrutiner som returnerer noe).
Funksjonen ligner prosedyren, men det er to forskjeller.
- Funksjonen overfører resultatet av arbeidet til programmet - en enkelt verdi, hvis bærer er navnet på funksjonen.
- Funksjonsnavnet kan vises i et uttrykk som en operand. Funksjonen returnerer resultatet til punktet for kallet.
For eksempel vil sqr(x) – kvadrere verdien x og returnere den beregnede verdien av kvadratet av tallet x til call pointet: y:=sqr(x);
En brukerdefinert funksjon består av en funksjonsoverskrift og en funksjonstekst. Hoveddelen av funksjonen er lik programmets struktur. Beskrivelse av etiketter, konstanter, typer osv. kun gyldig innenfor rammen av denne prosedyren.
Funksjon<имя>(formelle parametere):<тип результата>;
<операторы>;
Utsagnsdelen må inneholde minst én utsagn som tildeler en verdi til funksjonsnavnet. Resultatet av siste oppdrag returneres til melderen.
Eksempel 5. La oss omarbeide problemet om arealet av en sirkel.
funksjon sirkel (r:virkelig): ekte;
a:=sirkel(5); (MÅ tildeles)
Eksempel 6. Finn 1!+2!+…+n!
Vi bruker funksjonen med å finne faktoren, fordi vi mater den som input og får resultatet.
funksjonsfakta (a:heltall): heltall;
for i:=1 å gjøre
I linjen faktum:=fakta*I;
kompilatoren vil finne en feil, fordi fakta må kalles med parametere. Derfor introduseres vanligvis en tilleggsvariabel som resultatet plasseres i. Og så blir dette resultatet tilordnet faktavariabelen:
program factorial;
var sum,n,j: heltall;
funksjonsfakta (a: heltall): heltall;
var i,d: heltall;
for i:=1 å gjøre
for j:=1 til n do
sum:=sum+fakta(j);
IV. Leksjonssammendrag
På dette tidspunktet blir programmeringsprosessen til industriell programvareproduksjon basert programmeringsteknologier. De fleste eksperter mener det top-down programdesignmetode best egnet for å løse komplekse problemer. Først defineres oppgaven i generelle termer, deretter blir strukturen gradvis avklart. På neste trinn er hver deloppgave på sin side delt inn i en rekke andre. Løsningen på et separat fragment av et komplekst problem er en uavhengig programblokk - en subrutine.
V. Lekser
Løs problemer (skriftlig):
- Lag en prosedyre som erstatter alle bokstavene a i den angitte strengen med *.
- Det gis to forslag. Finn det totale antallet bokstaver "n" i dem. (Definer en funksjon for å beregne antall bokstaver "n" i en setning.)