Foxpro
Transferul parametrilor la si de la module de programIn mod uzual, comunicarea intre unitatile functionale ale unui program se face prin intermediul parametrilor. Parametrii permit ca la fiecare activare a unui modul, acesta sa opteze cu entitati care se cunosc doar in momentul apelului. Deoarece valorile acestea difera de la un apel la altul, iar operatiile care li se aplica sunt aceleasi, rezulta ca instructiunile subprogramului vor trebui sa se refere la entitati exprimate simbolic, asa numitii parametri formali. La activarea modulului se specifica parametrii actuali, sau efectivi. Declararea parametrilor formali se face prin comanda PARAMETERS:
Aceasta comanda , care trebuie sa fie prima comanda a unui modul, defineste lista de variabile locale care vor prelua parametrii transmisi de la programul apelant. Lista variabilelor locale trebuie sa aiba intotdeauna mai multe elemente ( sau cel mult egal ) decat lista parametrilor transmisi, pentru ca fiecare parametru sa aiba un corespondent in subprogram. Exemplu: SET TALK OFF CLEAR a = 14 b = 37 ? a , “ + “ , b , “ = “ , suma ( a , b ) c = 12 d = 17 prod = 0 DO produs WHIT c , d , prod ? c , “ + “ , d , “ = “ , prod FUNCTION suma PARAMETERS a 1, a 2 RETURN a 1 + a 2 PROCEDURE produs PARAMETERS a 1, b 1, c 1 c1 = a 1 + b 1 RETURN Parametrii formali sunt variabile locale unitatii functionale. Transmiterea parametrilor actuali se face prin comenzi de apel. Apelul unei proceduri se face prin comanda DO care va avea clauza WITH.
Apelul unei functii se face intr-o expresie, parametrii fiind pusi intre parantezele specifice functiei:
Corespondenta intre parametri se face prin pozitia in lista de parametrii din programul apelat si din comanda de apel. Exemplu:
SET TALK OFF CLEAR DO cadru @ 12, 32 SAY mesaj ( ) READ CLEAR FUNCTION mesaj RETURN “ Invatam FoxPro “ PROCEDURE cadru @ 10 , 10, 14, 70 BOX in acest exemplu DO cadru determina executia procedurii cadru, definita dupa PROCEDURE cadru, iar mesaj ( ) este constructia de apelare a functiei mesaj, definita prin linia care urmeaza comenzii FUNCTION mesaj. Sa luam urmatorul exemplu: calculul combinarilor, care se realizeaza pe baza formulei: n ! Cnk = ----- ----- ------------- k ! * ( n – k ) ! Calculul factorialului n ! = 1 * 2 * . . . ..*n se face cu urmatoarea secventa de instructiuni: n=6 FACT = 1 FOR i = 1 TO n FACT = FACT * 1 ENDFOR Pentru calculul combinarilor, aceasta secventa se va repeta de trei ori, unde pe pozitia lui n, vom avea pe rand n, k, n – k. Programul pentru calculul combinarilor va fi: n = 6 k = 3 FACT1 = 1 FOR i = 1 TO 6 FACT = FACT * 1 ENDFOR FACT2 = 1 FOR i = 1 TO k FACT = FACT * 1 ENDFOR FACT3 = 1 FOR i = 1 TO n - k FACT = FACT * 1 ENDFOR COMBIN = FACT1 / FACT 2 / FACT 3 Acest mod de scriere a unui program este ineficient pentru ca acelasi grup de instructiuni este scris de trei ori. In situatii ca acestea, pentru scrierea programului se folosesc functiile si procedurile definite de utilizator. Folosind pentru calculul factorialului o functie, programul de calcul al combinarilor va capata urmatoarea forma: n = 6 k = 3 COMBIN = FACT( n ) / FACT ( k ) / FACT ( n – k ) FUNCTION FACT PARAMETERS n FACT = 1 FOR i = 1 TO n FACT = FACT * 1 ENDFOR RETURN FACT Primele trei linii reprezinta programul propriu-zis de calcul al combinarilor. In acesta se face de trei ori apel la functia FACT ( ), care este definita in urmatoarele sapte linii de program.
|