CATEGORII DOCUMENTE |
Functiile sunt subprograme asemanatoare procedurilor. Deosebirile dintre cele doua tipuri de subprograme sunt evidentiate in continuare.
Functia returneaza un singur rezultat (de un singur tip), asociat cu numele acesteia. Rezultatul returnat de functie poate fi o valoare de orice tip Pascal, mai putin tipul fisier. in partea de instruciiuni a functiei trebuie sa existe cel putin o instructiune prin care operandului ce poarta numele acesteia sa i se atribuie o valoare. Antetul unei functii poate fi exprimat astfel:
Function identificator [(f)]:tip;
Functiile folosesc ca operanzi in expresii, constructia respectiva fiind denumita referinta de functie si avand forma identificator [(r)], unde elementele din sintaxa constructiei au aceeasi semnificatie ca in cazul procedurii.
Afirmatiile cu privire la modul de transfer al parametrilor, corespondenta dintre listele parametrilor reali si fornali, metodologia de proiectare etc. precizate la proceduri, raman valabile si pentru fuctii.
Se prezinta anteturi de functii si apeluri ale acestora.
var a,b,c :real;
i;j :byte;
function fl(n,m:byte;var x:real):real;
(antet functie fl)
function f2(var t:real;v:real):byte;
(antet functie f2)
iffl(i,j.a)> 0
then c:=a - 2;
b:=c - f2(a,d);
Observind ca furnizarea unui singur rezultat pemite trecerea de la subprogramul de tip procedura la unul de tip functie. In vederea evidenterii diferenlelor dintre cele doua tipuri de subprograme s-a recurs numai la transformarile minim necasare, fara a face apel la alte posibilitati ale limbajului. Aceste transfori mari sunt: in lista parametrilor apar numai datele de intrare; parametrul asociat reztatului a devenit numele functiei, cu declaralia de tip corespunzatoare (real); pentru evitarea recursivitati, care nu s-a folosit in acest caz, s-a introdus o variabila locala de lucru (s) utilizata pentru calculul rezultatului si a carei valoare este atribuita, in final, numelui functiei.
Program Exfuncl;
type vector=array[1..20] of real;
var i,n: byte;
d,p: vector;
v: real;
function produs_scalar (n:byte; var vl,v2:vector):real;
var j: integer;
s: real;
begin
s:=0;
for j:=1 to n do
s:=s+vl[j]*v2[j];
produs_scalar:=s
end;
begin write ( `numar de produse: ' );
readln(n);
for i:=1 to n do
begin write(`desfacere si pret unitar pentru produsul `, i :2 ' : ');
readln(d[i],p[i])
end;
v:= produs_scalar (d,p);
writeln (`valoare totala=',v:10:2);
end.
Referitor la programul principal, se apreciaza ca este posibila includerea apelului de functie direct in instructiunea de scriere, ultimele doua instructiuni reducindu-se la WriteLn( `Valoare totala=' Produs_scalar(d,p):10:2);, variabila v putand fi eliminata.
Functie pentru calcularea valorii unui polinom intr-un punct dat. Programul principal citeste gradul polinomului, vectorul coeficienlilor polinomului si punctul in care se calculeaza valoarea. Rezultatul (valoarea polinomului in punctul x0) este de tip real si se returneaza prin numele functiei. Parametrii formali sunt:
n - gradul polinomului; tip byte; transfer prin valoare;
x0-punctul in care se calculeaza valoarea polinomului; tip real; transfer prin valoare;
a - vectorul coeficienlilor; elemente de tip real; transfer prin adresa.
program exfunc2;
type vector=array[0..50) of real;
var a:vector;
n,i:byte;
x,rez:real;
function pol(var a:vector; x0:real; n:byte) :real;
var b:real;
i:byte;
begin ..
b:=a[n];
for i:=1 to n do b:=b*x0+a(n-i)
pol:=b
end;
begin
write(`gradul polinomului: `); readln(n);
writeln(`coeficientii polinomului:');
for i:=n downto 0 do
begin
write(`a(`,i,'): `); readln(a[i])
end;
write(`punctul in care se calculeaza valoarea polinarului: `); readln(x);
rez:=polinom(n,x,a);
writeln( `valoarea polinomului in punctul `,x:3:0, este: `,rez:6:2)
end.
Functie pentru determinarea valorii maxime dintr-un sir de numere, in acest exemplu nu se defineste un apelant. Functia poate fi folosita in orice aplicatie. Rezultatul (valoarea maxima) este de tip real si se returneaza prin numele funcliei. parametrii formali sunt:
n - numarul de elemente ale sirului; tip byte; transfer prin valoare;
v - sirul de numere (vector); elemeate de tip real; transfer ntin adreca
function maxim(n:byte;var v:vector):real;
var i:byte;
max:real;
begin
max:=v[1];
for i:=1 to n do
if v[i]>max then max:=v[i];
maxim:=max
Observatie: Tipul vector trebuie declarat global, in programul apelant. De exemplu:
type vector=array[1..100] of real;
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1914
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved