Procedures en functies in Pascal. Herhaling. Subroutines Vaak wil je in een taak een bepaalde reeks uitspraken herhalen in verschillende delen van het programma. Procedures en functies in Pascal presentatie voor de les over informatica en ict (graad 11) over onderwerp III. OVER

Recursie in Pascal Docent: Tlekhurai Yu.V. MOU "Lyceum No. 8" Wat zie je op de foto's? Dit fenomeen in de kunst heet herhaling "Om recursie te begrijpen, moet je eerst recursie begrijpen." recursie - gedeeltelijke definitie van een object door zichzelf, definitie van een object met behulp van eerder gedefinieerde. Wetenschappelijk gezien: herhaling - een methode om een ​​klasse van objecten of methodes te definiëren door eerst een of meer (meestal eenvoudige) basisgevallen of methodes ervan te specificeren, en dan, op basis daarvan, de regels te specificeren voor het construeren van de klasse die gedefinieerd wordt. Peter Deutsch Peter Deutsch

Iteratie van de mens.

Recursie is van God.

Recursie in de natuurkunde Recursie in taal en literatuur Een klassiek voorbeeld van oneindige recursie is twee spiegels tegenover elkaar geplaatst: er worden twee gangen van vervagende reflecties van spiegels gevormd. Een ander voorbeeld van oneindige recursie is zelfexcitatie (positieve feedback) effect in elektronische versterkingscircuits, wanneer het signaal van de uitgang de ingang raakt, wordt versterkt, de ingang van het circuit opnieuw raakt en opnieuw wordt versterkt. Versterkers waarvoor deze werkwijze standaard is, worden zelfoscillatoren genoemd. Een voorbeeld van een recursief woordenboekitem: "De priester had een hond ..." - een typische recursie Verschillende verhalen van Stanislav Lem zijn gewijd aan incidenten met oneindige recursie: Een verhaal over graven ("The Star Diaries of John the Quiet") , waarin de held achtereenvolgens van een artikel over sepulks naar een artikel over sepulation gaat, van daar naar het artikel over sepulcaria, waarin weer een verwijzing naar het artikel "sepulcaria" staat. Een verhaal over een intelligente machine die slim en lui genoeg was om een ​​vergelijkbare machine te bouwen om de taak op te lossen en de oplossing eraan toe te vertrouwen (het resultaat was een eindeloze herhaling, wanneer elke nieuwe machine zijn eigen vergelijkbare machine bouwde en de taak overdroeg aan het). Recursie in programmeren is een manier om een ​​rekenproces te organiseren waarin een procedure of functie naar zichzelf verwijst tijdens de uitvoering van de samenstellende instructies. Om ervoor te zorgen dat een dergelijke aanroep niet oneindig is, moet de tekst van de subroutine een voorwaarde bevatten bij het bereiken waarvan er geen verdere aanroep plaatsvindt. dus een recursieve oproep kan alleen worden opgenomen in een van de takken van de subroutine. Voorbeeld. De faculteit van een natuurlijk getal berekenen Stel een recursieve functie samen die de faculteit van een getal n als volgt berekent: functie f (n: geheel getal): longint; begin als n = 1 dan f:= 1 else f:= n * f(n -1); (functie f roept zichzelf op) beëindig Pascal-programma met behulp van recursie: Var n: geheel getal; een:longint; functie faculteit (n: geheel getal): longint; begin als n = 1 dan faculteit:= 1 else faculteit:= n * faculteit (n -1); einde; Begin met schrijven('n='); leesln(n); A:=faculteit(n); Schrijf('n!=',a); lees; einde. Leonardo Pisan Fibonacci

Fibonacci-getallen zijn elementen van een numerieke reeks

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..., waarbij elk volgend getal gelijk is aan de som van de vorige twee.

Taak: Toon een reeks Fibonacci-getallen op het scherm, bestaande uit n elementen. Beschrijving van variabelen: n is het aantal elementen in de rij; a, b zijn de waarden van de laatste twee elementen van de reeks; c is een buffer ("reserve") variabele; ik - teller. Algoritme voor het oplossen van het probleem: 1. Verkrijg de waarde van n. 2. Wijs a en b respectievelijk de waarden 0 en 1 toe (dit zijn de eerste cijfers van de Fibonacci-reeks). Breng ze naar het scherm. 3. Beginnend vanaf het 3e element tot en met n: a) toon de som van a en b, b) sla de waarde van de variabele b op in c, c) schrijf de som van a en b op b, d) ken a toe aan c . Pascal-programma met iteratie: programma Fibonacci; var a,b,c,i,n: geheel getal; beginnen schrijven("n = "); leesln(n); een:=0; Schrijf een," "); b:= 1; schrijf (b," "); voor i:=3 tot n begin schrijf(a+b," "); c:=b; b:= een + b; een:=c; einde; lees; einde. Pascal-programma met recursie: De recursieve definitie voor het berekenen van Fibonacci-getallen is als volgt: Deze definitie van Fibonacci-getallen kan eenvoudig worden omgezet in een recursieve functie: functie f(n: Integer) : longint; begin als 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. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа maar En B. Als maar= B, dan knoop ( maar,b) = een. Als maar>B, dan knoop ( maar,b)= knoop ( een -b,B). Als maar< B, dan knoop ( maar,b)= knoop ( maar,b-a). Programma noddvyxchisel; var a,b: longint; functie nod(a,b:longint): longint; begin Als a = b Dan knik:= a anders als a>b dan knik:= knik(a-b,b) else knik:= knik(a,b-a) Einde; begin met schrijven('a='); leesln(a); schrijven('b='); leesln(b); A:=knik(a,b); schrijven('nod=',a); lees; einde. Torens van Hanoi probleem. In dit geval moeten de volgende regels strikt worden nageleefd:

  • Er kan slechts één schijf tegelijk worden verplaatst;
  • een grotere schijf kan niet op een kleinere schijf worden geplaatst;
  • de verwijderde schijf moet op een kaapstander worden geplaatst voordat een andere schijf wordt verwijderd.
  • Hardwerkende boeddhistische monniken dragen dag en nacht schijven van torenspits naar torenspits. De legende zegt dat wanneer de monniken klaar zijn met hun werk, het einde van de wereld zal komen. Je zou kunnen berekenen dat er 264-1 zetten nodig zijn om het probleem met 64 schijven op te lossen. Wat het einde van de wereld betreft, zal het dus na vijf miljard eeuwen plaatsvinden, ervan uitgaande dat één schijf in één seconde beweegt. Zowel het probleem als de legende ervoor werden echter in 1883 uitgevonden door de wiskundige Edouard Luca van het Saint-Louis College.

Een van de drie diamanten spitsen heeft 64 ronde gouden schijven. De schijven hebben verschillende radii en bevinden zich op de spits in aflopende volgorde van radii van basis naar top. Het is nodig om de schijven van de eerste spits naar de tweede over te brengen, indien nodig met behulp van de derde spits.

Een taak. Schrijf een recursief programma dat het bovenstaande probleem van de torens van Hanoi oplost met n schijven (n = 1, 2, …). Oplossing. Vul de namen voor de torens in: a, b, c. laten zijn hanoi(n,a,b,c) is de gewenste functie die de reeks verplaatsingen van schijven retourneert met een op de B gebruik makend van C volgens bovenstaande regels. Voor n=1 kunnen we het probleem oplossen. U hoeft alleen de bewerking "verplaatsen" uit te voeren een op de B". Laten we aannemen dat we dit probleem voor n - 1 schijven kunnen oplossen. Laten we n-1 schijven verplaatsen met een op de van. Verplaats vervolgens de ene resterende schijf van een op de B en verplaats tenslotte n-1 schijven met C op de B. Invoergegevens: aantal schijven op pin a; Uitgang:: volgorde aanbrengen in; Step0: (definiëren van het type variabelen); Stap 1: (beschrijving van de Hanoi-procedure die een reeks acties uitvoert); Stap 1.1: (verplaats (n-1) schijven van pin a naar pin b); Stap 1.2: (verplaats de nde schijf van a naar c); Stap1.3: (verplaats (n-1) schijf van b naar c); (stappen 1.2-1.3 worden recursief uitgevoerd); Stap2:(hoofdprogramma); Step2.1: (het aantal schijven invoeren); Step2.2: (aanroepen van de Hanoi-procedure). Problemen oplossen in Pascal Programma bahnya; varn: geheel getal; a,b,c: char; procedure hanoi(n: geheel getal;a,b,c: char); begin als n>0 begin hanoi(n-1,a,c,b); writeln ("Peremestit disk so sterzhnya ",a,"na sterzhen" ",b); hanoi(n-1,c,b,a); end; end; Begin met schrijven ("Vvedite naturalnoe chislo n"); readln ( n); a:="a"; b:="b"; c:="c"; hanoi (n,a,c,b); readln; end. Huiswerk Schrijf een programma om de graad te berekenen met natuurlijke exponent Gegeven: basis van graad x Exponent naar Als k=0, dan graad(k,x)=1, Anders graad(k,x)=x graad(k-1,x) Programmeer stepen; variëren: echt; n: geheel getal functiestap (k: geheel getal, x: reëel): echt; begin Als k = 0 Dan stap:= 1 else stap:= x * stap(k-1,x) Einde; begin write('vvedite foundation stepeni x='); leesln(y); write('vvedite pokazatel stepeni k='); leesln(n); write('x v stepeni k=', step(n, y)); lees; einde. Onafhankelijk werk

  • Vind de som van de cijfers van een getal
  • Bepaal of een bepaald natuurlijk getal een priemgetal is
  • Zoek het eerste cijfer van een getal
  • Converteer natuurlijk getal van decimale s.s. naar binair
  • Vind de som van de elementen van een integer-array van 20 elementen
  • Verwissel de waarden van twee gehele getallen
  • Bestel de waarden van drie variabelen a, b, c in oplopende volgorde
  • Zoek het aantal cijfers in een natuurlijk getal n
  • Vind de grootste van drie gegeven getallen
  • Vind het aantal positieve getallen onder vier A, B, C, D
Zelfstudie antwoorden #2 Programma simpel; var n, m, s: geheel getal; functie prost(m, n:integer): boolean; begin Als n = m Dan prost:= true else prost:= (n mod m<>0) en eenvoudig (m+1, n); einde; begin schrijven('n='); leesln(n); M:=2; Als prost(m,n) schrijf dan (n,'prostoechislo') Anders schrijf (n,'compositie'); lees; einde.

programma vertaling;

procedure dvd(n:longint);

Als n >1 Dan dvd(n div 2);

schrijven (n mod 2);

Het doel van de les

leerzaam

  • om bij studenten een uniform systeem van concepten te vormen met betrekking tot de concepten procedure en functie;
  • leren hoe u subroutines kunt gebruiken bij het oplossen van problemen in Pascal, en u ook leren begrijpen welk type subroutine nodig is bij het oplossen van een specifiek probleem;
  • de basistechnieken tonen voor het gebruik van subroutines;

leerzaam

  • om nauwkeurigheid, aandacht, organisatie te cultiveren;
  • cultuur van computervaardigheden;

ontwikkelen

  • het ontwikkelen van logisch denken, algoritmische cultuur van studenten;
  • kennis en vaardigheden ontwikkelen om subroutines in Pascal te schrijven en te debuggen.

Studenten moeten:

  • ken de regels voor het schrijven van procedures zonder parameters en met parameters;
  • ken de regels voor opnamefuncties;
  • procedures en functies kunnen toepassen om eenvoudige problemen op te lossen.

Tijdens de lessen

ik. Org. moment

II. Invoering. Relevantie

Geef een taak op de bladen ( Bijlage 1 ). Vind herhalingen.

Soms is het op verschillende plaatsen van het programma nodig om bijna dezelfde reeks acties uit te voeren met verschillende initiële gegevens. Dergelijke opeenvolgingen van acties kunnen worden geformaliseerd in de vorm van zogenaamde subroutines (van Engels, subroutine) - groepeer uitspraken in een blok waarnaar bij naam kan worden verwezen, en meer dan eens.

Subroutines verminderen de tekst van het programma, verkorten de uitvoeringstijd aanzienlijk, maken het leven gemakkelijker voor programmeurs die programma's op een modulaire manier kunnen maken, dat wil zeggen door een complex programma samen te stellen uit voltooide stukken van eenvoudigere componenten. Hierdoor kan een groep programmeurs grote programma's maken en een groep schoolkinderen wereldwijde projecten ontwikkelen en implementeren.

Subroutines zijn onderverdeeld in procedures en functies.

Ingebouwde (standaard) procedures en functies zijn: een deel taal en kan bij naam worden genoemd zonder voorafgaande beschrijving. Bijvoorbeeld , abs, sqrt, ln, sin... zijn functies (retourneer een resultaat), readln, write... zijn procedures (retourneer geen resultaat). Hun aanwezigheid vergemakkelijkt de ontwikkeling van applicatieprogramma's enorm. Echter, in de meeste gevallen sommige specifiek voor een bepaald programma vinden acties geen directe analogen in Turbo Pascal-bibliotheken, en dan moet de programmeur zijn eigen niet standaard procedures en functies.

III. Uitleg van nieuw materiaal

Gebruikersprocedures zijn geschreven door onszelf programmeur in overeenstemming met de syntaxis van de taal in subroutine beschrijving sectie.

De structuur van de procedure herhaalt de structuur van het programma, het is een "programma in miniatuur" - het wordt ook weergegeven door een kop en een hoofdtekst.

De kop bestaat uit de procedure voor gereserveerde woorden, de identifier (naam) procedures.

VAR ... // sectie van de declaratie van variabelen van het hoofdprogramma

procedure Procedurenaam;

//hoofdtekst van het programma

Het aanroepen van een procedure voor latere uitvoering is geschreven in de hoofdtekst van het hoofdprogramma.

voorbeeld 1 Programma voor het berekenen van oppervlakte en omtrek.

Voordelen van subroutines:

  • Programma's geschreven met subroutines gemakkelijker te testen en te debuggen, ze hebben duidelijker logische opbouw.
  • Het op zichzelf staande karakter van subprogramma's maakt het mogelijk om hun compilatie aan verschillende programmeurs toe te vertrouwen. Dit is hoe de verdeling van programmeerwerk wordt uitgevoerd en daardoor wordt de voltooiing ervan versneld;
  • Het gebruik van subroutines bespaart geheugen. Geheugen voor het opslaan van variabelen die in een subroutine worden gebruikt, wordt alleen toegewezen voor de duur van de uitvoering en wordt vrijgegeven zodra de uitvoering eindigt.

Voorbeeld 2 De gebruiker voert twee zijden van drie rechthoeken in. Breng hun gebied naar buiten.

U kunt het probleem als volgt oplossen:

voor i:=1 tot 3 do

writeln('Voer a en b in:');

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

Het wordt als een goede programmeerstijl beschouwd om procedures te gebruiken. We hebben een procedure nodig die de oppervlakte van een rechthoek berekent. Zo ziet het hoofdprogramma er schematisch uit:

berekening

berekening

berekening

De tekstprocedure is er al (zie voorbeeld 1). Laten we een tweede procedure maken die de oppervlakte berekent. Maar om S te berekenen, moet je 2 zijden kennen, dus de procedure moet laten zien welke zijden het moet vermenigvuldigen.

procedure pl(c,d: geheel getal);

writeln(‘gebied van een rechthoek met zijden ’,c, ‘‘,d, ‘=‘,S);

Een parameter is een variabele waaraan een waarde is toegekend. Bestaan formele parameters: gedefinieerd in de kop van de subroutine, en werkelijke parameters: – uitdrukkingen die specifieke waarden specificeren bij toegang tot een subroutine.

De procedure wordt uitgevoerd als u deze bij de naam noemt en de feitelijke parameters opgeeft , door komma's van elkaar gescheiden en tussen haakjes geplaatst:

De feitelijke parameters moeten qua type en aantal overeenkomen met de formele.

Het hoofdprogramma is dus:

voor i:=1 tot 3 do

Opmerking. Bij het oplossen van dit probleem is het noodzakelijk om de door de gebruiker ingevoerde cijfers te controleren (ze mogen niet negatief zijn, anders wordt het programma onderbroken).

Laten we een verificatieprocedure maken:

procedurefout (f,g:geheel getal);

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

writeln('rechthoekige zijden kunnen niet negatief zijn');

stoppen; // programma onderbreking

Eindprogramma - Bijlage 4

Het formaat van de procedure is dus:

procedure<имя>(formele parameters);

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

Voorbeeld 3 Schrijf een programma om plaatsen van twee getallen c=5 en d=7 uit te wisselen.

programma uitwisselingDan;

var c,d:geheel getal;

procedure obmen(a,b:geheel getal);

m:=een; een:=b; b:=m;

writeln("Voer 2 cijfers in: ");

writeln(c," ",d);

Na het starten van het programma is te zien dat de formele parameters (in de procedure) van plaats zijn veranderd, maar de werkelijke (die in het hoofdprogramma worden gebruikt) niet zijn gewijzigd. Beschouw de afbeelding, die een deel van het RAM-geheugen laat zien:

1) bij het aanroepen van de obmen-procedure met twee parameters 5 en 7 worden de cijfers 5 en 7 ook in respectievelijk de variabelen a en b geplaatst:

3) maar in de variabelen c en d zijn de gegevens niet veranderd, omdat ze bevinden zich op andere geheugenlocaties.

Om de variabelen c en d, a en b verwezen naar dezelfde geheugencellen (als de waarden van a en b veranderen, dan zullen de waarden van c, d ook veranderen) bij het beschrijven van de formele parameters, voeg het woord VAR toe voor de noodzakelijke variabelen:

procedure obmen (var a,b:geheel getal);

Wijzig het obmenDan-programma:

Fout vanwege var. Getallen zijn constanten die in een procedure niet kunnen worden gewijzigd.

Voorbeeld 4 Vind het gebied van een cirkel met behulp van een procedure die alleen een berekening uitvoert, maar het resultaat niet op het scherm weergeeft.

procedurecirkel (r:echt);

De procedure zou het resultaat moeten retourneren:

procedurecirkel (r:real; var S:real);

leesln(a, e);

Opmerking: De variabele in de procedure S wordt gebruikt om de resultaten van de procedure terug te sturen naar het hoofdprogramma. Als het verandert, verandert ook de eigenlijke parameter in het oproepende programma, d.w.z. variabele e.

Vaker gebruiken ze hiervoor in Pascal in plaats van procedures functies (subroutines die iets teruggeven).

De functie is vergelijkbaar met de procedure, maar er zijn twee verschillen.

  • De functie draagt ​​het resultaat van zijn werk over aan het programma - de enige waarde waarvan de drager de naam van zijn functie is.
  • De functienaam kan als operand in de expressie worden opgenomen. De functie retourneert het resultaat op het punt van zijn aanroep.

Bijvoorbeeld, sqr(x) zal de waarde van x kwadrateren en de berekende waarde van het kwadraat van het getal x teruggeven aan de callpoint: y:=sqr(x);

Een door de gebruiker gedefinieerde functie bestaat uit een koptekst en een functietekst. Het lichaam van een functie is qua structuur vergelijkbaar met een programma. Beschrijving van labels, constanten, typen, enz. alleen geldig binnen deze procedure.

functie<имя>(formele parameters) :<тип результата>;

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

De instructiesectie moet ten minste één instructie bevatten die een waarde toewijst aan de functienaam. Het resultaat van de laatste toewijzing wordt teruggestuurd naar de melder.

Voorbeeld 5 Laten we het probleem van de oppervlakte van een cirkel herschrijven.

functiecirkel (r:reëel): echt;

a:=cirkel(5); (MOET toewijzen)

Voorbeeld 6 Vind 1!+2!+…+n!

We gebruiken de functie van het vinden van de faculteit, omdat we deze naar de invoer voeren en het resultaat krijgen.

functie feit(a:geheel getal): geheel getal;

voor i:=1 tot een do

In de regel feit:=feit*I;

de compiler zal een fout vinden omdat fact moet worden aangeroepen met parameters. Daarom wordt meestal een extra variabele geïntroduceerd waarin het resultaat wordt geplaatst. En dan wordt dit resultaat toegewezen aan de feitvariabele:

programma faculteit;

varsum,n,j: geheel getal;

functie feit(a:geheel getal): geheel getal;

var i,d: geheel getal;

voor i:=1 tot een do

voor j:=1 tot n do

som:=som+feit(j);

IV. Les samenvatting

Op dit moment verandert het programmeerproces in: industriële productie van programma's gebaseerd programmeertechnologieën. De meeste experts zijn van mening dat top-down software-ontwerpmethode meest geschikt voor het oplossen van complexe problemen. Eerst wordt de taak in algemene termen gedefinieerd, daarna vindt een geleidelijke verfijning van de structuur plaats. Bij de volgende stap wordt elke subtaak op zijn beurt onderverdeeld in een aantal andere. De oplossing van een afzonderlijk fragment van een complex probleem is een onafhankelijk programmablok - een subroutine.

V. Huiswerk

Problemen oplossen (schriftelijk):

  1. Schrijf een procedure die alle letters a vervangt door * in de invoerreeks.
  2. Er worden twee suggesties gegeven. Zoek het totale aantal letters "n" erin. (Definieer een functie om het aantal "n" letters in een zin te berekenen.)

glijbaan 1

schuif 3

Subroutines: globale en lokale variabelen Alle subroutines moeten worden gedeclareerd in een declaratiesectie. Elke subroutine moet een naam hebben. Informatie tussen het hoofdprogramma en de subroutines wordt verzonden door globale parameters (variabelen) die geldig zijn in elk deel van het programma en de naam hebben die in het hoofdprogramma wordt beschreven. Binnen de subroutine kunnen lokale parameters (variabelen) worden gebruikt - hun namen en waarden zijn alleen zinvol binnen de grenzen van deze subroutine en zijn niet beschikbaar voor het aanroepende programma

glijbaan 4

Formele en actuele parameters In de beschrijving van subprogramma's worden parameters alleen met namen aangegeven, daarom worden ze formeel genoemd. Totdat de subroutine wordt aangeroepen, hebben ze geen betekenis. Ze reserveren alleen ruimte voor de eigenlijke parameters en leggen hun aantal en gegevenstype vast. Actuele parametertypes: Waardeparameters geven aan welke waarde moet worden toegewezen aan een bepaalde subroutineparameter. Nadat de subroutine is beëindigd, keren ze terug naar hun vorige waarden, zelfs als ze in de subroutine zijn gewijzigd. De variabele parameters in de subroutine nemen de plaats in van de formele, kunnen hun waarde veranderen tijdens de uitvoering van de subroutine, en de wijzigingen opslaan wanneer de subroutine wordt afgesloten (het sleutelwoord Var staat voor de variabele parameters).

schuif 5

schuif 6

Beschrijving van de procedure Programma Pr1; Const...Type...Var...Procedure(); Beschrijving Begin Procedure hoofdtekst Einde; Beginnen ... (); …einde. Wanneer de procedure wordt aangeroepen, worden de formele parameters vervangen door de werkelijke.

Schuif 7

De procedure voor het berekenen van de som van twee getallen programma pr1; Gebruik crt; Var a,b,s:echt; procedure summa(x,y:real;var z:real); beginz:=x+y; einde; begin clrscr; writeln("Voer a,b in"); leesln(a,b); summa(a, b, s); writeln(" som van getallen ",a:3:1," en ",b:3:1," = ",s:3:1); lees; einde. x,y,z – formele parameters, lokale variabelen a,b,s – globale variabelen a,b,s – actuele parameters x y z a b s Parameterwaarden Parametervariabele

Schuif 8

Schuif 9

schuif 10

Bereken de waarde van de uitdrukking a:=(3n!+2m!)/(m+n)! Welk type variabelen moet worden gebruikt om de faculteit te vinden? programmapr2; Gebruik crt; Varm,n,x,y,z:geheel getal; een:echte; procedure feit(d:integer;var q:integer); var i:geheel getal; beginq:=1; voor i:=1 tot d doe q:=q*i; einde; begin clrscr; writeln("voer de waarden in n, m "); leesln(n,m); feit(n, x); feit(m,y); feit(m+n,z); a:=(3*x+2*y)/z; writeln("waarde van uitdrukking wanneer m= ",m:4," en n= ",n:4,"gelijk aan",a:8:3); lees; einde. N!=1 2 3… N

glijbaan 11

Invoeruitvoer van elementen van een eendimensionale array De functie Random(X) genereert een willekeurig getal van 0 tot X van een geheel getal of reëel type (voordat de functie wordt aangeroepen, moet deze worden geïnitialiseerd met behulp van de procedure Randomize). Als X niet is opgegeven, is het resultaat van het type Real tussen 0,0 en 1,0. Om een ​​array van gehele willekeurige getallen uit het bereik random(B-A+1)+A te krijgen Taak: Rangschik de invoer van elementen van een eendimensionale array met behulp van een generator voor willekeurige getallen (waardebereik van -10 tot 20) en uitvoer elementen als procedures. Voor A=-10 B=20 willekeurig (20-(-10)+1)+(-10)

schuif 12

dia 13

schuif 14

Beschrijving van de functie Functies zijn ontworpen om slechts één waarde te berekenen, 1. Daarom is het eerste verschil dat de procedure nieuwe waarden kan hebben voor verschillende parameters, en de functie heeft er maar één (dit zal het resultaat zijn). 2. Het tweede verschil zit in de functiekop. Het bestaat uit het woord FUNCTIE, gevolgd door de naam van de functie, gevolgd door een lijst van formele parameters tussen haakjes, gevolgd door het type resultaat van de functie, gescheiden door een dubbele punt. 3. De hoofdtekst van de functie moet ten minste één toewijzingsoperator bevatten, waarbij de functienaam aan de linkerkant staat en de waarde aan de rechterkant. Functie (): Beschrijving Begin Functie body:=; einde;

schuif 15

Bereken de waarde van de uitdrukking a:=(3n!+2m!)/(m+n)! programma fn2; Gebruik crt; Varm,n:geheel getal; een:echte; functie feit (d: geheel getal): longint; var i:geheel getal; vraag: longint; beginq:=1; voor i:=1 tot d doe q:=q*i; feit:=q; einde; begin clrscr; writeln("voer de waarden in n, m "); leesln(n,m); a:=(3*feit(n)+2*feit(m))/feit(m+n);; writeln("waarde van uitdrukking wanneer m= ",m:4," en n= ",n:4,"gelijk aan",a:8:3); lees; einde.

schuif 16

Schrijf een programma dat ab vindt, dat wil zeggen de b-de macht van het getal A, waarbij A en B gehele getallen zijn en B>0, ingevoerd vanaf het toetsenbord. Schrijf een programma en vervang de functie door het procedureprogramma pr2; Gebruik crt; var a,b:geheel getal; c:longint; Functiestappen (x,y:geheel getal):longint; var i:geheel getal; s:longint; begin s:=1; voor i:=1 tot y doe s:=s*x; Stefanus:=s; einde; begin clrscr; writeln("voer waarden a, b in"); leesln(a,b); C:=stap(a,b); writeln("s=",s); lees; einde.

glijbaan 17

glijbaan 18

Mechanisme voor het doorgeven van parameters aan functies en procedures Wat wordt er afgedrukt door de procedure en wat door het programma? Globale variabelen Lokale variabelen a b 3 3 -3 Adres c a b c 48 Adres c A:=b+3 B:=3*a C:=a+b Toestand C 24 5 8 Antwoord

glijbaan 19


subroutines in TurboPascal


  • subroutine het is een benoemde logisch complete groep commando's die een willekeurig aantal keren kan worden aangeroepen voor uitvoering vanaf verschillende plaatsen in het programma.

Redenen voor het gebruik van subroutines

  • de ontwikkeling van grote programma's vereenvoudigen door de taak op te splitsen (op te splitsen) in verschillende subtaken;
  • grotere zichtbaarheid van het programma;
  • geheugen opslaan.

Soorten subprogramma's

procedures

functies

  • Procedure is een onafhankelijk genoemd onderdeel van het programma dat is ontworpen om specifieke acties uit te voeren.

Procedures zonder parameters

  • Opnameformaat :

procedure ;

einde ;

  • Alle variabelen die gebruikt worden in procedures zonder parameters worden beschreven in het hoofdprogramma (in de Var module).

Voorbeeld . Schrijf een programma om het volume van een cilinder te bepalen.

programma cilinder;

Var R, H, V: reëel;

Invoerprocedure ; (procedure voor gegevensinvoer)

Writeln('Vul de straalwaarde in');

writeln('Voer hoogtewaarde in');

procedure; { procedure berekeningen volume }

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

Uitvoerprocedure ; ( uitvoerprocedure )

writeln('V=',V);


Procedures C parameters

  • Procedures kunnen constanten, variabelen en andere procedures beschrijven.
  • Het beschrijvingsgedeelte in procedures heeft dezelfde structuur als in het hoofdprogramma.
  • Lokale variabelen zijn variabelen gedeclareerd binnen een procedure.
  • Lokale variabelen zijn niet toegankelijk buiten een procedure.
  • Wijzigingen aan lokale variabelen binnen een procedure hebben geen invloed op de waarden van variabelen met dezelfde naam maar gedeclareerd buiten de procedure.

Procedures C parameters

  • Globale variabelen

Voorbeeld .

programma taak;

Var a, b: geheel getal;

procedurelokaal;

Var a, x: char; Voor procedures lokaal:

beginnen variabele x - lokale variabele

een:='! '; (het programma kan de waarde niet wijzigen)

b:=b+1; variabele B - globale variabele

einde ; (alle wijzigingen in de waarde van deze variabele in de procedure)

BEGIN worden bewaard, zelfs na het beëindigen van de procedure)

b:=100; variabele een in het hoofdprogramma hele soort,

lokaal; en in procedure - tekentype. variabele a

writeln('a=', a); integer type is niet beschikbaar in de lokale procedure.

writeln('b=',b);

Het resultaat van de uitvoering van het programma: a=0; b=101.


); begin; einde ; "breedte="640"

Parameters doorgeven aan Turbo Pascal

  • 1. Parameters doorgeven op waarde
  • Waarde parameters: variabelen gedeclareerd na de procedurenaam tussen haakjes. Voor hen is er geen servicewoord Var .
  • Opnameformaat :

procedure (:

variabel);

einde ;


  • formele parameters: .
  • werkelijke parameters: .

Voorbeeld .

programmaparameter;

Var m, n: geheel getal;

som Procedure(a, b: geheel getal);

writeln('S=',S);

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

Variabelen een En B zijn formele parameters en variabelen m En N - feitelijk. Werkelijke parameterwaarden m = 100 en N =10 worden doorgegeven aan formele parameters een En B .

Wijzigingen in feitelijke parameters vinden alleen plaats binnen de procedure en hebben geen invloed op deze buiten de procedure.


; var variabele:); begin; einde ; "breedte="640"

Parameters doorgeven aan Turbo Pascal

  • 2. Parameters op naam doorgeven
  • Variabele parameters variabelen gedeclareerd na de procedurenaam tussen haakjes en voorafgegaan door het servicewoord Var .
  • Opnameformaat :

procedure (:

variabel; Var

variabel:);

einde ;



b dan min:= b; als min c dan min:= c; einde ; BEGIN writeln('Voer drie cijfers in'); readln(a1, b1, cl); writeln ('vul drie cijfers in'); leesln(a2,b2,c2); minimum(a1,b1,c1, min1); minimum(a2,b2,c2, min2); S:= min1 + min2; writeln('S=', S); EINDE. Voorbeeld. Gegeven twee drietallen: a 1, b 1, c 1 en a 2, b 2, c 2. Zoek de waarde van de som: S=min (a1, b1, c1) + min (a2, b2, c2) "breedte=" 640"

Var a1,b1,c1,a2,b2,c2, min1, min2, S: reëel;

Procedure minimum (a,b,c: echt; Var min: echt);

als min b dan min:= b;

als min c dan min:= c;

writeln('Voer drie cijfers in');

readln(a1, b1, cl);

writeln ('vul drie cijfers in');

leesln(a2,b2,c2);

minimum(a1,b1,c1, min1);

minimum(a2,b2,c2, min2);

S:= min1 + min2;

writeln('S=', S);

Voorbeeld. Gegeven twee drietallen: a 1, b 1, c 1 en a 2, b 2, c 2. Zoek de waarde van de som: S=min (a1, b1, c1) + min (a2, b2, c2)


Functie is een subroutine waarvan het resultaat een bepaalde waarde is.

  • Opnameformaat :

functie (:

einde ;

  • In de functietekst moet de functienaam het resultaat van de uitvoering ervan worden toegewezen.
  • Wanneer een functie wordt aangeroepen, moet de naam met een lijst van actuele parameters als operand in de expressie worden opgenomen.

programma-expressie;

functiemodule (a: echt) : echt;

writeln('Vul de waarde van de variabele in');

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

writeln ('y=', y);

Voorbeeld . Bereken de waarde van de uitdrukking: y = | x -3 | + | x+6 |