Sâmbătă, 20.04.2024, 03:25
Bine aţi venit Vizitator

Bine ai venit

Meniu site
Sondajul nostru
Evaluează site-ul meu
Total răspunsuri: 17
Statistici

Total online: 1
Vizitatori: 1
Utilizatori: 0

 

Dar, referirea la un astfel de identificator global nu este o practica buna. O procedura poate sa schimbe valoarea unei variabile globale (relative), fara intentia programatorului, fie datorita unei greseli de codificare, fie datorita faptului ca programatorul nu a înteles în totalitate implicatiile folosirii unei proceduri scrise de o alta persoana. Asemenea schimbari nedorite se numesc efecte laterale (side effects, în engleza).

Pentru a preîntâmpina astfel de efecte nedorite referitoare la variabilele globale, se prefera alternativa utilizarii procedurilor cu parametri. Parametrii folositi în paranteze, imediat dupa numele procedurii în timpul definirii acesteia, se numescparametri formali.

Expresiile folosite împreuna cu numele procedurii atunci când aceasta este apelata (din programul principal) se numesc parametri actuali (efectivi).

Din moment ce parametrii efectivi trebuie sa fie substituiti de parametrii formali corespunzatori, transmiterea parametrilor trebuie facuta respectând regula de mai jos.

Regula. Parametrii efectivi trebuie sa corespunda cu parametrii formali în ceea ce priveste: numarul, compatibilitatea atribuirii (tipul), pozitia.

În aceasta regula cuvântul "numarul" se refera la numarul parametrilor efectivi si al celor formali, care trebuie sa fie acelasi.

"Compatibilitatea atribuirii" înseamna ca tipul unui parametru efectiv trebuie sa fie acelasi cu cel al parametrului formal ori compatibil cu acesta prin respectarea regulilor de atribuire (Atentie la compatibilitatea atribuirii:

  • întreg <-- întreg;
  • real <-- real;
  • real <-- întreg

dar nu

  • întreg <-- real

etc.).

Restrictia cu privire la "pozitia" parametrilor se traduce prin aceea ca daca am definit, sa zicem 
PROCEDURE dani (a:char; b:integer) 
nu putem apela procedura (din programul principal, de exemplu) cu 
dani(3, 'd'). Chiar daca transmitem exact doi parametri efectivi (actuali) - unul întreg, celalalt caracter ('d') - apelarea însasi este ilegala, deoarece ordinea de specificare a parametrilor efectivi este exact inversa celei a parametrilor formali din header-ul procedurii dani.

Exemplu:
...
PROCEDURE dani(a:char;b:integer);
...
BEGIN
...dani(3,d);
...

Este remarcabil faptul ca regula nu precizeaza nimic în legatura cu numele parametrilor formali si efectivi (numele sa fie acelasi sau nu). Când parametrii efectivi sunt expresii complicate este neplacut ca ei sa fie confundati (unul cu altul). Dar scriind, sa zicem andrei (c,d), header-ul lui andrei fiind PROCEDURE andrei (a,b:real), putem avea si încurcaturi. Neplacerea poate fi chiar mai mare daca apelam procedura prin andrei(b,a), dar nu constituie un conflict în fiecare caz.Amintiti-va ca parametrii formali utilizati în definirea procedurii (header-ul procedurii) servesc numai ca înlocuitori pentru diferiti parametri efectivi (actuali) ce vor fi substituiti de primii în timpul apelarii procedurii. Daca parametrii formali asi b ai unei proceduri sunt ambii de tip real, nu are importanta daca parametrul formal a este înlocuit de un parametru apelant, care de asemenea se întâmpla sa fie denumit tot a. Astfel de variabile efective sunt deseori cazuri speciale de expresie si orice expresie reala valida poate fi utilizata ca parametru efectiv.

Pentru a arata sugestiv relatia dintre parametrii formali si parametrii efectivi consideram procedura 
calcul(a,b:real; c:integer) 
ce apartine programului principal (parametru) în care se declara variabilele ade si f ca fiind de tip real si variabilele cj si k ca fiind de tip întreg. Urmariti în continuare mecanismul de transmitere a parametrilor: 
dec®{1} si d*e/faj + k®{2} 
din programul principal catre parametrii formali 
ab si c din procedura.

Autentificare
Căutare