Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Foxpro


Index » educatie » » informatica » Foxpro
» PROGRAMARE IN FOX


PROGRAMARE IN FOX


PROGRAMARE IN FOX

Asa cum v-ati dat seama, pana acum am lucrat in FOX tastand de fiecare data comenzile necesare pentru executarea unor operatii dorite. Acestei manieri ii spunem 'MODUL DE LUCRU DIRECT'.

Un al doilea mod de lucru este cel ASISTAT, folosind meniurile sistemului FOX, pe care nu avem spatiul suficient sa-l abordam. Acesta, cere utilizatorului sa cunoasca destul de bine limba engleza pentru a putea consulta HELP - ul sistemului si sa fie destul de familiarizat cu calculatorul, utilizarea tastaturii si a MAUSE - lui si a meniurilor - sistem.

Un al treilea mod de lucru este cel PROGRAMAT, prin care utilizatorul realizeaza programe sau fisiere de comenzi.

Dar inainte de a incepe 'alfabetizarea' in programare sa ne reamintim cateva din structurile principale ale PROGRAMARII STRUCTURATE.

01. STRUCTURI PRINCIPALE ALE PROGRAMARII STRUCTURATE.



Structura SECVENTIALA.

Este cea mai simpla si se compune din comenzi care se executa in ordinea in care acestea se succed una alteia . Exemplu :

Ordinea executiei

SET TALK OFF 1

CLEAR 2

V=10 3

W=3 4

? V+W,V-W,V*W 5

In secventa de mai sus, comenzile se executa in ordinea in care apar in seventa. Nu exista motive de salt peste unele comenzi sau de 'ocolire'.

STRUCTURA SELECTIVA (ALTERNATIVA

In aceasta structura intervine o conditie care prin verificarea sau nevericarea ei, are influenta decisiva asupra comenzilor care urmeaza a se executa imediat :

STRUCTURA SELECTIVA (ALTERNATIVA) COMPLETA.

IF < conditie >

Executa setul de comenzi 1

ELSE

Executa setul de comenzi 2

ENDIF


Executa setul de comenzi 3

La intalnirea unei astfel de structuri, este verificata conditia.

Daca aceasta este indeplinita, se executa setul de comenzi 1, dupa care, setul de comenzi care succed lui ENDIF, adica cel numerotat cu 3.

Daca nu este indeplinita conditia, se executa setul de comenzi 2, apoi setul de comenzi 3.

Exemplu :

IF FILE('PONTAJ.DBF')

USE PONTAJ

BROWSE NOMO NOAP

USE

ELSE

? 'FISIER DE DATE ABSENT'

WAIT

ENDIF

ALTE COMENZI

Daca fisierul PONTAJ.DBF este prezent in directorul de lucru (functia FILE() intoarce valoarea .T. ), deschid fisierul pentru vizualizare cu BROWSE, inchid fisierul activ si apoi execut comenzile de dupa ENDIF.

In caz contrar, afisez mesajul, astept sa tastezi orice (WAIT) si apoi execut comenzile de dupa ENDIF.

! SETURILE DE COMENZI 1 si 2 se executa ALTERNATIV, ori setul 1, ori setul 2.

STRUCTURA ALTERNATIVA INCOMPLETA.

IF < conditie >

Executa setul de comenzi 1

ENDIF

Executa setul de comenzi 2

In acest caz, numai daca este indeplinita conditia se executa setul de comenzi 1, dupa care urmeaza executia comenzilor de dupa ENDIF.

In cazul neverificarii conditiei 'se sare' la executia comenzilor de dupa ENDIF.

Urmariti exemplele din programele care vor fi prezentate in capitolul urmator !

STRUCTURA SELECTIVA MULTIPLA 'EXECUTA IN CAZUL . . .'

DO CASE

CASE cond 1

Set comenzi 1

CASE cond 2

Set comenzi 2

.

CASE cond n

Set comenzi n

[OTHERWISE

Set comenzi n + 1]

ENDCASE


Set comenzi de dupa ENDCASE.

Se verifica pe rand conditiile 1,

Pentru prima care este verificata, se executa setul de comenzi corespunzator, si apoi se vor executa setul de comenzi de dupa ENDCASE.

Deci, din interiorul structurii DO CASE . ENDCASE se va executa doar un set de comenzi si anume acelea pentru care conditia care precede setul, se verifica.

STRUCTURA REPETITIVA (variante).

Operatiile repetitive sunt foarte frecvente :

Preluarea datelor personale pentru un student se compune dintr-un set de operatii care se repeta pentru fiecare student din facultate, ca sa dam doar un singur exemplu.

Pentru ciclari, in FOX exista forme de realizare a acestora cu numar finit de pasi si cu un numar nedefinit de pasi.

FOR . ENDFOR

FOR contor = val initiala TO val finala [ STEP valoare pas ]


Set de comenzi 1

LOOP

Set de comenzi 2 corpul buclei :

Toate comenzile intre

EXIT FOR si ENDFOR

Set de comenzi 3

ENDFOR


Set de comenzi 4

Intre FOR si ENDFOR exista seturi de comenzi 1 care in mod normal se executa repetitiv.

Daca este intalnit LOOP pentru o parcurgere a corpului buclei, pentru acest caz, nu se mai executa comenzile de dupa LOOP si se 'sare' la reverificarea conditiilor de dupa FOR.

Daca la o parcurgere a corpului buclei, se intalneste EXIT, se forteaza parasirea ciclarii si urmeaza a se executa set de comenzi de dupa ENDFOR , si deci setul de comenzi de dupa EXIT pana la ENDFOR nu se mai executa (in cazul figurii, setul 3).

Deci, iesirea din bucla se poate realiza in 2 cazuri :

A - conditiile de dupa FOR nu se mai indeplinesc

B - l a o trecere prin corpul buclei, se intalneste EXIT.

Numarul de executii repetate a comenzilor din corpul buclei este dat de parametrii din conditiile de dupa FOR.

Contorul este o variabila care ia valori incepand cu valoarea initiala, si apoi se incrementeaza cu valoarea pasului pana ajunge la o valoare mai mare decat valoarea finala. Daca valoarea pasului lipseste, deci lipseste clauza STEP, atunci incrementarea contorului se face implicit cu 1. La fiecare valoare noua a contorului, incepand cu valoarea initiala, se vor executa comenzile din corpul buclei.

Exemplu :

USE PONTAJ

N=RECCOUNT()

FOR I = 1 TO N

GO I

IF SEC # 102

LOOP

ENDIF

DISP FIELDS SEC,NPR,SLB

ENDFOR

USE

Exersati exemplul de mai sus si spuneti ce afiseaza si de ce ?

(Am folosit fisierul la care am facut referire in capitolele precedente.)

Este echivalent efectul de mai sus ce cel al secventei urmatoare ?

USE PONTAJ

DISP ALL FIELDS SEC,NPR,SLB FOR SEC=102

USE

Nu va grabiti sa trageti concluzii definitive !

DO WHILE . ENDDO

DO WHILE < conditie >

Comenzi 1

[ LOOP ] corp parasire bucla pt

comenzi 2 bucla conditie care

[ EXIT ] nu se (mai) verifica

comenzi 3

ENDDO


Comenzi de 'dupa ENDDO'

Comenzile din corpul buclei se executa repetitiv 'cat timp' conditia se verifica. Cand conditia nu se mai verifica, urmeaza a se executa comenzile de 'dupa ENDDO', incepand cu prima din aceste comenzi.

Daca in interiorul buclei, la o trecere prin corpul ei, se intalneste LOOP, comenzile ulterioare (2 ) nu se vor mai executa, trecandu-se la reverificarea conditiei.

Daca la o trecere prin corpul buclei, se intalneste EXIT, se va parasi executia repetitiva a corpului buclei, urmand a se executa prima comanda de dupa ENDDO, si celelalte care urmeaza acesteia. Urmariti si figura de mai sus.

Exemplu :

USE PONTAJ

DO WHILE NOT EOF()

IF SEC = 102 AND LN = 11

DISP MAR,NPR,SLB,SLN

ENDIF

SKIP

ENDDO

USE

Puteti spune care este efectul, executiei secventei de mai sus ?

Care este rolul lui SKIP din corpul buclei ?

SCAN . ENDSCAN

SCAN [DOMENIU] [FOR < conditie >]

Comenzi 1

LOOP

Comenzi 2

EXIT

Comenzi 3

ENDSCAN

Comenzi de 'dupa ENDSCAN'

Este o comanda specifica parcurgerii inregistrarilor unui fisier de date activ.

Asupra inregistrarilor se executa operatiile generate de comenzile din corpul buclei.

Efectele lui LOOP si EXIT sunt aceleasi cu cele descrise mai sus.

Exemplul

USE PONTAJ

SCAN ALL FOR SEC=102

DISP MAR,NPR,SLB,SLN

ENDSCAN

USE

Exemplul

USE PONTAJ

SCAN

IF SEC = 102

DISP MAR,NPR,SLB,SLN

ENDIF

ENDSCAN

USE

Ce credeti, care este efectul celor 2 secvente din cele 2 exemple.

Cititorul nostru este invitat sa urmareasca programele din capitolele urmatoare in care vom aplica aceste structuri, si sa consulte cartea indicata mai inainte CAP 8.6.

Despre imbricarea acestor structuri !

Mai intai, sa observam ca atat structurile selective cat si repetitive, au un 'INCEPUT si un SFARSIT' :

IF <conditie > DO CASE

. .

ENDIF ENDCASE

FOR . DO WHILE . SCAN .

. . .

ENDFOR ENDDO ENDSCAN

Aceste structuri nu pot fi incluse intr-un program, oricum ! Iata un posibil exemplu :

ASA, DA

1

2 3 ASA, NU

6

Imbricari corecte 7

4

2 7

Imbricari incorecte

8 6

5 8

1

Asa dupa cum se vede din figura de mai sus, structurile descrise mai sus trebuie sa se cuprinda complet una in alta. Structura 6 incepe in 3 si se termina in 5, ERONAT !

Structura 8, nu este cuprinsa complet in 6, ERONAT !

Structurile 1 sunt corect imbricate.

O alta 'regula' pentru programatorul incepator : numarul IF - urilor dintr-un program trebuie sa fie egal cu numarul ENDIF - urilor. Acest lucru nu conduce neaparat la asigurarea corectitudinii programelor, dar sigur, nerespectarea acestei reguli, genereaza un program incorect ! La fel, cu privire la structurile repetitive.

02. PROGRAME FOX.

Presupunem ca dispunem de fisierul de date CATALOG.DBF care are structura :

Structure for database: C:CS2CATALOG.DBF

Field Field Name Type Width Dec

1 NRL Numeric 7 nr legitimatie student

2 NUM Character 25 nume prenume

3 SEC Character 3 sectia: MK,FCI,AF

4 FRI Character 3 forma de invatamant ZI,FR,ID

5 ANI Numeric 4 anul intrarii in facultate

Si acest fisier contine date :

Nrl Num Sec Fri Ani

1005 POP ION MK ZI 2000

1001 ALBU VIOREL FCI FR 2001

1003 BERARU ANA AF ID 2002

1002 CIURAR IOSIF MK ZI 2001

1010 BUCOV ILIE MK ZI 2002

Pentruca cele mai dese consultari sunt dupa sectie si forma de invatamant, ne propunem sa realizam un program care sa realizeze acest lucru. Sectia si forma de invatamant se vor prelua in variabilele S, respectiv F, prin dialogul care va apare pe ecran :

Programul pe care-l vom realiza, de fapt, nu este altceva decat un fisier de comenzi, in care liniile sunt comenzile :

1. CLEAR

2. ACCEPT 'SECTIA MK,FCI,AF :' TO S

3. ACCEPT 'FORMA INV ZI,FR,ID:' TO F

4. USE CATALOG

5. BROW FOR S$SEC AND F$FRI NOMO NOAP NODEL

6. USE

7. RETURN

In linia 1 sterg ecranul

In linia 2 'citesc' sectia in variabila S (dupa textul dintre ghilimele) : c-da ACCEPT

In linia 3 'citesc' forma in variabila F (dupa textul dintre ghilimele) : c-da ACCEPT

In linia 4, activez fisierul CATALOG.DBF (USE . )

In linia 5, cu BROWSE afisez inregistrarile care indeplinesc conditia de dupa FOR

In linia 6, inchid fisierul de date activ

In linia 7, RETURN va reda controlul FOX-ului.

FOX-ul dispune de un editor propriu, care ne permite sa asamblam aceste comenzi intr-o entitate de tip special care formeaza fisierul de comenzi (continand cele 7 linii) si care in mod curent se numeste PROGRAM. Mai intai ne gandim cum sa se numeasca acest program. Sa zicem CONSULT.

Acum activam editorul cu o comanda de tip

MODIFY COMMAND <nume program>

In cazul nostru :

MODI COMM CONSULT enter

Ca efect, pe ecranul monitorului apare un meniu specific editorului.

In partea de sus a ecranului, in centru, va apare CONSULT.PRG. Daca acum creez acest fisier, ecranul este vid si promptul se aseaza in stanga sus, asteptand sa introduc prima comanda. In cazul nostru voi tasta CLEAR apoi enter, s.a.m.d.

Extensia PRG pentru fisierul CONSULT este cea care ne confirma ca vom crea un fisier-

Program.

System File Edit Database Record Program Window Run

CONSULT.PRG

CLEAR

ACCEPT 'SECTIA MK,FCI,AF :' TO S

ACCEPT 'FORMA INV ZI,FR,ID:' TO F

USE CATALOG

BROW FOR S$SEC AND F$FRI NOMO NOAP NODEL

USE

RETURN


FIGURA : IMAGINE ECRAN pt MODI COMM CONSULT

Dupa ce am 'scris' si RETURN, vom salva acest fisier : CTRL+W. Fereastra editorului se inchide. In directorul de lucru se va gasi si fisierul CONSULT.PRG. Verificam acest lucru tastand DIR *.PRG. Daca vom dori sa modificam programul deja creat vom tasta din nou MODI COMM CONSULT. Acum pe ecran apare 'TEXTUL SURSA' al programului, si editorul ne permite modificarea lui. Evident,dupa efectuarea modifica rilor,vom salva noua versiune a programului :CTRL+W !

LANSAREA IN EXECUTIE A PROGRAMULUI CREAT/MODIFICAT se va face cu o comanda DO <nume program>, in cazul nostru : DO CONSULT

De retinut cele 2 faze ale lucrului cu programe :

1.Crearea / Modificarea programului urmata de salvare (MODI COMM . CTRL+W)

2.Lansarea programului in executie (DO . )

Program TATA, FIU, NEPOT, . sau program APELANT si APELAT.

Dupa cum ati vazut, un program are parti componente linii care sunt comenzi FOX.

Printre liniile unui program se pot gasi si linii de tip: DO <nume program apelat>

PROGRAM TATA (APELANT)

CLEAR

. PROGRAM FIU (APELAT)

(linii ale programului apelant)

. (linii ale programului apelat)

DO <nume program apelat>

prima linie de sub DO

RETURN (sfarsitul programului fiu)

(linii ale programului apelant) (se reda controlul programului TATA)

RETURN

Daca in programul FIU nu intervin situatii care sa impuna alte 'intoarceri' RETURN-simplu va reda controlul programului TATA si anume : urmeaza a se executa prima linie de sub DO . .

In notatia cel mai des utilizata, legaturile de subordonare de acest tip sunt reprezentate astfel :

PROGRAM APELANT (TATA)

PROGRAM APELAT - FIU pt.

TATA si APELANT pt NEPOT

PROGRAM APELAT (NEPOT)

Un program apelant, de exemplu CALCSAL de calcul salarii poate 'trimite' programului apelat valoarea venitului impozabil. Programul apelat CALCIMP (calcul impozit pe salar) va prelucra valoarea 'primita' in sensul ca va calcula impozitul corespunzator. Aceasta valoare rezultata, va trebui retransmisa programului APELANT pentru continuarea prelucrarilor. Astfel ca schema de legatura dintre cele 2 programe va arata :

CALCSAL - calcul salar pentru o marca

valoare venit baza de calcul

valoare impozit calculat

CALCIMP - calcul impozit corespunzator salarului

Va recomand sa aprofundati aceste relatii intre programe APELANTE si APELATE citind bibliografia.

PROBLEME, EXERCITII, INTREBARI .

1 Fisierul de date STUDENTI.DBF are structura :

NRLEG N 6 numar legitimatie

NUMPR C 20 nume prenume student

DATAN D 8 data nasterii ZZ/LL/AA

FILIALA C 10 ex : SEBIS, BAIA MARE, etc.

FACUL C 10 facultatea (MARKETING,DREPT, etc)

SECTIE C 10 sectia (MARKETING,ADM_AF, etc)

FORMA C 3 forma de invatamant (ZI,FF, etc)

ANSTUD N 1 an de studiu (1 )

TAXEP N 12 volumul taxelor platite (ex :7500000.00)

Si contine date referitoare la anul universitar curent pentru toti studentii din universitate.

Aveti 2 variante de atribuire a numarului de legitimatie fiecarui student:

A)   un singur sistem pe toata universitatea : 1,2, . , n

B)    fiecare filiala sa-si atribuie numere proprii pentru legitimatiile studentilor.

care sunt avantajele si dezavantajele fiecarei variante dupa parerea d-vs ?

care ar fi cheia de identificare a unei inregistrari in cazul A ?

care ar fi cheia de identificare a unei inregistrari in cazul B ?

Fisierul de mai sus contine peste 10000 de inregistrari si am optat pentru acordarea de numere de legitimatie propriu fiecarei filiale. Deci cheia de identificare a unei inregistrari se compune din FILIALA si numar legitimatie .

Doresc sa stiu la ce facultate este studentul cu numarul de legitimatie 111111 din filiala de la ZALAU.

Spre care metoda de consultare va orientati : consultare secventiala, indexata sau cautarea prin injumatatirea intervalului si de ce ?

Daca va orientati spre consultarea indexata, cum realizati indexarea fisierului

STUDENTI in cazul folosirii cheii compuse : filiala si numar legitimatie ?

INDEX ON NRLEG+FILIALA TO STUDENTI

INDEX ON STR(NRLEG,6)+FILIALA TO STUDENTI

INDEX ON FILIALA+STR(NRLEG,6) TO STUDENTI

La 3 am executat indexarea dupa cea de a treia varianta. Cum construim cheia CH de cautare a studentului de la BAIA MARE cu legitimatie 123321 ?

Secretarele facultatilor utilizeaza frecvent acest fisier si sunt nemultumite de faptul ca in cheia de consultare am introdus numarul de legitimatie care nu le este usor accesibil din punct de vedere practic. Ele ne sugereaza sa folosim numele si prenumele in loc de legitimatie, pentruca numele studentilor le este mai 'la indemana'. Sursa lor de preluare a numelui studentului este DOSARUL DE INSCRIERE la facultate. Ce facem ? Ce cheie propuneti pentru cautare, pentruca dupa cum stim pot exista 2 studenti cu acelasi nume chiar in aceeasi facultate ?

Pentru rezolvarea cerintelor de la 5, propunem cheia filiala + nume prenume + data nasterii ? E bine ?

Cautarea indexata pentru cazul cheii de la 6 trebuie sa fie precedata de INDEXAREA fisierului :

INDEX ON FILIALA+NUMPR+DTOS(DATAN) TO STUDIDX

E bine ? Ce alta functie ar fi putut fi folosita in loc de DTOS() ?

In cazul indexarii de la 7, cum construiesc cheia de cautare pentru studentul POP ION de la BAIA MARE nascut la data de 01/04/1981 ? (suntem in contextul comenzilor SET DATE FRENCH si SET CENT ON ).

In conditiile in care cheia de cautare este stabilita ca fiind compusa din filiala,nume si prenume si data nasterii, mai poate fi folosita tehnica de cautare prin injumatatirea intervalului de cautare ? Cum se va face sortarea fisierului inainte de a aplica acest algoritm ?

Reamintiti-va si precizati asemanarile si deosebirile dintre

SCATTER TO < nume tablou > si SCATTER MEMVAR

Cand folosim variantele comenzilor SCATTER,GATHER

SCATTER MEMVAR MEMO si

GATHER MEMVAR MEMO ?

Cate forme ale comenzii @ linie,coloana . ati intalnit in acest curs si care este

efectul lor ?

Cate variante ale structurilor selective (alternative) cunoasteti ? Descrieti - le.

Descrieti modul (modurile) in care se poate face parasirea executiei repetitive a corpului buclei in structurile repetitive.

Care este comanda pentru crearea unui program FOX folosind editorul propriu ?

Care este comanda pentru modificarea unui program FOX ?

Cum lansez in executie un program FOX.

Care-i combinatia de taste pentru salvarea unui program, lucrand cu editorul FOX ?

Se pot transmite parametri intre un program APELANT si APELAT ? Cum ?

ANEXA C03

COMENZI, INTRUCTIUNI, FUNCTII,NOTIUNI PREZENTE IN CURSUL C03

CAUTAREA SECVENTIALA

LOCATE .

CONTINUE

FOUND()

CAUTAREA INDEXATA (DIRECTA)

FISIERE .IDX

INDEX ON . TO .

SEEK .

CHEIE DE INDEXARE

CHEIE DE CAUTARE

REINDEX

CAUTAREA PRIN INJUMATATIREA INTERVALULUI

ALGORITMUL CAUTARII BINARE

TABLOURI DE VARIABILE (MASIVE)

DIMENSION .

INITIALIZARE TABLOURI : STORE <val> TO <nume_tablou>

SCATTER, GATHER

SCATTER TO <nume tablou>

GATHER FROM <nume tablou>

SCATTER MEMVAR

GATHER MEMVAR

CAMPURI DE TIP MEMO

SCATTER MEMVAR MEMO

GATHER MEMVAR MEMO

ECRANUL FOXPRO : COORDONATE

@ L1,C1 TO L2,C2 [ DOUBLE ]

@ L1,C1 CLEAR TO L2,C2

@ L1,C1,L2,C2 BOX < sir de 9 caractere >

STRUCTURI SELECTIVE

IF . ELSE . ENDIF

IF . ENDIF

DO CASE . ENDCASE

FUNCTIA FILE()

STRUCTURI REPETITIVE

FOR . ENDFOR

DO WHILE . ENDDO

SCAN . ENDSCAN

IMBRICAREA STRUCTURILOR SELECTIVE SI REPETITIVE

MODI COMM <nume program>, DO <nume program>





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate