Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » referate » informatica
Proceduri si functii - visual foxpro

Proceduri si functii - visual foxpro




Proceduri si functii


O aplicatie Visual FoxPro poate fi proiectata modular, iar modulele pot fi programe cu extensia .prg (subprograme), proceduri si functii. programele cu extensia prg pot fi situate toate in acelasi director sau in directoare diferite, la fel ca si tabelele de date. Daca se gasesc in diferite se poate utiliza setarea:

SET PATH TO <lista_directoare>

Apelul programelor (subprogramelor) cu extensia .prg se face cu comanda :



DO <nume_fisier_program>

iar numele fisierului poate sa nu contina extensia. In situatia cand s-a generat un fisier program cu generatorul de ecrane, cu generatorul de meniuri sau utilitarul RQBY, extensia fisierului program trebuie sa figureze obligatoriu.

Procedurile si functiile se pot gasi in programul apelant, la sfarsit sau intr-un fisier separat numit fisier de proceduri. Executarea unui subprogram a unei proceduri sau a unei functii se incheie la intalnirea uneia din comenzile: RETURN, CANCEL, QUIT sau la intalnirea sfarsitului de fisier. Comanda RETURN are sintaxa urmatoare:

RETURN [<expr> I TO MASTER I TO <nume_program>]

Definitie: Vom numi modul un subprogram, o procedura sau o functie.

Un modul poate la randul lui sa apeleze unul sau mai multe module, apelul facandu-se cu comanda DO pentru subprograme si cu numele functiei pentru functii. Se pot utiliza si comenzi  DO imbricate (subprogramul apelat sa apeleze la randul sau alt subprogram) acceptandu-se maxim 32 nivele de imbricare (la varianta DOS).

Daca instructiunea RETURN figureaza fara clauze, dupa executarea modulului apelat se revine in programul apelant la instructiunea urmatoare apelului. Daca exista clauza <expr>, aceasta reprezinta valoarea pe care o transmite modulul programului apelant. Clauza TO MASTER face ca programul principal sa preia controlul dupa incheierea executarii modulului apelat, iar TO <nume_program> preda controlul subprogramului cu numele specificat.

Comanda CANCEL intrerupe executarea programului si preda controlul ferestrei de comenzii QUIT, forteaza incheierea executarii unui program si face iesirea din mediul FOX .

Un subprogram mai poate fi si suspendat temporar, suspendarea se face folosind comanda:

SUSPEND

iar reluarea executarii se face cu comanda:

RESUME

Pentru aflarea numelui unui program active se utilizeaza functia PROGRAM ().

Exemplu:

Do_0.prg

set talk off

clear

? ‘Apeleaza do_1.prg’

do do_1

return

do_1.prg

? ‘Programul do_1.prg’

? ‘Apeleaza do_2.prg’

do do_2

? ‘Programul continua’

return

do_2.prg

? ‘Programul do_2.prg’

? ‘Programul este suspendat’

suspend

? ‘Programul este reluat’

return

In urma rularii programului do_0.prg, subprogramul do_2.prg este suspendat, controlul asupra programelor este transmis la fereastra de comanda si cu comanda RESUME se reia executarea subprogramului do_2.prg – si implicit - do_1.prg, do_0.prg.

I n afara subprogramelor definite de utilizator care au extensia .prg in Visual FoxPRo se utilizeaza proceduri si functii sau pe scurt UDF (“User Defined Function”- functii definite de utilizator). Ele se pot situa:

la sfarsitul fisierului sursa ce contine programul care le apeleaza si in acest caz pot fi folosite numai in acest program;

in fisiere speciale de proceduri si functii.


Declararea si apelarea functiilor si procedurilor


Declararea functiilor


FUNCTI <nume_functie>

PARAMETERS <lista_parametri>

<instructiuni>

………………………………………..

RETURN <valoare>

Exemplu:


set talk off

clear

input ‘N=’ to n

if prim(n)

? N, ‘ este prim’

else

? N, ‘ nu este prim’

endif

return

Function prim

parameters n

sw=.T.

for d=2 to int(sqrt(n))

if n% d=0

sw=.F.



endif

endfor

return sw


Apelul functiilor


Apelul functiilor se face precizand numele functiei si lista de parametri, daca functia are parametri:

<nume_functie>( [<lista_parametri>])

Parametri utilizati la apel trebuie sa respecte numarul si ordinea parametrilor descrisi cu:

PARAMETERS.


Declararea procedurilor


PROCEDURE <nume_procedura>

PARAMETERS <lista_parametri>

<instructiuni>

………………………………………….

RETURN <valoare>


Exemplu:


set talk off

clear

&& Se calculeaza TVA intr-o tabela cu produse

&& cu structura COD, CANTITATE, PRET, VALOARE, TVA

accpt ‘Numele tabelei:’ to numetab

do proc_TVA with numetab

return

procedure proc_TVA

parameters s

use &s

replace all tva with valoare*0.19

use

return


Apelul procedurilor


Pentru a apela o procedura se utilizeaza comanda DO, urmata de numele procedurii si lista parametrilor:

DO <nume_procedura> [WITH <lista_parametri>].

La fel ca la functii parametrii utilizati la apel trebuie sa respecte numarul si ordinea parametrilor descrisi cu PARAMETERS.


Observatii: Mediul Fox accepta apelarea recursiva a subprogramelor; numarul de reapelari este insa mic.


Exemplu:

set talk off

clear

input ‘n=’ to n

? fact(n)

return

function fact

parameters n

if n=0

return 1

else

return n*fact(n-1)

endif


Fisiere pentru functii si proceduri


Este avantajos ca toate functiile si procedurile sa fie grupate intr-un fisier, deoarece se gasesc usor cand se fac modificari in ele si pot fi utilizate in mai multe aplicatii prin precizarea fisierului care le contine. Deschiderea inchiderea unui fisier de subprograme se face cu comanda:

SET PROCEDURE TO [<nume_fisier>]

Daca <nume_fisier> este prezent, se deschide fisierul cu numele specificat ce contine subprograme; altfel se inchide: Inchiderea se mai poate face si cu comanda:

CLOSE PROCEDURE

Fisierul de subprograme se pozitioneaza de obicei in directorul in care se afla programul principal al aplicatiei care utilizeaza fisierele respective.


Exemplu:

Proc_2.prg

set talk off

clear

set procedure to proc.prg

accept ‘Introduceti tabela:’ to s

input ‘Nr. de inregistrare:’ to n

? TVA(s,n)

do p_1 with s,n

close procedure

return

Proc.prg

function TVA

parameters s,n

use &s

locate for recno()=n

vtva=tva

use

return vtva

procedure p_1

parameters s,n

use &s

edit record n noedit

delete

pack

use

return


Parametrii si variabilele locale ale functiilor si procedurilor


Lucrul cu module de programe impune rezolvarea unor probleme referitoare la variabilele programului apelant si a modulului. Ne intereseaza domeniul de “vizibilitate” a variabilelor din programul apelant si modul si ce se intampla daca in program si modul exista variabile cu acelasi nume. Vom trata in continuare aceste aspecte.



Consideram un program principal care apeleaza mai multe module. Orice variabila folosita in programul principal este recunoscuta in module si poate fi modificata. In programul principal variabila va acea valoarea modificata in cadrul modulelor. Acelasi lucru se intampla si daca modulele se apeleaza imbricate fiind mai multe nivele de subprograme.


Exemplu:


set talk off

clear

val1=5

do p1

? val1

do p2

? val1

return

procedure p1

val1=val1+3

return

procedure p2

val1=val1+5

return

set talk off

clear

val1=5

do p1

? val1 –Se va afisa 13

return

procedure p1

val1=val1+3

do p2

return

procedure p2

val1=val1+5

return


Am vazut ca variabile din programul principal sunt recunoscute in toate modulele apelate din program. Situatia reciproca nu are loc: variabilele unui modul nu sunt recunoscute decat in modulele apelate de acesta.


Exemplu:


set talk off

clear

do p1

&& se afiseaza 8

? val1

&& eroare

return

procedure p1

val1=3

do p2

? val1

return

procedure p2

val1=val1+5

return


Modificarea domeniului de “vizibilitate” a variabilelor modulelor se face prin definirea lor ca variabile publice (globale) sau private (locale).

Variabilele publice se definesc cu comanda:

PUBLIC <lista_variabile>

Public [ARRAY] <masiv>(expN1>,<expN2>)

In urma comenzii se creeaza variabilele sau masivele specificate si se initializeaza cu .F. Eroarea din exemplul anterior poate fi inlaturata prin definirea lui val1 ca variabila de tip PUBLIC.

set talk off

clear

public val1

do p1

? val1

return

Variabilele private (locale) sunt recunoscute in programul curent si in modulele apelate de acesta. Se declara cu comanda:

PRIVATE <lista_variabile>

PRIVATE ALL [ LIKE <sablon>/ EXCEPT <sablon>]

Spre deosebire de comanda PUBLIC care creeaza variabilele globale, comanda PRIVATE le declara numai.


Exemplu:


set talk off

val1=5

val2=8

do p1

? val1, val2

&& se afiseaza 5 80 deoarece val1 este private

return

procedure p1

private val1

val1=50

val2=80

? ‘ Val1 Val2’

? val1, val2

return


In situatia cand se doreste utilizarea variabilelor cu acelasi nume in diverse sectiuni ale programului, variabilele pot fi declarate “regionale” : sunt cunoscute numai in sectiunea specificat[ de programator. In program se va marca inceputul sectiunii cu ajutorul directivei de compilare:


# REGIONAL <numar> iar variabilele vor fi precizate ca locale, folosind instructiunea:



REGIONAL <lista_variabile>

O variabila <lista_variabile> este utilizabila pana la intalnirea unei noi declaratii REGIONAL care sa o includa, sau pana la sfarsitul programului. Sectiunea de localizare a variabilelor se incheie la intalnirea unei noi directive # REGIONAL sau a sfarsitului de fisier. Aceleasi variabile pot fi declarate in zone diferite ale programului, fara a avea legatura intre ele.


Exemplu:

set talk off

clear

# region 1

regional a, b, c

a=5

b=7

c=8

# region 2

regional a, b

? a – Eroare ! Variabila a nu este gasita.

a=9

b=10

? a, b, c – Se afiseaza 9 10 8. Variabila c este recunoscuta deoarece nu a fost trecuta in lista variabilelor din zona 2.

return


Transmiterea parametrilor modulelor de program


In cazul proiectarii unei aplicatii mari se impune utilizarea modulelor de program, mai ales cand programarea nu se face de o singura persoana. Comunicarea modulelor cu un program apelant sau cu alte module se face prin intermediul parametrilor asociati modulelor.

Ca si in alte limbaje si in Visual FoxPro avem doua modalitati de transmitere a parametrilor:

prin valoare

prin referinta.

La transmiterea prin valoare, o modificare a parametrului in modul nu afecteaza valoarea avuta de acelasi parametru in programul apelant. Daca parametrul va fi transmis prin referinta, in urma executarii modulului, valoarea sa din programul apelant va ramane cea din modul. Mecanismul de transmitere al parametrilor este urmatorul:

variabilele care intra in modul pentru prelucrare sunt preluate de parametric la apelarea subprogramului, respectandu-se ordinea si tipul parametrilor descrisi in comanda PARAMETERS <lista_parametri>;

daca parametrii modulului au fost transmisi prin referinta, la incheierea executarii modulului continutul parametrilor este preluat de variabilele corespunzatoare ale programului apelant.

Lista parametrilor unui modul se declara (dupa cum am vazut) cu comanda:

PARAMETERS <lista_parametri>,

care este prima comanda a modulului. Pentru a afla numarul de parametri transmisi modulului curent, se poate folosi functia:

PARAMETERS ()

In urma precizarii modului de transmitere a parametrilor (prin valoare sau referinta) se foloseste comanda:

SET UDFPARMS TO VALUE / REFERENCE

SET UDFPARMS TO VALUE transmite parametrii prin valoare, iar SET UDFPARMS TO REFERENCE transmite parametrii prin referinta.


Exemplu:

set talk off

clear

set udfparms to value

a=1

=fun_1(a)

? a

&& 1

set udfparms to reference

a=5

=fun_1(a)

? a

&& se afiseaza 7

return

function fun?1

parameters s

a=a+2

return a


Observatie: Masivele se transmit ca parametri prin referinta.


Problema rezolvata: Sa se scrie o functie care sa interclaseze doua masive ordonate crescator.

Rezolvare:


set talk off

clear

dimension a(100), b(100), c(100)

input ‘Nr. elemente a: ‘ to n

input ‘Nr. elemente b: ‘ to m

? ‘Intr. elem. lui a’

for i=1 to n

input ‘a:’ to a(i)

endfor

? ‘Intr. elem. lui b’

for i=1 to m

input ‘b:’ to b(i)

endfor

set udfparm to reference

=intercl(a,b)

for i=1 to n+m

? c(i)

endfor

return

function intercl

parameters a, b

i=1

j=1

k=0

do while (i<=n) .and. (j<=m)

k=k+1

if a(i)<b(j)

c(k)=a(i)

i=i+1

else

c(k)=b(j)

j=j+1

endif

enddo

if i<n

for j=I to n

k=k+1

c(k)=a(j)

endfor

else

for i=j to m

k=k+1

c(k)=b(i)

endfor

endif

return c






Politica de confidentialitate







.com Copyright © 2023 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.


Proiecte

vezi toate proiectele
 Proiect didactic Clasa: a-IX-a, Luarea deciziilor
 PROIECT DIDACTIC 3-5 ani dezvoltarea limbajului si a comunicarii orale - „Cine face, ce face”
 PROIECT MOTOR ASINCRON - Determinarea parametrilor schemei echivalente si a caracteristicilor de functionare in regim stabilizat de la gol la sarcina
 TEMA DE PROIECTARE - arbore de masina rotativa

Lucrari de diploma

vezi toate lucrarile de diploma
 PROIECT DE DIPLOMA CHIRURGIE ORO-MAXILO-FACIALA - SUPURATIILE LOJELOR PROFUNDE DE ETIOLOGIE ODONTOGENA
 Relatiile diplomatice dintre Romania si Austro- Ungaria din a doua jumatate a secolului al XIX-lea
 LUCRARE DE DIPLOMA MANAGEMENT - MANAGEMENTUL CALITATII APLICAT IN DOMENIUL FABRICARII BERII. STUDIU DE CAZ - FABRICA DE BERE SEBES
 Lucrare de diploma tehnologia confectiilor din piele si inlocuitor - proiectarea constructiv tehnologica a unui produs de incaltaminte tip cizma scurt

Lucrari licenta

vezi toate lucrarile de licenta
 Lucrare de licenta contabilitate si informatica de gestiune - politici si tratamente contabile privind leasingul (ias 17). prevalenta economicului asupra juridicului
 LUCRARE DE LICENTA - FACULTATEA DE EDUCATIE FIZICA SI SPORT
 Lucrare de licenta - cercetare si analiza financiara asupra deseurilor de ambalaje la sc.ambalaje sa
 LUCRARE DE LICENTA - Gestiunea stocurilor de materii prime si materiale

Lucrari doctorat

vezi toate lucrarile de doctorat
 Diagnosticul ecografic in unele afectiuni gastroduodenale si hepatobiliare la animalele de companie - TEZA DE DOCTORAT
 Doctorat - Modele dinamice de simulare ale accidentelor rutiere produse intre autovehicul si pieton
 LUCRARE DE DOCTORAT ZOOTEHNIE - AMELIORARE - Estimarea valorii economice a caracterelor din obiectivul ameliorarii intr-o linie materna de porcine

Proiecte de atestat

vezi toate proiectele de atestat
 Atestat la informatica cu tema “gestionarea unui magazin de confectii”
 Proiect atestat electrician constructor - tehnologia montarii instalatiilor electrice interioare
 ATESTAT PROFESIONAL LA INFORMATICA - programare FoxPro for Windows
 ATESTAT PROFESIONAL TURISM SI ALIMENTATIE PUBLICA, TEHNICIAN IN TURISM

Caracteristici speciale ale CPU
Ce este un magazin virtual? Schema aplicatiei “Magazin Virtual” (baza de date)
Tipul de date abstract sir
ETAPELE DE REALIZARE A UNUI SISTEM INFORMATIC IDENTIFICAREA CERINTELOR SISTEMULUI ( MODELUL AFACERILOR )
Exercitii pentru verificarea cunostintelor de programare
SISTEM INFORMATIONAL SI SISTEM INFORMATIC
CARACTERISTICILE GENERALE ALE METODOLOGIILOR DE REALIZARE A SISTEMELOR INFORMATICE
PROIECTAREA SISTEMELOR INFORMATICE



Termeni si conditii
Contact
Creeaza si tu