funcţii utilizator

Funcția ca un obiect limbaj Pascal este o versiune diferită a punerii în aplicare a tehnologiei pentru a construi programe folosind structura de grupare. Se poate spune, de asemenea, că funcția este un tip special de un anumit tip de proceduri, și anume procedurile cu un singur parametru variabil.

Funcția diferă de procedura numai pentru că întotdeauna se întoarce la punctul de asteptare de o singură valoare scalară. Funcția ca procedura poate include valori sau parametri să fie fără ele (vezi. Fig. 33).

Forma generală a înregistrării antet funcției

Numele funcției (lista de parametri: tipul): tip;

Numele funcției. tip;

Tipul de rezultat este tipul valorii funcției. Lista de parametri este aceeași ca și pentru procedura, dar aici toți parametrii sunt argumentele. Numele variabilei care stochează valoarea funcției coincide cu numele funcției.

Fig. 33. O diagramă de sintaxă a antetul funcției

Deci, antetul funcției diferă de procedură antetul nu schimbă numai cuvintele privind procedura FUNCTION, dar, de asemenea, eliminarea din lista de rezultate, reglați parametrii prin atribuirea tipului numele funcției:

PROCEDURĂ <имя процедуры> (Argumentul;
VAR-parametru lista: Tip);

FUNCȚIE <имя функции> (Argumente): tip;

O altă caracteristică a descrierii funcției este prezența a cel puțin un operator de atribuire, partea stanga este numele funcției fiind definită, iar dreptul - expresie pentru a calcula rezultatul funcției. Este evident că tipul de această expresie trebuie să se potrivească cu tipul specificat în funcția de antet.

Funcția de apel diferă, de asemenea, de la apelul de procedură. În cazul în care procedura de apel este realizată cu ajutorul unui operator de apel special (procedurile de operator), funcția este invocată numai într-o anumită expresie. Pentru a efectua apelul funcției, trebuie să-l utilizați cu lista de parametri reale la orice expresie de tip coincide cu tipul valorii funcției. Aceeași expresie, în care funcția este numit, poate fi partea dreaptă a unei instrucțiuni de atribuire, o parte a unei expresii logice și așa mai departe.

Este cunoscut faptul că Pascal are un set de caracteristici standard. Cu toate acestea, acest set este limitat. Utilizatorul poate extinde lista de caracteristici opționale, prin crearea funcțiilor lor - funcții de utilizator. De exemplu, în Pascal are SQR (X) = X 2. Dar funcția F (X) = X n. în cazul în care n face parte din setul de numere întregi Z, nr. Folosind conceptul definit anterior al unei funcții, puteți crea pentru această funcție universală, care ar da orice măsură reală a oricărui exponent întreg.

Definim o putere functie reala, care trebuie să aibă un parametru de două argumente - pentru înregistrare și pentru stabilirea gradului:

Funcția POWER (FACTOR: real; EXP: integer): real;

var COUNT: integer; TFACTOR: real;

dacă EXP = 0 atunci POWER: = 1

pentru COUNT: = 2 până la ABS (EXP) do

dacă EXP <0 then POWER := 1/TFACTOR

în cazul în care N <0 then writeln ('Нет факториала')

altfel writeln ( 'factorial', N 'egal', FACTORIAL (N))

Vedem că trăsătura caracteristică este prezența caracteristicilor construit în corpul ei de o declarație de atribuire:

FACTORIAL: = VALUE * FACTORIAL (VALUE - 1)

în cazul în care există o funcție definită de apel. Aici identificator FACTORIAL pe partea stângă a operatorului este numele unei variabile pentru a stoca valoarea funcției, precum și dreptul - numele funcției numit.

Un punct important în pregătirea oricărei funcții recursive este de a organiza ieșirea din recurență. În unele cazuri simple, ar trebui să existe nici o soluție recursiv. proces recursiv ar trebui să fie pas cu pas, astfel încât pentru a simplifica sarcina de a, în cele din urmă, nu a existat o soluție recursiv pentru ea. În aceste funcții trebuie să fie verificate valori ale argumentului pentru decizia de a finaliza. În acest caz, o condiție pentru terminarea VALOARE recursie = 0.

În descrierea funcțiilor recursive trebuie proces bine de calcul. Fiecare recursie constă din două etape: adâncitura (imersiune) în recursie și ieșire. În prima etapă nu se face nici un calcul, și se stabilește numai formula de lucru pentru operanzi specifice. Al doilea pas este procesul de calcul pentru formule personalizate.

Să considerăm exemplul unui factorial proces recursiv pentru N = 3. Obținem următorii pași:

1. N = 3, unde N <> 0. Atunci FACTORIAL: = 3 * FACTORIAL (2);

2. N = 2 unde N <> 0. Atunci FACTORIAL: = 2 * FACTORIAL (1);

3. N = 1, unde N <> 0. Atunci FACTORIAL: = 1 * FACTORIAL (0);

4. N = 0, prin urmare, FACTORIAL: = 1,

și anume Am primit o valoare nu recursiv. Aprofundarea în recurență este finalizat, ieșiți din procesul de vin și mai mult din ea cu executarea calculelor necesare.

Expresia FACTORIAL 1 * (0) în loc FACTORIAL (0) substituie valoarea 1, calculată pentru produsul 1 * 1, care devine o valoare FACTORIAL (1). In expresia 2 * FACTORIAL (1) în loc FACTORIAL (1) substituie valoarea 1, 2 * 1 se calculează și devine o FACTORIAL valoare (2). În expresia de 3 * FACTORIAL (2) în loc FACTORIAL (2) înlocuiește valoarea 2, 3 * 2 se calculează și devine valoarea variabilei factoriale, care revine la rutina principală este de 3!.

Toate acest proces recursiv în două etape este implementată în memoria calculatorului, cu ajutorul organizației în recursie ei stivă. Faptul că stocarea N variabile (și VALOARE deci variabilă) alocat o singură celulă și stiva cu N. In acest teanc numit valori înregistrate secvențial 3, 2, 1, 0, valoarea 0 este un semn al sfârșitului stivei de umplere . Apoi ciclul începe cu corpul FACTORIAL: = FACTORIAL * N, unde valorile N sunt selectați în mod succesiv din stivă în ordinea 1, 2, 3. Valoarea inițială a variabilei este unitatea FACTORIAL care este valoarea 0!.

stivă de locuri de muncă prezentate în tabelul de mai jos:

Umplerea stivă (adâncire)

În concluzie, ne arată că este de multe ori functii recursive sunt construite mult mai ușor decât „normale“, deși este clar că nu orice funcție poate fi transformată într-o recursiv. Noi facem acest lucru pe exemplul funcției POWER anterioare deja construite.

Această caracteristică este în mod evident natura recursiv baza determinării sale:

X n = 1 dacă n = 0;

X n = X n-1 * X, dacă n> 1.

Următoarele recursive valoare funcție gradul de calcul:

Funcția POWER (FACTOR: real; EXPONENT: integer): REAL;

dacă EXPONENT <0

apoi POWER: = 1 / POWER (FACTOR, abs (EXPONENT))

dacă EXPONENT> 0

apoi PUTERE: = FACTOR * POWER (FACTOR, EXPONENT - 1)

Notă. În plus față de funcțiile recursive Pascal pe același principiu poate fi definit și proceduri recursive. Detalii despre acestea vor fi discutate în următoarele secțiuni, atâta timp cât vom arăta modul în care funcția recursiv poate fi transformat într-o procedură recursiv pe exemplul factorialul:

Procedura FACTORIAL (VALOARE: integer; var F: integer);

iF VALUE = 0 atunci F: = 1

altfel începe FACTORIAL (VALUE - 1, F);

Nu are, spre deosebire de funcția FACTORIAL pentru a calcula N! trebuie să apelați la această procedură utilizând procedura FACTORIAL declarație (N, FN), în cazul în care FN - variabila pentru valoarea de retur de la procedura N!.

1. Ce tipuri de rutine sunt utilizate în Pascal?

2. Care sunt cele două tipuri de proceduri pot fi subdivizate?

4. În ce secțiune a programului sunt plasate proceduri de utilizator?

5. Care este rolul parametrilor procedurii?

6. Care este parametrii variabili diferență de parametrii de valoare?

7. Cum sunt parametrii reale la parametrii formali?

8. variabile locale și globale În cazul în care sunt declarate?

9. Cum procedura este numită în program?

10. Care este diferența dintre titlul antetului procedurilor funcționale?

11. Ceea ce este în mod necesar variabilă se atribuie o valoare în corpul funcției?

12. Deoarece funcția de program se numește?

13. Ce este un semn distinctiv al unei funcții recursive?

14. Cum o funcție recursivă iese din recursivitatea?

15. Obiectivele de tip implementate cel mai bine folosind functii recursive?

articole similare