CATEGORII DOCUMENTE |
CLASIFICAREA PARAMETRILOR
Parametrii sunt de doua feluri:
‑ parametri formali
‑ parametri actuali
Parametrii formali sunt cei care apar in linia de declarare a procedurii i sunt variabile locale (in procedura), precizanduli‑se i tipurile in linia de declarare. Se numesc formali deoarece ei vor primi valori numai in momentul apelului procedurii respective, altfel ei reprezentand numai ni te simboluri (nume de variabile).
Exemplu:
procedure apel(a,b:integer);
begin
.
.
end;
Variabilele a,b vor primi in momentul apelului procedurii, valori din parametrii actuali corespunzatori, din linia de apel (despre care vom discuta mai tarziu).
CLASIFICAREA PARAMETRILOR
In acest mod se transmit datele de intrare (parametrii care din punct de vedere logic transfer datele in momentul apelului din programul apelant in cel apelat, nu i invers la sfar itul apelului).
Exemplu:
program maxim3;
var
a,b,c,d,max:integer;
procedure maxab(a,b:integer);
begin
if a>b then max:=a
else max:=b;
end;
begin
writeln ('introduceti a si b');
readln(a,b);
writeln ('introduceti c si d');
readln(c,d);
maxab(a,b);
writeln('max(a,b)=',max);
maxab(c,d);
writeln('max(c,d)=',max);
end.
CLASIFICAREA PARAMETRILOR
In acest caz observam ca in linia de declarare a procedurii maxab apare o lista de parametrii adica variabilele a i b de tip intreg. Acest lucru indica compilatorului PASCAL faptul ca a i b sunt variabile locale de tip intreg (ele nu mai trebuie declarate in zona de declara ii variabile a procedurii) i totodata parametrii de intrare (transfera i prin valoare).
In momentul apelului, care acum con ine i el o lista de parametrii actuali (in numar i tipuri idendice cu cele din lista de parametrii formali), ace ti parametrii actuali vor avea diferite valori ini ializate in programul apelant, undeva in fa a apelului. Valorile se vor suprapune respectiv peste variabilele din lista de parametrii formali ai procedurii maxab(.,.) i apoi va fi executata aceasta procedura.
In timpul execu iei ei, se initializeaza variabila max, fie cu valoarea lui a fie cu cea a lui b i se termina execu ia procedurii. In acest moment execu ia este reluata cu instruc iunea imediat urmatoare apelului care a generat saltul la procedura, s.a.m.d.
Obs: Variabila max este o variabila globala, deci ea poate fi consultata pe tot parcursul programului principal.
Obs: In acest caz, apelul este mai simplu deoarece nu mai
este necesara introducerea valorilor lui c i d in a i respectiv b in fa a apelului pentru calcularea
CLASIFICAREA PARAMETRILOR
max(c,d) i nici nu mai apar efecte distrugatoare cum era in exemplul ini ial (se pierdeau valorile lui a i b). Acum procedura va lua automat valorile furnizate in parametrii actuali (din apel) i le va introduce in variabilele locale a i b, dupa care se continua execu ia procedurii.
Pana acum am v zut ca datele de ie ire le‑am utilizat la modul global (variabila globala max). Putem avea i parametrii transmi i prin referin a (prin adresa) i nu prin valoare fapt ce confera parametrilor respectivi statutul de parametrii de intrare i de iesire asemanator cu variabilele globale, numai ca acum parametrii pot avea nume diferite in procedura i in programul apelant. Astfel se poate lucra in procedura cu un nume simbolic i nu efectiv cu variabila globala, avantaj evident cand apelam procedura de mai multe ori pentru seturi diferite de date de intrare‑ie ire fapt ce aseamana procedura din punct de vedere func ional cu un program de sine statator caruia i se dau anumite date, le prelucreaza i apoi furnizeaza alte date conform func iei ce o are de indeplinit.
CLASIFICAREA PARAMETRILOR
Exemplu:
program maxim4;
var
a,b,c,d,max1,max2:integer;
procedure maxab(a,b:integer;var max:integer);
begin
if a>b then max:=a
else max:=b;
end;
begin
writeln ('introduceti a si b');
readln(a,b);
writeln ('introduceti c si d');
readln(c,d);
maxab(a,b,max1);
maxab(c,d,max2);
writeln('max(a,b)=',max1);
writeln('max(c,d)=',max2);
end.
In acest caz observam ca parametrul max este declarat in linia de declarare a procedurii, dupa cuvantul rezervat var, fapt ce indica compilatorului PASCAL statutul parametrului max ca fiind de intrare‑iesire. Pe langa transmiterea valorilor parametrilor actuali in procedura in momentul apelului, se va face i trimiterea valorilor in sens invers pentru parametrii de tip var in momentul revenirii in programul apelant (principal).
In exemplul nostru, valoarea lui max se va suprapune peste max1 la prima revenire din procedura i peste max2 la ultima revenire.
CLASIFICAREA PARAMETRILOR
Obs: In realitate, in cazul parametrilor de tip var (referin a), nu are loc un transfer de valori in ambele sensuri. De fapt, se transfera adresa paramertului respectiv, lucrandu-se direct in variabila data in lista de parametrii reali (din apel).
Rezumand avem:
PARAMETRII FORMALI: sunt cei din linia de declarare a procedurii i reprezinta variabile locale specificanduli‑se totodata i tipurile lor.
Daca vrem sa transmitem variabile prin referin a (adresa), parametrii respectivi vor fi scri i dupa cuvantul rezervat var.
PARAMETRII ACTUALI: sunt cei din linia de apel a procedurii, i ei pot fi:
‑ pentru parametrii formali de tip valoare:
‑ constante
‑ variabile
‑ expresii
toate de acelasi tip sau tipuri compatibile cu variabilele de la parametrii formali corespunzatori.
‑ pentru parametrii formali de tip referin a (declara i dupa var), parametrii actuali pot fi numai variabile de acela i tip cu cele de la parametrii formali corespunzatori, deoarece, valorile din parametrul formal de tip var vor fi transferate in parametrii actuali respectivi (fapt imposibil in cazul constantelor de exemplu)
CLASIFICAREA PARAMETRILOR
Exemple de definiri de proceduri i de apeluri de proceduri:
procedure x1(a,b:integer;var c,d:integer);
begin
.
.
end;
Apeluri din programul principal:
x1(2,6,c,d); corect
x1(a,b,c,d); corect
x1(a+1,b*3,c,d); corect
x1(2*n+2,w‑5,x,y); corect
x1(a,b,3,c); gresit
x1(3,c,d); gresit
x1(a,b,c,d,e); gresit
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2623
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved