Prosedyrer og funksjoner i Pascal. Rekursjon. Subrutiner Ofte i en oppgave ønsker man å gjenta en bestemt rekkefølge av utsagn i ulike deler av programmet. Prosedyrer og funksjoner i Pascal presentasjon for timen om informatikk og IKT (karakter 11) om tema III. OM

Rekursjon i Pascal Lærer: Tlekhurai Yu.V. MOU "Lyceum nr. 8" Hva ser du på bildene? 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 å foreløpig spesifisere en eller flere (vanligvis enkle) grunntilfeller eller metoder for den, og deretter spesifisere, på grunnlag av deres, reglene for å konstruere klassen som defineres. Peter Deutsch Peter Deutsch

Iterasjon fra menneske.

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 med falmende refleksjoner av speil er dannet i dem. Et annet eksempel på uendelig rekursjon er selveksitasjonseffekt (positiv tilbakemelding) i elektroniske forsterkerkretser, når signalet fra utgangen treffer inngangen, forsterkes, treffer inngangen til kretsen igjen og forsterkes igjen. Forsterkere som denne driftsmodusen er standard for kalles selvoscillatorer. Et eksempel på en rekursiv ordbokoppføring: "Presten hadde en hund ..." - en typisk rekursjon Flere historier av Stanislav 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 sepulker til en artikkel om sepulcaria , derfra til artikkelen om sepulcaria, der det igjen er en henvisning til artikkelen "sepulcaria". En historie om en intelligent maskin som var smart nok og lat nok til å bygge en lignende for å løse oppgaven og betro løsningen til den (resultatet var en endeløs rekursjon, da hver ny maskin bygde sin egen lignende og overførte oppgaven til den). 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 uttalelser. 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. Beregning av faktorialet til et naturlig tall Komponer en rekursiv funksjon som beregner faktorialet til et tall 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 factorial(n: heltall): longint; begynne hvis n = 1 så faktoriell:= 1 ellers faktoriell:= n * faktoriell (n -1); slutt; Begynn å skrive('n='); readln(n); A:=faktor(n); Skriv('n!=',a); readln; slutt. Leonardo Pisan Fibonacci

Fibonacci-tall er elementer i en numerisk rekkefølge

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 på skjermen, bestående av n elementer. Beskrivelse av variabler: n er antall elementer i raden; a, b er verdiene til de to siste elementene i serien; c er en buffer ("reserve") variabel; jeg - 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). Ta dem til 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. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа men Og b. Hvis men= b, deretter node( men,b)=a. Hvis men>b, deretter node( men,b)= node ( a -b,b). Hvis men< b, deretter node( men,b)= node ( men,b-a). Program noddvyxchisel; var a,b: longint; funksjon nod(a,b:longint): 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('nod=',a); readln; slutt. Towers of Hanoi problem. I dette tilfellet må følgende regler overholdes:

  • Bare én disk kan flyttes om gangen;
  • en større disk kan ikke plasseres på en mindre disk;
  • den fjernede disken må settes på en hvilken som helst kapstan før en annen disk fjernes.
  • Hardtarbeidende buddhistiske munker bærer plater dag og natt fra spir til spir. Legenden sier at når munkene er ferdige med arbeidet sitt, vil verdens undergang komme. Man kunne beregne at 264–1 trekk ville være nødvendig for å løse problemet med 64 disker. Derfor, når det gjelder verdens undergang, vil det skje etter fem milliarder århundrer, forutsatt at en disk beveger seg i løpet av ett sekund. Imidlertid ble både problemet og legenden om det oppfunnet i 1883 av matematikeren Edouard Luca fra Saint-Louis College.

Ett av de tre diamantspirene har 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.

En oppgave. Skriv et rekursivt program som løser tårnene i Hanoi-problemet ovenfor med n disker (n = 1, 2, …). Løsning. Skriv inn navnene på spirene: a, b, c. La være hanoi(n,a,b,c) er den ønskede funksjonen som returnerer sekvensen av forskyvninger av disker med enb ved hjelp av c i henhold til reglene ovenfor. For n=1 kan vi løse problemet. Du trenger bare å utføre operasjonen "move enb". La oss anta at vi kan løse dette problemet for n - 1 disker. La oss flytte n-1 disker med enfra. Deretter flytter du den gjenværende kjøreturen fra enb og til slutt flytte n-1 disker med cb. Inndata: antall skiver på pinne a; Produksjon: sekvensering; Step0: (definere typen variabler); Trinn 1: (beskrivelse av hanoi-prosedyren som gir ut en sekvens av handlinger); Trinn 1.1: (flytt (n-1) skiver fra pinne a til pinne b); Trinn 1.2: (flytt n'te disk 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: (skrive inn antall disker); Trinn 2.2: (kaller hanoi-prosedyren). Problemløsning i Pascal Program bahnya; varn: 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:="b"; c:="c"; hanoi (n,a,c,b); readln; end. Lekser Skriv et program for å beregne graden med naturlig eksponent Gitt: gradsgrunnlag X Eksponent til Hvis k=0, så grad(k,x)=1, Ellers grad(k,x)=x grad(k-1,x) Program stepen; variere: ekte; n: heltall funksjonstrinn(k:heltall, x:reell): reell; begynne Hvis k = 0 Så trinn:= 1 annet trinn:= x * trinn(k-1,x) Slutt; start write('vvedite foundation stepeni x='); readln(y); write('vvedite pokazatel stepeni k='); readln(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 med 20 elementer
  • Bytt om verdiene til to heltall
  • Bestill verdiene til tre variabler a, b, c i stigende rekkefølge
  • Finn antall sifre i et naturlig tall n
  • Finn det største av tre gitte tall
  • Finn antall positive tall blant fire A, B, C, D
Selvstudiumssvar #2 Enkelt program; var n, m, s: heltall; funksjon prost(m, n:heltall): boolsk; begynne Hvis n = m Så prost:= true else prost:= (n mod m<>0) og enkel (m+l, n); slutt; begynne å skrive('n='); readln(n); M:=2; Hvis prost(m,n) så skriv (n,'prostoechislo') Ellers skriv (n,'sammensetning'); readln; slutt.

program oversettelse;

prosedyre dvd(n:longint);

Hvis n >1 Da dvd(n div 2);

skriv(n mod 2);

Hensikten med leksjonen

pedagogisk

  • å danne i studentene et enhetlig system av begreper knyttet til begrepene prosedyre og funksjon;
  • lære hvordan du bruker subrutiner til å løse problemer i Pascal, samt lære deg å forstå hvilken type subrutine som trengs når du skal løse et spesifikt problem;
  • vise de grunnleggende teknikkene 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 å skrive og feilsøke subrutiner i Pascal.

Studentene må:

  • kjenne reglene for å skrive prosedyrer uten parametere og med parametere;
  • kjenne reglene for registrering av funksjoner;
  • kunne anvende prosedyrer og funksjoner for å løse enkle problemer.

I løpet av timene

I. Org. øyeblikk

II. Introduksjon. Relevans

Utsted en oppgave på arkene ( Vedlegg 1 ). Finn gjentakelser.

Noen ganger på forskjellige steder i programmet er det nødvendig å utføre nesten samme sekvens av handlinger med forskjellige innledende data. Slike handlingsrekkefølger kan formaliseres i form av såkalte subrutiner (fra engelsk, subrutine) - grupper setninger i en blokk som kan refereres til ved navn, og mer enn én gang.

Subrutiner reduserer teksten til programmet, reduserer kjøringstiden betydelig, gjør livet enklere for programmerere som kan lage programmer på en modulær måte, 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 til å 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 et gitt program finner ikke handlinger direkte analoger i Turbo Pascal-biblioteker, og da må programmereren utvikle sin egen ikke-standard prosedyrer og funksjoner.

III. Forklaring av nytt materiale

Brukerprosedyrer er skrevet av oss programmerer i samsvar med syntaksen til språket i delrutinebeskrivelsesdelen.

Strukturen til prosedyren gjentar 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 ... // delen av deklarasjonen av variabler i hovedprogrammet

prosedyre Prosedyrenavn;

//hoveddelen av programmet

Kalle en prosedyre for etterfølgende utførelse er skrevet i hoveddelen av hovedprogrammet.

Eksempel 1 Program for å beregne areal og omkrets.

Fordeler med subrutiner:

  • Programmer skrevet med subrutiner lettere å teste og feilsøke, de har klarere logisk struktur.
  • Den selvstendige naturen til underprogrammer gjør det mulig å overlate deres kompilering til forskjellige programmerere. Dette er hvordan delingen av programmeringsarbeidet utføres og dermed fullføringen påskyndes;
  • Bruk av subrutiner sparer minne. Minne for lagring av variabler brukt i en subrutine tildeles kun for varigheten av dens utførelse og frigjøres så snart utførelsen avsluttes.

Eksempel 2 Brukeren legger inn to sider av tre rektangler. Ta frem området deres.

Du kan løse problemet slik:

for i:=1 til 3 do

writeln('Skriv inn a og b:');

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

Det anses som god programmeringsstil å bruke prosedyrer. Vi trenger en prosedyre som vil beregne arealet til et rektangel. Her er hvordan hovedprogrammet vil se skjematisk ut:

beregning

beregning

beregning

Tekstprosedyren er der 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 overskriften til subrutinen, 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 fra hverandre med komma og omsluttet i parentes:

De faktiske parameterne må samsvare i type og mengde med de formelle.

Så hovedprogrammet er:

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('rektangelsider kan ikke være negative');

stanse; // programavbrudd

Endelig program - Vedlegg 4

Så formatet på prosedyren er:

fremgangsmåte<имя>(formelle parametere);

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

Eksempel 3 Skriv et program for å bytte plass på to tall c=5 og d=7.

programutvekslingDan;

var c,d:heltall;

prosedyre obmen(a,b:heltall);

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

writeln("Skriv inn 2 tall: ");

writeln(c," ",d);

Etter oppstart av programmet kan man se at de formelle parameterne (i prosedyren) har endret plass, men de faktiske (som brukes i hovedprogrammet) er ikke endret. Tenk 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 er dataene ikke endret, fordi de er på andre minneplasseringer.

For variablene c og d, a og b referert til de samme minnecellene (hvis verdiene til a og b endres, vil verdiene til c, d også endres) når du beskriver de formelle parameterne, legg til ordet VAR før de nødvendige variablene:

prosedyre obmen (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 prosedyren 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, bruker de funksjoner (subrutiner som returnerer noe).

Funksjonen ligner prosedyren, men det er to forskjeller.

  • Funksjonen overfører resultatet av arbeidet til programmet - den eneste verdien hvis bærer er navnet på funksjonen.
  • Funksjonsnavnet kan inkluderes i uttrykket som en operand. Funksjonen returnerer resultatet ved anropspunktet.

For eksempel vil sqr(x) kvadrere verdien av x og returnere den beregnede verdien av kvadratet av tallet x til kallepunktet: y:=sqr(x);

En brukerdefinert funksjon består av en overskrift og en funksjonstekst. Kroppen til en funksjon ligner i strukturen på et program. Beskrivelse av etiketter, konstanter, typer osv. kun gyldig innenfor 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 omskrive problemet med arealet av en sirkel.

funksjon sirkel(r:virkelig): ekte;

a:=sirkel(5); (MÅ tildele)

Eksempel 6 Finn 1!+2!+…+n!

Vi bruker funksjonen med å finne faktoren, fordi vi mater den som input og får resultatet.

funksjon fakta(a:heltall): heltall;

for i:=1 til en do

I linjen fakta:=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;

varsum,n,j: heltall;

funksjon fakta(a:heltall): heltall;

var i,d: heltall;

for i:=1 til en do

for j:=1 til n do

sum:=sum+fakta(j);

IV. Leksjonssammendrag

På dette tidspunktet begynner programmeringsprosessen å bli industriell produksjon av programmer basert programmeringsteknologier. De fleste eksperter mener det ovenfra og ned programvaredesignmetode best egnet for å løse komplekse problemer. Først er oppgaven definert i generelle termer, deretter er det en gradvis foredling av strukturen. På neste trinn er hver deloppgave på sin side delt inn i en rekke andre. Løsningen av et separat fragment av et komplekst problem er en uavhengig programblokk - en subrutine.

V. Lekser

Løs problemer (skriftlig):

  1. Skriv en prosedyre som erstatter alle bokstavene a med * i inndatastrengen.
  2. Det gis to forslag. Finn det totale antallet bokstaver "n" i dem. (Definer en funksjon for å beregne antall "n" bokstaver i en setning.)

lysbilde 1

lysbilde 3

Subrutiner: Globale og lokale variabler Alle subrutiner må deklareres i en deklarasjonsdel. Hver subrutine må ha et navn. Informasjon mellom hovedprogrammet og subrutinene overføres av globale parametere (variabler) som virker i en hvilken som helst del av programmet, og har navnet beskrevet i hovedprogrammet. Inne i subrutinen kan lokale parametere (variabler) brukes - deres navn og verdier gir mening bare innenfor grensene til denne subrutinen og er ikke tilgjengelige for det anropende programmet

lysbilde 4

Formelle og faktiske parametere I beskrivelsen av underprogrammer er parameterne kun angitt med navn, så de kalles formelle. Inntil subrutinen kalles, har de ingen mening. De reserverer kun plass for de faktiske parameterne, og fikser nummeret og datatypen. Faktiske parametertyper: Verdiparametere indikerer hvilken verdi som skal tildeles en bestemt subrutineparameter. Etter at subrutinen avsluttes, tar de på seg sine tidligere verdier, selv om de ble endret i subrutinen. Variabelparametrene i subrutinen tar plassen til de formelle, kan endre deres verdi under utførelsen av subrutinen, og lagre endringene når subrutinen avsluttes (nøkkelordet Var står foran variabelparametrene).

lysbilde 5

lysbilde 6

Beskrivelse av fremgangsmåten Program Pr1; Const...Type...Var...Prosedyre(); Beskrivelse Start Prosedyre body End; Begynne ... (); …slutt. Når prosedyren kalles, erstattes de formelle parameterne med de faktiske.

Lysbilde 7

Prosedyren for å beregne summen av to tall program pr1; Bruk crt; Var a,b,s:real; prosedyre summa(x,y:real;var z:real); beginz:=x+y; slutt; begynne clrscr; writeln("Skriv inn a,b"); readln(a,b); summa(a, b, s); writeln(" sum av tall ",a:3:1," og ",b:3:1," = ",s:3:1); readln; slutt. x,y,z – formelle parametere, lokale variabler a,b,s – globale variabler a,b,s – faktiske parametere x y z a b s Parameter-verdier Parameter-variabel

Lysbilde 8

Lysbilde 9

lysbilde 10

Regn ut verdien av uttrykket a:=(3n!+2m!)/(m+n)! Hvilken type variabler skal brukes for å finne faktoren? programpr2; Bruk crt; Varm,n,x,y,z:heltall; a:real; prosedyrefakta(d:heltall;var q:heltall); var i:heltall; beginq:=1; for i:=1 til d gjør q:=q*i; slutt; begynne clrscr; writeln("skriv inn verdiene n, m"); readln(n,m); faktum(n, x); faktum(m,y); faktum(m+n,z); a:=(3*x+2*y)/z; writeln("verdi av uttrykk når m= ",m:4," og n= ",n:4,"er lik",a:8:3); readln; slutt. N!=1 2 3… N

lysbilde 11

Inndata for elementer i en endimensjonal matrise Tilfeldig(X)-funksjonen genererer et tilfeldig tall fra 0 til X av en heltall eller reell type (før funksjonen kalles, må den initialiseres ved hjelp av Randomize-prosedyren). Hvis X ikke er spesifisert, vil resultatet være av typen Real mellom 0,0 og 1,0. For å få en matrise med heltalls tilfeldige tall fra området random(B-A+1)+A Oppgave: Ordne inngangen til elementene i en endimensjonal matrise ved å bruke en tilfeldig tallgenerator (verdiområde fra -10 til 20) og utdata elementer som prosedyrer. For A=-10 B=20 tilfeldig(20-(-10)+1)+(-10)

lysbilde 12

lysbilde 13

lysbilde 14

Beskrivelse av funksjonen Funksjoner er designet for å beregne bare én verdi, 1. Derfor er den første forskjellen at prosedyren kan ha nye verdier for flere parametere, og funksjonen har bare én (det vil være resultatet). 2. Den andre forskjellen er funksjonsoverskriften. Den består av ordet FUNCTION, etterfulgt av navnet på funksjonen, etterfulgt av en liste over formelle parametere i parentes, etterfulgt av typen resultat av funksjonen, atskilt med et kolon. 3. Funksjonskroppen må inneholde minst én tilordningsoperatør, der funksjonsnavnet er på venstre side, og verdien er på høyre side. Funksjon (): Beskrivelse Start Funksjon body:=; slutt;

lysbilde 15

Regn ut verdien av uttrykket a:=(3n!+2m!)/(m+n)! program fn2; Bruk crt; Varm,n:heltall; a:real; funksjon fakta(d:heltall) :longint; var i:heltall; q:longint; beginq:=1; for i:=1 til d gjør q:=q*i; faktum:=q; slutt; begynne clrscr; writeln("skriv inn verdiene n, m"); readln(n,m); a:=(3*fakta(n)+2*fakta(m))/fakta(m+n);; writeln("verdi av uttrykk når m= ",m:4," og n= ",n:4,"er lik",a:8:3); readln; slutt.

lysbilde 16

Skriv et program som vil finne ab, det vil si b-te potensen til tallet A, der A og B er heltall og B>0, angitt fra tastaturet. Skriv et program, erstatt funksjonen med prosedyreprogrammet pr2; Bruk crt; var a,b:heltall; c:longint; Funksjonstrinn(x,y:heltall):longint; var i:heltall; s:longint; begynner s:=1; for i:=1 til y gjør s:=s*x; Stephen:=s; slutt; begynne clrscr; writeln("skriv inn verdier a, b"); readln(a,b); C:=trinn(a,b); writeln("s=",s); readln; slutt.

lysbilde 17

lysbilde 18

Mekanisme for å overføre parametere til funksjoner og prosedyrer. Hva vil bli skrevet ut av prosedyren og hva av programmet? Globale variabler Lokale variabler a b 3 3 -3 Adresse c a b c 48 Adresse c A:=b+3 B:=3*a C:=a+b Tilstand C 24 5 8 Svar

lysbilde 19


subrutiner i TurboPascal


  • subrutine det er en navngitt logisk komplett gruppe av kommandoer som kan kalles for utførelse et hvilket som helst antall ganger fra forskjellige steder i programmet.

Grunner til å bruke subrutiner

  • forenkle utviklingen av store programmer ved å dekomponere (dele) en oppgave i flere deloppgaver;
  • større synlighet av programmet;
  • sparer minne.

Typer underprogrammer

prosedyrer

funksjoner

  • Fremgangsmåte er en uavhengig navngitt del av programmet designet for å utføre spesifikke handlinger.

Prosedyrer uten parametere

  • Opptaksformat :

fremgangsmåte ;

slutt ;

  • Alle variabler som brukes i prosedyrer uten parametere er beskrevet i hovedprogrammet (i Var-modulen).

Eksempel . Skriv et program for å finne volumet til en sylinder.

program sylinder;

Var R, H, V: ekte;

Inndataprosedyre ; (dataregistreringsprosedyre)

Writeln('Skriv inn radiusverdien');

writeln('Skriv inn høydeverdi');

fremgangsmåte; { fremgangsmåte beregninger volum }

V:=PI*sqr(R)*H;

Output Prosedyre ; ( utdataprosedyre )

writeln('V=',V);


Prosedyrer c parametere

  • Prosedyrer kan beskrive konstanter, variabler og andre prosedyrer.
  • Beskrivelsesdelen i prosedyrer har samme struktur som i hovedprogrammet.
  • Lokale variabler er variabler deklarert i en prosedyre.
  • Lokale variabler er ikke tilgjengelige utenfor en prosedyre.
  • Endringer i lokale variabler i en prosedyre påvirker ikke verdiene til variabler med samme navn, men erklært utenfor prosedyren.

Prosedyrer c parametere

  • Globale variabler

Eksempel .

programoppgave;

Var a, b: heltall;

prosedyrelokale;

Var a, x: char; Til prosedyrer lokale:

begynne variabel x - lokal variabel

a:='! '; (programmet kan ikke endre verdien)

b:=b+1; variabel b - global variabel

slutt ; (alle endringer i verdien av denne variabelen i prosedyren

BEGIN beholdes selv etter at prosedyren er avsluttet)

b:=100; variabel en i hovedprogrammet hele typen,

lokalt; og i prosedyre - tegntype. variabel a

writeln('a=', a); heltallstype er ikke tilgjengelig i den lokale prosedyren.

writeln('b=',b);

Resultatet av programkjøringen: a=0; b=101.


); start; slutt ; "width="640"

Sender parametere til Turbo Pascal

  • 1. Sende parametere etter verdi
  • Verdiparametere variabler deklarert etter prosedyrenavnet i parentes. Før dem er det ikke noe tjenesteord Var .
  • Opptaksformat :

fremgangsmåte (:

variabel);

slutt ;


  • formelle parametere .
  • faktiske parametere .

Eksempel .

program parameter;

Var m, n: heltall;

sum Prosedyre(a, b: heltall);

writeln('S=',S);

summa(m,n); eller summa(100,10);

Variabler en Og b er formelle parametere og variabler m Og n - faktiske. Faktiske parameterverdier m =100 og n =10 sendes til formelle parametere en Og b .

Endringer i faktiske parametere skjer kun innenfor prosedyren og påvirker dem ikke utenfor prosedyren.


; var variabel:); start; slutt ; "width="640"

Sender parametere til Turbo Pascal

  • 2. Sende parametere etter navn
  • Variable parametere variabler deklarert etter prosedyrenavnet i parentes og innledet med tjenesteordet Var .
  • Opptaksformat :

fremgangsmåte (:

variabel; Var

variabel:);

slutt ;



b så min:= b; hvis min c så min:= c; slutt ; BEGIN writeln('Skriv inn tre tall'); readln(a1, b1, cl); writeln (' skriv inn tre tall '); lesln(a2,b2,c2); minimum(a1,b1,c1, min1); minimum(a2,b2,c2, min2); S:= min1 + min2; writeln('S=', S); SLUTT. Eksempel. Gitt to trillinger av tall: a 1, b 1, c 1 og a 2, b 2, c 2. Finn verdien av summen: S=min (a1, b1, c1) + min (a2, b2, c2) "width=" 640"

Var a1,b1,c1,a2,b2,c2, min1, min2, S: reell;

Prosedyreminimum (a,b,c: reell; Varmin: reell);

hvis min b så min:= b;

hvis min c så min:= c;

writeln('Skriv inn tre tall');

readln(a1, b1, cl);

writeln (' skriv inn tre tall ');

lesln(a2,b2,c2);

minimum(a1,b1,c1, min1);

minimum(a2,b2,c2, min2);

S:= min1 + min2;

writeln('S=', S);

Eksempel. Gitt to trillinger av tall: a 1, b 1, c 1 og a 2, b 2, c 2. Finn verdien av summen: S=min (a1, b1, c1) + min (a2, b2, c2)


Funksjon er en subrutine hvis resultat er en verdi.

  • Opptaksformat :

funksjon (:

slutt ;

  • I funksjonskroppen må funksjonsnavnet tildeles resultatet av dens utførelse.
  • Når en funksjon kalles, må navnet med en liste over faktiske parametere inkluderes i uttrykket som en operand.

programuttrykk;

funksjonsmodul (a: ekte) : ekte;

writeln('Skriv inn verdien av variabelen');

y:= modul(x-3) + modul(x+6);

writeln ('y=', y);

Eksempel . Regn ut verdien av uttrykket: y = | x -3 | + | x+6 |