|
Lucrarea
3
Consultarea Bazelor
de Date. Instructiuni de ciclare.
1.
Listarea informatiilor. Selectarea înregistrarilor
Exemplu:
DISP NEXT 5
DISP ALL
LIST
LIST RECORD 3
DISP FOR DELETED()
DISP FOR RECNO()<10
DISP FOR nume = "POP" |
2. Instructiuni de intrare iesire la consola. Fisiere
de program
3. Gestionarea informatiei din câmpurile MEMO
Exemplu:
Adaugati câmpul CV(de la curriculum vitae) de
tip MEMO la tabela STUD.DBF creata anterior. Completati
din fereastra BROWSE informatie în acest câmp pentru
câteva înregistrari.
USE stud
DISP
LIST
GO TOP
DISP "CV:"+cv
SET MEMOWIDTH TO 3
? MEMLINES (cv)
? MLINE (cv, 1)
? MLINE (cv, 2)
SET MEMOWIDTH TO 20
? MEMLINES (cv)
? MLINE (cv, 1)
? MLINE (cv, 2) |
4.
Instructiuni de calcul secvential în tabele
Exemplu:
USE stud
COUNT FOR Bursa<>0 TO nSB &&
calcul studenti bursieri
COUNT FOR .NOT. ISBLANK(bursa) .AND. bursa = 0 TO nSNB
&& clacul studenti nebursieri
SUM bursa TO nBursaTotal && calculul
sumei burselor
AVEREGE bursa FOR .NOT. ISBLANK(bursa) TO nBMed
&& clacul bursa medie
CALCULATE MAX(bursa),MIN(bursa) FOR .NOT.ISBLANK(bursa) TO nMa,nMi
&& calcul bursa maxima / minima
? "stud. sursieri:", nSB," stud. nebursieri:",nSNB
? "Burse - suma, medie, minima si maxima:", nBursaTotal,nBMed,nMA,nMi |
5. Instructiuni conditionale si de ciclare.
Exemplu:
* fisierul L31.prg
SET TALK OFF
USE stud
CLEAR
? "Secventa SCAN de afisare a studentilor bursieri"
? "Studentul Numele"+REPL(" ",11)+"Bursa"
SCAN FOR bursa>0
? "Studentul: "+LEFT(nume,16)+" "+STR(bursa,6,0)
ENDSCAN
WAIT "Apasati o tasta pentru a continua!"
CLEAR
GO TOP
? "Secventa DO WHILE de afisare a studentilor bursieri"
? "Studentul Numele"+REPL(" ",11)+"Bursa"
DO WHILE .NOT. EOF()
IF bursa>0
? "Studentul: "+LEFT(nume,16)+" "+STR(bursa,6,0)
ENDIF
SKIP
ENDDO
WAIT "Apasati o tasta pentru a continua!"
CLEAR
GO TOP
? "Secventa DO UNTIL de afisare a studentilor cu o bursa"
INPUT "bursa cautata: " TO nBursa
LOCATE FOR bursa = nBursa
IF .NOT. FOUND()
? "nu exista"
ELSE
? "Studentul Numele"+REPL(" ",11)+"Bursa"
DO
? "Studentul: "+LEFT(nume,16)+" "+STR(bursa,6,0)
CONTINUE
UNTIL .NOT. FOUND()
ENDIF
RETURN |
6. Probleme propuse
P1. Rulati
exemplele prezentate în acest capitol.
P2. Folosind
comenzi de calcul secvential calculati câti studenti au bursa între
500.000 si 800.000 lei, apoi valoarea media a burselor cuprinse în
acest interval, în doua moduri, prin SUM si COUNT respectiv AVERAGE.
P3. Comparati
timpul de executie pentru calculul numarului, sumei, si bursei medii a
studentilor bursieri prin secventa COUNT, SUM si AVERAGE respectiv prin
instructiunea CALCULATE CNT, SUM, AVG. Pentru aceasta populati automat
tabela stud cu 1000 studenti rulând programul urmator:
USE stud EXCLUSIVE
ZAP
FOR i=1 to 10
FOR j=1 TO 10
FOR k=1 TO 10
APPEND BLANK
REPLACE nume WITH CHR(64+i)+CHR(96+j)+CHR(96+k)
IF RANDOM()>0.5
REPLACE bursa WITH RANDOM()*1000000
ENDIF
ENDFOR
ENDFOR
ENDFOR
USE
RETURN
Timpul de executie se va calcula cu ajutorul functiei sistem TIME() sau
SECONDS().
P4. Implementati
structurile ciclice din ultimul exemplu prezentat folosind comanda FOR.
Folositi instructiunile de calcul secvential pentru a afla numarul de
pasi necesari.
©
s.l. dr. ing. Dan Pescaru '2004
|