Proceduri și funcții în prezentarea Pascal. Proceduri și funcții în Pascal. Recursiune. Subrutine Adesea, o sarcină vă cere să repetați o anumită secvență de instrucțiuni în diferite părți ale programului. III. Explicarea noului material

19.11.2020 Interesant

Scopul lecției

educational

  • pentru a forma între elevi un unitar sistem de concepte legate de conceptele de procedură și funcție;
  • învață cum să folosești subrutinele în rezolvarea problemelor în Pascal și, de asemenea, învață să înțelegi ce tip de subrutine este necesar atunci când rezolvi o anumită problemă;
  • arăta tehnici de bază de utilizare a subrutinelor;

educational

  • cultiva acuratețea, atenția, organizarea;
  • cultura abilităților de calcul;

în curs de dezvoltare

  • dezvoltarea gândirii logice, a culturii algoritmice a elevilor;
  • dezvoltarea cunoștințelor și abilităților de a compune și depana subrutine în Pascal.

Elevii trebuie:

  • cunoaște regulile de scriere a procedurilor fără parametri și cu parametri;
  • cunoașterea regulilor de scriere a funcțiilor;
  • să fie capabil să aplice proceduri și funcții pentru a rezolva probleme simple.

În timpul orelor

I. Org. moment

II. Introducere. Relevanţă

Distribuiți sarcina pe bucăți de hârtie ( Anexa 1 ). Găsiți repetări.

Uneori, în locuri diferite ale programului, trebuie să efectuați aproape aceleași secvențe de acțiuni cu date inițiale diferite. Astfel de secvențe de acțiuni pot fi formalizate sub formă de așa-numite subrutine (din engleza, subrutină) - grupați operatorii într-un bloc care poate fi accesat după nume și în mod repetat.

Subrutinele scurtează textul unui program, le reduc semnificativ timpul de execuție și ușurează viața programatorilor care pot crea programe modular, adică prin asamblarea unui program complex din bucăți completate de componente mai simple. Acest lucru permite unui grup de programatori să creeze programe mari și unui grup de școlari să dezvolte și să implementeze orice proiecte globale.

Subrutinele sunt împărțite în proceduri și funcții.

Procedurile și funcțiile încorporate (standard) sunt parte limba și poate fi numită pe nume fără descriere prealabilă. De exemplu , abs, sqrt, ln, sin... sunt funcții (întoarce un rezultat), readln, write... sunt proceduri (nu returnează un rezultat). Prezența lor facilitează foarte mult dezvoltarea de programe de aplicație. Cu toate acestea, în majoritatea cazurilor unele specific pentru un anumit program, acțiunile nu găsesc analogi direcți în bibliotecile Turbo Pascal, iar apoi programatorul trebuie să-și dezvolte propriile sale non-standard proceduri si functii.

III. Explicarea noului material

Procedurile utilizatorului sunt scrise noi insine programator în conformitate cu sintaxa limbajului în secțiunea de descriere a subrutinei.

Structura procedurii urmează structura programului; este un „program în miniatură” - este reprezentat și de un antet și un corp.

Antetul constă din procedura cuvântului rezervat, identificatorul (Nume) proceduri.

VAR ... // secțiune pentru descrierea variabilelor programului principal

procedura ProcedureName;

//corpul programului principal

Se înregistrează apelul de procedură pentru executarea ulterioară în corpul programului principal.

Exemplul 1. Program pentru calcularea suprafeței și perimetrului.

Avantajele subrutinelor:

  • Programe scrise folosind subrutine mai ușor de testat și de depanat, au un mai clar structura logica.
  • Natura independentă a subrutinelor permite crearea lor să fie încredințată diverșilor programatori. Acesta este modul în care munca de programare este împărțită în astfel, finalizarea lui este accelerată;
  • Utilizarea subrutinelor economisește memorie. Memoria pentru stocarea variabilelor utilizate într-o subrutină este alocată numai pe durata funcționării acesteia și este eliberată de îndată ce execuția sa se încheie.

Exemplul 2. Utilizatorul introduce două laturi a trei dreptunghiuri. Deduceți zonele lor.

Puteți rezolva problema astfel:

pentru i:=1 la 3 do

writeln('Introduceți a și b:');

writeln(‘Zona=’,a*b);

Este considerat un stil de programare bun să folosești proceduri. Este necesară o procedură care va calcula aria unui dreptunghi. Iată cum va arăta schematic programul principal:

calcul

calcul

calcul

Procedura text există deja (vezi exemplul 1). Să creăm o a doua procedură care calculează zona. Dar pentru a calcula S, trebuie să cunoașteți 2 laturi, așa că procedura trebuie să arate ce laturi ar trebui să se înmulțească.

procedura pl (c,d: întreg);

writeln(‘aria unui dreptunghi cu laturi’,c, ‘’ ,d, ‘=‘,S);

Un parametru este o variabilă căreia i se atribuie o valoare. Exista parametri formali , definit în antetul subrutinei și parametrii efectivi – expresii care specifică valori specifice la accesarea unei subrutine.

Procedura va fi executată dacă o numiți pe nume și specificați parametrii actuali , separate prin virgule si cuprinse intre paranteze:

Parametrii efectivi trebuie să se potrivească cu cei formali ca tip și cantitate.

Deci, programul principal:

pentru i:=1 la 3 do

Cometariu. La rezolvarea acestei probleme este necesar să se verifice numerele introduse de utilizator (acestea nu trebuie să fie negative, altfel programul va fi întrerupt).

Să creăm o procedură de verificare:

eroare de procedură (f,g:integer);

dacă (f<0) or (g<0) then begin

writeln('laturile unui dreptunghi nu pot fi negative');

oprire; // întreruperea programului

Programul final - Anexa 4

Deci formatul procedurii:

Procedură<имя>(parametri formali);

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

Exemplul 3. Scrieți un program pentru schimbarea locurilor a două numere c=5 și d=7.

schimb de programeDan;

var c,d:intger;

schimb de proceduri (a,b:întreg);

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

writeln("Introduceți 2 numere: ");

writeln(c," ",d);

După pornirea programului, puteți vedea că parametrii formali (în procedură) și-au schimbat locurile, dar cei efectivi (care sunt utilizați în programul principal) nu s-au schimbat. Să ne uităm la figura care arată o parte din RAM:

1) la apelarea procedurii obmen cu doi parametri 5 și 7, numerele 5 și 7 sunt plasate și în variabilele a și respectiv b:

3) dar în variabilele c și d datele nu s-au schimbat, deoarece sunt în alte celule de memorie.

Pentru variabilele c și d, a și b face referire la aceleași celule de memorie (dacă se schimbă valorile lui a și b, atunci și valorile lui c, d se vor schimba) atunci când descrieți parametrii formali, este necesar să adăugați cuvântul VAR înaintea variabilelor necesare:

schimb de proceduri (var a,b:integer);

Schimbați programul obmenDan:

Eroare din cauza var. Numerele sunt constante care nu pot fi modificate într-o procedură.

Exemplul 4. Găsiți aria unui cerc folosind o procedură care doar calculează, dar nu afișează rezultatul pe ecran.

cerc procedura (r:real);

Procedura ar trebui să returneze rezultatul:

cerc procedura (r:real; var S:real);

readln(a, e);

Cometariu: Variabila din procedura S este utilizată pentru a returna rezultatele procedurii în programul principal. Când se modifică, se schimbă și parametrul real din programul de apelare, adică. variabila e.

Mai des, pentru asta în Pascal, în loc de proceduri, se folosesc funcții (subrutine care returnează ceva).

Funcția este similară cu procedura, dar există două diferențe.

  • Funcția transmite programului rezultatul muncii sale - o singură valoare, al cărei purtător este numele funcției sale.
  • Numele funcției poate apărea într-o expresie ca operand. Funcția returnează rezultatul la punctul apelului său.

De exemplu, sqr(x) – va pătra valoarea x și va returna valoarea calculată a pătratului numărului x la punctul de apel: y:=sqr(x);

O funcție definită de utilizator constă dintr-un antet de funcție și un corp de funcție. Corpul funcției este similar ca structură cu programul. Descrierea etichetelor, constantelor, tipurilor etc. valabil numai în sfera acestei proceduri.

Funcţie<имя>(parametri formali):<тип результата>;

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

Secțiunea de instrucțiuni trebuie să conțină cel puțin o instrucțiune care atribuie o valoare numelui funcției. Rezultatul ultimei atribuiri este returnat la punctul de apel.

Exemplul 5. Să reluăm problema despre aria unui cerc.

cerc de funcție (r:real): real;

a:=cerc(5); (TREBUIE atribuit)

Exemplul 6. Găsiți 1!+2!+…+n!

Folosim funcția de găsire a factorialului, deoarece îl alimentăm ca intrare și obținem rezultatul.

function fact (a:intger): intreg;

pentru i:=1 a face

În rândul fapt:=fapt*I;

compilatorul va găsi o eroare, deoarece fact trebuie apelat cu parametri. Prin urmare, de obicei se introduce o variabilă suplimentară în care este plasat rezultatul. Și apoi acest rezultat este atribuit variabilei de fapt:

factorial de program;

var sum,n,j: întreg;

function fact (a: integer): intreg;

var i,d: întreg;

pentru i:=1 a face

pentru j:=1 la n face

suma:=sumă+fapt(j);

IV. Rezumatul lecției

În acest moment, procesul de programare se transformă în producție de software industrial bazat tehnologii de programare. Majoritatea experților sunt de părere că metoda de proiectare a programelor de sus în jos cel mai potrivit pentru rezolvarea problemelor complexe. În primul rând, sarcina este definită în termeni generali, apoi structura sa este clarificată treptat. La pasul următor, fiecare subsarcină, la rândul său, este împărțită într-un număr de altele. Soluția la un fragment separat al unei probleme complexe este un bloc de program independent - o subrutină.

V. Tema pentru acasă

Rezolvarea problemelor (în scris):

  1. Creați o procedură care înlocuiește toate literele a din șirul introdus cu *.
  2. Se fac două propuneri. Găsiți numărul total de litere „n” din ele. (Definiți o funcție pentru a calcula numărul de litere „n” dintr-o propoziție.)


Subrutine V Turbo Pascal


  • Subrutină Acesta este un grup de comenzi numit, complet logic, care poate fi apelat pentru execuție de orice număr de ori din diferite locuri din program.

Motive pentru utilizarea rutinelor

  • simplificarea dezvoltării de programe mari prin descompunerea (împărțirea) unei sarcini în mai multe subsarcini;
  • o mai mare vizibilitate a programului;
  • salvarea memoriei.

Tipuri de subrutine

proceduri

funcții

  • Procedură este o parte independentă numită a unui program conceput pentru a efectua acțiuni specifice.

Proceduri fără parametri

  • Format de înregistrare :

procedură ;

Sfârşit ;

  • Toate variabilele care sunt utilizate în procedurile fără parametri sunt descrise în programul principal (în modulul Var).

Exemplu . Scrieți un program pentru a afla volumul unui cilindru.

Cilindru de program;

Var R, H, V: real;

Intrare procedura ; (procedura de introducere a datelor)

Writeln('introduceți valoarea razei');

writeln('introduceți valoarea înălțimii');

Formula procedurii; { procedură calculele volum }

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

Ieșirea procedurii; (procedura de ieșire a rezultatului)

writeln('V=',V);


Proceduri c parametrii

  • Procedurile pot descrie constante, variabile și alte proceduri.
  • Secțiunea de descriere din proceduri are aceeași structură ca în programul principal.
  • Variabile locale– acestea sunt variabilele descrise în cadrul procedurii.
  • Variabilele locale nu sunt accesibile în afara procedurii.
  • Modificările care apar variabilelor locale în interiorul unei proceduri nu afectează valorile variabilelor cu aceleași nume, dar descrise în afara acestei proceduri.

Proceduri c parametrii

  • Variabile globale

Exemplu .

Program zadacha;

Var a, b: întreg;

Procedura locala;

Var a, x: char; Pentru proceduri local:

ÎNCEPE variabil X – variabilă locală

a:=’! '; (programul nu își poate schimba valoarea)

b:= b +1; variabil b – variabilă globală

Sfârşit ; (toate modificările aduse valorii acestei variabile în procedură

BEGIN sunt salvate chiar și după părăsirea procedurii)

b:=100; variabil A în programul principal un întreg tip

local ; iar într-o procedură – de tip simbolic. Variabila a

writeln('a =', a); tipul întreg nu este disponibil în procedura lokală.

writeln('b=',b);

Rezultatul executiei programului: a=0; b =101.


); ÎNCEPE ; Sfârşit ; "width="640"

Transmiterea parametrilor către Turbo Pascal

  • 1. Transmiterea parametrilor după valoare
  • Parametri-valori variabilele descrise după numele procedurii din paranteze. Nu există niciun cuvânt funcție Var în fața lor.
  • Format de înregistrare :

procedură (:

variabil);

Sfârşit ;


  • parametri formali .
  • parametrii efectivi .

Exemplu .

Parametrii programului;

Var m, n: întreg;

Procedura suma (a, b: întreg);

writeln('S=',S);

suma(m,n); sau summa(100,10);

Variabile A Și b sunt parametri formali și variabile m Și n - faptice. Valorile reale ale parametrilor m =100 și n =10 sunt transmise parametrilor formali A Și b .

Modificările parametrilor reali apar numai în cadrul unei proceduri și nu le afectează în afara procedurii.


; Variabila Var:); ÎNCEPE ; Sfârşit ; "width="640"

Transmiterea parametrilor către Turbo Pascal

  • 2. Transmiterea parametrilor după nume
  • Parametri variabili variabile descrise după numele procedurii din paranteze și precedate de cuvântul de serviciu Var.
  • Format de înregistrare :

procedură (:

variabil; Var

variabil:);

Sfârşit ;



b apoi min:= b; dacă min c atunci min:= c; Sfârşit ; BEGIN writeln('introduceți trei numere'); readln(a1, b1, c1); writeln('introduceți trei numere'); readln(a2,b2,c2); minim(a1,b1,c1, min1); minim(a2,b2,c2, min2); S:= min1 + min2; writeln('S=', S); SFÂRŞIT. Exemplu. Având în vedere două triple de numere: a 1, b 1, c 1 și a 2, b 2, c 2. Aflați valoarea sumei: S=min (a1, b1, c1) + min (a2, b2, c2) " width=" 640"

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

Procedura minim (a,b,c: real; Var min: real);

dacă min b atunci min:= b;

dacă min c atunci min:= c;

writeln('introduceți trei numere');

readln(a1, b1, c1);

writeln('introduceți trei numere');

readln(a2,b2,c2);

minim(a1,b1,c1, min1);

minim(a2,b2,c2, min2);

S:= min1 + min2;

writeln('S=', S);

Exemplu. Având în vedere două triple de numere: a 1, b 1, c 1 și a 2, b 2, c 2. Aflați valoarea sumei: S=min (a1, b1, c1) + min (a2, b2, c2)


Funcţie este o subrutină al cărei rezultat este o anumită valoare.

  • Format de înregistrare :

funcţie (:

Sfârşit ;

  • În corpul funcției, numele funcției trebuie să fie atribuit rezultatului execuției acesteia.
  • La apelarea unei funcții, numele acesteia, împreună cu lista parametrilor actuali, trebuie incluse în expresie ca operand.

Programul vyrazenie;

function modul (a: real): real;

writeln('introduceți valoarea variabilei');

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

writeln('y=', y);

Exemplu . Calculați valoarea expresiei: y = | x -3 | + | x +6 |

clasa a 8-a. Programare în ABC Pascal

Profesor de informatică la NIS din Uralsk Fizică și Matematică Zelenov Boris Aleksandrovich


  • Elevii folosesc proceduri și funcții pentru a rezolva probleme
  • Elevii învață să rezolve probleme mari, împărțindu-le în altele mai mici

  • Dezvoltați un concept de proceduri și funcții într-un limbaj de programare.

  • Elevii cunosc conceptele de „proceduri” și „funcții”, determină parametrii formali și actuali

Rezultate așteptate - Descriptori:

1. Cunoaște definiția „procedură”

2. Cunoaște definiția „funcției”

3.Determină parametrii actuali și formali

4. Diferențiază între parametrii valorici și variabili

5. Găsește un apel către o procedură sau o funcție în codul programului



Planul standard al Elvirei

1. Îndepărtați hârtiile

2. Udă florile

3. Spălați birourile

4. Ștergeți sticla

Sfârșitul algoritmului

Cum să îmbunătățim organizarea acestui proces?




Subiectul lecției

Subrutine:


Ishki bagdarlama

Subrutină

Procedură

Procedură

Parametrul

Expresii utile:

Pentru a transmite valori variabile unei proceduri (funcție), se folosesc parametrii actuali...

Pentru a descrie procedura, trebuie mai întâi..., apoi...


Conceptul de subrutină

Definiție

Subrutină- Aceasta este o parte separată independentă din punct de vedere funcțional a programului.

Subrutine

Proceduri


  • eliminați necesitatea de a repeta în mod repetat fragmente similare în textul programului;
  • îmbunătățirea structurii programului, făcându-l mai ușor de înțeles;
  • crește rezistența la erori de programare și consecințe neprevăzute în timpul modificărilor programului.

  • Desenați un gard folosind un limbaj de programare

În această sarcină, puteți crea o procedură care va efectua algoritmul pentru desenarea unui fragment (gard de pichetă), apoi vă referiți în mod constant la această procedură, schimbând poziția inițială a stiloului.


  • Descrieți cum să desenați eficient un brad de Crăciun într-un mediu de programare

  • Sunt fragmente de program independente, concepute într-un mod special și având propriul nume.

Interacțiunea dintre programul principal și subrutină



Diagramă bloc

  • Bloc de apeluri subrutine (procedură sau funcție).

Numele subrutinei (procedură sau funcție).


Diagramă bloc


Descrierea procedurii este următoarea:

procedură nume(lista parametrilor formali); secțiunea descrieri ÎNCEPE operatori Sfârşit ;


Descrierea funcției arată astfel:

funcţie nume(lista parametrilor formali): tipul de returnare;

secțiunea descrieri ÎNCEPE operatori Sfârşit ;


Locația în program

Program ...;

//Secțiunea Descriere Utilizări, Const, Var, ...

procedură A ;

ÎNCEPE ....... Sfârşit ;

procedură B ;

ÎNCEPE ........ Sfârşit ;

Funcția C ;

ÎNCEPE ........ Sfârşit ;

//Programul principal

ÎNCEPE ........ Sfârşit .


  • Diferența dintre o funcție și o procedură este că rezultatul executării operatorilor care formează corpul funcției este întotdeauna o singură valoare, astfel încât apelarea unei funcții poate fi folosită în expresii adecvate împreună cu variabile și constante.

Proceduri

Funcții

Poate avea mai multe rezultate sau poate efectua anumite acțiuni

Are un singur rezultat, al cărui tip este specificat separat la declararea funcției.

Rezultatele pot fi valori de orice tip - matrice, șiruri, numere etc.

Rezultatul poate fi doar o valoare de tip real, întreg sau char.

Comanda de apel de procedură este o comandă separată care poate fi utilizată independent

Un apel de funcție poate fi folosit doar ca o componentă a unei expresii de tipul adecvat.

Corpul funcției trebuie să conțină cel puțin un operator de atribuire cu numele funcției în partea stângă.


b atunci max:=a altfel max:=b; MaxNumber:= max; end;" width="640"

Procedura sau functie?

MaxNumber(a,b: întreg): întreg;

var max: întreg;

MaxNumber:= max;


b atunci max:=a altfel max:=b; end;" width="640"

Procedura sau functie?

MaxNumber(a,b: întreg; var max: întreg);

dacă ab atunci max:=a altfel max:=b;


Procedura sau functie?

ChangeColor(C1, C2: Word);

TextBackGround (C2)


Procedura sau functie?

Adaugă (X, Y: Întreger): Întregul;


Real

  • Indicat în secțiunea principală a programului

Formal

  • Specificat în subrutină
  • Specificat în subrutină

Procedura este apelată de un operator având următorul format:

numele procedurii (lista parametrilor actuali);

  • Lista parametrilor actuali- aceasta este o listă a acestora, separate prin virgule.

  • În standardul limbajului Pascal, parametrii pot fi transmiși în două moduri - prin valoare și prin referință. Parametrii transmiși după valoare sunt apelați parametri-valori, trecut prin referință - parametri-variabile. Acestea din urmă diferă prin aceea că în antetul procedurii (funcției) sunt precedate de cuvântul de serviciu var.

Trecerea parametrilor. Parametri formali

Variabile

Valori

Parametri după valoare

Parametri formali

Variabile


Parametri formali

Parametri după valoare

  • În prima metodă (trecerea după valoare), valorile parametrilor actuali sunt copiate în parametrii formali corespunzători.

Procedură

Numele procedurii (a, b: întreg);

Programul principal

La modificarea acestor valori în timpul executării unei proceduri (funcție), datele originale (parametrii actuali) nu se pot modifica


Var c, d: întreg;

  • La trecerea prin referință, toate modificările care apar în corpul unei proceduri (funcție) cu parametri formali duc la modificări similare imediate ale parametrilor actuali corespunzători.

Procedură

Numele procedurii (a, b: întreg, Var c: real);

Programul principal

La variabilele blocului apelant apar modificări, astfel încât parametrii de ieșire sunt transmisi prin referință. Când sunt apelați, parametrii actuali corespunzători pot fi doar variabile.


Tu scrii:

1.Parametrii actuali___________

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

2. Parametri formali ___________

3. Parametri-valori formali __________

5. Denumirea procedurii ___________

6. Accesarea unei proceduri din program _____________________


Sarcină interactivă

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


Elvira este liderul clasei. Ea va trebui să facă un plan de curățenie generală în clasă: îndepărtați hârtiile, udați florile, spălați birourile, ștergeți sticla. Cum își poate organiza mai bine munca? Ajut-o pe Elvira.


Planul avansat al Elvirei

Subrutine:

Arsen - pune deoparte hârtiile

Mila - udarea florilor

Vitaly – spală birouri

Indira – ștergând paharul

1. Execută Arsen

2. Fugi Mila

3. Executați Vitaly

4. Rulați Indira

Sfârșitul algoritmului


  • Ce structuri noi de limbaj de programare am întâlnit astăzi?
  • Denumiți parametrii studiați
  • Cum se transmit parametrii unei proceduri?

  • Rezumatul lecției
  • Găsiți definiții: „Variabile locale” și „Variabile globale”
  • Compune două sarcini în care poți folosi proceduri sau funcții.

  • Cum ați determina tema lecției? (vino cu propriul nume)
  • Ce crezi că ar trebui să înveți în lecția următoare?

Sa ne intalnim

urmatoarea lectie!

Subrutine Adesea, o sarcină vă cere să repetați o anumită secvență de instrucțiuni în diferite părți ale programului. Pentru a descrie această secvență o dată și a o aplica de mai multe ori, limbajele de programare folosesc subrutine. Un subprogram este un bloc special conceput al unui program pentru utilizarea sa repetată ulterioară în programul principal.Utilizarea subrutinelor vă permite să implementați una dintre cele mai moderne metode de programare - programarea structurată


Subrutinele rezolvă trei probleme importante care facilitează foarte mult programarea: 1. elimină necesitatea de a repeta în mod repetat fragmente similare în textul programului, adică. reduce dimensiunea programului; 2. va îmbunătăți structura programului, făcându-l mai ușor de înțeles la parsare; 3.reduceți probabilitatea erorilor, creșteți rezistența la erori de programare și consecințe neprevăzute în timpul modificării.


Proceduri și funcții Există două tipuri de subrutine în Pascal: procedură (PROCEDURE) și funcție (FUNCȚIE). Procedurile și funcțiile în Pascal sunt declarate în secțiunea de declarații din spatele secțiunii variabile. ProgramProgramName; VAR ... // secțiune pentru descrierea variabilelor programului principal; procedura ProcedureName; var ... begin ...//Procedure body end; start //corpul programului principal final.


Funcțiile și procedurile au parametri (variabile care trec o valoare). Sunt de două tipuri: 1) Formale - cele care sunt în descrierea subrutinei 2) Actuale - cele care sunt transferate din programul principal într-o funcție sau procedură. Parametrii efectivi trebuie sa corespunda celor formali ca cantitate, ordine si tip.




Proceduri Procedurile sunt utilizate atunci când o subrutină trebuie să obțină mai multe rezultate. Există două tipuri de proceduri în Pascal: proceduri cu parametri și fără parametri. O procedură este accesată de numele procedurii, care poate fi urmată de parametrii actuali. Când este apelată o procedură, se stabilește o corespondență unu-la-unu între parametrii actuali și formali, apoi controlul este transferat procedurii. După ce procedura este executată, controlul este transferat următorului operator al programului apelant după apelarea procedurii.


Exemplul 1: O procedură fără parametri care imprimă un șir de 60 de stele. procedura pr; var i: întreg ; începe pentru i:=1 până la 60 scrie (* "); scrieln; sfârșit; începe pr; sfârșit.


Exemplul 2. Creați un program pentru schimbarea a două numere c=5 și d=7 program obmenDan; var c,d:intger; schimb de proceduri (a,b:întreg); var m:întreg; începe m:=a; a:=b; b:=m; scrieln(a,b); Sfârşit; begin writeln("Introduceți 2 numere: "); readln(c,d); schimb (c,d); writeln(c," ",d); Sfârşit. c5 d 7 a 5 b 7 1) la apelarea procedurii obmen cu doi parametri 5 și 7, aceleași numere 5 și 7 sunt plasate în variabilele a și respectiv b: 2) apoi în procedură valorile celulelor de memorie a și b sunt rearanjate: c5 d 7 a 7 b 5 3) dar în variabilele c și d datele nu s-au schimbat, deoarece sunt în alte celule de memorie


Pentru ca variabilele c și d, a și b să se refere la aceleași celule de memorie (dacă se schimbă valorile lui a și b, atunci și valorile lui c, d se vor schimba), atunci când se descriu parametrii formali, este necesar să adăugați cuvântul VAR înaintea variabilelor cerute: schimb de procedură (var a,b:întreger); с5 d 7 a b


Exemplul 3. Având în vedere 3 matrice diferite de numere întregi (dimensiunea fiecăruia nu depășește 15). În fiecare tablou, găsiți suma elementelor și media aritmetică. program proc; var i, n, sumă: întreg; sr: real; procedura de lucru (r:integer; var s:integer; var s1:real); var mas: matrice de numere întregi; j:întreg; începe s:=0; pentru j:=1 la r începe să citească (mas[j]); s:=s+mas [j]; Sfârşit; s1:=s/r; Sfârşit;


(programul principal) begin for i:=1 to 3 do begin write ("Vvedite razmer",i, "masiva: "); readln(n); munca(n, suma, sr); (apel procedura de lucru) writeln ("Summa elementov = ",sum); writeln("Srednearifmecheskoe = ",sr:4:1); Sfârşit; Sfârşit.


Rezultatul programului: Programul apelează de trei ori procedura de lucru, în care variabilele formale r, s, s1 sunt înlocuite cu efectivele n, sum, sr. Procedura introduce elemente de matrice, calculează suma și media. Variabilele s și s1 sunt returnate programului principal, astfel încât cuvântul de serviciu var este plasat înaintea descrierii lor. Parametrii locali mas, j sunt validi numai în procedură. Global - i, n, sum, sr sunt disponibile pe tot parcursul programului.


Funcții în Pascal Setul de funcții încorporate în limbajul Pascal este destul de larg (ABS, SQR, TRUNC etc.). Dacă în program este inclusă o funcție nouă, non-standard, atunci aceasta trebuie descrisă în textul programului, după care poate fi accesată din program. O funcție este accesată în partea dreaptă a operatorului de atribuire, indicând numele funcției și parametrii actuali. O funcție poate avea propriile sale constante locale, tipuri, variabile, proceduri și funcții. Descrierea funcțiilor în Pascal este similară cu descrierea procedurilor.




Exemplul 4. Scrieți o funcție de subrutină de gradul a x, unde a, x sunt orice numere. Să folosim formula: a x = e x ln un program p2; var f, b, s, t, c, d: real; (variabile globale) function stp (a, x: real): real; var y: real; ( variabile locale) begin y:= exp (x * ln (a)) ; stp:= y;(atribuirea unui nume de funcție rezultatului calculelor subrutinei) end; (descrierea funcției completă) begin d:= stp (2.4, 5); (calcularea puterilor diferitelor numere și variabile) writeln (d, stp (5,3.5)); citiți (f, b, s, t); c:= stp (f, s)+stp (b, t); scrieln(c); Sfârşit.


Funcții O subrutină este o parte a unui program, concepută ca o structură sintactică separată și prevăzută cu un nume (un bloc de program independent), pentru rezolvarea problemelor individuale. Descrierea procedurii: procedura () (secțiunea pentru executarea numelor locale) Început (secțiunea pentru executarea operatorilor) Sfârșit; Descrierea funcției: funcția (): tip; (secțiune pentru descrierea numelor locale) Begin (secțiune pentru instrucțiunile executabile) := ; (parametru obligatoriu) Sfârșit; Apel de procedură: (); Apel de funcție: := (); 1. În partea dreaptă a operatorului de atribuire. 2. În expresia în starea operatorului de ramificare. 3. În procedura de ieșire, ca rezultat al funcției. Descrierea subrutinelor Proceduri


Procedurile de recursivitate și funcțiile din Pascal se pot numi singure, de exemplu. au proprietatea recursivității. O funcție recursivă trebuie să conțină în mod necesar o condiție pentru terminarea recursivității, astfel încât să nu provoace bucla programului. Fiecare apel recursiv creează un nou set de variabile locale. Adică, variabilele situate în afara funcției apelate nu sunt modificate.


1 functie f (n: intreg): intreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se autoinvocă" title="Exemplu 5. Creați o funcție recursivă care calculează factorialul numărului n astfel: n! = 1 dacă n= 1 n!= (n -1)! · n dacă n > 1 funcția f (n: întreg): întreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește singură" class="link_thumb"> 19 !} Exemplul 5. Creați o funcție recursivă care calculează factorialul numărului n astfel: n! = 1 dacă n= 1 n!= (n -1)! · n dacă n > 1 funcţie f (n: întreg): întreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește) end; 1 functie f (n: intreg): intreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește pe sine"> 1 funcția f (n: întreg): întreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește pe sine) sfârșit; " > 1 funcția f (n: întreg): întreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește singură" title="Exemplu 5) Creați o funcție recursivă care calculează factorialul numărului n astfel: n! = 1, dacă n= 1 n!= (n -1)!n, dacă n > 1 funcție f (n: întreg): întreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește singură"> title="Exemplul 5. Creați o funcție recursivă care calculează factorialul numărului n astfel: n! = 1 dacă n= 1 n!= (n -1)! · n dacă n > 1 funcţie f (n: întreg): întreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește singură"> !}



Recursiune în Pascal Profesor: Tlekhurai Yu.V. Instituția municipală de învățământ „Liceul Nr. 8” Ce vedeți în tablouri? Acest fenomen în artă se numește recursiunea „Pentru a înțelege recursiunea, trebuie mai întâi să înțelegeți recursiunea.” recursivitate - definirea parțială a unui obiect prin el însuși, definirea unui obiect folosind cele definite anterior. Din punct de vedere științific: Recursiune - o metodă de definire a unei clase de obiecte sau metode prin specificarea mai întâi a unuia sau mai multor (de obicei simple) dintre cazurile sau metodele sale de bază și apoi specificarea pe baza acestora a regulilor de construcție a clasei care se definește. Peter Deutsch Peter Deutsch

Iterație umană.

Recursiunea este de la Dumnezeu.

Recursiune în fizică Recursiune în limbă și literatură Un exemplu clasic de recursivitate infinită este două oglinzi aşezate una vizavi de cealaltă: în ele se formează două coridoare din reflexiile estompate ale oglinzilor. Un alt exemplu de recursivitate infinită este efect de autoexcitare (pozitiv părere) y circuite electronice câştig, când semnalul de la ieșire ajunge la intrare, este amplificat, ajunge din nou la intrarea circuitului și este din nou amplificat. Amplificatoarele pentru care acest mod de operare este standard se numesc auto-oscilatoare. Un exemplu de intrare din dicționar recursiv: „Preotul avea un câine...” - recursivitate tipică Mai multe povestiri ale lui Stanislaw Lem sunt dedicate incidentelor cu recursivitate infinită: O poveste despre morminte („Jurnalele stelare ale lui John the Quiet”), în care eroul trece succesiv de la un articol despre morminte la un articol despre sepulcare, de acolo la un articol despre sepulcarie, care conține din nou o referire la articolul „sepulcaria”. O poveste despre o mașină inteligentă care a avut suficientă inteligență și lene pentru a construi una similară pentru a rezolva o anumită problemă și a-i încredința soluția (rezultatul a fost o recursivitate fără sfârșit, când fiecare mașină nouă a construit una similară și a delegat sarcina lui aceasta). Recursiunea în programare este o modalitate de organizare a unui proces de calcul în care o procedură sau o funcție se referă la sine în timpul execuției operatorilor săi constitutivi. Pentru ca un astfel de apel să nu fie nesfârșit, textul subrutinei trebuie să conțină o condiție la atingere, la care nu mai are loc niciun apel. astfel, un apel recursiv poate fi inclus doar într-una din ramurile subrutinei. Exemplu. Calculul factorialului unui număr natural Creați o funcție recursivă care calculează factorialul numărului n astfel: funcția f (n: întreg): longint; începe dacă n = 1 atunci f:= 1 altfel f:= n * f(n -1); (funcția f se numește singură) termina programul Pascal folosind recursiunea: Var n: întreg; a: longint; factorial de funcție (n: întreg): longint; începe dacă n = 1 atunci factorial:= 1 altfel factorial:= n * factorial (n -1); Sfârşit; Începeți scrierea(‘n=’); Readln(n); A:= factorial(n); Scrie(‘n!=’,a); Readln; Sfârşit. Leonardo din Pisa Fibonacci

Numerele Fibonacci sunt elemente ale unei secvențe de numere

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..., în care fiecare număr ulterior este egal cu suma celor două anterioare.

Sarcină: Afișați o serie de numere Fibonacci constând din n elemente. Descrierea variabilelor: n – numărul de elemente ale seriei; a, b – valorile ultimelor două elemente ale seriei; c – variabilă buffer (“de rezervă”); i – contor. Algoritm pentru rezolvarea problemei: 1. Obțineți valoarea lui n. 2. Atribuiți a și b valorile 0 și respectiv 1 (acestea sunt primele numere ale seriei Fibonacci). Afișează-le pe ecran. 3. Începând de la al 3-lea element până la n: a) afișați suma lui a și b, b) stocați valoarea variabilei b în c, c) scrieți suma lui a și b la b, d) atribuiți lui a valoarea lui c. Programul Pascal folosind iterația: programul Fibonacci; var a,b,c,i,n: întreg; ÎNCEPE scrie ("n = "); readln(n); a:= 0; scrie o," "); b:= 1; scrie(b," "); pentru i:=3 până la n începe scrie (a+b," "); c:= b; b:= a + b; a:=c; Sfârşit; readln; Sfârşit. Programul Pascal folosind recursiunea: Definiția recursivă pentru calcularea numerelor Fibonacci este următoarea: Această definiție a numerelor Fibonacci poate fi ușor convertită într-o funcție recursivă: function f(n: Integer) : longint; începe Dacă n<= 1 Then f:= n else f:= f(n– 1) + f(n - 2); end; Program chislaFibonacci; var n,i: integer; a: longint; function fib (n: integer): longint; begin If n <= 1 Then fib:= n else fib:= fib(n– 1) + fib(n - 2); End; begin write(‘n=’); readln(n); for i:=0 to n do begin A:= fib (n); write (‘ ’,a); end; readln; end. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа AȘi b. Dacă A= b, apoi nodul ( A,b)=a. Dacă A>b, apoi nodul ( A,b)= nod ( a -b,b). Dacă A< b, apoi nodul ( A,b)= nod ( A,b-a). Programul noddvyxchisel; var a,b: longint; function nod(a,b:longint): longint; begin If a = b Then nod:= a else if a>b then nod:= nod(a-b,b) else nod:= nod(a,b-a) End; incepe sa scrie('a='); readln(a); scrie('b='); readln(b); A:= nod(a,b); scrie(‘din cap=’,a); readln; Sfârşit. Problemă despre Turnurile din Hanoi. În acest caz, următoarele reguli trebuie respectate cu strictețe:

  • Puteți muta doar un disc la un moment dat;
  • un disc mai mare nu poate fi plasat pe un disc mai mic;
  • discul scos trebuie pus pe orice știft înainte ca celălalt disc să fie scos.
  • Călugării budiști harnici poartă discuri de la turlă la turlă zi și noapte. Legenda spune că atunci când călugării își vor termina munca, va veni sfârșitul lumii. S-ar putea calcula că rezolvarea unei probleme cu 64 de discuri ar necesita 264-1 mișcări. Prin urmare, în ceea ce privește sfârșitul lumii, acesta va avea loc după cinci miliarde de secole, dacă ne gândim că un disc se mișcă într-o secundă. Cu toate acestea, atât problema, cât și legenda pentru ea au fost inventate în 1883 de matematicianul Edouard Lucas de la Colegiul din Saint-Louis.

Una dintre cele trei turle de diamant poartă 64 de discuri rotunde de aur. Discurile au raze diferite și sunt situate pe turlă în ordinea descrescătoare a razelor de la bază spre vârf. Este necesar să transferați discurile de la prima spire la a doua, folosind a treia spire dacă este necesar.

Sarcină. Creați un program recursiv care să rezolve problema pusă mai sus despre Turnurile din Hanoi cu numărul de discuri egal cu n (n = 1, 2, ...). Soluţie. Să introducem nume pentru turle: a, b, c. Lăsa hanoi(n,a,b,c)- funcția necesară care returnează succesiunea mișcărilor discurilor cu A pe b folosind c conform regulilor descrise mai sus. Când n=1 știm cum să rezolvăm problema. Trebuie doar să efectuați operația de „mutare”. A pe b" Să presupunem că putem rezolva această problemă pentru n – 1 discuri. Mutați n–1 discuri de pe A pe Cu. Apoi, mutați singurul disc de pe care rămâne A pe bși în cele din urmă mutați n–1 discuri din c pe b. Date de intrare: numărul de discuri de pe pilonul a; Ieșire: secvențiere; Pasul 0:(definiți tipul variabilei); Pasul 1: (descrierea procedurii hanoi, care afișează secvența acțiunilor); Pasul 1.1:(mutați (n-1) discuri de la pilonul a la șurubul b); Pasul 1.2: (mută al n-lea disc de la a la c); Pasul 1.3:(mutați (n-1) disc de la b la c); (pașii 1.2-1.3 se efectuează recursiv); Pasul 2:(programul principal); Pasul 2.1:(introduceți numărul de discuri); Pasul 2.2: (apelarea procedurii hanoi). Rezolvarea problemei în programul Pascal bahnya; var n: întreg; a,b,c: char; procedura hanoi(n: integer;a,b,c: char); începe dacă n>0 atunci începe hanoi(n-1,a,c,b); writeln ("Peremestit disc so sterzhnya ",a," na sterzhen" ",b); hanoi(n-1,c,b,a); sfârșit; sfârșit; Începe scrierea ("Vvedite naturalnoe chislo n"); readln ( n); a:="a"; b:="b"; c:="c"; hanoi (n,a,c,b); readln; final. Teme Scrieți un program de calcul al gradului cu un natural exponent Dat: baza gradului X Exponent La Dacă k=0, atunci grad(k,x)=1, Altfel grad(k,x)= x· grad(k-1,x) Program stepen; var y: real; n: întreg; pasul funcției(k:întreg, x:real): real; începe Dacă k = 0 Atunci pas:= 1 alt pas:= x * pas(k-1,x) Sfârșit; begin write(‘vvedite osnovanie stepeni x=’); readln(y); write(‘vvedite pokazatel stepeni k=’); Readln(n); scrie(‘x v stepeni k=’,pas(n,y)); readln; Sfârşit. Muncă independentă

  • Aflați suma cifrelor unui număr
  • Stabiliți dacă un număr natural dat este prim
  • Găsiți prima cifră a unui număr
  • Convertiți numărul natural din zecimal s.s. la binar
  • Găsiți suma elementelor unui tablou întreg format din 20 de elemente
  • Schimbați valorile a două numere întregi
  • Ordonați valorile a trei variabile a, b, cîn ordine crescătoare
  • Aflați numărul de cifre dintr-un număr natural n
  • Găsiți cel mai mare dintre trei numere date
  • Aflați numărul de numere pozitive dintre patru A, B, C, D
Răspunsuri pentru munca independentă Nr. 2 Program simplu; var n, m, s: întreg; funcția prost(m, n:întreg): boolean; începe Dacă n = m Atunci prost:= adevărat altfel prost:= (n mod m<>0) și prost (m+1, n); Sfârşit; începe scrierea('n='); Readln(n); M:=2; Dacă prost(m,n) atunci scrieți (n,’prostoechislo’) Altfel scrieți (n,’sostavnoe’); readln; Sfârşit.

traducere de programe;

procedura dvd(n:longint);

Dacă n >1 Atunci dvd (n div 2);

scrie (n mod 2);