Documente Academic
Documente Profesional
Documente Cultură
PROGRAMAREA CALCULATOARELOR
1
Referenţi ştiinţifici:
Prof. univ. dr. BABUCEA GABRIELA
Prof. univ. dr. BONCEA AMELIA
2
Cuprins
INTRODUCERE..........................................................................................................................6
MODULUL 1................................................................................................................................8
UNITATEA 1 – INTRODUCERE ÎN PROGRAMARE...............................................................9
U1.1. Scopul şi obiectivele unităţii................................................................................................9
U1.2. Introducere în programare...................................................................................................9
U1.3. Noţiuni de programare.......................................................................................................10
U1.4. Mediu de programare.........................................................................................................14
U1.5. Test de autoevaluare nr. 1...................................................................................................17
U1.6. Rezumat.............................................................................................................................17
Bibliografie minimală..................................................................................................................17
Răspunsuri şi comentarii la testul de autoevaluare nr. 1..............................................................17
MODULUL 2..............................................................................................................................44
UNITATEA 5 – REZOLVAREA PROBLEMELOR ECONOMICE CU AJUTORUL
PROGRAMELOR PE CALCULATOR..........................................................45
U5.1. Scopul şi obiectivele unităţii..............................................................................................45
U5.2. Programare.........................................................................................................................45
3
U5.3. Noţiuni de bază specifice procesului de prelucrare automată a datelor.............................46
U5.4. Test de autoevaluare nr. 5...................................................................................................49
U5.5. Rezumat.............................................................................................................................49
Bibliografie minimală..................................................................................................................50
Răspunsuri şi comentarii la testul de autoevaluare nr. 5..............................................................50
MODULUL 3..............................................................................................................................67
UNITATEA 8 – LIMBAJUL DE PROGRAMARE VISUAL BASIC........................................68
U8.1. Scopul şi obiectivele unităţii..............................................................................................68
U8.2. Caractersticile generale ale mediului integrat de dezvoltare Visual Basic.......................68
U8.3. Componentele de bază ale mediului integrat de dezvoltare Visual Basic.........................70
U8.4. Test de autoevaluare nr. 8...................................................................................................73
U8.5. Rezumat.............................................................................................................................73
Bibliografie minimală..................................................................................................................74
Răspunsuri şi comentarii la testul de autoevaluare nr. 8..............................................................74
MODULUL 4..............................................................................................................................96
UNITATEA 10 – FOXPRO............................................................................................................97
U10.1. Scopul şi obiectivele unităţii............................................................................................97
U10.2. Prezentare generală FOXPRO.........................................................................................98
U10.3. Intrarea şi ieşirea din FoxProW. Mediul FoxProW. Elemente de interfaţă....................103
U10.4. Tipul logic......................................................................................................................104
4
U10.5. Tipul numeric.................................................................................................................105
U10.6. Tipul şir de caractere......................................................................................................109
U10.7. Tipul memo....................................................................................................................112
U10.8. Tipul dată calendaristică................................................................................................112
U10.9. Baze de date...................................................................................................................116
10.9.1. Crearea unei baze de date. Structura unei baze de date............................................117
10.9.2. Deschiderea şi închiderea unei baze de date.............................................................118
10.9.3. Manipularea structurii unei baze de date..................................................................118
10.9.4. Manipularea câmpurilor unei baze de date...............................................................118
10.9.5. Vizualizarea conţinutului unei baze de date..............................................................119
U10.10. Câmpurile memo.........................................................................................................121
U10.11. Meniuri.........................................................................................................................122
10.11.1. Comenzi pentru lucrul cu meniuri..........................................................................123
10.11.2. Funcţii referitoare la meniuri..................................................................................137
U10.12. Programe. Execuţia programelor.................................................................................138
10.12.1. Proceduri şi funcţii definite de utilizator................................................................140
10.12.2. Variabile globale şi variabile locale........................................................................142
10.12.3. Transferul de parametri la şi de la module de program..........................................143
10.12.4. Compilarea..............................................................................................................145
10.12.5. Depanarea programelor şi tratarea erorilor.............................................................146
U10.13. Programarea structurată...............................................................................................149
U10.14. Lucrul cu fişiere...........................................................................................................154
U10.15. Test de autoevaluare nr. 10...........................................................................................157
U10.16. Rezumat.......................................................................................................................157
Bibliografie minimală................................................................................................................157
Răspunsuri şi comentarii la testul de autoevaluare nr. 10..........................................................158
5
INTRODUCERE
Scopul cursului:
În mai puţin de o generaţie, revoluţia informaţiei şi introducerea
calculatoarelor în fiecare dimensiune a societăţii, a schimbat lumea. Predicţiile unor
futurişti ca Marshall McLuhan şi Alvin Toffler se adeveresc şi lumea se transformă
într-un “sat global”, unde nu mai există graniţe pentru afaceri, comunicaţii sau
comerţ.
Putem considera că un nou tip de economie şi-a marcat prezenţa la nivel
planetar. Ea poate fi catalogată, atât ca o economie informaţională, o economie
bazată însă pe cunoştinţe, cât şi ca una globală. Este informaţională deoarece
productivitatea şi competitivitatea agenţilor economici depind în mod esenţial de
capacitatea lor de generare, tratare şi aplicare a unei informaţii eficace bazate pe
cunoaştere. Este şi globală deoarece activităţile cheie, de producţie, consum şi
distribuţie, precum şi componentele lor (capitalul, forţa de muncă, materiile
prime, informaţiile, tehnologiile, pieţele) sunt organizate la scară planetară.
Informaţională şi globală, în acelaşi timp, întrucât în noile condiţii istorice,
productivitatea ea naştere şi concurenţa se exprimă într-o reţea globală de
fenomene ce interacţionează.
Emergenţa unei noi paradigme tehnologice organizate în jurul noilor
tehnologii ale informaţiei, mult mai puternice şi mai “suple”, permit chiar
informaţiei să devină produs al procesului de producţie. Astfel a apărut aşa
numita economie în reţea, profund independentă, care devine din ce în ce mai
capabilă de a aplica progresele tehnologiei sale, cunoaşterii şi gestiunii sale.
Peter Drucker descrie curentul actual, pe care-l consideră apărut în anii
60 şi continuat până în 2020: “Intrăm într-o societate a cunoaşterii, în care
resursa economică principală nu mai este capitalul sau munca, ci cunoaşterea şi
în care lucrătorii inteligenţi vor juca un rol central”. Dacă în ultimii ani se
vorbea despre tipul de societate postindustrială, în care se remarca trecerea în
special de la industrie către servicii, pentru secolul XXI lucrurile sunt relativ
simple: se va trece de la activităţi bazate pe informaţii, la activităţi bazate pe
cunoştinţe şi putem aprecia că dacă secolul XX a fost unul al tehnicii, secolul XXI
va fi cu siguranţă al cunoaşterii.
Volumul de faţă se adresează cu precădere studenţilor de la forma de
învăţământ la distanţă ai Facultăţii de Ştiinţe Economice şi Gestiunea Afacerilor
din cadrul Universităţii „Constantin Brâncuşi” Târgu Jiu, dar poate fi deosebit
de util oricărui student indiferent de forma de învăţământ pe care o urmează
având în vedere că în această lucrare sunt tratate noţiunile de bază ale biroticii
cu cea mai largă aplicabilitate în aşa manieră încât studentul parcurgând
materialul să-şi poată însuşi obiectul şi metoda acestei discipline cu o deosebită
aplicabilitate în viaţa economică şi socială.
Modul în care a fost gândit şi pus în practică face din acest volum un
suport metodologic pentru disciplina Programarea Calculatoarelor, dar şi un
instrument de lucru necesar atât în înţelegerea şi însuşirea acestei discipline prin
prezentarea concisă a noţiunilor urmată de exemple practice, dar şi pentru
consolidarea acestora prin testele de autocontrol propuse.
Conţinutul lucrării a fost structurat pe 4 module divizate în 14 unităţi de
studiu care cuprind obiectivele învăţării, sinteze de noţiuni teoretice şi exemple
ilustrative, rezumate, concluzii şi teste de autoevaluare.
6
O unitate de învăţare, acoperind în medie 2-3 ore de studiu individual, se
constituie practic ca o succesiune de sarcini de învăţare, în care un rol determinat
revine autoevaluării dorind astfel să dezvoltăm capacitatea de studiu individual şi
să dăm posibilitatea studentului ID ca, deşi lipsit de explicaţiile profesorului, să
dobândească cunoştinţe şi competenţe de aceeaşi calitate şi în aceeaşi cantitate
cu cele ale studenţilor de la forma de învăţământ zi.
Parcurgând prezentul material ne dorim să dobândiţi capacităţi privind
explicarea şi interpretarea la un nivel elementar a tehnicilor, conceptelor şi
sistemelor pentru prelucrarea automată a informaţiei sub forma unor sisteme
raţional argumentate, interpretarea contextuală, la un nivel elementar, a
rezultatelor obţinute în urma unui proces de analiză informatică a fenomenelor
economice.
Testele de autoevaluare care sunt incluse pe parcursul fiecărei unităţi de
studiu au rolul de a vă testa atingerea obiectivele propuse. Aceste exerciţii de
autotestare împreună cu răspunsurile/rezolvările/indicaţiile incluse la sfârşitul
unităţii respective încearcă să vă ajute în activitatea de autotestare, activitate
prin care vă puteţi da seama dacă aţi atins obiectivele propuse la începutul
unităţii de studiu, sau nu.
În speranţa că vom parcurge împreună un drum plăcut, interesant, dar
mai ales util, autorul acestui curs vă doreşte succes în acumularea corectă şi
rapidă a cunoştinţelor necesare utilizării unui calculator personal.
Obiectivele cursului:
Cursul intitulat Programarea Calculatoarelor are ca obiectiv principal
familiarizarea studentului cu noţiunile de bază ale programării, precum şi studiul
componentelor sistemelor de calcul automat şi prelucrarea automată a datelor care
preia treptat toate sarcinile tehnologiei informaţiei dintr-un sistem economico-
social privind elaborarea de metode, tehnici, concepte şi sisteme pentru
prelucrarea automată a informaţiei. În acest sens, la sfârşitul acestui curs, veţi fi
capabili să:
explicaţi şi să interpretaţi la un nivel elementar conceptele, abordările
limbajelor de programare aplicate în economie;
realizaţi la nivel acceptabil anumite programe care să redea o parte din
activitatea economică a unui agent economic;
utilizaţi concepte, teorii, modele şi metode elementare specifice programării
calculatoarelor, pentru rezolvarea de probleme practice ale domeniului de
studiu;
modelaţi fenomene economice cu un grad de complexitate scăzut;
interpretaţi contextual, la un nivel elementar, rezultatele obţinute în urma
unui proces de prelucrare a datelor economice.
Timpul alocat:
Durata medie de studiu individual a conţinutul cursului - 22 ore(ŞI)
Activităţi de laborator – 11 ore (AA)
Evaluarea:
Temele de control vor avea o pondere de 30% în nota finală, restul reprezintă 60%
nota la testul de verificare a cunoştinţelor de la examenul programat în sesiunea de
examene şi 10% accesarea platformei e-learning.
7
MODULUL 1
8
UNITATEA 1
INTRODUCERE ÎN PROGRAMARE
Cuprins: pag.
U1.1. Scopul şi obiectivele unităţii ............................................................. 9
U1.2. Introducere în programare .............................................................. 9
U1.3. Noţiuni de programare ..................................................................... 10
U1.4. Mediu de programare ....................................................................... 14
U1.5. Test de autoevaluare ......................................................................... 17
U1.6. Rezumat ............................................................................................. 17
Bibliografie minimală ................................................................................. 17
Răspunsuri şi comentarii la testul de autoevaluare ................................. 17
9
În practică intervin frecvent cazuri în care este necesară construirea unui
program deoarece oricât de generoasă ar fi familia aplicaţiilor deja disponibile
este imposibil a acoperi infinitatea situaţiilor concrete. Aceste situaţii inedite nu se
referă la noi tipuri de probleme sau la „revoluţionarea” modului de lucru, ci în
general, la modeste adaptări. Iată câteva situaţii în care efortul de programare îşi
dovedeşte pe deplin utilitatea;
-adaptarea unui program (editor de texte) la specificul naţional (caracterele
româneşti: ă, â, î, ş, ţ);
-prelucrări sumare ale datelor (conversii, prelucrare efectivă);
-extinderea unei aplicaţii cu module proprii;
-construirea unei aplicaţii cu înalt grad de particularitate etc.
Un programator va putea rezolva o situaţie “neplăcută” de acest gen
nefiind restrâns la gama de operaţii oferite într-un pachet. În general, însă, nu pot
fi abordate proiecte ample, ci doar operaţii punctuale.
Iar pentru ducerea la bun sfârşit a unui astfel de proiect restrâns sunt
necesare cunoştinţe tehnice şi studiu mult mei aprofundat decât cel a unui simplu
utilizator.
Dacă totuşi trebuie să programăm, atunci să programăm bine şi eficient. Să
nu ne apucăm să reinventăm gramafonul când acum muzica se ascultă pe compact
- discuri. Deci mai întâi trebuie trecut în revistă soft-ul deja existent şi doar în
cazul în care acesta nu este suficient să ne construim propriile programe. Iar
atunci când abordăm o aplicaţie să alegem cea mai performantă dintre uneltele
disponibile.
10
îmbunătăţirea performanţelor programului.
a) Scrierea programului presupune editarea unui fişier ce conţine textul
programului. Acest fişier se cheamă fişier-sursă şi este - după cum am menţionat-
un fişier cu text în format ASCII. În interiorul său el conţine instrucţiuni ale
limbajului în care se face programarea.
Un limbaj de programare este foarte asemănător limbajului obişnuit
(natural); el reprezintă un sistem de convenţii pe baza căruia se efectuează o
comunicare. Deci limbajul de programare este un sistem de cuvinte (cheie),
semne, construcţii cu cuvinte şi semne care ne asigură de faptul că transmitem
calculatorului ceea ce dorim să realizeze.
b) “Propoziţiile” şi “frazele” unui limbaj de programare nu sunt direct
înţelese de calculator. Ele sunt traduse din această formă uşor manevrabilă în
instrucţiuni maşină (singurele recunoscute de microprocesor) de către un program
ce se cheamă compilator. Acest program recunoaşte noţiunile din fişierul-sursă şi
le converteşte în echivalenţele lor în limbaj maşină pe care le depune într-un fişier
de ieşire numit fişier-obiect.
c) Fişierul-obiect produs de un compilator nu este, încă, gata de a fi
executat necesitând o prelucrare suplimentară a cărei raţiune va fi prezentată în
continuare.
Dacă fişierele-sursă ar fi traduse ca atare ele ar putea conţine multă
informaţie redundantă. Spre exemplu, să considerăm un program care printre
altele scrie mesaje pe monitorul calculatorului.
Dacă fiecare instrucţiune din fişierul-sursă ar produce instrucţiuni care
realizează scrierea unui mesaj această porţiune de cod s-ar găsi repetată (cu mici
modificări) în mai multe locuri din program. Pentru înlăturarea unui astfel de
lucru nedorit, operaţiile cel mai des folosite sunt “izolate” într-o colecţie de rutine
de unde pot fi apelate oricând este nevoie.
Deci, după compilare, fişierul-obiect produs nu va conţine întotdeauna
instrucţiunile necesare unei operaţii ci eventuale referiri la rutina de bibliotecă ce
execută operaţia în cauză.
11
Figura 1. „Compilarea” unui program
12
f) După ce programul a fost convins să funcţioneze corect, abia atunci este
cazul a încerca îmbunătăţirea performanţelor sale (viteză de execuţie, resurse
sistem mai reduse, protejare la erori). Pentru acest reglaj „fin” stau la dispoziţie
programe de tip “profiler” care detectează zonele de programe ce consumă cele
mai mari cantităţi de timp, punctele în care trebuie să se concentreze atenţia
programatorului.
De regulă se obişnuieşte a se lansa o versiune de test (versiunea „beta”) a
aplicaţiei care este exploatată efectiv pentru a se constata eventualele erori de
funcţionare.
În concluzie schema de dezvoltare a unei aplicaţii este următoarea:
13
realizează automat link-editarea şi execuţia, astfel încât întârzierile provocate de
etapele “suplimentare” sunt neglijabile.
În schimb, avantajele unui program compilat faţă de un program
interpretat sunt zdrobitoare:
- viteză de execuţie de câteva ori (chiar zeci de ori) mai marc;
- posibilitatea de a rula de sine stătător; odată compilat, compilatorul nu
este necesar în execuţia programului, pe când un program interpretat nu se poate
“executa” decât dacă interpretorul se află în memoria calculatorului;
- programul compilat dispune de resursele sistemului în întregime, pe când
cel interpretat le împarte cu interpretorul (mai ales memoria, care este de multe ori
critică);
- flexibilitate sporită în realizarea programelor compilate (adăugarea de noi
biblioteci, redefinirea unei rutine deja existente etc).
Toate aceste consideraţii au determinat ca interpretoarele să fie pe cale de
dispariţie la ora de faţă sau oricum, să fie dublate de un compilator. Spre exemplu
limbajul BASIC ce beneficia iniţial numai de interpretor posedă în prezent şi
compilatoare care încearcă să-l menţină în atenţia programatorilor.
Noţiunile de mai sus descriu etapele principale ale realizării unui program,
în plus faţă de aceste elemente fundamentale ce asigură o viziune de ansamblu
asupra procesului este necesar să amintim şi câteva noţiuni de detaliu ce intervin
frecvent în practică.
14
Mediile de programare disponibile în prezent sunt deosebit de performante
şi oferă utilizatorului toată gama de servicii necesare (help, exemple gata-
construite etc.), prin intermediul unor programe puternic interactive. Ele
transformă munca laborioasă a programatorului într-un succes aproape sigur.
Interfaţă de programare
Nici un program nu este construit de la zero. Spre exemplu, programele ce
lucrează sub MS-DOS se bazează pe interfaţa DOS, folosind rutinele elementare
ale acesteia (scriere caracter la consolă, citire caracter de la tastatură etc). Interfaţa
de programare reprezintă suportul pe care se construieşte un program. Desigur, cu
cât acest suport este mai elaborat şi programul în cauză va fi mai elaborat şi va fi
mai uşor de atins un nivel ridicat al complexităţii operaţiilor realizate. Un program
realizat pentru a rula sub Windows (deci bazat pe interfaţa Windows) are la
dispoziţie facilităţi de multitasking, nu mai trebuie să gestioneze diversele driver-e
(de ecran, imprimantă, tastatură etc), toate acestea fiind deja rezolvate de
Windows.
Biblioteci de programare
După cum aţi constatat din prezentarea anterioară‚ operaţia de link-editare
înseamnă conectarea unui fişier-obiect la rutinele corespunzătoare. Aceste rutine
pot exista într-un fişier pe disc şi link-editarea se realizează static, obţinându-se un
fişier-executabil.
Există, însă, şi biblioteci ce se încarcă în memorie şi sunt gestionate de un
program (de ex. Windows). in momentul lansării în execuţie a unei aplicaţii,
aceasta se află pe disc ne-link-editată. Ea va fi încărcată în memorie şi link-editată
dinamic cu modulele existente în memorie. Astfel, aplicaţia va fi rulată fără ca să
fie produs fişierul-executabil în forma sa completă.
Overlay-uri (acoperiri)
În momentul în care un program este prea mare pentru a încape în
memoria calculatorului se recurge la fragmentarea sa. Se păstrează din program o
parte principală (numită rădăcină) care se va afla în memorie şi de asemenea se
rezervă în memorie spaţiul necesar pentru încărcarea pe rând, a celorlalte părţi ale
programului în funcţie de necesităţi.
15
Figura 4. Program cu „acoperiri”
16
U1.5. Test de autoevaluare nr. 1
1. Care este scopul şi obiectivele unităţii? (1,5 pct.)
2. Care sunt etapele necesare realizării unui program? (1,5 pct.)
Timp de lucru : 40 min 3. Ce este mediul de programare? (1,5 pct.)
Punctaj 6p
4. În ce situaţii efortul de programare îşi dovedeşte pe deplin utilitatea? (1,5
pct.)
U1.6. Rezumat
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
17
UNITATEA 2
TIPURI DE LIMBAJE DE PROGRAMARE
Cuprins: pag.
U2.1. Scopul şi obiectivele unităţii ............................................................. 18
U2.2. Noţiuni introdictive .......................................................................... 18
U2.3. Limbajele de nivel scăzut – de nivel înalt ....................................... 19
U2.4. Limbaje procedurale / neprocedurale ............................................. 21
U2.5. Limbaje orientat ................................................................................ 23
U2.6. Limbaje concurente .......................................................................... 24
U2.7. Test de autoevaluare ......................................................................... 24
U2.8. Rezumat ............................................................................................. 24
Bibliografie minimală ................................................................................. 25
Răspunsuri şi comentarii la testul de autoevaluare ................................. 25
18
- reguli sintactice etc.
Iată spre exemplu, cum arată un program scris în limbaj PASCAL, afişează
pe ecran mesajul: Ce mai faci?
Aşa cum pentru însuşirea unei limbi străine trebuie învăţate cuvintele
acesteia şi regulile cu care pot fi manevrate tot aşa pentru însuşirea unui limbaj de
programare trebuie studiate cuvintele şi semnele care îl compun împreună ca
reguli de manevrare a lor.
După metoda cu care este conceput ansamblu comunicării, limbajele pot fi
clasificate în mai multe moduri.
În continuare vom enumera cele mai importante clase de limbaje, descriere
ce acoperă totalitatea limbajelor existente.
“Nivelul” unui limbaj este apreciat prin poziţia pe care o ocupă pe scara
constituită de limbajul recunoscut de microprocesor (limbaj maşină) şi limbajul
natural al programatorului (limba română, limba engleză ...).
Un limbaj de nivel scăzut este foarte apropiat de maşină, el manipulează
cu elemente de nivel hardware, fizic, cum ar fi: registru-micro-procesor, locaţie de
memorie, port de intrare/ieşire etc.
Un limbaj de nivel înalt sau foarte înalt manipulează cu concepte apropiate
de limbajul natural, concepte de nivel logic, cum ar fi: colecţie de date, nume de
operaţie (sort = sortare, writeln = scrie linie, open = deschidere fişier etc),
variabile, constante (asemănătoare ca înţeles cu cele din matematică) etc..
19
Figura 6. Tipuri de limbaje de programare
21
(grupuri de instrucţiuni) ce realizează o acţiune bine determinată. În figura
următoare sunt prezentate - vădit exagerat - modurile în care „se desfăşoară”
atenţia programatorului pentru a realiza (sau depana) un program.
23
U2.6. Limbaje concurente
U2.8. Rezumat
24
ajutorul unui limbaj neorientat, dar în loc de a efectua, să zicem o sortare printr-o
simplă instrucţiune va fi nevoie de zeci (chiar sute) de instrucţiuni care să
realizeze acelaşi lucru.
Deci, diferenţa esenţială dintre cele două tipuri de limbaje o constituie
nivelul conceptual definit. Cele specializate posedă deja integral suportul necesar
şi permit programatorului să se concentreze la ansamblul problemei, pe când cele
nespecializate lasă în sarcina programatorului manevrarea nivelelor inferioare ale
problemei.
Deci, trebuie analizat cu grijă limbajul ce va fi abordat deoarece facilităţile
sale pot duce la diminuarea calităţii programelor obţinute.
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
25
UNITATEA 3
LIMBAJE DE PROGRAMARE
Cuprins: pag.
U3.1. Scopul şi obiectivele unităţii ............................................................. 26
U3.2. Abordări conceptuale ........................................................................ 26
U3.3. Limbaje de nivel înalt neorientate ................................................... 28
U3.4. Test de autoevaluare ......................................................................... 36
U3.5. Rezumat ............................................................................................. 36
Bibliografie minimală ................................................................................. 36
Răspunsuri şi comentarii la testul de autoevaluare ................................. 36
26
Prezentarea va cuprinde principalele clase de limbaje de programe,
descrise mai întâi din perspectiva caracteristicilor definitorii, iar apoi detaliate
diferenţiat pentru fiecare din limbajele ce o compun o astfel de clasă.
Limbaje de nivel scăzut - această categorie de limbaje are un reprezentant
autoritar şi anume: limbajul de asamblare.
Diferenţierile care se pot face pentru limbajele de nivel scăzut sunt
următoarele:
a) după tipul de maşină;
b) după mediul de programare oferit.
a) Limbajul de asamblare este strâns legat de tipul de hardware disponibil,
iar un IBM-PC poate fi realizat cu diverse procesoare, din familia Intel 80x86
(8086, 80286, 80386, 80486, 80586, 80686, etc). Aşadar există tot atâtea limbaje
de asamblare - câte unul pentru fiecare procesor în parte.
Regulile respectate de versiunile limbajului de asamblare sunt, evident,
uşor de intuit:
- o nouă versiune o include complet pe cea anterioară;
- versiunea nouă oferă funcţii suplimentare şi le realizează pe cele vechi
mai rapid.
b) Aspectul unui limbaj (nu conţinutul său) poate fi schimbat radical de
mediul de programare oferit.
Pentru limbajul de asamblare există mai multe implementări disponibile,
începând cu pachete ce operează în mod linie (editare, compilare, link-editare
realizate cu câte un utilitar specializat) şi culminând cu medii integrate în care
toate operaţiile se pot declanşa de la un acelaşi pupitru de comandă (utilitar
interactiv pe bază de meniuri).
Nu sunt de luat în considerare decât aceste medii integrate (denumite
generic medii Turbo), dintre care se detaşează Turbo Asamblorul firmei Borland
TASM. El se livrează la un preţ ridicol de scăzut faţă de totalitatea serviciilor
oferite (interactivitate, viteză mare de lucru, implementare evoluată a limbajului -
directive de control al compilării, macroinstrucţiuni deja definite sau definibile de
utilizator etc).
Cu toate aceste calităţi produsul este foarte rar întrebuinţat datorită
dezavantajelor constructive ale unui limbaj de nivel scăzut cum este cel pe care îl
implementează. Dacă ţinem seama şi de faptul că limbajele de nivel înalt
27
performante (PASCAL,C) acceptă instrucţiuni în limbaj de asamblare, ne putem
explica de ce sunt foarte rar întâlnite situaţiile în care se apelează la TASM.
3.3.1. Basic
3.3.2. Fortran
29
Limbajul Fortran a constituit mulţi ani la rând principala unealtă a
programatorilor, de unde şi o oarecare nostalgie a acestora. Deşi nu poate fi
considerat “depăşit” din punct de vedere conceptual (este un limbaj algoritmic -
structurat) este neindicată folosirea lui datorită absenţei unor medii de programare
performante şi pentru că tendinţa actuală îi este defavorabilă.
Singura sa utilizare justificată o poate constitui versiunea Windows a
compilatorului.
3.3.3. Pascal
30
- adresări indirecte ale datelor (variabile pointer ce conţin nu valoarea unei
variabile, ci adresa de memorie la care se află aceasta);
- recursivitate (posibilitatea unei proceduri de a se apela pe ea însăşi,
asigurând astfel transcrierea extrem de simplă a algoritmilor ce presupun paşi de
recursivitate
- şiruri convergente, căutări in arbori etc;
- rutine complete de intrare/ieşire (deschidere, citire, scriere, modificare,
adăugare în fişiere ce pot conţine text, sau date de orice tip);
- funcţii de conversie a datelor din ASCII în format intern şi invers;
- set complet de funcţii matematice (radical, sin, cos, exponenţială,
logaritm etc);
- funcţii elementare de grafică 2D;
- posibilitatea inserării direct în sursă a instrucţiunilor în limbaj de
asamblare;
- posibilitatea definirii de overlay-uri pentru program.
Deci, un limbaj puternic, care în ciuda complexităţii sale nu este dificil de
învăţat şi stăpânit datorită clarităţii ireproşabile care îl fundamentează conceptual.
Versiunile standard ale implementărilor PASCAL sunt cele oferite de
Microsoft şi Borland, cu avantaj pentru cele din urmă (Turbo Pascal 5.0, Turbo
Pascal 5.5) datorită mediului de lucru performant. Combinaţia PASCAL + Turbo a
reprezentat un succes imens în rândul programatorilor având ca singur rival
cealaltă combinaţie: C + Turbo.
Versiunile recente ale PASCAL-ului constituie o mică revoluţie în
programare.
Turbo Pascal 6.0 introduce (altfel decât versiunea 5.5) noţiunea de
„obiect”. Pentru Pascal 6.0, obiect înseamnă o colecţie de date şi metode
(procedee de prelucrare, manevrare a datelor) ce se comportă unitar. Există mai
multe tipuri de obiecte, organizate într-o ierarhie bine definită. Definirea unui
obiect nou în acest arbore permite moştenirea comportamentului „părintelui” şi
eventual adăugarea unor noi comportamente.
Concret, gândiţi-vă la un meniu pe ecran. Acest meniu este un obiect
descendent din obiectul predefinit de tip view. El este un grup de obiecte şi conţine
rubrici, butoane de tip radio, butoane de acţiune etc, taste obiecte descendente din
view. Fiecare obiect se comportă aşa cum a fost definit (implicit ca “părintele”
său, ori într-un mod propriu dacă a fost redefinit sau extins comportamentul
31
“părintelui”. Obiectele funcţionează cooperant pentru definirea unui meniu, a
liniei de stare a unei căsuţe de dialog etc.
Având la îndemână acest instrumentar se pot crea aplicaţii ireproşabile din
punct de vedere al nivelului de prezentare şi al interactivităţii cu utilizatorul.
Acest modul orientat pe obiect implementat în Turbo Pascal 6.0 poartă
numele de Turbo Vision. Cu Vision se poate crea o aplicaţie ce se prezintă ca în
figura următoare:
32
Programarea este mai laborioasă (faţă de Fortran for Windows), deoarece
poate fi gestionată totalitatea serviciilor Windows (nu numai o gamă restrânsă a
acestora).
3.3.5. Limbajul C
Acest limbaj de programare, cu cel mai scurt nume posibil, a fost creat în
1971 de către Dennis Ritchie şi Brian Kernigham pentru dezvoltarea sistemului de
operare UNIX. Istoria sa merită menţionată deoarece este relevantă pentru
caracterizarea limbajului.
Aşadar se punea problema conceperii unui sistem de operare universal,
care să poată funcţiona, teoretic, pe orice tip de maşină -sistemul UNIX. Pentru
aceasta era nevoie de un limbaj care să exploateze toate posibilităţile unei maşini,
dar care nu putea fi limbajul de asamblare, deoarece el este specific maşinii - o
nouă implementare presupunea rescrierea integrală a sistemului. Din această
dilemă s-a putut ieşi construind un limbaj de nivel înalt (iniţial limbajul B, ulterior
C) care introducea şi concepte de nivel scăzut, hardware (registru, adresă, locaţie
de memorie absolută etc).
Mai bine de 90% din sursele primului sistem de operare UNIX
(implementat pe o maşină PDP-7) au fost scrise utilizând limbajul C, iar pentru
restul modulelor s-a apelat la limbajul de asamblare. sistemul astfel obţinut a rost
distribuit cu programele În format sursă şi cu descrierea noului limbaj folosit, cu
intenţia vădită de a-l transforma într-un sistem de operare universal.
Succesul nu a sosit imediat, dar era asigurat de noua metodă de lucru.
Programatorii au fost incitaţi să dezvolte acest sistem, extinzându-l cu noi module
şi să îl implanteze pe alte maşini prin rescrierea acelei minime părţi sub 10% în
limbaj de asamblare... “C” devenea un limbaj de referinţă.
După acest scurt preambul iată care sunt principalele caracteristici ale
limbajului:
- limbaj structurat de nivel înalt;
- posedă concepte de nivel scăzut, ceea ce permite exploatarea portabilă a
caracteristicilor intime unei maşini.
Spre exemplu, o variabilă foarte des utilizată, poate fi declarată “register”
(registru) şi atunci ea va fi memorată într-un registru al microprocesorului, nu într-
o locaţie din memoria internă, mărind (uneori considerabil) viteza de execuţie;
33
- rutine de conversie a datelor foarte evoluate (conversii implicite, intrări,
ieşiri, conversii în memorie);
- tipuri de date definibile de către utilizator;
- gestionarea elaborată a datelor de tip dinamic;
- definirea de noi funcţii;
- adresări indirecte ale variabilelor (pointer-i);
- recursivitate;
- set complet de funcţii matematice etc;
- funcţii pentru realizarea de grafică elementară 2D;
- funcţii de apel servicii DOS;
- posibilitatea definirii de overlay-uri pentru un program;
- şi nu în ultimul rând: concizie deosebită a limbajului (set de operatori şi
instrucţiuni foarte concise).
Aşadar un limbaj care suplimentează PASCAL-ul şi poate pretinde pe
drept cuvânt supremaţia în rândul limbajelor structurate de uz general.
Pentru versiunile standard ale implementărilor limbajului C există medii
de programare de tip «turbo» ce aparţin după cum ne-am obişnuit, firmelor:
Microsoft -produsul Ouick C - şi firmei Borland -produsele Turbo C.
3.3.6. ADA
34
În finalul acestei prezentări a limbajelor de uz general este deosebit de
utilă o recapitulare comparativă a celor doi candidaţi rămaşi în cursa pentru
supremaţie: PASCAL şi C.
Avantaje Pascal:
- regulile sintactice ale limbajului sunt mai stricte, de unde rezultă
programe mai sigure şi mai uşor de depanat; în limbajul C se acordă o mai mare
libertate programatorului, dar inevitabil şi o responsabilitate sporită (pentru a ţine
sub control un program C de mare întindere trebuie studiu şi mai ales experienţă);
- la noi în ţară - literatură de specialitate mai bogată (nu e de neglijat acest
factor).
Avantaje C:
- cod mai eficient pentru. operaţiile de intrare/ieşire pe disc;
- modulul Vision conţine mai puţine erori de fabricaţie decât cel al
PASCAL-ului;
- este de menţionat că în general 99% din presupusele erori. se datorează
programatorului şi numai 1% sunt erori reale. O metodă sigură de a depista cine
se înşeală este de a intra cu un depanator în
- executabilul produs şi de a analiza codul la nivel de limbaj de asamblare;
- libertatea de exprimare sporită, siguranţă de funcţionare diminuată;
- concizie seducătoare a exprimării;
- conversii de date şi gestionare a memoriei uşor mai performante
(modulul Vision al lui Pascal 6.0 înlătură această diferenţă);
- programele sursă circulă de regulă în limbaj C.
Informaţiile de mai sus nu pot înclina decisiv balanţa în favoarea unuia
dintre candidaţii la supremaţie. Dar se poate constata o evoluţie a limbajului
PASCAL către C şi putem presupune că disputa se va încheia în momentul în care
cele două limbaje vor fi complet similare. Oricum există un translator (PAS2C) ce
asigură traducerea fişierelor-sursă PASCAL în C şi un alt program (C2PAS) ce
efectuează operaţia în sens invers. Deci, problema deciziei „PASCAL sau C?”
poate fi considerată mai mult de domeniul livrescului.
U3.5. Rezumat
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
36
UNITATEA 4
LIMBAJE ORIENTATE PE GESTIUNEA
BAZELOR DE DATE
Cuprins: pag.
U4.1. Scopul şi obiectivele unităţii ............................................................. 37
U4.2. Limbaje orientate pe gestiunea bazelor de date ............................. 37
U4.3. Caracteristici definitorii S.G.B.D.-uri clasice ................................. 39
U4.4. Tipuri de SGBD: DBASE, PARADOX, FOX ................................. 41
U4.5. Test de autoevaluare ......................................................................... 43
U4.6. Rezumat ............................................................................................. 43
Bibliografie minimală ................................................................................. 43
Răspunsuri şi comentarii la testul de autoevaluare ................................. 43
37
pe suportul fizic de memorare, iar termenul de „gestiune” va semnifica totalitatea
operaţiilor ce se vor aplica asupra datelor din bazele de date.
Baza de date reprezintă structura logică în care este memorată o cantitate
de informaţii pe un suport fizic de memorare pentru a putea avea acces cât mai
rapid la toate informaţiile depozitate într-o bază de date, aceasta are o anumită
organizare, asemănătoare unui tabel, folosindu-se următoarea terminologie:
- câmp - coloană în tabel
- înregistrare - linie în tabel
- structura bazei de date - antetul tabelului
Pentru a determina în mod univoc structura bazei de date (antetul
tabelului) trebuie specificate câmpurile care compun tabelul , împreună cu
caracteristicile acestora. Fiecărui câmp îi sunt caracteristice:
- numele - identifică câmpul printre celelalte elemente
- tipul - stabileşte prelucrările ce se pot aplica datelor memorate în câmpul
respectiv
- lungimea - numărul de octeţi ocupaţi de câmp
- zecimale - pentru câmpurile numerice stabileşte poziţia punctului zecimal
în cadrul câmpului respectiv
Un S.G.B.D. trebuie să asigure următoarele funcţiuni elementare relativ la
bazele de date:
- definirea, crearea bazei de date;
- introducerea datelor în bazele de date (adăugare);
- modificarea unor date deja existente în bazele de date;
- ştergerea datelor din bazele de date;
- consultarea bazelor de date (interogarea, extragerea informaţiilor).
Alături de acestea, S.G.B.D-urile mai pot fumiza şi alte servicii, cum ar fi:
- suport pentru limbaj de programare;
- interfaţă cât mai atractivă şi performantă, pentru comunicarea cu
utilizatorul;
- diferite tehnici avansate de memorare, organizare, accesare a datelor din
bazele de date;
- utilitare încorporate: sistem de gestiune a fişierelor, liste şi tabele etc;
- help pentru „ajutarea” utilizatorului în lucrul cu bazele de date etc.
Necesităţile actuale în practica utilizării calculatoarelor se îndreaptă cu
precădere spre gestionarea bazelor de date de mari dimensiuni. O explicaţie
38
posibilă a acestei orientări e dată de faptul că o bază de date reprezintă informaţie,
iar cel care deţine informaţii complete şi rapide într-o anumită problemă este
indiscutabil cu un pas înaintea celorlalţi. Concurenţa din. domeniul economic
poate fi numită pe bună dreptate o bătălie informaţională.
Desigur, nu este nevoie să detaliem pentru cititor importanţa sistemelor de
gestiune a bazelor de date (S.G.B.D.). O experienţă minimă în domeniul
informatic este suficientă pentru a constata că la tot pasul apar necesităţi de
utilizare a unui S.G.B.D.
Pentru a putea studia diversele opţiuni posibile vom prezenta mai întâi
termenii care definesc un S.G.B.D., deci cadrul teoretic ce va constitui baza
consideraţiilor ulterioare.
39
- prelucrare elementară a bazei de date, ce presupune în principal sortarea
(indexarea) înregistrărilor dintr-o bază de date;
- generarea de rapoarte pe baza datelor disponibile într-o bază de date.
Datorită importanţei deosebite a operaţiei de sortare, vom detalia acest
subiect.
Este evident pentru oricine că o carte de telefon în care numele persoanelor
nu sunt ordonate alfabetic este, din punct de vedere practic, ca şi inexistentă.
Datele există în forma completă, din punct de vedere cantitativ, însă esenţială este
metode calitativă de organizare a lor.
Operaţia elementară de sortare a unei baze de date presupune ordonarea
înregistrărilor acesteia, după o ordine prestabilită (de ex.: ordinea alfabetică pentru
valorile alfanumerice sau ordinea crescătoare/descrescătoare pentru valorile
numerice).
Ordonarea bazei de date se poate face:
- fizic; înregistrările din baza de date schimbă între ele poziţia ocupată
astfel încât să fie dispuse în ordinea corectă.
- logic înregistrările nu îşi schimbă ordinea în baza de date, dar sunt privite
altfel prin intermediul unui index ce specifică ordinea lor logică..
Desigur, indexarea este o operaţie mult mai rapidă pentru bazele de date
mari, dar presupune o scurtă întârziere în regăsirea informaţiilor faţă de metoda
sortării lor fizice.
Pentru un S.G.B.D. de tip clasic toate cerinţele descrise până în acest punct
sunt minimale şi cu greu se mai poate opta pentru un mediu restrâns la aceste
operaţii.
Facilităţile suplimentare puse la dispoziţie sunt în general următoarele:
- manipulări grupe de înregistrări (copieri dintr-o bază de date într-o alta,
ştergeri etc);
- import/export date; bazele de date gestionate intern de către S.G.B.D. pot
fi puse la dispoziţie şi în formate ce sunt recunoscute de alte programe.
Import = încărcare date dintr-un format diferi de cel intern al S.G.B.D.-
ului.
Export = furnizare date convertite de la formatul intern la un alt format
extern S.G.B.D.-ului în cauză.
Formatul extern recunoscut de majoritatea S.G.B.D.-urilor clasice este
formatul ASCII.
40
- posibilităţi avansate de regăsire a înregistrărilor;
În mod clasic, regăsirea unei înregistrări se face după numărul ei în baza
de date sau după valoarea unui câmp. Aceste metode presupun un lucru greu
acceptabil: trebuie ştiut dinainte ceea ce trebuie aflat.
Caracteristicile principale ale unui mediu de tip S.G.B.D. sunt calitatea
serviciilor de exploatare oferite şi gradul de elaborare al limbajului de programare
definit.
Pentru prima cerinţă întâlnim aceleaşi criterii de evaluare ca în cazul
oricărei alte aplicaţii:
- interactibilitatea cu utilizatorul;
- viteză de lucru;
- protecţii la erori (accidente).
Cea de-a doua componentă (mediul de programare) reprezintă
implementarea unui limbaj orientat pe gestiunea bazelor de date. Pentru
caracterizarea sa vom ţine seama de criteriile uzuale:
- interactivitate mediu de programare;
- compilator / interpretor (viteza de lucru a aplicaţiilor obţinute);
- calitatea conceptuală a serviciilor şi funcţiilor oferite de limbaj;
- protecţia la erori a programelor obţinute, siguranţa în funcţionare;
- uneltele suplimentare de lucru (depanator, profiler).
Optarea pentru un anumit produs trebuie făcută după analizarea cu atenţie
a acestor caracteristici.
41
- Funcţia de manipulare: - permite crearea, actualizarea datelor, căutarea
rapidă, sortarea. Pentru acestea se foloseşte LIMBAJUL DE MODIFICARE A
BAZEI DE DATE (LMD).
Limbajul de descriere a bazei de date (LDD).
Setul de caractere: - este format din literele mari si mici ale alfabetului,
cifrele sistemului zecimal si caracterele: ., #, @, &,…etc.
Identificatorii:- sunt folosiţi pentru desemnarea variabilelor, fişierelor,
programelor, numelor de câmp. În funcţie de utilizare, aceştia pot avea maxim 10
caractere, dintre care prima este literă.
Cuvinte cheie: desemnează comenzile, funcţiile standard ale limbajului
neputând fi folosite în alt context şi pot fi prescurtate la primele patru caractere.
Tipuri de date:
- tipul numeric - este specificat prin litera N sau F.
- tipul şir - mulţime ordonată de caractere ASCII, fiind specificate prin
litera C.
- tipul dată calendaristică - este specificată prin litera D.
- tipul logic - mulţimea formată din două valori T sau F (litera L- logical).
- tipul memo - folosit numai în baze de date şi este asemănător cu tipul şir,
dar are o lungime variabilă (litera M)
Constante - sunt date ale căror valori constituite chiar din caracterele
utilizate în scrierea lor:
- numerice
- caracter
- logic
- dată calendaristică
Variabile - zone de memorie identificate printr-un nume-utilizator ce
primesc la un moment dat o valoare şi un tip.
Operatorii limbajului:
- aritmetici: +, -, /, *, **
- relaţionali: <, >, <=, >=
- logici: .not., .or., .and.
Expresiile: numerice; relaţionale; logice; şir; dată calendaristică.
Limbajul de manipulare al bazei de date (LMD) este alcătuit din comenzi
şi clase de comenzi (funcţii) realizate de SGBD.
42
U4.5. Test de autoevaluare nr. 4
U4.6. Rezumat
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
43
MODULUL 2
44
UNITATEA 5
REZOLVAREA PROBLEMELOR ECONOMICE CU
AJUTORUL PROGRAMELOR PE CALCULATOR
Cuprins: pag.
U5.1. Scopul şi obiectivele unităţii ............................................................. 45
U5.2. Programare ........................................................................................ 45
U5.3. Noţiuni de bază specifice procesului de prelucrare automată a
datelor ................................................................................................. 46
U5.4. Test de autoevaluare ......................................................................... 49
U5.5. Rezumat ............................................................................................. 49
Bibliografie minimală ................................................................................. 50
Răspunsuri şi comentarii la testul de autoevaluare ................................. 50
U5.2. Programare
45
calculele tehnico-inginereşti), prelucrări şi reprezentări statistice etc. Toate aceste
particularităţi sunt luate în considerare la rezolvarea problemelor economice, în
special a celor de gestiune. Informatica de gestiune reprezintă în esenţă
informatica aplicată în domeniul prelucrării automate a datelor asupra evidenţei şi
controlului activităţilor şi bunurilor unei organizaţii economice.
Gestiunea unei organizaţii economice constă în totalitatea activităţilor
desfăşurate pentru evidenţa resurselor acesteia (umane, materiale, financiare şi
informaţionale), încredinţate, spre administrare, factorilor de decizie, pentru
realizarea scopurilor specifice domeniului său de activitate.
În prezent, dar mai cu seamă în viitor, nu există şi nu va exista nici un loc
de muncă fără calculator conectat în reţea, în special în domeniile contabilitate şi
financiar-bancar. Viitorul economist trebuie să cunoască principiile şi elementele
de bază ale programării şi să câştige deprinderi adecvate, cel puţin din
următoarele două motive:
• economistul este un creator, şi nu un simplu operator pe calculator;
complexitatea şi diversitatea proceselor şi fenomenelor economice presupun o
permanentă deschidere spre schimbarea şi perfecţionarea aplicaţiilor informatice
economice ce pot fi realizate nemijlocit de către economist;
• economistul poartă un dialog permanent cu specialistul informatician în
ceea ce priveşte perfecţionarea sistemelor şi instrumentelor informatice complexe
dedicate rezolvării problemelor economice.
Este inutil să se insiste mai mult, la capitolul motivaţie, asupra importanţei
programării şi bazelor de date pentru viitorul economist cu specializarea
contabilitate şi informatică de gestiune, în care sintagma informatică de gestiune
reprezintă a doua jumătate a întregului. Acest fapt îi conferă viitorului economist
dreptul de a profesa şi în categoria profesioniştilor în informatică, dar, în acelaşi
timp, generează şi obligaţia de a-şi însuşi în mod corespunzător fundamentele
programării şi ale bazelor de date.
Orice sistem de calcul (adică acel sistem tehnic care asigură execuţia
procesului de prelucrare automată a datelor) are în compunere, în esenţă, partea de
hardware şi partea de software. Bill Gates, patronul Microsoft, spunea în anul
46
2002 că, din totalul costurilor unui sistem de calcul, partea de hardware reprezintă
5%, în timp ce partea de software reprezintă 95%. Problema costurilor unui
sistem de calcul devine din ce în ce mai importantă în condiţiile cerute de
societatea informaţională – societatea cunoaşterii şi în conformitate cu prevederile
legale referitoare la respectarea legii drepturilor de autor în domeniul software.
Partea de software a unui sistem de calcul cuprinde, la rândul ei, software-
ul de bază (sistemul de operare sau sistemul de programe de bază) şi software-ul
de aplicaţie (sau sistemul de programe aplicative). În continuare sunt prezentate
noţiunile de bază specifice procesului de prelucrare automată a datelor.
Sistem informatic conţine unul sau mai multe sisteme de calcul (hard şi
soft), cărora li se adaugă restul bazei tehnico-materiale, baza ştiinţifico-
metodologică, baza informaţională, resursele umane şi cadrul organizatoric. Baza
tehnico-materială conţine echipamentele de culegere, verificare şi transmitere
date, echipamentele de teleprelucrare, suporturile de stocare a datelor şi
calculatorul propriu-zis.
Baza ştiinţifico-metodologică cuprinde modelele matematice ale
proceselor şi fenomenelor economice şi metodologii de realizare a sistemelor
informatice. Baza informaţională se referă la date, fluxuri şi circuite
informaţionale, cataloage şi dicţionare de date etc.
Un sistem informatic are funcţia de prelucrare automată a datelor pentru
obţinerea informaţiilor necesare procesului de conducere sau de informare.
Din cele arătate mai sus, rezultă că procesul de prelucrare automată a
datelor presupune existenţa simultană a următoarelor elemente: sistemul de
echipamente (hardware), sistemul de programe de bază, sistemul de programe
aplicative, datele de intrare ce sunt supuse proceselor de prelucrare automată şi
datele de ieşire sau rezultatele prelucrărilor. În esenţă, acest proces de prelucrare
automată a datelor este format din trei etape: introducerea (citirea) datelor de
intrare, prelucrarea datelor (efectuarea calculelor) şi extragerea (scrierea)
rezultatelor. Este de reţinut că datele de intrare sunt introduse printr-o operaţie de
citire - read, iar datele ce reprezintă rezultate sunt obţinute printr-o operaţie de
scriere –write sau de tipărire- print a rezultatelor.
Sistemul de operare este realizat cu preponderenţă în limbajul de
programare C, este livrat cu licenţă, de regulă, de compania producătoare a părţii
hardware a calculatorului şi este specific unui anumit tip de platformă de
calcul (Windows, Unix, OS/2 etc). Programele aplicative sunt realizate prin
47
utilizarea limbajelor de programare acceptate de către sistemul de calcul şi de
sistemul de operare al acestuia.
Datele ce sunt prelucrate pe un sistem de calcul sunt organizate într-o
formă avantajoasă pentru aplicaţia informatică şi sunt reprezentate într-o structură
accesibilă calculatorului. Datele sunt organizate în colecţii de date în funcţie de
condiţiile specifice impuse de sistemul informaţional existent şi de dorinţele
utilizatorilor finali din procesul de decizie.
Procesul de prelucrare automată a datelor are loc într-o succesiune
controlată de operator, adică, în accepţiunea clasică, de acel utilizator final
specializat în operarea pe sistemul de calcul. Etapele procesului de prelucrare a
datelor pe calculator sunt materializate în următoarele operaţii:
pregătirea datelor iniţiale, de regulă manual, în vederea introducerii lor
în procesul de prelucrare automată (citire), ce presupune verificarea, sortarea şi
codificarea acestor date în funcţie de documentele primare existente;
verificarea datelor presupune confirmarea concordanţei între valorile
prezente în documentele primare şi valorile care trebuie să existe în conformitate
cu aplicaţia informatică concretă sau problema economică cu urmează a fi
rezolvată;
sortarea datelor semnifică acel tip de prelucrare prin care datele sunt
dispuse într-o anumită ordine, în conformitate cu un anumit sistem sau cu anumite
precizări ale utilizatorului;
codificarea datelor înseamnă operaţia de atribuire de semne numerice,
alfabetice sau alfanumerice unor date cu scopul de a optimiza numărul de semne
cu care se scriu şi se prelucrează, de exemplu, elementele specifice sistemului
informaţional financiar-contabil;
noţiunea de document primar (de evidenţă primară) este cea definită în
contabilitate, ca primă etapă a funcţiei contabile, adică acel document în care se
consemnează pentru prima dată o operaţie economico-financiară (facturi, chitanţe,
cecuri etc). Fiecare eveniment ce prezintă un efect economic se înscrie într-un
document primar în momentul şi în locaţia în care s-a produs;
introducerea datelor iniţiale în calculator, adică în memoria internă sau
memoria externă a sistemului de calcul; introducerea datelor iniţiale poate fi
făcută direct de la tastatură (în regim conversaţional) sau de pe un suport tehnic
accesibil calculatorului;
prelucrarea propriu-zisă a datelor, ceea ce înseamnă execuţia automată
48
de către calculator a tuturor operaţiilor prestabilite prin program (validări de date,
sortări, interclasări, comparări şi testări);
validarea de date este tipul de prelucrare ce constă în verificarea datelor
de intrare dacă sunt corecte în raport cu un set de reguli prestabilite (dacă sunt
reale, coerente, corelate, corect testate, corect transferate dintr-un mediu într-
altul);
interclasarea datelor reprezintă tipul de prelucrare prin care se obţine un
şir (vector) de date ce conţine toate elementele unor vectori iniţiali ordonaţi;
compararea datelor este tipul de prelucrare prin care se verifică
existenţa unor relaţii de ordine între două date;
relaţia de ordine a fost definită la cursul de matematică şi este o relaţie
binară pe o mulţime de date ce stabileşte ordinea de parcurgere a elementelor
mulţimii;
testarea datelor este tipul de prelucrare prin care se verifică un ansamblu
de date ce sunt pregătite pentru buna funcţionare a unui program;
prezentarea rezultatelor prelucrării, adică afişarea pe ecranul
monitorului sau imprimarea pe hârtie; când rezultatele sunt folosite în prelucrări
ulterioare, ele sunt stocate pe suporţi magnetici.
Etapele şi operaţiile prezentate mai sus se încadrează în ”triada de aur”
specifică oricărui sistem de calcul: stocare – prelucrare– prezentare date.
U5.5. Rezumat
49
specializat în operarea pe sistemul de calcul şi se încadrează în „triada de aur”
specifică oricărui sistem de calcul: stocare – prelucrare– prezentare date.
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
50
UNITATEA 6
NOŢIUNI DE BAZĂ REFERITOARE LA
PROGRAMARE
Cuprins: pag.
U6.1. Scopul şi obiectivele unităţii ............................................................. 51
U6.2. Noţiuni de bază referitoare la programare ..................................... 51
U6.3. Problematica generală a limbajelor de programare ...................... 57
U6.4. Test de autoevaluare ......................................................................... 59
U6.4. Rezumat ............................................................................................. 60
Bibliografie minimală ................................................................................. 60
Răspunsuri şi comentarii la testul de autoevaluare ................................. 60
53
Structura de control secvenţială (liniară) cuprinde o succesiune de
blocuri care se execută unul după altul;
Structurile de control alternative (cu ramificaţii) corespund unui bloc de
prelucrare care se execută în functie de satisfacerea unei condiţii.
Aceste structuri de control prezintă următoarele forme:
structura de control alternativă cu două ramificaţii (If…Then…Else);
structura de control alternativă cu mai multe ramificaţii (imbricată);
structura de control alternativă generalizată (Case-Of).
Structurile de control repetitive (de ciclare) asigură repetarea prelucrării
unor secvenţe de program. Formele structurilor de control repetitive sunt:
structura repetitivă fără contor condiţionată anterior (While Do);
structura repetitivă fără contor condiţionată posterior (Repeat …Until);
structura repetitivă cu contor condiţionată anterior (Do…For);
structura repetitivă cu contor condiţionată posterior (Do…For).
Din punct de vedere structural, un program poate avea în compunere mai
multe subprograme sau module. Pot constitui subprograme, componentele
programului de tipul procedurilor şi/sau al funcţiilor. Mai multe programe
alcătuiesc împreună o aplicaţie informatică. Clasic, aplicaţia informatică are o
structură statică arborescentă, adică este formată dintr-un program principal care
apelează subprograme. Subprogramele sunt independente în conformitate cu
principiile programării structurate (programe constituite din subprograme sau
module şi folosirea structurilor de control fundamentale).
Aplicaţia informatică este dedicată unui anumit domeniu de activitate
economică (de exemplu, aplicaţie informatică de contabilitate, aplicaţie
informatică pentru managementul resurselor umane, aplicaţie informatică pentru
gestiunea creditelor bancare etc.). Noţiunea de aplicaţie informatică nu este
similară cu aceea de sistem informatic.
Limbajul de programare este un limbaj artificial ce se foloseşte pentru
definirea unui şir de instrucţiuni care pot fi prelucrate şi executate pe un
calculator.
Problematica generală a limbajelor de programare este tratată în finalul
acestui paragraf.
Procedura (procedure) este o parte componentă, cu nume, a unui
program, căreia îi sunt associate constante, tipuri de date şi variabile şi care
54
execută, de regulă, un task unic. Task-ul este un subprogram sau aplicaţie
autonomă rulată ca o entitate independentă.
56
U6.3. Problematica generală a limbajelor de programare
57
Limbajele de nivel înalt sau evoluate sunt concepute în funcţie de
domeniul de aplicaţii informatice căruia îi este destinat (limbaje specializate,
pentru aplicaţii economice – limbajul Cobol, pentru aplicaţii tehnico-inginereşti,
limbajul FORTRAN, pentru aplicaţii de inteligenţă artificială, limbajele Lisp şi
Prolog) sau sunt universale (de exemplu, limbajele de programare PL/1 şi Ada).
Tendinţa de „ieşire” a limbajelor de programare din laboratoarele firmelor de
calculatoare şi de facilitare a însuşirii acestora de cercuri diverse de utilizatori s-a
materializat în dezvoltarea unor limbaje de programare „didactice”, cum sunt
Pascal şi Basic.
Dintre limbajele de programare de nivel înalt utilizate în prezent pentru
realizarea de software profesional de către firmele specializate se menţionează
limbajele C (cu variantele sale ulterioare C++, C#), Java, Ada.
Dintre limbajele de nivel jos (apropiate de cod-maşină) se menţionează
limbajele de macroasamblare (MASM, TASM), ce aparţin generaţiei 2 (2 GL), la
care se realizează gruparea unor secvenţe de instrucţiuni realizatoare ale unor
operaţii repetitive, de rutină, într-o macroinstrucţiune (instrucţiune a limbajului de
macroasamblare). Macroinstrucţiunile sunt standard (specifice limbajului de
programare) sau sunt definite de utilizator. Fiecare tip de microprocesor, ce
defineşte sistemul de calcul, dispune de propriile său limbaj cod-maşină şi limbaj
de asamblare.
Limbajele de programare pot fi procedurale şi neprocedurale.
Limbajul procedural sau imperativ,ce defineşte generaţia 3 (3 GL), este
limbajul de programare în care elementul esenţial al programării este procedura
(exemple: Basic, C, Pascal, Cobol, Fortran, Ada etc.). Limbajul procedural
necesită o detaliere atentă a ansamblului de instrucţiuni ce urmează a fi executate
în scopul realizării unei sarcini (task) precizate şi este independent de sistemul de
calcul.
Limbajele neprocedurale sunt limbaje de nivel foarte înalt, din generaţia 4
(4 GL), situate deasupra limbajelor de nivel înalt, specializate pe tipuri de aplicaţii
informatice. Aceste limbaje se caracterizează prin faptul că necesită precizarea
problemei de rezolvat, a metodei de rezolvare (şi nu a algoritmului de rezolvare),
a referirilor asociative de date (şi nu a adreselor specifice datelor) şi a operatorilor
generali necesari operaţiilor cu structuri de date. Limbajele neprocedurale sunt
foarte apropiate de limbajele naturale (umane). O ierarhie a limbajelor de
programare este prezentată în figura de mai jos.
58
LIMBAJE DE NIVEL FOARTE ÎNALT (4 GL)
LIMBAJE DE NIVEL ÎNALT (3 GL)
LIMBAJE DE MACROASAMBLARE (2 GL)
LIMBAJ DE ASAMBLARE (1 GL)
LIMBAJ COD-MAŞINĂ (0 GL)
HARDWARE
59
U6.4. Rezumat
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
60
UNITATEA 7
ELEMENTELE DE BAZĂ ALE PROGRAMĂRII
ORIENTATE PE OBIECTE
Cuprins: pag.
U7.1. Scopul şi obiectivele unităţii ............................................................. 61
U7.2. Abordare conceptuală ....................................................................... 61
U7.3. Test de autoevaluare ......................................................................... 65
U7.4. Rezumat ............................................................................................. 65
Bibliografie minimală ................................................................................. 66
Răspunsuri şi comentarii la testul de autoevaluare ................................. 66
61
comportamentale ale acestuia în momentul accesării. Prin comportament, obiectul
îşi pune în evidenţă apartenenţa la clasă, precum şi individualitatea sa.
Starea obiectului este caracterizată cu ajutorul atributelor lui. Orice atribut
dispune de nume şi valoare sau realizare ce este asociată ca variabilă de instanţă
(ce defineşte proprietăţile obiectului la un anumit moment). Elementele ce aparţin
colecţiei de obiecte descrise într-o clasă reprezintă instanţe de clasă. Obiectul este
definit de un identificator intern unic, independent de valoarea sau adresa de
memorie a obiectului. Acest identificator nu este controlat de utilizator şi nu se
confundă cu diferitele nume utilizate de utilizator cu scopul de a-l numi. Ca
entităţi complexe, obiectele sunt constituite din alte obiecte şi din valori.
Distincţia între obiecte şi valori se realizează prin intermediul stării obiectului:
obiectele dispun de o stare internă care se poate schimba; valoarea nu se schimbă
niciodată. Obiectele sunt create de utilizatori, prin derivare din tipuri de obiecte
create anterior sau printr-o operaţie de creare (new).
Clasa reprezintă o implementare a unui tip abstract de date ce
încapsulează două tipuri de atribute: câmpuri sau proprietăţi şi metode sau
operaţii ale tipului respectiv.
Câmpurile sunt private adică sunt ascunse în reprezentarea obiectului.
Metodele sunt publice adică accesibile utilizatorului. Altfel exprimat, clasa
defineşte o categorie de obiecte cu proprietăţi şi metode ce se moştenesc într-o
subclasă.
Subclasa sau clasa derivată defineşte comportamentul obiectului derivat
dintr-o clasă considerată de bază. Clasa este un model de realizare a obiectelor de
acelaşi tip şi se defineşte cu ajutorul unui limbaj declarativ sau pe cale grafică.
Clasa are un nume, prezintă operaţii externe sau metode, are o reprezentare
internă (ca expresie a valorilor diverselor stări ale instanţelor de clasă) şi
foloseşte cod ce implementează atât operaţiile externe, cât şi descrierile
reprezentării interne a obiectelor. Clasa există conceptual chiar şi atunci când nu
conţine obiecte şi este un şablon pentru generarea şi manipularea obiectelor şi este
accesată de utilizator cu ajutorul interfeţei specifice clasei. Specificarea metodei
se numeşte semnătură, iar modul de implementare constituie corpul metodei.
Noţiunea de clasă este asociată în special cu faza de execuţie şi presupune:
generarea de obiecte (new) şi memorarea mulţimii de obiectecare reprezintă
instanţele claselor. O clasă descrie obiectele, crearea unui obiect realizându-se
prin luarea în consideraţie a unei expresii de tip.
62
Tipul reprezintă o descriere abstractă a unui grup de entităţi asemănătoare.
63
termen utilizat ca model. Paradigma se referă la forme de manifestare ale
termenului respectiv.
Moştenirea asigură transferarea de proprietăţi şi metode de la clasa-
părinte către un obiect nou. Prin moştenire sunt generate tipuri noi de obiecte şi
clase într-o ierarhie. Prin moştenire, în OOP se elimină rescrierea şi recodificarea
programelor, asigurându-se reutilizarea codului. Un obiect nou moşteneşte
operaţii sau metode, variabile de instanţă, atribute. În cazul metodelor, este
vorba de partajarea codului, iar în cazul variabilelor, de partajarea structurii între
datele obiectelor.
Proiectarea unei aplicaţii prin intermediul OOP constă în gruparea
informaţiilor generale în clase care sunt apoi specializate pas cu pas în subclase cu
comportament particular.
Aşa cum s-a arătat deja, metodele reprezintă operaţii ce pot regăsi sau
actualiza starea unui obiect. Această stare a obiectului este memorată în
variabilele instanţelor sale. Într-o ierarhie de moşteniri, o metodă definită pentru o
clasă este moştenită de subclasele sale. Moştenirea este implementată static sau
dinamic.
Moştenirea statică înseamnă adăugarea câmpurilor moştenite, situaţie în
care redefinirea unei clase obligă la actualizarea tuturor subclaselor.
Moştenirea dinamică se realizează fără a se copia câmpurile moştenite şi
obligă la parcurgerea legăturilor de moştenire. În cazul moştenirii dinamice,
actualizarea se efectuează mai rapid, în timp ce execuţia este mai puţin eficientă.
Moştenirea poate fi simplă sau multiplă.
Moştenirea simplă se produce atunci când o subclasă moşteneşte
proprietăţi şi metode ale unei singure clase-părinte.
Moştenirea multiplă se realizează când o subclasă posedă mai multe
clase-părinte.
Încapsularea reprezintă proprietatea ce defineşte posibilitatea de a ascunde
prin mascare atributele proprii unui obiect şi modul în care se execută metodele.
Astfel, sunt protejate obiectele în situaţia efectuării greşite a unor
manipulări exterioare. Un obiect poate fi accesat numai prin metodele asociate la
crearea sa.
Polimorfismul defineşte caracteristica unei metode de a se comporta în
mod diferit în funcţie de clasa de obiecte căreia îi aparţine. Polimorfismul asigură
invocarea pentru obiectele de diferite tipuri a metodelor cu acelaşi nume, dar
64
semantică şi implementare diferită. O metodă se comportă diferit în funcţie de
clasa de obiecte căreia îi aparţine.
Abstractizarea datelor se realizează prin faptul că înseşi clasele sunt
expresia unei abstracţii. Obiectele dintr-o clasă prelucrează datele modelului
clasei căreia îi aparţin. Utilizatorul obţine comunicarea cu obiectele prin mesaje ce
se transmit prin interfaţa ce specifică metodele posibile.
Persistenţa este o proprietate a obiectelor care implică existenţa acestora şi
după încetarea procesului ce le-a creat. Starea obiectului şi codul corespunzător
metodelor sunt memorate în baza de date. Tipurile obiectelor pot fi declarate
persistente prin folosirea cuvântului cheie persistent la momentul declarării,
variabila fiind şi ea constrânsă la un tip persistent.
Evenimentul reprezintă o acţiune efectuată de sistemul de calcul în cazul în
care utilizatorul solicită executarea unei comenzi, este aplicat un mesaj al
sistemului sau există o solicitare din partea altei aplicaţii informatice. Ca urmare,
evenimentele se pot produce în mod interactiv sau programat.
Într-o aplicaţie informatică dirijată prin evenimente, codul nu urmăreşte o
cale prestabilită, ci secvenţe de program executate ca răspuns la apariţia
evenimentelor. Succesiunea în care se produc aceste evenimente determină
secvenţa după care se execută codul, ceea ce înseamnă că, la fiecare rulare a
programului, el va parcurge o cale diferită.
U7.4. Rezumat
65
clasă este moştenită de subclasele sale. Moştenirea este implementată static sau
dinamic.
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
66
MODULUL 3
67
UNITATEA 8
LIMBAJUL DE PROGRAMARE VISUAL BASIC
Cuprins: pag.
U8.1. Scopul şi obiectivele unităţii ............................................................. 68
U8.2. Caractersticile generale ale mediului integrat de dezvoltare Visual
Basic .................................................................................................... 68
U8.3. Componentele de bază ale mediului integrat de dezvoltare
Visual Basic ........................................................................................ 70
U8.4. Test de autoevaluare ......................................................................... 73
U8.5. Rezumat ............................................................................................. 73
Bibliografie minimală ................................................................................. 74
Răspunsuri şi comentarii la testul de autoevaluare ................................. 74
68
Visual Basic (VB) reprezintă un mediu integrat de dezvoltare, IDE
(Integrated Development Environment), în mod interactiv, pentru aplicaţii
informatice sub sistemul de operare Microsoft Windows. În general, un mediu de
programare este un sistem de programare care asistă utilizatorul în proiectarea şi
codificarea algoritmilor şi a datelor, respectiv în editarea şi depanarea
programelor.
Când acest mediu de programare asistă utilizatorul (programatorul) în
toate etapele de realizare a unui program, el se numeşte mediu de dezvoltare. Când
toate componentele de asistare a utilizatorului (programatorului) sunt integrate în
cadrul aceluiaşi mediu de dezvoltare, el se numeşte mediu integrat de dezvoltare.
Termenul visual din denumirea IDE Visual Basic semnifică faptul că
aplicaţiile informatice dezvoltate în VB dispun de interfeţe grafice ce sunt
proiectate vizual de către utilizator. Pentru aceasta, utilizatorul are la dispoziţie un
set de elemente vizuale standard ce pot fi folosite la proiectarea unei interfeţe
grafice, denumite elemente de control, sau, pe scurt, controale (Controls). Aceste
controale sunt dispuse în ferestrele aplicaţiei, ferestre denumite formulare
(Forms), concomitent cu stabilirea proprietăţilor acestora (în fereastra Properties)
la dorinţa utilizatorului şi în conformitate cu necesităţile aplicaţiei
Termenul Basic din compunerea IDE Visual Basic arată tipul limbajului de
programare utilizat pentru realizarea programelor (secvenţelor de cod)
corespunzătoare evenimentelor generate de acţionarea controalelor dispuse în
formularul specific aplicaţiei. Limbajul de programare Basic (acronim provenit
din denumirea în limba engleză – Beginner’s All-purpose Symbolic Instruction
Code), definit la începutul anilor ’60 ai secolului XX, a cunoscut numeroase
versiuni şi dezvoltări ulterioare.
În anul 1991, firma Microsoft a realizat produsul Visual Basic, care,
ulterior, a cunoscut mai multe versiuni, în concordanţă cu dezvoltarea sistemului
de operare Windows. Versiunea Visual Basic 6.0 face parte din pachetul Microsoft
Visual Studio 6.0, iar versiunea Visual Basic.NET este parte componentă a
pachetului Microsoft Visual Studio.NET.
Visual Basic prezintă caracteristici specifice programării structurate
(programării bazate pe obiecte), programării dirijate de evenimente, orientării
spre prelucrarea bazelor de date (manipulare şi interogare).
Aplicaţiile informatice realizate cu VB pot interacţiona cu alte aplicaţii
Windows prin intermediul unor interfeţe specializate: OLE (Object Linking and
69
Embedding) – legarea şi încapsularea obiectelor, ce asigură afişarea datelor din
alte aplicaţii şi modificarea acestor date din interiorul aplicaţiei care le-a generat;
COM (Component Object Model) – model de legare şi comunicare între obiecte
distribuite Windows; ActiveX – tehnologie soft Microsoft ce reuneşte componente
OLE şi COM; DDE (Dynamic Data Exchange) – schimb dinamic de date
(conversaţie) între aplicaţii Windows; ODBC (Open DataBase Connectivity) –
conectivitatea bazelor de date deschise, adică posibilitatea conectării aplicaţiilor
client la multiple servere de fişiere sau de baze de date; Crystal Report sau Data
Report – proiectarea vizuală a rapoartelor unei aplicaţii VB; Microsoft Jet
Database Engine – motorul sistemului de gestiune a bazelor de date Microsoft
Access ce asigură acelaşi limbaj de manipulare a datelor între VB şi Access.
Visual Basic face parte din clasa de medii de dezvoltare rapidă a
aplicaţiilor, RAD (Rapid Application Development), alături de Microsoft Visual
C++, Power Builder, Borland Delphi ş.a. ce prezintă următoarele caracteristici:
realizare rapidă a aplicaţiilor informatice, necesităţi acceptabile de resurse
informatice la execuţie, separarea proiectării prelucrărilor de proiectarea interfeţei,
integrează proiectarea interfeţei, scrierea codului, testarea şi depanarea.
În cadrul pachetului de birotică Microsoft Office, a fost inclus ca limbaj de
dezvoltare un subset al Visual Basic, denumit Visual Basic for Application – VBA.
71
pentru a introduce codul aplicaţiei informatice. Fiecare formular sau modul de cod
din cadrul aplicaţiei informatice dispune de propria fereastră de editare a codului.
Fereastra Project Explorer serveşte numai la proiectarea aplicaţiei pentru
afişarea colecţiei de fişiere ce conţin formularele şi modulele din cadrul
proiectului aflat în lucru (curent). Unele fişiere sunt încărcate în mod automat de
către sistem, iar alte fişiere sunt realizate de către utilizator (programator).
Fişierele care se găsesc în fereastră (proiect) se pot grupa pe categorii cu ajutorul
butonului ToggleFolders. Butonul View Object serveşte pentru vizualizarea
obiectului selectat (current), iar butonul View Code este folosit pentru vizualizarea
codului.
Fereastra de stabilire a proprietăţilor, Properties asigură afişarea valorilor
proprietăţilor pentru formularul sau controlul selectat. O proprietate reprezintă o
caracteristică a unui obiect (titlu, dimensiuni, poziţie, culoare etc.).
Fereastra Form Layout este folosită pentru vizualizarea aspectului
formularului.
Fereastra Immediate este o fereastră suplimentară utilizată în procesul de
depanare a aplicaţiilor informatice rulate din interiorul mediului IDE. Mediul VB
6.0 permite funcţionarea în trei moduri de lucru:
proiectare (design mode),
rulare normală (run mode) şi
execuţie cu întrerupere (break mode).
Execuţia cu întrerupere (pas cu pas) se utilizează la depanarea aplicaţiei pe
baza punctelor de întrerupere (breakpoints) stabilite în prealabil.
Fereastra Immediate permite introducerea de secvenţe de cod care se
execută imediat sau afişarea valorilor unor expresii.
Fereastra Locals este destinată, la depanarea programelor VB, pentru
afişarea valorilor unor expresii din program.
Fereastra Watch de asemenea, o fereastră suplimentară utilizată în procesul
de depanare a programelor VB, pentru gestiunea variabilelor şi expresiilor
watch,adică a valorilor unor variabile şi expresii din program existente în
momentul acţiunii (curente). Utilizarea ferestrei Watch este posibilă prin
intermediul meniului contextual.
Utilitarul Object Browser realizează afişarea obiectelor disponibile în IDE
ce pot fi utilizate de proiect.
Utilitarul serveşte, de asemenea, pentru a examina obiecte din VB şi din
72
alte aplicaţii, pentru a constata ce metode şi proprietăţi sunt disponibile în cazul
acestor obiecte şi pentru a prelua coduri de program în propria aplicaţie
informatică.
Editorul de meniu (Menu Editor) permite proiectarea meniurilor asociate
formularelor. Pentru afişarea ferestrei corespunzătoare se apasă butonul cu acelaşi
nume de pe bara cu instrumente sau prin opţiunea Menu Editor din meniul Tools.
U8.5. Rezumat
73
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
74
UNITATEA 9
PROIECTAREA APLICAŢIILOR ÎN LIMBAJUL
VISUAL BASIC
Cuprins: pag.
U9.1. Scopul şi obiectivele unităţii ............................................................. 75
U9.2. Proiectarea aplicaţiilor în limbajul Visual Basic ........................... 75
U9.3. Elementele limbajului de programare Visual Basic ...................... 89
U9.4. Test de autoevaluare ......................................................................... 94
U9.5. Rezumat ............................................................................................. 94
Bibliografie minimală ................................................................................. 95
Răspunsuri şi comentarii la testul de autoevaluare ................................. 95
75
realizează prin intermediul ferestrei Properties, după selecţia prealabilă a
obiectului. Scrierea codului se execută folosind fereastra de editare a codului,
CodeEditor. Crearea aplicaţiilor în VB se face în modul de proiectare Design
Mode, iar execuţia acestora se efectuează în modul de rulare normală, Run Mode.
Înainte de prezentarea în detaliu a celor trei etape de proiectare a unei aplicaţii în
VB, se tratează fişierul proiect.
76
generic care desemnează entitatea de structurare a unui program. Modulele sunt
reutilizabile, ceea ce înseamnă că un modul folosit într-un program, poate fi
utilizat ulterior şi în alte programe.
Modulul defineşte reguli de vizibilitate adică elementele declarate în
interiorul lui pot fi sau nu pot fi vizibile în exteriorul acestui modul. Orice proiect
trebuie să includă cel puţin un modul (modul de formular sau modul de cod).
Atunci când au fost definite toate componentele unui proiect, acesta poate
fi transformat direct într-un fişier executabil (.EXE), astfel:
1) din meniul File se selectează opţiunea Make … EXE …;
2) se introduce numele fişierului executabil în caseta File Name şi se apasă
butonul OK
Meniul File
77
Aşa cum se deduce din descrierea opţiunilor de salvare a proiectului de
mai sus, realizarea aplicaţiei este terminată atunci când se selectează comanda
Save Project As…(5) din meniul File sau când se selectează butonul Save Project
din linia de butoane. Mediul Visual Basic solicită salvarea, pe rând, a formularului
şi apoi a proiectului prin introducerea numelui, dar şi a unităţii logice de memorie,
precum şi a căii unde se doreşte a avea loc salvarea. În mod implicit, mediul
Visual Basic asigură salvarea în locaţia C:\Program Files\Microsoft Visual
Studio\VB98 (Save In). Pentru salvarea unui proiect, se recomandă particularizarea
numelui proiectului şi folosirea unei unităţi logice de memorare şi a unei căi
personalizate a utilizatorului pentru fiecare proiect, ca, de exemplu:
Homes(D:)\Student\Facultatea\Grupa\Nume_prenume_student\Numeproiect
Meniul Project
78
pentru Form este formă. În lucrarea de faţă s-a preferat denumirea de formular,
deşi cea de formă este mai apropiată de termenul în limba engleză (crearea
formularului înseamnă de fapt „turnarea” controalelor într-o formă adecvată
interfeţei aplicaţiei).
Motivul preferinţei pentru „formular” este asigurarea lizibilităţii apariţiei
denumirii acestui obiect în explicaţiile din cuprinsul lucrării, deşi, în dicţionarele
limbii române, formularul, în general, este definit ca un imprimat cu mai multe
spaţii albe ce se completează în vederea întocmirii unui tabel.
Formularul este un container de controale care facilitează dialogul dintre
utilizator şi aplicaţie. Controalele nu pot funcţiona în afara formularului. Ele sunt
obiecte care eliberează programul de sarcinile legate de intrările şi ieşirile
generate de acţiunile utilizatorului, concentrând eforturile pe operaţiile de
prelucrare a datelor. Avantajul controalelor din VB este că ele se aseamănă foarte
mult cu controalele standard ce apar în sistemul de operare Windows (meniuri,
butoane, casete). Controalele uşurează munca de programare în sensul că sunt
eliminate instrucţiunile care să ghideze utilizatorul asupra acţiunilor pe care acesta
trebuie să le întreprindă. La proiectarea interfeţei aplicaţiei (Design Mode),
fereastra de proiectare a formularului serveşte pentru dispunerea controalelor
necesare proiectului.
La rularea programului (Run Mode), formularul îndeplineşte rolul de
fereastră principală a proiectului sau de fereastră de dialog.
La pornirea mediului VB, fereastra de proiectare a formularului cu
numele implicit (default) Form1 este dispusă în centrul ecranului. În interiorul
acestei ferestre se găsesc linii punctate cu rolul de a asigura orientarea
utilizatorului, iar la marginea ferestrei sunt dispuse mânerele de redimensionare a
formularului. Este bine ca, încă de la crearea formularului, să se opteze pentru o
dimensiune potrivită a formularului în raport cu numărul de controale introduse şi
de dimensiunile acestora; nu este estetic şi nici practic să rămână zone mari
nefolosite pe suprafaţa formularului.
Un formular include descrierea grafică a acestuia, controalele sale,
proprietăţile, constantele, variabilele şi procedurile externe, subrutinele de tratare
a evenimentelor, procedurile generale. Fiecărui formular îi corespunde un modul
de formular (Form Module).
Clasa de module (Class Module) este asemănătoare formularului, dar nu
dispune de interfaţă utilizator vizibilă. Clasa de module poate fi folosită pentru
79
crearea obiectelor utilizator, cuprinzând secvenţe de cod pentru metodele şi
proprietăţile obiectelor definite. Obiectele care aparţin aceleaşi clase nu sunt
înzestrate cu evenimente proprii.
Mediul VB asigură interfaţă pentru un singur document (SDI) sau interfaţa
multidocument (MDI). În cazul SDI, toate ferestrele mediului VB pot fi deplasate
pe ecran, iar în cazul MDI, toate ferestrele mediului integrat de dezvoltare VB
(numite fii) sunt incluse într-o fereastră unică (numită părinte) ce poate fi
redimensionată. Pentru a obţine comutarea între modurile de lucru SDI şi MDI se
realizează următoarea succesiune de acţiuni:
se selectează Options (opţiuni) din meniul Tools; efectul este apariţia
casetei de dialog Options;
se selectează Advanced;
se validează sau se invalidează caseta SDI Developement Environement.
În figura de mai jos sunt prezentate controalele implicite incluse în caseta
cu instrumente (Toolbox). Controalele standard sunt butoanele de comandă
(nr.14, Command Button), casetele cu text (nr.13, TextBox), etichetele (nr.2,
Label), casetele de validare (nr.4, Check Box), butoanele de opţiuni (nr.15, Option
Button), casetele cu listă (nr.16, ListBox), casetele cu imagine (nr.12, PictureBox),
barele de defilare (nr.6 şi nr.17, ScrollBar) orizontale şi verticale, casetele
combinate (ComboBox).
80
(Toolbox) se obţine din meniul Project, opţiunea Components.
81
punct adresabil de pe ecran, cu dimensiunea de 1/1440 inch). Aşa cum se va arăta
în paragraful următor, fereastra Properties permite modificarea între limite
prestabilite a valorilor diferitelor proprietăţi ale controalelor.
Focalizarea reprezintă operaţiunea de punere în evidenţă a unui control la
un moment dat; mai precis, acel control devine activ prin focalizare. Acel control
activ se mai numeşte şi focar (focus). Acest lucru se pune în evidenţă printr-o linie
punctată în jurul controlului sau printr-un titlu îngroşat. Mutarea focarului de la un
control la altul se efectuează prin intermediul tastelor Tab sau Shift+Tab. Apăsarea
tastei Enter va determina acţiunea controlului focar sau focalizat.
Ordinea de parcurgere a controalelor în formular reprezintă ordinea în care
controalele sunt puse în evidenţă prin focalizare, o dată cu apăsarea succesivă a
tastei Tab. În momentul activării formularului, este stabilit primul control care este
focalizat. Proprietăţile comune tuturor controalelor din formular care stabilesc
ordinea de parcurgere a controalelor sunt TabIndex (poziţia) şi TabStop (oprirea).
Ordinea de parcurgere a controalelor este circulară şi în ambele sensuri –
înainte (Tab) şi înapoi (Shift+Tab).
Un control poate include o tastă „fierbinte” (Hot Key) ce este evidenţiată
printr-o literă subliniată. Prin acţiunea Alt+litera subliniată, se provoacă acţiunea
controlului respectiv. Litera subliniată se introduce cu ajutorul proprietăţii Caption
prin precedare de un ampersand (&).
Redimensionarea unui control introdus deja pe suprafaţa formularului se
obţine astfel:
1) se selectează controlul de redimensionat prin click executat cu mouse-ul
în interiorul suprafeţei acestui control. Pe marginile controlului apar mânerele de
redimensionare;
2) se fixează cursorul mouse-ului în dreptul unui mâner de redimensionare
şi se mişcă ţinând apăsat butonul stâng al mouse-ului, până se obţine dimensiunea
dorită. Mânerele situate în colţurile suprafeţei controlului redimensionează
controalele atât pe verticală, cât şi pe orizontală, iar mânerele dispunse pe laturi
redimensionează controlul numai într-o singură direcţie;
3) se eliberează butonul stâng al mouse-ului.
Mutarea unui control pe suprafaţa formularului se realizează cu mouse-ul
prin tehnica Drug and Drop.
82
După finalizarea proiectării formularului, blocarea tuturor controalelor pe
suprafaţa formularului se obţine din meniul Format cu opţiunea Lock Controls sau
cu butonul Lock Controls Toggle de pe bara cu instrumente Form Editor.
Formularele sau controalele VB au asociate, în cadrul proiectului,
proceduri eveniment vide care sunt personalizate în momentul execuţiei aplicaţiei.
Pentru exemplificarea etapei de creare a interfeţei aplicaţiei, în continuare
se propune să se introducă controalele pentru un formular care să constituie
interfaţa pentru următoarea aplicaţie informatică:
Să se realizeze un program în limbajul Visual Basic care să calculeze
valoarea totală a unei facturi de materiale. Deocamdată, factura conţine un singur
material la o rulare a programului. Datele de intrare sunt: număr factură (Nrf),
data facturii (Df), codul materialului (Codmat), denumirea materialului (Denmat),
cantitate (Cant) şi preţul unitar al materialului (Pu). TVA este de 19%. Datele de
intrare vor fi introduse cu ajutorul casetelor text (Text Box) cu etichete pentru
fiecare dintre ele.
Rezultatele rulării programului se vor afişa în casete text separate pentru
valoare material fără TVA (Vmftva), valoare material cu TVA (Vmctva), valoare
factură fără TVA (Vfftva) şi valoare factură cu TVA (Vfctva).
Se vor prevedea butoane de comandă (Command Button) pentru calculul
şi afişarea unui material (fără TVA şi cu TVA) – butonul CALCULEAZA şi pentru
calculul valorii facturii (fără TVA şi cu TVA) – butonul AFISEAZA.
Pentru afişarea denumirilor pentru datele de intrare (Nrf, Df, Codmat,
Denmat, Cant şi Pu), a datelor intermediare (Vmftva şi Vmctva) şi a datelor de
ieşire sau rezultatelor (Vfftva şi Vfctva), se folosesc controale de tip etichetă
(Label). Aceste controale de tip etichetă se găsesc în caseta cu intrumente
(Toolbox) cu simbolul grafic. Controalele se introduc în formular prin tehnica
Drug and Drop şi se dimensionează cu ajutorul mânerelor de dimensionare
(Label1 … Label10). În mod similar se procedează cu casetele text (Text Box) cu
simbolul grafic casete care servesc, în cazul formulat în enunţul aplicaţiei
informatice (un singur material pe factură), pentru introducerea datelor de intrare
şi afişarea datelor intermediare şi de ieşire (Text1…Text2), precum şi cu butoanele
de comandă (Command Button) ce se vor folosi pentru declanşarea procedurilor
de calcul (Command1), de afişare a valorii facturii (Command2) şi de ieşire din
program (Command3).
83
Crearea formularului pentru aplicaţia informatică cu factura de materiale
84
Fereastra Properties
Activarea ferestrei Properties se poate obţine prin succesiunea de comenzi
meniu principal – View – Properties Window sau cu ajutorul tastei funcţionale F4.
Precizarea proprietăţilor se obţine prin parcurgerea următoarele etape:
1) dacă nu este afişată, se activează fereastra Properties; se selectează
obiectul căruia urmează să i se precizeze proprietăţile; în acest moment, se
afişează automat proprietăţile cu valorile implicite pentru obiectul selectat;
2) din lista alfabetică sau lista pe categorii a proprietăţilor se selectează
denumirea proprietăţii la care se vor modifica valorile sau setările existente;
3) în coloana valorilor sau setărilor din dreapta se tastează sau se
selectează valorile dorite pentru proprietate.
Pentru a asocia o pictogramă unui formular se atribuie o valoare
proprietăţii icon pentru acel formular.
Pentru exemplificarea etapei de precizare a proprietăţilor,se continuă
aplicaţia cu factura materiale din paragraful 9.2.2, precizându-se proprietăţile de
bază – Name şi Caption pentru formular şi controalele introduse de tipul Label,
TextBox (numai Name) şi Command Button prin selectarea succesivă a acestora.
Personalizarea numelui pentru formular se obţine prin introducerea în
fereastra Properties a numelui (Name) frmMat şi a etichetei (Caption) FACTURA
MATERIALE.
Personalizarea numelui pentru controalele de tip etichetă (Label) se obţine
prin introducerea în fereastra Properties a numelui (Name) lblNrf şi a etichetei
(Caption) Numar factura, respectiv:
• lblDf (Name), Data factura (Caption);
85
• lblCodmat (Name), Cod material (Caption);
• lblDenmat (Name), Denumire material (Caption);
• lblCant (Name), Cantitate (Caption);
• lblPu (Name), Pret unitar (Caption);
• lblVmftva (Name), Valoare material fara TVA (Caption);
• lblVmctva (Name), Valoare material cu TVA (Caption);
• lblVfftva (Name), Valoare factura fara TVA (Caption);
• lblVfctva (Name), Valoare factura cu TVA (Caption).
Personalizarea numelui pentru controalele de tip caseta cu text (TextBoxl)
se obţine prin introducerea în fereastra Properties a:
• txtNrf (Name) pentru Numar factura;
• txtDf (Name) pentru Data factura;
• txtCodmat (Name) pentru Cod material;
• txtDenmat (Name) pentru Denumire material;
• txtCant (Name) pentru Cantitate;
• txtPu (Name) pentru Pret unitar;
• txtVmftva (Name) pentru Valoare material fara TVA;
• txtVmctva (Name) pentru Valoare material cu TVA;
• txtVfftva (Name) pentru Valoare factura fara TVA;
• txtVfctva (Name) pentru Valoare factura cu TV.
Personalizarea numelui pentru controalele de tip butoane de comandă
(Command Button) se obţine prin introducerea în fereastra Properties a:
• cmdCalcul (Name), CALCULEAZA (Caption);
• cmdAfisare (Name), AFISARE VALOARE FACTURA (Caption);
• cmdExit (Name), IESIRE (Caption).
Aspectul formularului obţinut prin precizarea proprietăţilor formularului şi
controalelor incluse este prezentat în figura de mai jos.
86
Introducerea proprietăţilor formularului şi controalelor incluse pentru
aplicaţia informatică cu factura de materiale
87
Procedura-eveniment asociată unui control are numele alcătuit din numele
controlului (stabilit în proprietatea Name), o liniuţă de subliniere (_) şi numele
evenimentului.
88
Separator (4) serveşte la adăugarea sau eliminarea unei linii de separaţie între
proceduri.
89
Terminarea rulării proiectului se efectuează cu opţiunea End din meniul
Run sau prin apăsarea butonului de închidere (Close) a ferestrei aplicaţiei (colţul
din dreapta sus al ferestrei) sau prin apăsarea butonului End de la bara cu
instrumente.
După terminarea execuţiei aplicaţiei, mediul VB revine în modul de
proiectare (Design Mode).
Prin rularea proiectului, se obţine fişierul executabil. Aşa cum s-a arătat în
paragraful 9.2.1, fişierul executabil se poate obţine direct din meniul File cu
opţiunea Make …EXE.
Reluând aplicaţia cu factura de materiale din paragrafele 9.2.2, 9.2.3 şi
9.2.4, această aplicaţie se rulează cu seturile de date de intrare (se consideră
materiale consumabile pentru tehnica de calcul).
90
Instrucţiunile specifice limbajului Visual Basic se obţin prin combinarea
literalilor, identificatorilor şi cuvintelor rezervate. Pentru lizibilitatea codului,
fiecare instrucţiune se scrie pe o linie separată. Dacă o instrucţiune nu încape pe o
linie, se poate continua pe linia următoare prin caracterul underscore (_). Se pot
folosi 20 astfel de linii de continuare a unei instrucţiuni. Numele sunt folosite la
setarea proprietăţilor la momentul execuţiei şi în stabilirea numelor procedurilor
pentru evenimentele obiectelor. Setarea proprietăţilor la momentul execuţiei se
obţine prin scrierea unui cod. Formatul acestui cod se scrie prin notarea cu punct
şi este: Nume obiect. proprietate = noua valoare (Object Name. Property = New
value).
În Visual Basic, numele obiectelor sunt utilizate în setarea unui cadru de
lucru (framework) corespunzător procedurilor eveniment, pentru scrierea codului.
Formatul fiecărei subrutine (în Visual Basic nu există program principal; toate
procedurile obiectelor sunt subrutine) este: Private Sub Object Name_Event
(Optional Arguments) … End Sub.
Formularului i se ataşează un obiect. Visual Basic construieşte automat un
cadru de lucru (framework) pentru fiecare dintre procedurile eveniment.
Utilizatorul care construieşte aplicaţia trebuie să scrie codul procedurilor
eveniment la care corespunde aplicaţia.
91
…
Nume_n As tip_data_n
End Type
Tipurile de date definite de utilizator se declară la nivelul modulelor
standard, de clasă sau formular (numai Private). Aceste tipuri de date nu pot fi
declarate la nivelul unei proceduri.
De exemplu, tipul de date definite de utilizator Client are următoarea
structură:
Type Client
Nume_client As String *20
Prenume_client As String *20
Adresa_client As Adresa
CNP_client As String *13
End Type
unde tipul de date definit de utilizator Adresa are structura:
Type Adresa
Localitate As String *20
Strada As String *20
Numar As Integer
Judet As String *20
End Type
92
Corespunzător variabilei care se doreşte a fi creată şi utilizată, utilizatorul
poate să stabilească tipul de dată asociat prin folosirea unui sufix de natura tip de
dată care va putea fi stocat sau prelucrat prin intermediul respectivei variabile.
Există trei moduri de declarare a unei variabile:
Prin lipsă (din oficiu). Dacă variabila nu este definită în nici un mod, ea
este presupusă Variant, adică un tip de dată Visual Basic care poate conţine: valori
numerice, şiruri de caractere sau dată calendaristică.
Implicit. Declararea implicită este dată prin folosirea sufixului
corespunzător. De exemplu, o variabilă de tip String (şir de caractere) poate fi
declarată implicit astfel:
Material$ = ”Cherestea”
iar o variabilă de tip Integer se poate declara implicit astfel:
Cantitatea% = 273
Explicit. Acest mod de declarare a unei variabile prezintă mai multe
avantaje: asigură efectuarea unui calcul corect prin intermediul instrucţiunilor care
utilizează variabilele respective şi permite identificarea, gestionarea corectă a
apariţiei literelor mari sau a literelor mici în numele variabilelor. Datorită acestor
avantaje, se preferă lucrul cu tipurile de variabile explicite.
Pentru a putea lucra cu variabile declarate explicit trebuie să fie cunoscut
domeniul de valabilitate şi anume:
1) domeniul procedurilor;
2) domeniul procedurilor în care variabilele se declară static;
3) domeniul formularelor şi modulelor;
4) domeniul nivelului global.
De exemplu, pentru domeniul procedurilor, variabilele sunt declarate
folosind cuvântul cheie Dim:
Dim Denumire_material As String
Dim Cantitate As Integer
Dim Pret_unitar As Single.
Variabilele declarate la nivelul procedurilor îşi vor păstra valorile numai pe
timpul rulării procedurilor respective. Din acest motiv se mai numesc şi variabile
locale.
Pentru ca variabilele să-şi păstreze valorile şi după terminarea procedurii,
se foloseşte domeniul procedurilor în care variabilele se declară static, cuvântul-
cheie Dim fiind înlocuit cu Static.
93
De exemplu:
Static Denumire_material As String.
Static Cantitate As Integer.
Static Pret_unitar As Single.
Pentru domeniul domeniul formularelor şi modulelor, variabilele îşi
menţin valorile la nivelul formularului (modulului), relativ la toate procedurile
prin declararea variabilelor cu Dim, dar în partea de declaraţii a obiectului general,
în fereastra de cod a formularului.
Pentru domeniul domeniul nivelului global, o variabilă este disponibilă
tuturor procedurilor prezentate în aplicaţie, prin declararea în partea de declaraţii a
obiectului general din fereastra de cod a unui modul cu ajutorul cuvântului cheie
Global. De exemplu:
Global Nr_factura As Long
Global Data_factura As Date.
În cazul mai multor variabile cu acelaşi nume, variabilele locale au
valabilitate numai în cadrul procedurilor. La părăsirea acestor proceduri se
folosesc variabilele cu acelaşi nume, dar definite la nivel superior.
Procedura de introducere a acestor variabile globale este următoarea:
se execută dublu-click oriunde în fereastra formularului pentru a
deschide fereastra de editare a codului (sau se selectează opţiunea View Code din
fereastra Project);
se declară variabilele din formular astfel:
Option Explicit (forţează declararea variabilelor)
Global Nr_factura As Long
Global Data_factura As Date.
94
frmMat. Back Color = 0XFF0000 sau, folosind constanta simbolică pentru
albastru:
frmMat. Back Color = VBBlue
Utilizatorul îşi poate defini propriile constante ca de exemplu: const TVA
= 0.24.
Constantele de utilizator se scriu cu litere mari, pentru a le distinge de
variabile. Domeniul de valabilitate al unei constante este similar cu cel al
variabilelor.
U9.5. Rezumat
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
95
Răspunsuri şi comentarii la testul de autoevaluare nr. 9
96
MODULUL 4
UNITATEA 10
FOXPRO
Cuprins: pag.
U10.1. Scopul şi obiectivele unităţii ........................................................... 97
U10.2. Prezentare generală FOXPRO ...................................................... 98
U10.3. Intrarea şi ieşirea din FoxProW. Mediul FoxProW. Elemente
de interfaţă ...................................................................................... 103
U10.4. Tipul logic ........................................................................................ 104
97
U10.5. Tipul numeric .................................................................................. 105
U10.6. Tipul şir de caractere ..................................................................... 109
U10.7. Tipul memo ..................................................................................... 112
U10.8. Tipul dată calendaristică ................................................................ 112
U10.9. Baze de date ..................................................................................... 116
U10.10. Câmpurile memo .......................................................................... 121
U10.11. Meniuri .......................................................................................... 122
U10.12. Programe. Execuţia programelor ............................................... 138
U10.13. Programarea structurată ............................................................. 149
U10.14. Lucrul cu fişiere ............................................................................ 154
U10.15. Test de autoevaluare ..................................................................... 157
U10.16. Rezumat ......................................................................................... 157
Bibliografie minimală ................................................................................. 157
Răspunsuri şi comentarii la testul de autoevaluare ................................. 158
98
Opţiunea CLOSE - închide aplicaţia la care lucrăm fără a ieşi din mediul
Fox.
Opţiunea SAVE şi SAVE AS - execută salvarea bazei, a aplicaţiei, etc.
Opţiunea PRINTER SETUP - permite setarea imprimantei.
Opţiunea PRINT - tipărirea unui document.
Opţiunea QUIT - părăsirea mediului Fox.
Crearea unei baze de date
Forma generală a comenzii:
CREATE [<fişier>]
Dacă pentru acest fişier nu se specifică nici o extensie, atunci Fox-ul
asociază implicit: .dbf.
Va apare pe ecran o fereastră în care va fi creată structura bazei de date.
Avem opţiunile:
name - pentru numele unui câmp.
type - tipul câmpului (ce fel de date se memorează în acesta).
width - numărul de octeţi asociat câmpului.
dec - numărul de zecimale (pentru câmpuri numerice).
INSERT si DELETE se folosesc pentru inserarea sau ştergerea unui câmp
în şi respectiv din structura creată.
Comanda LIST este utilizată pentru listarea conţinutului unei baze de date.
Meniul EDIT
- conţine câteva comenzi obişnuite în lucrul cu fişierele.
Opţiunea CUT - duce textul selectat într-o zonă specială de memorie
numită clipboard.
Opţiunea COPY - face o copie după textul selectat în zona de clipboard.
Opţiune PASTE - se foloseşte pentru a aduce din zona clipboard porţiunea
ce a fost copiată.
Obs. Opţiunea PASTE se foloseşte după opţiunea COPY.
Opţiunea CLEAR - şterge textul selectat.
Opţiunea SELECT ALL - selectează întreaga fereastră activă.
Opţiunea GOTO LINE - se foloseşte pentru a ne poziţiona pe o anumită
linie din fereastra activă.
Opţiunea FIND - se foloseşte pentru a căuta o anumită informaţie (de tip
numeric, sir de caractere, etc.).
99
Opţiunea FIND AGAIN - găseşte următoarea informaţie, ce se aseamănă
cu cea căutată de utilizator.
Opţiunea REPLACE AND FIND AGAIN - se foloseşte atunci când dorim
înlocuirea unei anumite informaţii cu o alta, aleasă de noi.
Opţiunea REPLACE ALL - se foloseşte atunci când dorim înlocuirea unei
anumite informaţii din textul nostru, ori de câte ori apare, cu o altă informaţie
aleasă de noi.
Meniul WINDOW
Acest meniu permite manipularea ferestrelor active de pe ecran.
Toate ferestrele ce se folosesc în FoxPro, au câteva elemente comune. Vom
exemplifica aceste elemente folosindu-ne de cea mai importantă fereastră din
FoxPro şi anume fereastra de comenzi:
Opţiunea HIDE - ascunde sau închide fereastra activă. Reapariţia ferestrei
de comenzi pe ecran se face folosind opţiunea COMMAND din acest meniu, sau
combinaţia de taste CTRL+F2.
Opţiunea CLEAR - se foloseşte pentru a şterge de pe ecran toate
informaţiile afişate la un moment dat.
Obs.: Acelaşi lucru se poate face dacă se scrie în fereastra de comenzi -
comanda CLEAR.
Opţiunile MOVE, SIZE, ZOOM , ZOOM se folosesc pentru mutarea
ferestrei active dintr-o zonă în alta a ecranului (MOVE); pentru redimensionarea
ferestrei (SIZE); pentru mărirea pe tot ecranul (ZOOM ) sau pentru micşorarea
ferestrei la nivel de bară de stare (ZOOM ).
Comenzi pentru descrierea structurii unei baze de date
Comanda CREATE (prezentată anterior).
Comanda MODIFY STRUCTURE - realizează modificarea structurii unei
baze de date existente. Baza de date, înainte de modificarea structurii, trebuie
activată. Forma comenzii este:
MODIFY STRUCTURE <Enter>
Efectul acestei comenzi este apariţia pe ecran a unei ferestre asemănătoare
ca structură, cu cea de la comanda CREATE, în care se afişează date despre
structura bazei de date respective şi anume:
- numele câmpurilor bazei de date (NAME)
- tipul de informaţie din câmpul respectiv (TYPE)
- dimensiunea câmpului (WIDTH)
100
- partea fracţională a dimensiunii (DEC)
Modificările câmpurilor deja existente în baza de date se pot face prin trei
operaţii:
- inserare;
- ştergere;
- adăugare.
Pentru inserare, se plasează cursorul pe câmpul următor şi se acţionează
tastele INSERT din submeniul FIELD.
Pentru ştergere, se plasează cursorul pe câmpul respectiv şi se acţionează
tasta DELETE din acelaşi submeniu.
Pentru adăugare, se plasează cursorul după ultimul câmp.
După ce am efectuat toate modificările în structura bazei de date
respective, apăsăm butonul OK şi programul ne va întreba dacă dorim să păstrăm
aceste modificări sau nu.
Comanda DISPLAY STRUCTURE - afişează structura bazei de date
active. Forma comenzii este:
DISPLAY STRUCTURE <Enter>
În plus mai furnizează: numele bazei de date, numărul înregistrărilor, data
ultimei actualizări.
Comanda LIST STRUCTURE - are acelaşi efect ca şi comanda anterioară,
cu deosebirea că afişează toată structura bazei de date, chiar dacă numărul de
câmpuri este mai mare de 16.
Comenzi de utilizare a bazei de date şi de introducere de date (informaţii)
într-o bază de date.
Comanda USE - deschide o bază de date în vederea utilizării sale. Forma
comenzii este: USE <nume bază de date>
Efectul acestei comenzi nu este de ordin vizual adică, pe ecran nu va
apărea nici o informaţie sau fereastră nouă, faţă de cele existente anterior execuţiei
acestei comenzi. Dar această bază de date devine activă şi astfel utilizatorul o
poate folosi pentru prelucrările dorite.
Comanda de închidere a unei baze de date este: USE <Enter>
Comanda LIST - afişează pe ecran toate înregistrările din baza de date
activă.
101
Comanda BROWSE - este una din cele mai folosite comenzi FoxPro şi se
utilizează la introducerea de noi informaţii în baza de date activă şi la modificarea
informaţiilor existente. Forma comenzii este: BROWSE [<clauze>]
<clauzele> sunt opţionale şi se folosesc numai de utilizatorii avansaţi.
Obs.: Comanda BROWSE mai poate fi activată şi din meniul
DATABASE.
Efectul acestei comenzi este apariţia pe ecran a unei ferestre cu numele
bazei de date active, fereastră în care se pot face modificări asupra înregistrărilor
existente şi în plus se pot adăuga noi înregistrări folosind combinaţia de taste
CTRL+N.
Comanda APPEND - este asemănătoare cu BROWSE, doar că utilizează
modul de lucru ecran pentru introducerea datelor.
Forma comenzii este: APPEND <Enter>
Obs.: Comanda APPEND poate fi activată şi din meniul RECORD.
Adăugarea unei înregistrări noi se poate face utilizând combinaţia de taste
CTRL+Y.
Se recomandă folosirea comenzii BROWSE atunci când dorim
modificarea înregistrărilor dintr-o bază de date dată, deoarece fereastra BROWSE
oferă accesul mai rapid la orice câmp şi orice înregistrare din baza de date
respectivă.
Crearea structurii unei baze de date CREATE
O dată creată structura bazei de date, ea nu se mai creează niciodată; se
poate doar modifica cu MODIFY STRUCTURE - prin crearea bazei de date se
distruge conţinutul ei de până atunci.
Comanda SET STATUS ON face să apară linia stare în care avem:
- numele bazei curente
- poziţia cursorului
- starea tastelor INSERT , NUMCAPS.
Pentru a lucra cu o bază de date, ea trebuie mai întâi deschisă.
Comanda:
USE <nume>
Comenzi care afişează înregistrări.
DISPLAY - afişează înregistrări din baza de date (se opreşte după
umplerea unui ecran)
LIST - afişează înregistrări din baza de date
102
DISPLAY [FIELDS] listă câmpuri [scope] FOR [expL1] WHILE [expL2]
OFF.
Sistemele software prin intermediul cărora se creează, se actualizează şi se
consultă bazele de date se numeşte Sistem de Gestiune a Bazelor de Date
(S.G.B.D.-uri). Fox Pro este un astfel de sistem. Pentru manipularea unei baze de
date Fox Pro foloseşte o zonă de memorie în care memorează unele informaţii
referitoare la starea bazei de date numită zonă de lucru. Acest SGBD poate lucra
simultan cu mai multe baze de date, deci va avea mai multe zone de lucru (25 la
număr).
Modul de lucru cu o bază de date este următorul:
- se deschide baza de date ( acesteia i se atribuie o zonă de lucru)
- se execută operaţiile dorite asupra bazei de date respective (adăugări,
ştergeri etc)
- la terminarea lucrului cu baza de date aceasta se închide.
Aliasul unei baze de date este numele atribuit acesteia pentru a fi
identificată.. Aliasul poate fi furnizat de utilizator sau poate fi atribuit automat de
către Fox Pro.
Un concept mai nou în domeniul bazelor de date este relaţia. O bază de
date relaţională nu mai este văzută ca un simplu tabel, ci ca o mulţime de tabele,
aflate în relaţie unul cu altul. Se stabileşte o relaţie de subordonare între cele două
sau mai multe tabele, primul numit părinte iar cel de-al doilea copil.
103
- dată pornită această platformă grafică, urmează deschiderea ferestrei
grupului care conţine icoana corespunzătoare FoxPro-ului sub Windows (grup
implicit numit FoxPro for Windows), printr-un clic dublu pe icoana acestui grup;
- din fereastra deschise se alege icoana corespunzătoare FoxProW-ului,
implicit numite Microsoft FoxPro, printr-un clic dublu pe aceasta; sistemul
FoxProW este acum pornit.
Iniţial, fereastra asociată FoxPro-ului arată ca în figura de mai jos:
104
transforma într-o icoană sau se poate închide, reafişarea sa realizându-se prin
alegerea opţiunii Command de pe submeniul Window.
Alături de aceste trei elemente ale interfeţei FoxProW-ului, care sunt
vizibile pe ecran imediat după pornirea acestui S.G.B.D., comunicarea dintre
utilizator şi sistem mai implică şi alte elemente cum ar fi ferestrele sistem şi
obiectele de control.
Ferestrele sistem sunt deschise de FoxProW ca urmare a unor comenzi ale
utilizatorului, în vederea realizării comunicării dintre cei doi, utilizator şi
S.G.B.D.. ferestrele sistem pot conţine mesaje, obiecte de control şi chiar meniuri
asociate şi sunt manipulate ca oricare altă fereastră Windows
În limbajul FoxPro vom avea următoarele tipuri de date :
- tipul logic
- tipul numeric
- tipul şir de caractere
- tipul dată calendaristică
- tipul memo
Acest tip este caracteristic datelor ce nu pot lua decât două valori, adevărat
(true) sau fals (false). Pentru a specifica valoarea adevărat a unei expresii de tip
logic se foloseşte construcţia T (de la True), iar pentru valoarea fals se foloseşte F
(de la False).
Operatorii logici în ordinea priorităţii de evaluare sunt sintetizaţi în tabelul
următor:
Operator Semnificaţie
() grupează expresii logice
!,NOT negaţie logică
AND şi logic
OR sau logic
De asemenea rezultatul unei expresii care conţine operatori relaţionali
(<,>,=) este tot de tip logic.
105
O mare parte a datelor prelucrate de calculator o reprezintă numerele,
pentru a căror descriere se foloseşte tipul numeric. Cu toate că limbajul FoxPro
este orientat pe lucrul cu baze de date şi nu unul orientat pe calcule matematice,
ştiinţifice (cum este Fortran-ul, Pascal-ul etc.) tipul numeric este implementat
astfel încât să realizeze majoritatea operaţiilor matematice întâlnite în practică.
Operatorii care se aplică unor operanzi numerici sunt sintetizaţi în tabelul
următor în ordinea priorităţii de evaluare:
Operator Semnificaţie
() paranteze ptr. gruparea expresiilor
**,^ ridicare la putere
*,/,% înmulţire ,împărţire, modulo (restul împărţirii)
+,- adunarea şi scăderea
Între două expresii numerice se pot aplica operatori relaţionali, obţinându-
se astfel expresii logice. Aceşti operatori sunt prezentaţi în tabelul următor:
<operator> relaţie
< mai mic decât
> mai mare decât
= egal cu
<>,#,!= diferit de
<= mai mic sau egal cu
>= mai mare sau egal cu
Afişarea numerelor este controlată de comanda SET DECIMALS care are
sintaxa: SET DECIMALS TO [<expN]
Această comandă determină numărul minim de cifre zecimale ce sunt
afişate dacă nu se specifică un format explicit de afişare. Implicit acest număr este
de 2 zecimale.
Ex. ?2?3
0.67
SET DECIMALS TO 4
?2/3
0.6667
Funcţii referitoare la semnul datelor numerice
Pentru aflarea valorii absolut a unui număr se foloseşte funcţia ABS() cu
sintaxa ABS(<expN>)
Ex. ?ABS(-400)
400
Funcţia SIGN() este folosită pentru a afla semnul numărului transmis ca
argument astfel: SIGN(<expN>) returnează:
+1 dacă <expN> este pozitivă
106
1 nulă
-1 negativă
Ex. ?SIGN(-33)
-1
Funcţii de aproximare a datelor numerice
Partea întreagă a unei expresii numerice este returnată de funcţia INT() cu
sintaxa:
INT(<expN>)
Ex. ?int(14.34)
14
?INT(-2.42)
-2
Partea fracţionară a unui număr se obţine folosind tot funcţia INT(), astfel:
a = 14.34
?a-INT(a)
0.34
Alte moduri de a obţine o aproximaţie întreagă a unui număr sunt date de
funcţiile CEILING() şi FLOOR() cu sintaxele:
CEILING(<expN>)
FLOOR(<expN>)
Funcţia CEILING() returnează cel mai apropiat întreg mai mare sau egal
cu <expN>, iar FLOOR() se foloseşte pentru a afla cel mai apropiat întreg mai
mic sau egal cu <expN>
Ex. ?CEILING(8.32)
9
?ceiling(-4.23)
-4
?FLOOR(8.32)
8
?FLOOR(-4.32)
-5
Funcţia ROUND() realizează de asemenea o aproximare. a unui număr dar
nu neapărat la un întreg, ci la un număr real cu un număr dat de zecimale
Sintaxa comenzii: ROUND (<expN1>,<expN2>)
107
unde: <expN1> reprezintă expresia de rotunjit iar <expN2> este numărul
de zecimale ce se vor păstra în valoarea returnată de funcţie. Numărul de zecimale
exprimat prin SET DECI va fi ignorat.
Funcţii matematice elementare
Din categoria acestor funcţii fac parte exponenţiala(e x), logaritmul natural
(ln x), logaritmul zecimal (log x), radicalul ( )
Aceste funcţii au formatul general:
EXP(<expN>)
LOG(<expN>)
LOG 10(<expN>)
SQRT(<expN>)
Funcţii trigonometrice
Conversia din grade în radiani este implementată prin funcţia DTOR() iar
conversia inversă prin RTOD(). Aceste două funcţii au sintaxele :
DTOR(<expN>)
RTOD(<expN>)
Pentru funcţia DTOR() (<expN>) reprezintă unghiul exprimat în grade a
cărui conversie o dorim iar pentru. RTOD() reprezintă unghiul exprimat în radiani
ce se va transforma în grade.
Ex. ?DTOR(90) =PI()/2
.T.
?RTOD(PI()/4)
45.00
Funcţiile trigonometrice sinus, cosinus, tangentă au următoarele sintaxe :
SIN(<expN>)
COS(<expN>)
TAN(<expN>)
unde < expN> este argumentul funcţiei reprezentând unghiul a cărei funcţie se
calculează, exprimat în radiani. Rezultatele sunt de tip numeric.
Ex.? SIN(PI()/2)
1.00
? COS(PI())
-1
Funcţiile trigonometrice inverse ASIN() ;ACOS();ATAN() cu sintaxele:
ASIN(<expN>),ACOS(<expN>),ATAN(<expN>)
108
expN - numărul a cărui funcţie se calculează
Funcţii referitoare la calcule financiare
În această categorie intră trei funcţii şi anume: PAYMENT(),PV(),FV()
şi au sintaxele:
PAYMENT(<EXPn1,EXPn2,EXPn3>)
PV(<EXPn1,EXPn2,EXPn3>)
FV(<EXPn1,EXPn2,EXPn3>)
unde cele trei expresii numerice au semnificaţii diferite pentru fiecare funcţie în
parte.
Pentru o mai bună înţelegere vom explicita cele trei funcţii prin exemple.
Să presupunem că avem de returnat un împrumut de 500.000 u.m., suma
pe care o avem depusă într-o bancă ce practică o dobândă de 1% lunar adică la
sfârşitul fiecărei luni la suma de bani pe care o avem momentan în bancă se
adaugă 1% din această sumă ca dobândă. Să presupunem că împrumutul trebuie
returnat în rate lunare în 24 luni. Ne interesează ce sumă trebuie să achităm lunar
pentru a returna împrumutul în perioada precizată. Această problemă se rezolvă cu
funcţia PAYMENT() având următoarele corespondenţe:
<expN1> reprezintă valoarea împrumutului (500.000)
<expN2> rata dobânzii (0.01)
<expN3> număr de rate pentru achitarea împrumutului (24)
Valoarea returnată de funcţie reprezintă valoarea ce trebuie achitată lunar
pentru a acoperi împrumutul.
N1=500.000
N2=0.01
N3=24
?PAYM(N1,N2,N3)
23536.74
Folosirea funcţiei FV() în calcule financiare. Presupunem că am deschis un
cont la o bancă ce practică o dobândă de 1% lunar , iniţial contul este gol , dar ne
propunem să depunem lunar o sumă de 3.000 u.m. . Ne interesează ce sumă vom
avea în cont după 36 luni de la deschiderea contului . Valoarea aceasta este
returnată de funcţia FV() folosind ca parametrii:
<expN1> suma ce se va depune lunar în cont
<expN2> rata dobânzii practicate de bancă
109
<expN3> număr de depuneri după care se calculează suma din cont(egal
cu număr de luni în cazul când se face o singură depunere pe lună)
Ex. N1=3000
N2=0.01
N3=36
? FV (N1,N2,N3)
Presupunem că avem un cont la o bancă ce practică o rată a dobânzii de
1% lunar. Propunându-se ca în curs de 48 luni plătind lunar din cont câte 4.000
u.m. ne interesează ce sumă am putea acoperi din acest cont presupunând că după
achitarea sumei contul este gol. Această valoare este returnată de funcţia PV() care
necesită parametrii:
<expN1> suma ce se scoate lunar din cont
<expN2> rata dobânzii practicate de bancă
<expN3> nr. de luni în care se scot banii din bancă
Ex. N1=4.000
N2=0.01
N3=48
? PV(N1,N2,N3)
151895.84
110
‘ ‘. Dacă lungimea şirului este 0 obţinem şirul nul sau vid, care se specifică
prin două apostrofuri consecutive fără spaţii sau alte caractere între ele, adică ““
sau ‘’
Funcţii referitoare la subşirurile de caractere
Extragerea unui subşir dintr-un şir de caractere se realizează cu funcţia
SUBSTR() care are următoarea sintaxă:
SUBSTR (<expC,expN1[,<expN2>])
unde <expC> reprezintă expresia din care se extrage subşirul. Specificarea
subşirului se face prin intermediul celor două expresii numerice transmise ca
parametrii funcţiei.
<expN1> precizează poziţia de unde începe subşirul de extras (se extrage
inclusiv caracterul de pe această poziţie)
<expN2> reprezintă nr. de caractere ce se extrag, adică lungimea
subşirului. Dacă <expN2> lipseşte subşirul se întinde până la sfârşitul şirului de
bază.
În anumite situaţii se pot folosi alte două variante ale acestei funcţii,
acestea sunt LEFT() şi RIGHT() care returnează un subşir al unui şir poziţionat la
stânga, respectiv la dreapta.
Sintaxele celor două funcţii sunt:
LEFT(<expC>,<expN>)
RIGHT(<expC>,<expN>)
unde <expC> reprezintă şirul de caractere din care se extrage subşirul, iar <expN>
reprezintă lungimea subşirului extras.
Ambele funcţii au ca rezultat un şir de caractere.
Ex. ?LEFT(‘LA MULTI ANI!’, 2)
LA
? RIGHT(‘POFTĂ BUNĂ !’,6)
BUNĂ !
Funcţia REPLICATE() cu sintaxa: REPLICATE (<expC>,<expN>),
returnează un şir de caractere obţinut prin repetarea şirului <expC> de <expN>
ori.
Ex. ?REPLICATE (‘a’,5)
aaaaa
Funcţiile PADC() , PADL() , PADR() cu sintaxa de forma:
PADC (<expr>,,expN>[,<expC>])
111
PADL (<expr>,,expN>[,<expC>])
PADR (<expr>,,expN>[,<expC>])
Aceste funcţii adaugă la expresia <expr> şirul de caractere <expC>, la
dreapta pentru PADR(), la stânga pentru PADL() şi la ambele capete pentru
PADC() până se obţine o lungime a şirului de <expN> caractere.
Se observă că <expr> poate fi de tip şir de caractere, de tip numeric sau de
tip dată calendaristică, în cazul ultimelor două realizându-se mai întâi conversia la
tipul şir de caractere.
Ex.?PADL (‘Pagina1’,40.’-‘)
Funcţii privind transformări ale şirurilor de caractere
Diferenţierea dintre caracterele alfabetice mici şi mari a dus la necesitatea
transformării caracterelor mici în majuscule şi invers. Aceste operaţii sunt
realizate de funcţiile LOWER(), UPPER(() şi PROPER(), care au ca efect
prelucrarea unui şir de caractere primit ca parametru, astfel:
LOWER() transformă toate majusculele în litere mici, restul caracterelor
rămânând neschimbate.
UPPER() transformă toate caracterele mici în majuscule corespunzătoare ,
restul caracterelor din şir rămânând neschimbate.
PROPER() transformă primul caracter dintr-un cuvânt în majusculă (dacă
este alfabetic), iar următoarele în litere mici. Sintaxele celor trei funcţii sunt:
LOWER(<expC>)
UPPER(<expC>)
PROPER(<expC>)
Ex.
a=’ALFA’
b=’alfa’
?UPPER(a)==UPPER(b)
.T
U10.7. Tipul memo
112
U10.8. Tipul dată calendaristică
113
Operatorii raţionali se pot aplica şi asupra datelor calendaristice. O dată
calendaristică este mai mare decât o alta atunci când prima dintre acestea urmează
calendaristic celei de-a doua.
Formatul de specificare a datelor calendaristice este controlat de comanda
SET DATE care are următoarea sintaxă:
SET DATE TO |AMERICAN | BRITISH | FRENCH | GERMAN | ...
Următoarea tabelă sintetizează acţiunea comenzii SET DATE
Tipul datei FORMATUL
American LL/ZZ/AA
British ZZ/LL/AA
German ZZ.LL.AA
Italian ZZ-LL-AA
Japan AA/LL/ZZ
114
11.03.1999
Având o expresie de tip dată calendaristică putem afla în ce zi din cadrul
cade această dată. Acest lucru se realizează cu funcţiile DOW ( ) şi CDOW ( )
care au sintaxele: DOW(<expD>) CDOW (<expD>)
Ambele funcţii primesc ca parametru expresia de tip dată calendaristică
returnând ziua din cadrul săptămânii în care cade această dată, astfel:
- ca şir de caractere reprezentând numele zilei din cadrul săptămânii
(Sunday, Monday, etc.) pentru CDOW( )
- ca număr reprezentând a câta zi din săptămână (1 pentru Luni, 2 pentru
Marţi, etc.) pentru DOW( )
Ex. ? CDOW(DATE())
Wednesday
?DOW(DATE())
3
Ziua în cadrul lunii este returnată de funcţia DAY () cu următoarea sintaxă:
DAY (<expD>)
Ex. ? DAY({03/14/90})
14
Luna corespunzătoare unei expresii de tip dată calendaristică este returnată
de funcţiile MONTH () şi CMONTH (), cu sintaxele:
MONTH (<expD>)
CMONTH (<expD>)
Ca şi în cazul celor două funcţii anterioare şi la acestea deosebirea provine
de la valoarea returnată de ele şi anume :
- un şir de caractere reprezentînd denumirea lunii corespunzătoare date
(Ianuary, February,etc.) pentru funcţia CMONTH()
- un număr reprezentînd a câta lună în cadrul anului (1 ptr. ianuarie, 2 ptr.
februarie, etc.) pentru funcţia MONTH().
Ex. ? MONTH (DATE())
11
?CMONTH(DATE())
NOVEMBER
CONTROLUL TIMPULUI ÎN FOXPRO
Ora exactă a sistemului se obţine cu funcţia TIME () care are sintaxa:
TIME ([<expN>])
115
Valoarea returnată de această funcţie este un şir de caractere de lungime 8,
formatul HH:MM:SS, unde:
- HH reprezintă două cifre ptr. oră (de la 0 la 23)
- MM reprezintă două cifre pentru minute (de la 0 la 59)
- SS reprezintă două cifre pentru secunde ( de la 0 la 59)
Dacă în apelul funcţiei se specifică şi <expN>, valoarea returnată va
include şi sutimi de secundă; şirul returnat va avea lungimea de 11 caractere,
ultimile două poziţii reprezentînd sutimile de secundă.
Ex. ? TIME ()
04 :30:40
? TIME(0)
04:30:40. 80
Există două funcţii care măsoară intervalul de timp ce s-a scurs de la
miezul nopţii, adică de la ora 0 (zero), pînă în prezent. Funcţia SYS (2) returnează
numărul de secunde ce a trecut de la ora zero, rezultatul fiind de tip numeric.
Ex. ? TIME ()
02:40:34
? SYS (2)
9648
Acelaşi efect cu al funcţiei SYS (2) îl obţinem cu funcţia SECONDS (),
diferenţa dintre cele două funcţii fiind rezoluţia.
Sintaxa funcţiei este: SECONDS(), iar rezultatul este numeric cu trei cifre
după virgulă, reprezentînd numărul de milisecunde.
Ex. ? TIME()
-----------
? SYS (2)
9672
? SECONDS ()
9683.482
Ora exactă dată de sistem, poate fi menţinută tot timpul pe ecran, folosind
comanda SET CLOCK, cu sintaxa:
(1) SET CLOCK ON | OFF
(2) SET CLOCK TO [<rând>, <coloană>]
ON face ca ceasul să rămînă tot timpul vizibil pe ecran
OFF face ca ceasul să dispară de pe ecran
116
Formula a doua (2) se foloseşte pentru a specifica poziţia pe ecran unde va
apărea ceasul. Această poziţie se specifică prin <rând> reprezentând rândul pe
ecran şi <coloana> reprezentând coloana primei cifre a orei. Poziţia implicită a
orei este (0,60), în colţul din dreapta sus.
117
zona A, sau 1. Aceasta se poate schimba folosind comanda SELECT, cu sintaxa:
SELECT<expN> <expC>, unde: <expN> reprezintă numărul zonei de lucru ce va
fi activată, adică va deveni zonă de lucru curentă <expC> reprezintă aliasul bazei
de date deschisă în acea zonă de lucru.
Pentru a afla care este zona de lucru curentă se foloseşte funcţia
SELECT().
118
- <scala> reprezintă numărul de zecimale în cazul câmpurilor numeric sau
float
119
- <câmp 1>,<câmp 2>,... reprezintă lista câmpurilor ce pot fi accesate în
cazul SET FIELDS ON. SET FIELDS TO ALL permite accesul la toate
câmpurile, chiar dacă starea lui SET FIELDS este ON.
Comanda se referă la baza de date curentă.
Funcţia FIELDS() returnează numele unui câmp dintr-o bază de date
identificat prin numărul câmpului în cadrul structurii bazei şi are sintaxa:
FIELDS (<expN1>[,<expN2> <expC>])
în care <expN1> specifică numărul de ordine al câmpului (primul câmp are nr. de
ordine 1 ş.a.m.d.) iar <expN 2> sau <expC> identifică baza de date la care se
referă funcţia prin zona de lucru în cazul lui <expN> şi prin <expC> aliasul
acesteia.
Numărul câmpurilor dintr-o bază de date este returnat de funcţia
FCOUNT() ce are sintaxa: FCOUNT ([<expN> <expC>])
<expN> reprezintă zona de lucru în care este deschisă baza la care se
referă funcţia
<expC> reprezintă aliasul bazei respective.
120
DISP ALL TO FILE Listare.txt
Indicatorul de înregistrări conţine numărul înregistrării curente într-o
bază de date, având la un moment dat o singură înregistrare curentă.
Există o mulţime de comenzi şi funcţii care se referă la anumite înregistrări
din baza de date. Astfel comanda:
DISPLAY NEXT 2, afişează următoarele două înregistrări din baza de date
curentă începând de la înregistrarea curentă inclusiv.
Domeniul înregistrărilor se specifică prin patru clauze: ALL, RECORD,
NEXT, REST dintre care ultimele două au ca punct de referinţă înregistrarea
curentă.
Aflarea înregistrării curente dintr-o bază de date se face cu funcţia
RECNO() cu sintaxa:
RECNO([<expN> <expC>]) unde:
<expN> -zona de lucru în care este deschisă b.d.
<expC>-aliasul bazei de date
Dacă ambele lipsesc funcţia se referă la baza de date activă. Următoarele
două comenzi sunt echivalente: DISP NEXT 1 şi DISP RECORD RECNO()
Schimbarea înregistrării curente se realizează prin intermediul unor
comenzi Fox Pro cum ar fi GOTO, SKIP etc.
Comanda GO sau GOTO poziţionează indicatorul de înregistrări pe o
anumită înregistrare dintr-o bază de date cele două comenzi fiind echivalente şi au
sintaxa:
GO GOTO [RECORD]<expN1>[IN <expN2> <expC>]
GO GOTO TOP BOTTOM [<expN1>[IN <expN2> <expC>]
Prima formă are ca efect poziţionarea indicatorului de înregistrări din baza
de date. <expC> sau din zona de lucru <expN2> pe înregistrarea cu nr.<expN1>.
Absenţa clauzei IN determină referirea la baza de date curentă.
Forma a doua este folosită pentru poziţionarea indicatorului de înregistrări
pe înregistrările extreme ale bază de date.
Un alt tip de deplasare cu indic. de înregistrări de-a lungul bază de date
este realizat cu comanda SKIP. Aceasta mută indicatorul peste un număr de
înregistrări relativ la înregistrarea curentă.
Sintaxa comenzii:
SKIP [expN1> // <expN2> // <expC>]
unde: <expN 1> nr. înregistrărilor peste care se sare
121
<expN2>- zona de lucru în care este baza de date
<expC> - aliasul bazei de date
Comanda SKIP este echivalentă cu SKIP 1.
122
Această comandă încarcă conţinutul unui fişier într-un câmp memo
specificat. Comanda are următoarea sintaxă:
APPEND MEMO <câmp memo> FROM <fişier>[OVERWRITE]
Conţinutul întregului fişier, cu numele fişier se adaugă la sfârşitul
câmpului memo <câmp memo>. Dacă se include opţiunea OVERWRITE
conţinutul fişierului va fi copiat peste acesta vechiul conţinut al câmpului
pierzându-se.
Operaţia inversă de copiere a conţinutului unui câmp memo dintr-o bază
de date într-un fişier se face cu comanda COPY MEMO <câmp memo> TO
<fişier> [ADDITIVE].
U10.11. Meniuri
123
10.11.1. Comenzi pentru lucrul cu meniuri
124
marcarea opţiunilor bară este ‘ ‘, dar acesta poate fi schimbat prin clauza MARK,
urmată de un şir de caractere. Primul caracter din şir se va folosi pentru marcarea
opţiunilor bară ale meniului respectiv. Clauza este influenţată de comanda SET
MARK OF.
Clauza MESSAGE determină afişarea şirului de caractere <expC 2> pe
ultima linie a ecranului în centrul acesteia. Clauza este influenţată de SET
MESSAGE.
Opţiunile bară ale meniului vor fi afişate una după alta, pe bara meniului,
fiind separate prin blancuri. Eliminarea acestora se face introducând clauza NO
MARGIN în comanda DEFI MENU respectivă.
Clauza COLOR controlează culorile folosite pentru afişarea meniului.
După definirea unei bare a meniului se vor defini opţiunile bară care vor
aparţine barei respective, aceasta realizându-se cu comanda DEFINE PAD, cu
sintaxa:
DEFINE PAD <opţiune bara 1> OF <nume meniu> PROMPT <expC 1>
[AT <linie>,<coloana>]
[BEFORE<opţiune bara 2>/AFTER <opţiune bara2>]
[KEY <eticheta tasta>[,expC 2>]]
[MARK <expC 3>]
[SKIP[FOR <expL>]]
[MESSAGE<expC 4>]
[COLOR <pereche culori>]
Numele opţiunii bară va fi <opţiune bara>, iar bara de meniu de care
aceasta va aparţine va fi <nume meniu>. Textul care va fi afişat pe bara meniului
va fi cel dat de clauza PROMPT, adică şirul de caractere <expC 1>. Stabilirea
unei taste directe de selectare a opţiunii bară respective se realizează prin plasarea
combinaţiei ‘|<’înaintea caracterului ce va desemna tasta directă în textul clauzei
PROMPT.
Ex…PROMPT ‘|<Ştergere’…va defini un text al opţiunii bara numit
‘Ştergere’ în care tasta directă de selectare va fi ‘S’. Dacă în textul clauzei
PROMPT caracterul selectat ce va prezenta tasta directă nu este primul de acest
tip, atunci ca tastă directă de selectare va fi aleasă prima apariţie a caracterului
respectiv.
125
Ex. …PROMPT ‘Alb|<astru’…în acest caz va avea textul ‘Albastru’ în
care ‘A’ va reprezintă tasta directă de selectare (de fapt selectarea se poate face
atât cu’a’ cât şi cu’A’).
Clauza AT nu se poate folosi pentru o bară a meniului definită cu clauza
BAR (acestea sunt totdeauna orizontale , iar poziţia opţiunilor bară este controlată
automat de FoxPro).
Ordinea de apariţie, selectarea opţiunilor bară ale unui meniu este dată de
ordinea definirii acestora prin comanda DEFI PAD corespunzătoare. Dacă după
definirea unui număr de opţiuni se doreşte inserarea uneia noi între cele definite
anterior se foloseşte una din clauzele BEFORE sau AFTER.
Clauza BEFORE determină inserarea lui <opţiune bară1> imediat înainte
de <opţiune bară 2>, iar clauza AFTER determină inserarea lui <opţiune bară 1>
imediat după <opţiune bară 2>.
Ex. DEFI MENU test
DEFI PAD opt 1 OF test PROMPT ‘opt\<1’
DEFI PAD opt 2 OF test PROMPT ‘opt\< 2’
DEFI PAD opt 3 OF test PROMPT ‘opt\<3’
Acelaşi lucru realizându-se cu secvenţa următoare:
DEFI MENU test
DEFI PAD opt 1 OF test PROMPT’opt\<1’
DEFI PAD opt 3 OF test PROMPT’opt\<3’
DEFI PAD opt 2 OF test PROMPT’opt\<2’ BEFORE opt 3
Clauza KEY se foloseşte pentru definirea unei căi directe de selectarea
unei opţiuni bară.
Calea de selectare directă reprezintă o combinaţie de taste care, acţionate
la un moment dat, determină selectarea opţiunii respective. Combinaţia de taste va
fi desemnată de o etichetă <eticheta tasta>.
O opţiune bară care se prevede cu o cale directă de selectare va fi afişată
având la dreapta ei eticheta respectiva. Dacă se doreşte inhibarea acestei afişări ,
sau afişarea unui alt text în locul etichetei, se va folosi şirul de caractere <expC>
care poate conţine:
- Textul de afişat în dreapta opţiunii bară
- Fişierul vid când nu se doreşte afişarea căii directe alături de opţiunea
bară.
Ex. DEFI PAD opt 1 OF test PROMPT’opt\< 1’ KEY CTRL+H,”^ H”
126
Clauza MARK se foloseşte pentru a specifica caracterul folosit la marcarea
opţiunii barei respective, acesta fiind primul caracter al şirului <expC3>.
Marcatorul implicit este ‘ ‘, iar condiţia de marcare este dată de SET MARK OF.
Dacă se specifică câte un marcator şi prin comanda DEFI MENU şi prin DEFI
PAD (la ambele folosind clauza MARK) pentru marcarea opţiunii bară se va
folosi cel dat de clauza DEFI PAD.
Clauza MESSAGE determină afişarea textului din şirul <expC 4> cât timp
opţiunea bară respectivă este selectată. Afişarea mesajului este controlată de
comanda SET MESSAGE .
Pentru stabilirea condiţiilor de accesare a unei opţiuni bară se foloseşte
clauza SKIP.
Dacă această clauză se foloseşte fără FOR opţiunea bară respectivă nu va
putea fi accesată, ea este dezactivată. De asemenea dezactivarea unei opţiuni bară
se poate face prin plasarea caracterului ‘\’ înaintea textului din comanda
PROMPT.
Ex. Comenzile următoare sunt echivalente:
DEFI PAD opt OF test PROMPT’\Ales’
DEFI PAD opt OF test PROMPT’Ales’ SKIP
Clauza COLOR specifică culorile folosite pentru afişarea opţiunii bară.
Ex. Să se definească bara meniu ACŢIUNE din figura următoare:
Modificare Ştergere * Adăugare ^N Listare Vizualizare
Ieşire ^X
Literele subliniate reprezintă taste directe de selectare, iar ^N,^X
reprezintă căi directe de selectare, iar ‘*’ reprezintă marcajul.
DEFI MENU ACTIUNE
DEFI PAD STERGERE OF ACTIUNE PROMPT ‘\<Ştergere’
DEFI PAD MODIFICARE OF ACTIUNE PROMPT ’\<Modificare’
BEFORE;
Ştergere
DEFI PAD ADAUGARE OF ACTIUNE PROMPT ‘\<Adăugare’ MARK
‘*’;
KEY CTRL+N ,”^ N”
DEFI PAD LISTARE OF ACTIUNE PROMPT ‘\<Listare’ AFTER
Adăugare
DEFI PAD VIZUALIZARE OF ACTIUNE PROMPT ‘\<Vizualizare’
127
DEFI PAD IESIRE OF ACTIUNE PROMPT ‘\<Ieşire’ KEY CTRL+X, “^
X”
Submeniurile se definesc prin comanda DEFINE POPUP care are sintaxa:
DEFI POPUP <nume submeniu>
[FROM <linie 1>,<coloana 1>][TO <linie 2>, coloana 2>]
[IN [WINDOW] <nume fereastră>|IN SCREEN]
[FOOTER <expC 1>][TITLE ,expC 2>]
[KEY <eticheta tasta>]
[MARGIN]
[MARK <expC 3>]
[MESSAGE <expC 4>]
[MOVER]
[MULTI]
[PROMPT FIELD <expr>| PROMPT FILES[LIKE <masca>|PROMPT
STRUCTURE]
[RELATIVE]
[SCROLL]
[SHADOW]
[COLOR <lista perechi culori>]
Un submeniu reprezintă o listă de opţiuni care pot fi de următoarele tipuri:
- opţiuni definite de utilizator(prin comenzi DEFI BAR)
- înregistrări dintr-o bază de date ( PROMPT STRUCTURE)
- o listă de fişiere de pe disc (PROMPT FILES)
Numele submeniului va fi <nume submeniu>. Poziţia acestuia pe ecran sau
într-o fereastră va fi dată de clauza FROM în care <linia 1>, <coloana 1> indică
poziţia colţului stânga sus al submeniului.
Dacă această clauză lipseşte, submeniul va fi plasat în colţul din stânga sus
al ecranului la poziţia 0,0.
Clauza TO este folosită pentru a indica poziţia colţului din dreapta jos a
submeniului prin coordonatele <linie 2>,<coloana 2> aceasta determinând si
dimensiunile submeniului.
Pentru ca submeniul să fie într-o fereastră, numele acesteia, <nume
fereastra>, va fi inclus în clauza IN WINDOW. Dacă această clauză lipseşte
submeniul va putea fi introdus într-o fereastră în cazul în care ieşirea este
128
direcţionată către o fereastra (fereastra curentă) şi în comanda DEFINE POPUP
nu s-a inclus clauza IN SCREEN.
Submeniul va fi plasat pe ecran dacă este prezentă clauza IN SCREEN şi
ieşirea este direcţionată spre ecran.
Clauza TITLE se foloseşte pentru afişarea textului dat de şirul <expC2> în
centrul laturii superioare a chenarului submeniului, iar clauza FOOTER permite
afişarea textului din şirul <expC1> la mijlocul laturii inferioare a chenarului
submeniului.
Clauza KEY se foloseşte în scopul de a specifica o cale directă pentru
activarea submeniului, cale dată de <eticheta tast>a.
Stabilirea caracterului folosit pentru marcarea opţiunilor unui submeniu se
face cu clauza MARK urmată de caracterul respectiv<expC3>. Clauza este
influenţată de comanda SET MARK OFF.
Cât timp submeniul este activat se poate afişa un text explicativ, un mesaj,
pe ultima linie a ecranului sau a ferestrei respective. Mesajul este dat prin
<expC4>, expresie de tip şir de caractere inclusă în clauza MESSAGE. Această
clauză este controlată de comanda SET MESSAGE.
Clauza MARGIN se include în comanda pentru ca opţiunile să fie separate
de chenar printr-un spaţiu suplimentar, la dreapta şi la stânga acestora. În acest
spaţiu în stânga vor fi afişate marcajele, iar la dreapta acestora se va afişa, când
este cazul, o săgeată indicând ieşirea în alt submeniu.
MOVER este o clauză care permite rearanjarea opţiunilor într-un
submeniu, când acesta este activat. Pentru mutarea unei opţiuni în altă poziţie a
submeniului se procedează astfel:
- se selectează opţiunea prin deplasarea cursorului deasupra acesteia şi cu
ajutorul tastelor Ctrl+| sau Ctrl+| se deplasează opţiunea respectivă în noua
poziţie.
- cu ajutorul mouse-ului, se poziţionează cursorul acestuia deasupra
caracterului „|” corespunzător opţiunii de mutat, după care se apasă butonul stâng
şi cu acesta apăsat se mută opţiunea odată cu cursorul în noua poziţie.
Pentru aflarea opţiunii dintr-o anumită poziţie a submeniului se va folosi
funcţia GETBAR().
O altă facilitate a submeniului este cea a selecţiilor multiple. Selectarea
mai multor opţiuni se face în modul următor:
129
- folosind tastatura se acţionează tasta Shift şi împreună tastele Enter sau
Space când cursorul se afla pe o opţiune ce se va selecta. Ţinerea tastei Shift
apăsată şi deplasarea cursorului deasupra mai multor opţiuni determină selectarea
opţiunilor peste care cursorul trece;
- folosind mouse-ul, se apasă butonul stâng al acestuia în timp ce cursorul
sau se afla deasupra unei opţiuni de selectat şi în timp ce tasta Shift este apăsată.
De asemenea deplasarea cursorului mouse-ului deasupra mai multor opţiuni când
tasta Shift este apăsată, determină selectarea opţiunilor respective.
Clauza MULTI nu poate fi folosită în acelaşi timp cu clauza PROMPT.
Funcţia MRKBAR() se va folosi pentru detectarea opţiunilor selectate prin
metodele de mai sus.
Tipul de submeniu este determinat de clauza PROMPT. Dacă această
clauză lipseşte, opţiunile submeniului urmează a fi definite cu comenzi BAR.
În cazul clauzei PROMPT FIELD opţiunile submeniului vor fi preluate
dintr-o bază de date deschisă într-o zonă de lucru, pentru fiecare înregistrare
corespunzând câte o opţiune. La activarea submeniului se va selecta automat zona
de lucru respectivă.
Expresia <expr> va determina modul de obţinere a unei opţiuni din
înregistrarea corespunzătoare. Această expresie poate conţine câmpuri ale bazei de
date curente sau ale unei baze de date din altă zonă de lucru între care se poate
aplica operatorul de concatenare.
Numărul maxim de opţiuni ale unui submeniu creat dintr-o bază de date
este de 32767 în versiunea standard a FoxPro, numărul de opţiuni fiind nelimitat
în versiunea extinsă a Fox Pro.
Pentru ca opţiunile submeniului să reprezinte fişiere de pe un disc, dintr-un
anumit director, se foloseşte clauza PROMPT FILES.
Această clauză, folosită fără LIKE determină afişarea unor opţiuni ale
submeniului, a tuturor fişierelor de pe discul curent, din directorul curent. În cazul
în care se doreşte să reprezinte numai anumite opţiuni ale submeniului se va folosi
<masca> din clauza LIKE. <Masca> respectă regulile DOS de specificare a mai
multor fişiere, folosind simbolurile * şi ? (exemplu: .DBF, A.PRG,*.?11).
O ultimă variantă a clauzei PROMPT este cea care se referă la structura
unei baze de date, adică PROMPT STRUCTURE. În acest caz opţiunile
submeniului vor fi câmpurile bazei de date active. Şi în acest caz activarea
130
submeniului va determina selectarea zonei de lucru conţinând baza de date
respectivă.
În cazul submeniurilor ale căror opţiuni sunt definite prin comenzi
DEFINE BAR ordinea acestor opţiuni este controlată de clauza RELATIVE. În
prezenţa acestei clauze opţiunile vor apare în submeniu în ordinea definirii lor,
deci nu vor mai apare spaţii între opţiunile submeniului. De asemenea, această
clauză permite folosirea clauzelor BEFORE şi AFTER în comanda DEFINE
BAR.
Clauza SCROLL are ca efect afişarea unei bare de defilare verticale, pe
latura dreapta a chenarului submeniului, când nu toate opţiunile pot fi afişate
simultan pe ecran, în interiorul submeniului.
SHADOW este clauza referitoare la efectul de umbră, prezenţa acestuia
permiţând afişarea umbrei submeniului. Starea umbrei este controlată de comanda
SET SHADOW.
Pentru definirea opţiunilor unui submeniu, ce a fost definit anterior cu o
comanda DEFINE POUP, vom folosi comanda DEFINE BAR, cu sintaxa :
DEFINE BAR <expN1>/<nume opţiune sistem.
OF <nume submeniu>PROMPT<expC1>
BEFORE<expN2>/AFTER<expN2>
KEY<eticheta tasta> , <expC2>
MARK<expC3>
MESSAGE<expC4>
SKIP FOR<expL>
COLOR<LISTA PERECHI CULORI>/ COLOR SCHEME<expN>
Comenzile DEFINE BAR şi DEFINE PAD sunt asemănătoare întrucât
definirea opţiunilor într-un submeniu se face asemănător cu definirea opţiunilor
bară într-o bară a unui meniu.
Afişarea şi activarea unei bare de meniu se face cu comanda ACIVATE
MENU, cu sintaxa:
ACTIVATE MENU<nume meniu>
NOWAIT
PAD<nume opţiune bară>
Clauza NOWAIT determină continuarea execuţiei programului după
afişarea şi activarea barei de meniu. Bara de meniu va rămâne activată,
131
utilizatorului dându-i-se posibilitatea selectării unei opţiuni bara ori de câte ori
programul aşteaptă introducerea unor date de la tastatură.
Analog afişării şi activării barei de meniu se face şi afişarea şi activarea
submeniului, în acest caz folosindu-se comanda ACTIVATE POPUP, cu sintaxa :
ACTIVATE POPUP<nume submeniu>
AT<LINIE>, <coloana>
BAR<expN>
NOWAIT
REST
Această comandă - REST- va afişa şi activa submeniul <nume submeniu>
la coordonatele specificate în clauza AT <linie> şi <coloană> în ecran sau
fereastra curentă, selectând iniţial opţiunea <expN>.
Afişarea pe ecran sau în fereastra curentă a barelor de meniu şi a
submeniurilor, fără activarea acestora se realizează cu comenzile SHOW MENU
şi SHOW POPUP.
Comanda SHOW MENU realizează afişarea barelor de meniu enumerate
în lista ce urmează comenzii, sau a tuturor barelor de meniu, dacă se foloseşte
ALL în locul listei.
Pentru afişarea unei opţiuni bara ca fiind selectată, aceasta se specifică prin
clauza PAD.
Pentru reţinerea imaginii pe ecran fără activarea acestora, se va folosi
clauza SAVE în comanda SHOW MENU. Această imagine va putea fi ştearsă prin
comanda CLEAR.
Eliminarea de pe ecran sau din fereastra curentă a barelor de meniu şi a
submeniurilor fără înlăturarea acestora din memorie, se realizează cu comenzile
HIDE MENU şi HIDE POPUP.
Comanda HIDE MENU ascunde barele de meniu specificate în listă sau
toate barele de meniu definite, dacă se foloseşte clauza ALL, dar nu le elimină pe
acestea din memorie.
Clauza SAVE se foloseşte pentru a păstra o imagine a barei de meniu, pe
ecran sau în fereastra curentă, şi după ascunderea acesteia, ştergerea făcându-se cu
CLEAR.
Comanda HIDE POPUP ascunde submeniurile specificate în lista sau toate
submeniurile definite (ALL) adică le elimină de pe ecran fără a le înlătura şi din
memorie.
132
Legătura dintre barele de meniu şi submeniuri este de o importanţă
deosebită pentru realizarea de meniuri complexe.
O primă modalitate de a lega o bară de meniu de un submeniu sau o altă
bară de meniu este dată de comanda ON PAD.
Pentru activarea unui submeniu se foloseşte clauza ACTIVATE POPUP
urmată de numele submeniului, iar pentru activarea unei alte bare de meniu se
foloseşte clauza ACTIVATE MENU, după care se include numele barei
respective.
Pentru ca la alegerea unei opţiuni bară sau a unei opţiuni a unui submeniu,
să se execute operaţii mai complexe ( nu numai activarea unui submeniu sau a
unei bare de meniu) vom folosi grupul de comenzi ON SELECTION format din
următoarele patru comenzi:
1. ON SELECTION MENU
2. ON SELECTION PAD
3. ON SELECTION POPUP
4. ON SELECTION BAR
Aceste comenzi determină executarea unei singure comenzi la alegerea
unei opţiuni bară sau a unei opţiuni.
Comanda ON SELECTION MENU are sintaxa :
ON SELECTION MENU<nume meniu>/ ALL <instrucţiune>
Instrucţiunea <instrucţiune> va fi executată la alegerea oricărei opţiuni
bară a barei de meniu <nume meniu> sau a oricărei bare de meniu definită când
se foloseşte clauza ALL. Comanda ON SELECION MENU trebuie plasată între
DEFINE MENU şi ACTIVATE MENU. Dacă instrucţiunea lipseşte, opţiunile
bara respective sunt eliberate, adică nu se va mai executa nici o instrucţiune la
alegerea lor.
O utilizare asemănătoare o are comanda ON SELECTION PAD cu
sintaxa:
ON SELECTION PAD <nume opţiune bara>OF<nume meniu>
<instrucţiune>
cu deosebirea că <instrucţiune> se va executa numai la alegerea opţiunii bara
<nume opţiune bara> a barei de meniu, ca la comanda anterioară.
Comanda ON SELECTION POPUP determină executarea instrucţiunii
<instrucţiune> la fiecare alegere a unei opţiune din submeniul definit, când
foloseşte clauza ALL.
133
În lipsa lui <instrucţiune>, opţiunile respective sunt eliberate de acesta,
deci nu se va mai executa nici o instrucţiune la alegerea unei opţiuni a
submeniului. Aceasta comandă trebuie plasată între DEFINE POPUP şi
ACTIVATE POPUP.
Comanda MOVE POPUP mută submeniul în poziţia specificată de clauza
TO sau peste linii şi coloane, relativ la poziţia curentă, dacă se foloseşte clauza
BY.
Modificarea dimensiunilor unui submeniu, după definirea acestuia se
realizează cu comanda SIZE POPUP dată de sintaxa:
SIZE POPUP<nume submeniu>TO<expN1>,<expN2>/
BY<expN3>, <exp.N4>.
Un alt grup de comenzi referitoare la lucrul cu bare de meniu şi cu
submeniuri sunt cele referitoare la depozitarea acestora în memorie într-o anumită
zonă organizată sub forma de stivă (ultimul intrat, primul ieşit).
Salvarea unei bare de meniu în stiva meniurilor se face cu comanda PUSH
MENU iar refacerea acestuia, adică aducerea sa din stivă, se realizează prin
comanda POP MENU.
Comanda PUSH MENU depune în stivă bara de meniu<nume meniu> iar
comanda POP MENU scoate din stiva bara <nume meniu>, depusă anterior printr-
o comandă PUSH MENU.
Clauza TO MASTER folosită în comanda POP MENU determină
extragerea din stiva primei bare de meniu depusă în aceasta (cea de la bază), după
care stiva se goleşte.
Comanda PUSH POPUP depune în stiva submeniul <nume submeniu>
care va fi scos cu comanda POP POPUP.
Dezactivarea unei bare de meniu sau a unui submeniu se realizează prin
comenzile DEACTIVATE MENU şi DEACTIVATE POPUP, cu sintaxele
DEACTIVATE MENU
DEACTIVATE POPUP
Aceste comenzi nu înlătură meniul din memorie pentru reactivarea sa,
folosind ACTIVATE MENU sau ACTIVATE POPUP, nu este necesară redefinirea
acestuia.
Comanda DEACTIVATE MENU dezactivează bara de meniu curentă iar
comanda DEAFTIVATE POPUP realizează aceeaşi sarcină pentru submeniul
curent.
134
Eliminarea din memorie a barelor de meniuri şi a submeniurilor (deci
eliminarea definitivă a acestora) se realizează cu grupul de comenzi RELEASE
care cuprinde RELEASE MENUS, RELEASE PAD, RELEASE POPUS şi
RELEASE BAR.
Comanda RELEASE MENUS elimina barele de meniuri din <lista
meniuri> din memorie şi de pe ecran sau fereastra curentă. Bara de meniu activă
trebuie dezactivată înainte de eliminarea sa din memorie.
Clauza EXTENDED se foloseşte pentru înlăturarea, pe lângă bara de
meniu respectivă, şi a elementelor subordonate : opţiuni bara, submeniuri, opţiuni,
comenzi introduse cu ON.
RELEASE PAD va înlătura opţiunea bara <nume opţiune bară> sau toate
opţiunile bara, când se foloseşte clauza ALL din bara de meniu <nume meniu>.
RELEASE POPUS înlătură din memorie şi de pe ecran sau fereastra
curentă submeniurile din lista asociată comenzii, sau toate submeniurile definite
dacă această listă este vidă. Submeniul activ trebuie mai întâi dezactivat pentru a
fi eliminat cu comanda RELEASE POPUPS.
RELEASE BAR se foloseşte pentru eliminarea opţiunilor dintr-un
submeniu. Comanda va elimina opţiunea <expN> sau toate opţiunile în cazul
prezentei clauzei ALL, submeniul <nume submeniu>.
Toate barele de meniu vor fi eliminate din memorie şi de pe ecran sau
ferestre prin comanda CLEAR MENUS iar îndepărtarea se va face prin comanda
CLEAR POPUS. De asemenea, barele de meniu şi submeniurile vor fi mai
îndepărtate din memorie şi ecran şi la execuţia comenzii CLEAR ALL.
Pentru schimbarea modelului ecranului, adică a caracterelor folosite pentru
afişarea acestuia, vom folosi comanda SET BORDER.
Controlul accesului la meniul sistem al FoxPro este realizat de comanda
SET SYSMENU având sintaxa:
SET SYSMENU ON / OFF / AUTOMATIC
/TO <listă submeniuri sistem/listă opţiuni bară>
/TO DEFAULT
Pentru ca meniul sistem să fie accesibil în timpul rulării programului, la
executarea unor comenzi de citire de la tastatură (READ, BROWSE etc) se
include comanda SET SYSMENU clauza ON, aceasta fiind şi opţiunea implicită.
Opusă clauzei ON este clauza OFF care nu permite accesul la meniul
sistem în timpul executării unui program.
135
Clauza AUTOMATIC determină afişarea pe ecran a meniului sistem în
timpul rulării unui program.
Clauza TO se foloseşte pentru a elimina unele submeniuri ale meniului
sistem. Vor putea fi accesate numai acele submeniuri prezente în lista <lista
submeniuri> sistem sau care corespund opţiunilor bară din lista <lista opţiuni
bară>. Elementele listei sunt separate prin virgulă.
Folosirea clauzei DEFAULT în comanda SET SYSMENU determină
revenirea la configuraţia implicită a meniului sistem
Funcţia SYS(2013) cu sintaxa:
SYS (2013)
returnează un şir de caractere conţinând denumirile elementelor meniului sistem al
FoxPro adică a barei meniului, a opţiunilor bara, a submeniurilor şi a opţiunilor
submeniurilor.
O opţiune bară a unei bare de meniu sau o opţiune a unui submeniu poate
fi marcată, în funcţie de condiţie, stabilită de utilizator. Caracterul folosit pentru
marcare cât şi condiţia de marcare, adică dacă o opţiune este marcată sau nu, se
stabileşte prin grupul de comenzi SET MARK OF compus din patru comenzi
SET MARK OF MENU, SET MARK OF PAD,
SET MARK OF POPUP şi SET MARK OF BAR.
Comanda SET MARK OF MENU determină folosirea caracterului
<expC> pentru marcarea opţiunilor bara ale barei de meniu <nume de meniu> în
cazul când se introduce în comanda un caracter.
Dacă această comandă va fi urmată de o expresie logică, SET MARK OF
MENU va determina marcarea tuturor opţiunilor bara ale barei de meniu în cazul
valorii T, a expresiei logice şi demarcarea acestora când expresia este evaluată la
valoarea F.
Comanda SET MARK OF PAD se referă la o opţiune bară <nume opţiune
bară> a barei <nume meniu>, această comandă având întâietate faţă de comanda
SET MARK OF MENU.
Comanda SET MARK OF POPUP se referă la toate opţiunile submeniului
<nume submeniu>.
Comanda SET MARK OF BAR se referă doar la opţiunea <expN> a
submeniului <nume submeniu>, această comandă având întâietate faţă de
comanda SET MARK OF POPUP pentru submeniul ce conţine opţiunea
respectivă.
136
Două funcţii, referitoare la marcarea opţiunilor, se pot folosi împreună cu
această comandă MRKPAD() care determină dacă o opţiune bară a unei bare de
meniu este marcată sau nu, şi la funcţia MRKBAR() ce testează marcarea unei
opţiuni a unui submeniu.
Funcţia MRKPAD()are sintaxa:
MRKPAD(<expC1>,< expC2>)
iar funcţia MRKBAR() are sintaxa:
MRKBAR(<expC>, <expN>)
Alegerea opţiunii Marcare determină marcarea tuturor opţiunilor bară ale
barei de meniu, iar alegerea opţiunii bară Demarcare are ca efect demarcarea
acestora. La alegerea opţiunii bară inversare se va inversa starea de marcare a
opţiunilor bară ale barei de meniu.
Grupul de comenzi SET SKIP OF se referă la posibilitatea de accesare a
barelor de meniuri, opţiunilor bară, submeniurilor sau opţiunilor şi conţine
comenzile: SET SKIP OF MENU, SET SKIP OF PAD, SET SKIP OF POPUP şi
SET SKIP OF BAR.
Diferenţa dintre comenzi este dată de elementul la care se referă fiecare,
dar modul de funcţionare este asemănător.
Comanda SET SKIP OF MENU se referă la accesarea barei de meniu
<nume meniu> iar comanda SET SKIP OF PAD acţionează numai asupra opţiunii
bară <nume opţiune bară> a barei de meniu <nume meniu>.
În mod analog, comanda SET SKIP OF POPUP acţionează asupra
submeniului <nume submeniu> iar comanda SET SKIP OF BAR se referă numai
la opţiunea <expN> sau opţiunea sistem <nume opţiune sistem> a submeniului
<nume submeniu>.
În combinaţia cu această comandă se pot folosi două funcţii referitoare, de
asemenea, la posibilitatea de accesare a unei opţiuni sau a unei opţiuni bară.
Acestea sunt SKPPAD() şi SKPBAR() şi au sintaxele:
SKPPAD(<expC1>, <expC2>)
SKPBAR(<expC>, <expN>)
Funcţia SKPPAD() testează opţiunea bară dată de şirul de caractere
<expC2> a barei de meniu specificată prin şirul <expC1>.
Funcţia SKPBAR va testa opţiunea <expN> a submeniului specificat prin
şirul de caractere <expC>
137
10.11.2. Funcţii referitoare la meniuri
138
Funcţia PIMBAR() va avea ca rezultat tot o valoare de tip şir de caractere,
reprezentând textul asociat opţiunii cu numărul <expN> a submeniului dat, prin
<expC>.
Numărul de opţiuni bară asociate unei bare de meniu este returnat de
funcţia CNTPAD(), funcţie ce returnează o valoare numerică reprezentând
numărul de opţiuni bară a barei de meniu.
Funcţia CNTBAR() returnează, de asemenea, o valoare numerică
reprezentând numărul de opţiuni ale submeniului <expC>.
Funcţia MENU() returnează numele meniului. La evaluarea construcţiei
CNTPAD(MENU() ) vom obţine numărul de opţiuni bară ale meniului, iar
evaluarea lui CNTBAR(POPUP() )va duce la returnarea numărului de opţiuni ale
submeniului.
Construcţia GETPAD (MENU (), i) va da numele celei de-a „i”-a opţiune
a meniului, iar prin GETBAR(POPUP(), i) vom obţine numele opţiunii „i”-a a
submeniului.
Funcţiile PRMPAD() şi PRMBAR() sunt folosite pentru a trece de la unele
opţiuni (bară şi respectiv simplă) la textul asociat acesteia prin construcţiile :
PRMPAD(MENU(), GETPAD(MENU(), i)
PRMBAR(POPUP), GETBAR(POPUP) i).
139
<fişier>EXE - program executabil
<fişier>APP - aplicaţie
<fişier>FXP forma compilată a programului
<fişier >PRG- programul sursă.
<Fişier>PRG reprezintă fişierul sursă în care a fost depus programul,
conţinutul acestuia fiind transmis de utilizator la scrierea programului. Execuţia
unui program sursă presupune mai întâi compilarea sa, după această fază
obţinându-se forma compilată a programului, care va fi interpretată de FoxPro.
Această formă compilată reprezintă tot un fişier pe disc, obţinut automat ca
rezultat al compilării şi care poartă numele <fişier>FXP.
Un program poate conţine mai multe comenzi DO, obţinându-se astfel Do-
uri îmbrăcate, pe mai multe nivele, limita maximă pentru aceste nivele fiind 32.
Execuţia programului se va opri în una din următoarele situaţii:
- la execuţia unei comenzi RETURN, CANCEL, QUIT;
- când se întâlneşte sfârşitul fişierului;
- când se întâlneşte o altă comandă DO.
Comanda RETURN având sintaxa:
RETURN[<EXPR>/TO MASTER/TO<nume rogram>]
termină execuţia programului returnând controlul la programul apelant de cel mai
înalt nivel sau la un alt program (specificat prin clauza TO).
<expr> reprezintă valoarea transmisă de programul a cărui execuţie se
încheie către programul căruia i se predă controlul. Dacă <expr>lipseşte se va
returna valoarea logică T.
<nume program> reprezintă numele unui program care va prelua controlul
de la cel care se încheie cu comanda RETURN.
Comanda CANCEL determină terminarea execuţiei programului curent şi
predarea controlului în fereastra de comenzi.
Suspendarea execuţiei unui program (cu posibilitatea de reluare) se
realizează prin comanda SUSPEND cu sintaxa SUSPEND continuarea rulării unui
program suspendat făcându-se prin comanda RESUME, cu sintaxa RESUME. De
asemenea execuţia unui program se va încheia la întâlnirea comenzii QUIT, cu
sintaxa QUIT care determină şi ieşirea din mediul FoxPro.
Numele unui program este obţinut prin funcţia PROGRAM() având
următoarea sintaxă: PROGRAM ([<expN>]).
140
Dacă apelul funcţiei se face fără nici un parametru, aceasta va returna un
şir de caractere conţinând numele programului în execuţie sau numele ultimului
program executat când a apărut o eroare.
O funcţie asemănătoare este SYS(16) aceasta returnând într-un şir de
caractere numele programului, cu tot cu calea completă unde acesta se află.
Dacă în cele două funcţii se include <expN>, aceasta va desemna nivelul
programului curent executat ce fa fi returnat de funcţii.
Execuţia unu program din interiorul altui program, folosind comanda DO,
reprezintă un pas important în structurarea aplicaţiilor de dimensiuni mari.
Pe măsură ce creşte dimensiunea unei aplicaţii (creşte numărul liniilor de
program ale aplicaţiei), testarea şi depanarea acestuia devine din ce în ce mai
dificilă datorită numărului mare de variabile.
Astfel, s-a trecut la gruparea unor instrucţiuni în module separate, aceste
module fiind independente între ele.
Modulele de acest tip pot fi create şi în interiorul fişierului ce conţine
programul formând aşa-numitele proceduri şi funcţii definite de utilizator (UDF
-User Defined Functions).
Datorită independenţei unui modul faţă de celelalte module, acesta poate fi
executat de mai multe ori în cadrul unui program prin câte o instrucţiune de
apelare a modulului în fiecare poziţie dorită.
Se introduce astfel o modalitate de execuţie a unui grup de instrucţiuni în
mai multe zone ale unui program, fără a rescrie aceste instrucţiuni la fiecare
folosire.
O funcţie reprezintă un grup independent de instrucţiuni care primeşte un
set de parametrii de la programul apelant şi returnează acestuia o valoare ca
rezultat al prelucrărilor asupra parametrilor transmişi.
O funcţie definită de utilizator poate intra în componenţa unei expresii ca
operand, analog funcţiilor standard din FoxPro.
O procedură reprezintă de asemenea un grup de instrucţiuni ce primeşte de
la programul apelant un grup de parametrii, realizează anumite prelucrări, după
care se revine la programul apelant.
141
O procedură definită de utilizator nu poate intra în alcătuirea unei expresii
ca operand, fiind analoagă comenzilor standard din FoxPro.
La definirea unei funcţii sau proceduri se stabilesc prelucrărilor ce au loc
în interiorul ei, parametrii care se primesc spre prelucrare şi rezultatele ce se vor
transmite după prelucrare.
La apelul unei funcţii sau proceduri apare doar numele care identifică
respectiva funcţie sau procedură însoţit eventual de lista parametrilor ce se vor
transmite.
Termenul de independent din definiţiile funcţiilor şi procedurilor are o
importanţă deosebită: variabilele definite în interiorul funcţiilor şi procedurilor
sunt cunoscute doar în acest domeniu, în sensul că pentru programul ce apelează
funcţia sau procedura, aceste variabile nu există.
Definirea unei funcţii se face prin intermediul comenzii FUNCTION care
are sintaxa FUNCTION <nume funcţie> unde <nume funcţie> reprezintă numele
care se atribuie funcţiei nou definite şi care va fi folosit la fiecare apel al acesteia
pentru identificarea printre celelalte funcţii a celei dorite.
Definirea procedurilor se realizează prin comanda PROCEDURE cu
sintaxa: PROCEDURE <nume procedură>.
Instrucţiunile unei rutine vor începe imediat după comanda FUNCTION
sau PROCEDURE şi se vor întinde până la întâlnirea unei noi comenzi
FUNCTION sau PROCEDURE, sau până la întâlnirea sfârşitului de fişier.
Apelul unei funcţii se face prin numele acesteia, urmat, între paranteze
rotunde, de lista parametrilor prin care se comunică funcţia. La executare, în locul
acestei construcţii se va introduce valoarea returnată de funcţie, ca rezultat al
prelucrărilor din interiorul acesteia.
O procedură se execută prin comanda DO urmată de numele procedurii (pe
poziţia lui <fişier>, iar parametrii prin care programul comunică cu aceasta se
introduc în lista clauzei WITH a acestei comenzi.
Terminarea execuţiei unei rutine se face fie după execuţia ultimei
instrucţiuni a acesteia, fie la întâlnirea unei dintre comenzile RETURN,
CANCEL, SUSPEND, QUIT.
Procedurile şi funcţiile unui program se introduc de regulă, după ultima
instrucţiune a programului, în acelaşi fişier cu acesta. Dar acestea se pot introduce
în fişiere separate care vor fi asociate programului apelant prin comanda SET
PROCEDURE.
142
Această comandă asociază programului, în execuţie, fişierul <fişier> (cu
extensia implicită PRG), unde se vor căuta procedurile care nu se găsesc în
fişierul programului apelant.
Comanda SET PROCEDUTE TO, fără alţi parametrii, determină
închiderea fişierului de proceduri curent asociat programului în execuţie.
Comanda CLOSE PROCEDURE, de asemenea închide fişierul de
proceduri curent.
La execuţia unei proceduri, folosind comanda DO, căutarea acestuia se
face în următoarea ordine:
- mai întâi se caută în fişierul care conţine comanda DO de apelare a
procedurii;
- dacă nu se găseşte, se caută apoi în fişierul de proceduri deschis cu
comanda SET PROCEDURE,
- şi în ultima instanţă se caută pe rând în programele în curs de execuţie pe
diferite nivele, până la programul de nivel 1.
Abia după aceste etape s-au încheiat fără succes, se va căuta fişierul cu
numele identic cu al procedurii, considerând comanda ca determinând execuţia
unui program.
Pentru ca o căutare a unei proceduri să se facă numai într-un anumit fişier,
acesta se va include în clauza IN a comenzii DO:IN <fişier>.
143
Pentru ca într-un modul să se declare un set de variabile private, acestea se
includ în comanda PRIVATE, cu sintaxele:
PRIVATE<lista variabile>
PRIVATE ALL[LIKE<masca>/EXCEPT<masca>]
Prin această comandă se declară ca fiind private (dar nu se creează)
variabilele din< listă variabile>, toate variabilele care se potrivesc cu <masca>
(când se foloseşte clauza LIKE) sau toate variabilele cu excepţia celor care se
potrivesc cu <masca> ( la folosirea clauzei EXCEPT).
Variabilele globale se definesc prin comanda PUBLIC, cu sintaxele:
PUBLIC<listă variabile>
PUBLIC [ARRAY]<masiv1>(expN1>[, <expN2>])
[,<masiv2>(<expN3>[, (<expN4>])]...
Spre deosebire de PRIVATE care nu creează variabilele la care se referă,
comanda PUBLIC, odată cu declararea variabilelor respective le şi creează pe
acestea.
Un tip special de variabile este tipul regional, asemănător cu cel privat.
Acest tip se foloseşte pentru a folosi variabile cu acelaşi nume în „regiuni” diferite
ale programului.
Acest tip se declară prin comanda REGIONAL cu două forme ale sintaxei:
# REGION<număr>
REGIONAL<listă variabile>
Pentru a folosi două variabile în acelaşi program, acestea trebuie definite
în listele de variabile ale comenzilor REGIONAL, în două regiuni separate ale
programului.
Regiunile se definesc prin prima formă a comenzii # REGION,
identificarea fiecărei regiuni făcându-se printr-un număr de la 0 la 31.
O regiune se întinde de la comanda # REGION care desemnează începutul
unei regiuni până la prima comandă #REGION care urmează acesteia, sau până la
sfârşitul fişierului.
144
- prin referinţă, în care variabila transmisă este afectată de eventualele
modificări aduse în subprogram;
- prin valoare, când o eventuală modificare a variabilei în subprogram nu
afectează valoarea acesteia în programul apelant.
Transmisia parametrilor la un subprogram se desfăşoară astfel:
- se stabilesc variabilele care se vor transmite ca parametrii, într-o ordine
stabilită de programator la conceperea programului;
- se stabileşte un set de variabile locale subprogramului care vor prelua
valorile variabilelor transmise ca parametrii de la programul apelant;
- corespondenţa între variabilele transmise din programul apelant şi cele
locale ale subprogramului se face prin poziţia în două liste şi anume: listă cu
parametrii de apel a subprogramului, şi respectiv lista variabilelor locale,
specificată prin comanda PARAMETERS;
- în modulul apelant se lucrează cu variabilele locale respective;
- dacă tipul transmisiei este de referinţă, la sfârşitul executării
subprogramului, conţinutul variabilelor este trecut în variabilele corespunzătoare
transmise ca parametrii;
- dacă avem o transmise prin valoare, această ultimă copiere nu mai are
loc, deci variabilele de apelare nu vor mai fi actualizate cu noile valori ale
variabilelor locale corespunzătoare.
Lista variabilelor transmise ca parametrii este stabilită fie prin clauza
WITH a comenzii DO, în cazul apelului unui subprogram sau a unei proceduri, fie
prin lista dintre parantezele rotunde ce urmează numelui funcţiei, când avem un
apel în funcţie.
Pentru a stabili în ce variabile locale se încarcă parametrii transmişi se
foloseşte comanda PARAMETERS, cu sintaxa:
PARAMETERS <listă variabile locale>
Această comandă, care trebuie să fie prima comandă a uni modul (în cazul
când acesta există) defineşte lista de variabile locale care vor prelua parametrii
transmişi de la programul apelant.
Lista variabilelor locale trebuie să aibă totdeauna mai multe elemente (sau
cel mult egal) decât lista parametrilor transmişi, pentru ca fiecare parametru să
aibă un corespondent în subprogram.
Numărul de parametrii transmişi programului, procedurii sau funcţiei
curente este returnat de funcţia PARAMETERS ().
145
În ceea ce priveşte metoda folosită la transmisia parametrilor există
următoarele reguli:
- la programe parametrii se transmit implicit prin referinţă;
- la proceduri şi funcţii se foloseşte metoda transmiterii parametrilor prin
valoare.
Pentru a schimba metoda implicită de transmitere a parametrilor la
proceduri şi funcţii se poate folosi comanda SET SDFPARMS (User Defined
Parameters), cu sintaxa:
SET UDFPARMS TO VALUE | REFERENCE
SET UDFPARMS TO VALUE determină transmiterea prin valoare a
parametrilor, ca metodă implicită, iar SET UDFPARMS TO REFERENCE face ca
transmisia parametrilor să se facă implicit prin referinţă.
Pentru a forţa transmiterea unui parametru prin valoare la apelul unei
funcţii, acesta se include între paranteze rotunde, iar pentru forţarea transmiterii
unui parametru prin referinţă, acesta va fi precedat de caracterul „ „.
10.12.4. Compilarea
146
Clauza NODEBUG determină compilarea programului fără informaţiile de
depanare reducând astfel mărimea fişierului obiect, dar eliminând posibilitatea
depanării respectivului program.
Comanda CLEAR PROGRAM goleşte bufferul de compilare al FoxPro şi
este folosită doar pentru compatibilitatea cu versiunile anterioare.
SET LOGERRORS cu sintaxa:
SET LOGERRORS ON | OFF
determină (ON) sau inhibă (OFF) crearea, la compilare, a unui fişier în care se
scriu toate mesajele de eroare apărute în timpul acestui proces. Fişierul creat va
purta acelaşi nume cu al programului sursă şi va avea extensia .ERR.
În scrierea unui program deseori apar erori datorate fie neatenţiei, fie unei
cunoaşteri insuficiente a limbajului de programare, fie neluării în seamă a unor
cazuri particulare ale evoluţiei programului.
Două mari clase de erori pot apare la execuţia unui program:
- erori de sintaxă, când programul este incorect scris, ducând fie la
întreruperea rulării, fie la executarea unor rutine pentru tratarea erorilor;
- erori de rulare, când programul este corect scris, dar el nu funcţionează
cum dorim, rezultatele obţinute nefiind cele aşteptate.
Primul tip de erori sunt mai uşor de detectat şi de corectat, pe când cele din
cea de-a doua categorie necesită mai mult timp.
La rularea unui program, apariţia unei erori de sintaxă determină de obicei,
întreruperea procesului de execuţie şi afişarea unei mesaj de eroare, indicând tipul
erorii apărute şi cerând utilizatorului luarea unei decizii astfel:
- întreruperea programului, acţionând declanşatorul <Cancel>;
- suspendarea execuţiei programului, obţinută prin acţionarea
declanşatorului <Suspended>;
- continuarea execuţiei, ignorând eroarea apărută, prin alegerea
declanşatorului <Ignore>.
Detectarea erorilor de rulare presupune tehnici de lucru mai avansate, cum
ar fi rularea pas cu pas, folosirea punctelor de întrerupere, vizualizarea
conţinutului unor variabile în paralel cu executarea programelor etc.
147
Rularea pas cu pas a unui program reprezintă o tehnică specială constând
în executarea unei singure instrucţiuni a programului la o comandă a utilizatorului
(acţionarea unei taste). În intervalul de timp dintre execuţia a două instrucţiuni
consecutive, programatorul poate observa eventualele funcţionări incorecte ale
programului, detectând astfel cauzele ce au dus la erorile de rulare respective.
Punctele de întrerupere reprezintă poziţii fixe în cadrul programului de
depanat, la care execuţia programului respectiv se opreşte, utilizatorul având astfel
posibilitatea de a verifica starea de moment a variabilelor din program, modul
cum decurge execuţia programului, în vederea detectării eventualelor surse de
eroare.
Aceste două tehnici prezentate mai sus sunt disponibile prin intermediul
ferestrei Trace, care se deschide prin selectarea opţiunii Trace din cadrul
submeniului Window.
Fereastra Trace, are la partea superioară propriul său meniu care va fi
explicitat odată cu prezentarea modului de depanare a unui program.
Pentru ca un program să fie depanat prin fereastra Trace, acesta trebuie
mai întâi deschis în această fereastră, acest lucru realizându-se prin opţiunea
Open, de pe submeniul Program. Ca urmare a alegerii acestei opţiuni, pe ecran va
apare o fereastră de dialog, în care utilizatorul va specifica programul de depanat.
După deschiderea programului se poate trece la execuţia acestuia, aceasta
putându-se realiza în mai multe rânduri:
- pas cu pas, câte o instrucţiune la fiecare comandă a utilizatorului;
- până la un punct de întrerupere care va determina suspendarea
programului;
- executare continuă, al viteza maximă;
- executarea continuă, cu viteza controlată, când după executarea fiecărei
instrucţiuni se face o pauză, după care se continuă rularea.
Rularea pas cu pas a unui program deschis cu fereastra Trace decurge
astfel: pentru execuţia fiecărei instrucţiuni a programului utilizatorul va alege
opţiunea Over sau Step din meniul ferestrei Trace, acestea determinând execuţia
instrucţiunii curente după care se aşteaptă o nouă comandă de executare de la
utilizator.
Diferenţa dintre cele două opţiuni este dată de modul de tratare a
comenzilor de apel al unei rutine:
148
- Step determină executarea unei instrucţiuni a programului, iar în cazul
când aceasta este un apel al unei rutine, se va trece în interiorul rutinei, pentru
executarea instrucţiunilor acesteia;
- Over execută tot o instrucţiune, dar când aceasta este un apel al unei
rutine (program, procedură, funcţie) aceasta este executată în întregime, într-un
singur pas, fără a trece la executarea pas cu pas a instrucţiunilor respectivei rutine.
Instrucţiunea curentă care va fi executată prin intermediul opţiunilor Step
sau Over va apare pe ecran supraluminată, indicând această stare a liniei
respective.
În combinaţie cu operaţiunea Step se foloseşte şi opţiunea bară Out, care
determină executarea continuă a restului de instrucţiuni din programul curent,
urmând ca după revenirea în programul, rutina apelantă, execuţia să fie suspendată
pe prima instrucţiune care urmează instrucţiunii de apel a rutinei.
La modalitatea de rulare a unui program prin puncte de întrerupere, pentru
stabilirea acestora, în care execuţia programului va fi suspendată, se va deplasa
cursorul pe linia respectivă, după care se va tasta Space sau Enter. Linia va fi
marcată astfel ca reprezentând un punct de întrerupere a programului. O nouă
acţionare a tastei Space sau Enter, când cursorul se află pe o linie care conţine un
punct de întrerupere, va determina anularea punctului de întrerupere respectiv,
linia revenind la starea iniţială.
Ştergerea, anularea tuturor punctelor de întrerupere se poate face prin
alegerea opţiunii Clear Breakpointes de pe submeniul Program.
Un punct de întrerupere nu determină terminarea execuţiei programului, ci
numai suspendarea acesteia, până la o nouă comandă a utilizatorului cu privire la
continuarea rulării.
Opţiunea bară Resume a meniului ferestrei Trace determină continuarea
execuţiei continue până la un nou punct de întrerupere, până la sfârşitul
programului sau până la acţionarea tastei Escape.
O modalitate specială de rulare a programului este obţinută prin alegerea
opţiunii Throttle de pe submeniul Program, constând în executarea continuă a
programului, instrucţiune cu instrucţiune, după executarea fiecărei instrucţiuni
făcându-se o pauză, stabilită de utilizator.
Oprirea execuţiei programului se poate face în orice moment, selectând
opţiunea Cancel a submeniului Program.
149
În paralel cu executarea unui program în fereastra Trace se poate vizualiza
conţinutul unor variabile folosite în program, sau chiar rezultatul evaluării unor
expresii folosind aceste variabile, pin intermediul ferestrei Debug.
Se recomandă ca ferestrele Trace şi Debug să fie deschise şi vizibile
simultan pe ecran, urmărindu-se astfel efectul fiecărei instrucţiuni executate în
fereastra Trace asupra variabilelor in fereastra Debug.
Fereastra Debug este formată din două părţi, astfel : în partea dreaptă se
introduc variabilele şi expresiile care se doresc vizualizate în timpul executării
programului, în partea stângă apărând valorile de moment al variabilelor sau
expresiilor respective.
De asemenea în fereastra Debug se pot specifica puncte de întrerupere a
programului dependente de valorile variabilelor sau expresiilor din fereastra
respectivă, spre deosebire de punctele de întrerupere stabilite în fereastra Trace,
care reprezintă puncte fixe ale programului, independente de valorile variabilelor.
Pentru a poziţiona un astfel de punct de întrerupere, în dreptul variabilei
sau expresiei dorite, pe bara se separă cele două părţi ale ferestrei se va poziţiona
un marcaj. Acest lucru se va realiza fie cu mouse-ul, poziţionând cursorul acestuia
în poziţia dorită şi acţionând butonul stâng, fie prin intermediul tastaturii,
deplasându-ne pe bara separatoare folosind tasta Tab, poziţionându-ne în dreptul
variabilei sau expresiei dorite, cu ajutorul săgeţilor direcţionate şi acţionând tasta
Space, pentru marcare.
Execuţia programului se va suspenda ori de câte ori valoarea variabilei sau
expresiei corespunzătoare unui astfel de punct de întrerupere se va modifica.
150
Al doilea tip, condiţionând executarea unor instrucţiuni de rezultatele
evaluării unor expresii logice, este reprezentat de instrucţiunile condiţionate de
decizie, având în componenţă: IF..., ENDIF, IIF (), DO CASE.....ENDCASE.
Comanda IF .... ENDIF are două forme care vor permite executarea unor
instrucţiuni numai dacă este respectată o condiţie dată şi executarea fie a unui
grup de instrucţiuni, fie a altui grup de instrucţiuni, în funcţie de rezultatul
evaluării unei expresii logice.
Comanda are sintaxa:
IF <expL>
<instrucţiuni1>
[ELSE]
<instrucţiuni2>
ENDIF
La începutul execuţiei comenzii se va evalua expresia logică <expL> şi , în
funcţie de rezultatul evaluării, vom avea:
- dacă <expL> este .T se va executa grupul de instrucţiuni <instrucţiuni1>,
după care execuţia se va termina;
- în cazul valorii .F a expresiei logice apar două cazuri:
a) dacă există clauza ELSE în comandă, se vor executa instrucţiunile din
grupul <instrucţiuni2>, după care execuţia se termină;
b) în absenţa clauzei ELSE nu se execută nici o instrucţiune terminându-se
imediat.
Un efect asemănător de selecţie se face prin comanda IIF(), având sintaxa:
IIF(<expL>, <expr1>, <expr2>)
Această funcţie evaluează expresia logică <expL> şi în funcţie de
rezultatul obţinut, returnează valoarea uneia din expresiile <expr1> şi <expr2>:
- returnează valoarea obţinută prin evaluarea expresiei <expr1> dacă
<expL> este evaluată la .T;
- returnează rezultatul evaluării expresiei <expr2> când <expL> se
evaluează la .F.
Cele două expresii nu trebuie să aibă neapărat acelaşi tip, acestea putând fi
de tip şir de caractere, dată calendaristică, logic sau numeric.
Mai multe comenzi IF....ENDIF pot fi imbricate, incluse una în alta,
obţinându-se condiţionarea unui grup de instrucţiuni prin mai multe expresii
logice, sau obţinându-se selecţii diverse între mai multe grupuri de instrucţiuni.
151
Un tip de selecţie între mai multe grupuri de instrucţiuni este dat de
comanda DO CASE...ENDCASE, având sintaxa:
DO CASE
CASE <expL1>
<instrucţiuni>
[CASE<expL2>
<instrucţiuni2>
......................
CASE <expLN>
<instrucţiuniN>]
[ORHERWISE
<instrucţiuni>
ENDCASE
Comanda va determina execuţia grupului de instrucţiuni pentru care
expresia logică corespunzătoare are valoarea .T. Execuţia comenzii va decurge în
modul următor: se evaluează prin expresie logică <expL1> şi, dacă valoarea
obţinută este .T, se execută grupul de instrucţiuni <instrucţiuni1>. Dacă expresia
logică <expl1> are valoare .F, se trece evaluarea următoarei expresii logice.
După găsirea primei expresii logice cu valoarea .T şi executarea grupului
de instrucţiuni corespunzător, execuţia comenzii se încheie continuând cu prima
comandă de după ENDCASE.
Dacă nici una din expresiile, expL1>, <expL2>, ...<expLN> nu are
valoarea .T, apar două cazuri:
- când nu există clauza OTHER WISE, execuţia comenzii se încheie;
- în prezenţa clauzei OTHERWISE, se va executa grupul de instrucţiuni
<instrucţiuni>, după care se trece se trece la prima comandă de după ENDCASE.
Executarea repetată a unui grup de instrucţiuni reprezintă unul din
principalele avantaje ale elaborării de programe, fără de care multe din probleme
nu ar putea fi rezolvate, sau s-ar rezolva foarte greu.
Comenzile FoxPro care realizează „buclele” din teoria programării sunt
FOR....ENDFOR, DO WHILE.....ENDDO, şi SCAN.....ENDSCAN, acestea
împărţindu-se la rândul lor în două grupe:
- comenzi pentru bucle cu un număr dat de paşi, în care un grup de
instrucţiuni se execută de un număr dat de ori: FOR, SCAN;
152
- comenzi folosite pentru bucle cu un număr nedefinit de paşi, în care
numărul de executări a grupului de instrucţiuni este variabil, fiind dependent de o
condiţie asociată comenzii: DO WHILE.
Comanda FOR.....ENDFOR determină executarea repetată a grupului de
instrucţiuni <instrucţiuni>, contorizarea acestor paşi fiind făcută printr-o variabilă
<var>.
Valoarea iniţială a variabilei contor va fi dată de evaluarea expresiei
<expN1>. După fiecare execuţie a grupului de instrucţiuni <instrucţiuni>,
variabila va fi incrementată sau decrementată, cu o valoare constantă, dată de
evaluarea expresiei <expN3>, dacă este prezentă clauza STEP sau 1 când STEP
lipseşte (absenţa clauzei STEP este echivalentă cu construcţia STEP1).
Deci la prima execuţie a grupului de instrucţiuni, <var> va avea valoarea
<expN1>, la a doua execuţie <expN1>+<expN3>, la a treia execuţie <expN1>+
<expN3>+<expM3> şi aşa mai departe.
Când valoarea variabilei <var> creşte peste valoarea expresiei <expN2>
(strict mai mare), în cazul unei valori pozitive a lui <expN3>, sau scade valoarea
<expN2> (strict mai mică), pentru o valoare negativă a expresiei <expN3>, se va
ieşi din buclă, programul continuând următoarea comandă după ENDFOR.
EXIT determină ieşirea forţată din buclă şi continuarea execuţiei
programului cu prima comandă care urmează după ENDFOR, indiferent de
valoarea variabilei contor.
LOOP care determină saltul peste următoarele instrucţiuni ale buclei
(dintre LOOP şi ENDFOR), incrementarea sau decrementarea contorului de
instrucţiuni, dacă se respectă condiţia de rămânere în buclă.
Exemplu:
sumă = 0
FORi =TO 10
sumă = sumă +1
IF i = 5
EXIT
ENDIF
ENDFOR
Programul funcţionează astfel: se execută comanda sumă= sumă +1 de
cinci ori, pentru i = 1,2,3,4 şi 5. La i =5 este respectată condiţia IF şi deci va fi
153
executată comanda EXIT care determină saltul la ultima instrucţiune a
programului (care afişează rezultatul).
Un tip special de buclă, foarte asemănătoare cu FOR ...ENDFOR, dar
specializată în lucrul pe o bază de date, este reprezentată de comanda SCAN...
ENDSCAN, cu sintaxa de forma:
SCAN[NOOPTIMIZE]
[<domeniu> ][FOR<expL1>][WHILE<expL2>]
[<instrucţiuni>
[LOOP]
[EXIT]
ENDSCAN
Această comandă realizează parcurgerea bazei de date curente şi
executarea grupului de instrucţiuni <instrucţiuni>, pentru fiecare înregistrare care
aparţine domeniului specificat prin <domeniu>, FOR sau WHILE.
Clauzele LOOP şi EXIT au acelaşi efect în cazul comenzii FOR....
ENDFOR, iar clauza NOOPTIMIZE inhibă optimizarea RUSHMORE.
Exemplu:
SCAN
<instrucţiuni>
ENDSCAN
are acelaşi efect cu
FOR i = to RECCOUNT ()
GOTO i
<instrucţiuni>
ENDFOR
iar comanda
SCAN;
NEXT 10 FOR MOD(RECNO(),2) =0
<instrucţiuni>
ENDSCAN
va fi echivalentă cu
FOR i=RECNO() TO RECNO () + 9
IF MOD (RECNO(), 2) =0
<instrucţiuni>
ENDIF
154
ENDFOR
Expresia MOD (RECNO(),2)=0 are valoarea .T dacă înregistrarea curentă
are un număr par şi valoarea .F, în caz contrar.
Cel de-al doilea tip de buclă, cu un număr nedefinit de paşi, este
implementat în FoxPro prin comanda DO WHILW....ENDDO, având sintaxa:
DO WHILW <expL>
<instrucţiuni>
[LOOP]
[EXIT]
ENDDO
Această comandă determină execuţia repetată a grupului de instrucţiuni
<instrucţiuni>, atâta timp cât valoarea expresiei logice este .T.
Execuţia comenzii se va desfăşura astfel se evaluează expresia <expL> şi,
dacă aceasta are valoarea .F, execuţia comenzii se încheie. Dacă valoarea acesteia
este .T, se vor executa instrucţiunile din <instrucţiuni>. La întâlnirea lui ENDDO
se încheie, programul continuând cu prima instrucţiune de după ENDDO.
Comenzile LOOP şi EXIT au aceeaşi semnificaţie ca şi la comanda FOR,
prima determinând ignorarea restului de comenzi şi reevaluarea lui <expL>, iar
cea de-a doua determinând ieşirea forţată din buclă, indiferent de valoarea
expresiei logice <expL>.
155
RENAME <fişier1>TO<fişier2>
<fişier 1>reprezintă fişierul care se va redenumi, noul nume fiind <fişier2>.
Comanda TYPE, cu sintaxa:
TYPE <fişier1>
[AUTO]
[WRAP]
[TOPRINTER|TO FILE <fişier2>] [NUMBER]
afişează conţinutul fişierului <fişier1> pe ecran sau în fereastra activă şi la
imprimantă (dacă se specifică clauza TO PRINTER) sau într-un alt fişier <fişier2>
(desemnat de clauza TO FILE).
Clauza NUMBER determină plasarea numărului liniei la începutul fiecărei
linii a fişierului.
Clauza AUTO şi WRAP controlează modul de afişarea a textului din fişier,
AUTO referindu-se la alinierea liniilor, paragrafelor în formatul de afişare, iar
WRAP determinând afişarea pe rândul următor a unui cuvânt care nu mai încape
în rândul curent.
Modificarea conţinutului unui fişier se face prin intermediul comenzilor
MODIFY COMMAND sau MODIFY FILE care deschide ferestre de editare în
care încarcă fişierul de modificat (conţinutul acestuia).
MODIFY COMMAND <fişier> | MODIFY FILE [<fişier>]
[NOEDIT]
[NOWAIT]
[RANGE <expN1>,<expN2>]
[[WINDOW<nume fereastră> ]
[IN [WINDOW] <nume fereastră2> | SCREEN]]
[SAVE]
ERASE <fişieri>| ?
Fişierul modificat este <fişieri> la comanda MODIFY COMMAND acesta
având extensia implicită .PRG. Clauza NOEDIT se foloseşte pentru a împiedica
utilizatorul a modifica conţinutul fişierului, iar clauza NOWAIT determină
continuarea execuţiei programului după deschiderea ferestrei de editare, fără a mai
aştepta modificările utilizatorului.
RANGE permite editarea caracterelor dintre poziţiile <expN1> inclusiv şi
<expN2> exclusiv din cadrul fişierului respectiv. Clauza SAVE păstrează fereastra
de editare pe ecran şi după terminarea comenzii respective.
156
Ştergerea fişierelor se face prin două comenzi: DELETE FILE şi ERASE.
Ambele comenzi şterg fişierul <fişier> de pe disc, din directorul curent
sau din alt director, care se specifică împreună cu <fişier>.
Selectarea fişierului de şters se poate face într-o fereastră de dialog, dacă în
comandă se specifică ?
În funcţie de starea lui SET SAFETY ON|OFF vom fi (ON) sau nu (OFF)
avertizaţi înainte de ştergerea fişierului sau de o eventuală scriere peste conţinutul
unui fişier existent pe disc.
Afişarea unei liste dintr-un director de pe un anumit disc se poate face prin
comanda DIR sau DIRECTORY, cu sintaxa:
DIR | DIRECTORY [[ON]<disc:>]
[[LIKE][<cale>][<masca>]]
[TO PRINTER | TO FILE <fişier>]
Vor fi afişate fişierele de pe discul <disc:> din directorul dat de <cale>,
care se potrivesc cu <masca>. Afişarea se va face pe ecran imprimantă (TO
PRINTER) sau în fişierul <fişier> (TO FILE).
O comandă asemănătoare este DISPLAY FILES.
DISPLAY FILES
[ON <disc |director>]
[LIKE <masca>]
[TO PRINTER |TO FILE <fişier>]
clauzele şi utilizarea lor fiind aceleaşi cu cele ale comenzii anterioare.
Există, în FoxPro, posibilitatea ca, în paralel cu afişarea pe ecran a unor
informaţii, acestea să fie scrise şi într-un fişier. Această operaţie este controlată de
comanda SET ALTERNATE care are două forme:
SET ALTERNATE ON |OFF
SET ALTERNATE TO [<fişier> [ADDITIVE]].
Fişierul în care se va scrie este desemnat prin <fişier> în forma a doua a
comenzii. Această comandă va determina fie iniţializarea fişierului înainte de
scriere, când clauza ADDITIVE lipseşte, fie adăugarea la fişierul existent anterior,
în prezenţa acestei clauze.
Validarea ieşirii în fişierul ALTERNATE este dată prin comanda SET
ALTERNATE ON, iar oprirea ieşirii la acest fişier se realizează prin SET
ALTERNATE OFF.
157
Închiderea fişierului ALTERNATE se face prin comanda CLOSE
ALTERNATE, cu sintaxa simplă CLOSE ALTERNATE.
U10.16. Rezumat
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
158
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
159
UNITATEA 11
TURBO PASCAL
Cuprins: pag.
U11.1. Scopul şi obiectivele unităţii ........................................................... 159
U11.2. Noţiuni introductive ....................................................................... 159
U11.3. Elemente de bază ale limbajului Turbo Pascal ............................ 161
U11.4. Mediul de programare Turbo Pascal ............................................ 162
U11.5. Test de autoevaluare ....................................................................... 173
U11.6. Rezumat ........................................................................................... 173
Bibliografie minimală ................................................................................. 174
Răspunsuri şi comentarii la testul de autoevaluare ................................. 174
160
compilatoare, programe pentru realizarea aplicaţiilor specifice unui anumit
domeniu etc.).
Pentru scrierea unui program se utilizează un limbaj de programare, cu
sintaxă şi semantică riguros definite. În cazul de faţă programele sunt scrise în
limbajul Pascal.
Forma în care programatorul îşi scrie programul este numită program
sursă. Pentru a fi prelucrat de sistemul de calcul programul sursă trebuie
înregistrat într-un fişier sursă. Acesta este creat cu ajutorul unui program utilitar
numit editor de texte. Editorul permite atât dactilografierea şi modificarea textului
programelor sursă, cât şi salvarea acestora în fişiere pe suport magnetic (de obicei
disc fix sau disc flexibil).
Programul sursă nu poate fi ,,înţeles şi executat direct de către sistemul de
calcul, dar poate fi ,,tradus” într-o formă direct executabilă, numită program
executabil. Generarea programului executabil are sens numai dacă programul
sursă respectă sintaxa limbajului de programare în care este scris. Analiza
sintactică a programului sursă este realizată de către un program specializat, numit
compilator, specific limbajului în care este scris programul sursă şi sistemului de
calcul pe care va fi executat programul. Dacă programul sursă are erori sintactice,
compilatorul le semnalează prin mesaje care arată cauza probabilă a fiecărei erori.
Corectarea programului sursă se realizează cu ajutorul editorului de texte. După
corectare programul sursă trebuie compilat din nou. Acest proces se repetă până la
eliminarea tuturor erorilor sintactice. În cazul unui program sursă fără erori,
compilatorul generează fie programul executabil corespunzător, fie o formă
intermediară, pe care un alt program specializat o va transforma în program
executabil. În cele ce urmează vom considera numai cazul compilatoarelor care
generează programe direct executabile.
Corectitudinea sintactică nu dă certitudinea rezolvării corecte a problemei,
deoarece programul sursă poate să aibă erori de concepţie. Pentru a verifica dacă
programul executabil funcţionează corespunzător acesta trebuie testat pentru mai
multe seturi de date. Seturile de date trebuie alese astfel încât să se poată valida
rezultatele furnizate de program (prin confruntarea cu rezultatele aşteptate, care
trebuie să fie cunoscute apriori sau să fie uşor de determinat). De asemenea,
trebuie testate nu numai situaţiile tipice de utilizare a programului, ci şi cazurile
limită.
161
Dacă la execuţie apar erori sau se constată că rezultatele obţinute nu sunt
cele aşteptate, atunci trebuie determinată cauza erorilor şi efectuate corecţiile
necesare. După corectare programul sursă trebuie recompilat şi testat, până la
obţinerea unui program executabil care funcţionează conform aşteptărilor.
Pentru a reduce posibilitatea apariţiei erorilor de concepţie este important
să se formuleze cât mai clar enunţul problemei propuse spre rezolvare, cu
specificarea datelor iniţiale şi a rezultatelor dorite (inclusiv a formei de prezentare
a acestora). De asemenea, dacă problema propusă spre rezolvare este ceva mai
complicată, scrierea programului sursă trebuie precedată de elaborarea unei schiţe
a rezolvării problemei.
Programele folosite pentru obţinerea unui program executabil (cel puţin un
editor de texte şi un compilator specific limbajului de programare utilizat) pot fi
independente sau pot fi integrate într-un ansamblu de programe utilitare, numit
mediu de programare. De obicei un mediu de programare este destinat dezvoltării
programelor scrise într-un anumit limbaj de programare. De aceea se foloseşte şi
termenul de mediu integrat de dezvoltare a programelor (Integrated Development
Environment)].
Într-o sesiune de lucru (reprezentată de totalitatea prelucrărilor efectuate de
la începerea şi până la terminarea lucrului cu mediul de programare) pot fi
realizate mai multe programe. Acestea pot rezolva probleme complet diferite sau
pot reprezenta variante de rezolvare a aceleiaşi probleme.
162
utilizate limbaje de programare de nivel înalt. Este un limbaj structurat, neorientat,
fiind studiat ca prim limbaj de programare în toate universităţile din lume.
Majoritatea implementărilor PASCAL au la bază standardul ISO
(International Standards Organization) cunoscut sub numele de PASCAL
STANDARD, prezentând în general diferite extensii faţă de acesta. Printre cele
mai răspândite versiuni ale limbajului PASCAL se numără Microsoft PASCAL
(MS-PASCAL) versiune elaborată de firma americană BORLAND.
În cele ce urmează va fi prezentată implementarea TURBO PASCAL, care
prin cuplarea editorului de texte, compilatorului şi depanatorului într-un singur
sistem gestionat prin meniuri sugestive, reprezintă un mediu de programare
deosebit de performant cu multiple facilităţi în ceea ce priveşte crearea, depanarea
şi exploatarea programelor. În definiţiile sintactice se vor face referiri la PASCAL
STANDARD, care stă la baza tuturor versiunilor PASCAL, în particular vor fi
prezentate elemente din versiunea TURBO PASCAL 6.0 apărută în 1990, fără a
prezenta o descriere exhaustivă a ei, care ar depăşi cu mult volumul limitat al
acestui manual.
163
11.4.1. Începerea sesiunii de lucru Turbo Pascal
164
11.4.2. Principalele elemente ale ferestrei de editare
165
Pentru a termina o linie şi a trece la linia următoare se apasă tasta ENTER.
Editorul Turbo Pascal indentează automat liniile introduse, plasând cursorul sub
primul caracter diferit de blanc din linia terminată (spre deosebire de alte
editoare, care îl plasează la marginea din stânga a ecranului). Indentarea textului
unui program este foarte importantă, deoarece uşurează urmărirea structurii sale
şi, deci, corectarea sau modificarea ulterioară.
Să considerăm următorul program sursă:
program test;
begin
writeln (“salut prieteni!”)
end.
La introducerea primelor două linii nu apar probleme deosebite. Deoarece
a treia linie începe cu 3 spaţii, trebuie apăsată de trei ori tasta BLANC (tasta cea
mai lungă de pe tastatură), continuând apoi cu introducerea textului propriu-zis.
După apăsarea tastei ENTER cursorul se poziţionează sub caracterul w. Pentru
poziţionarea la capătul din stânga al liniei trebuie apăsată tasta HOME. Aceasta
face parte din grupul tastelor care comandă deplasarea rapidă în cadrul textului
editat, după cum urmează:
CTRL+A - salt la începutul cuvântului anterior;
CTRL+F- salt la începutul cuvântului următor;
CTRL+ Q,E- salt la prima linie de pe ecran;
CTRL+Q,X- salt la ultima linie de pe ecran;
HOME - salt la începutul liniei curente;
END - salt la sfârşitul liniei curente;
PAGE UP- salt la pagina următoare;
PAGE DOWN -salt la pagina următoare.
Deplasările pas cu pas se realizează apăsând tastele direcţionale, marcate
cu săgeţi.
Pe parcursul editării programului sursă este posibil să se greşească şi să fie
necesară ştergerea unuia sau a mai multor caractere. În acest scop pot fi utilizate
următoarele comenzi:
DELETE- şterge caracterul pe care este poziţionat cursorul;
BACKSP - această tastă, situată de obicei deasupra tastei ENTER şi
marcată cu o săgeată orientată spre stânga, se utilizează în mod obişnuit pentru
ştergerea caracterului din stânga cursorului; efectul este diferit dacă la stânga
166
cursorului există numai blancuri, caz în care ştergerea se efectuează până la
nivelul de indentare anterior;
CTRL+T - şterge un cuvânt sau finalul acestuia, începând de la caracterul
pe care este poziţionat cursorul;
CTRL+Q,Y- şterge toate caracterele de la dreapta cursorului;
CTRL+Y - şterge linia pe care este poziţionat cursorul.
De exemplu, pentru a înlocui cuvântul salut cu SALUT, se poate proceda
astfel:
• se poziţionează cursorul la începutul cuvântului;
• se şterge cuvântul utilizând CTRL+T;
• se introduce noua formă a cuvântului.
Modul obişnuit de lucru al editorului de programe este modul ,,inserare”.
Aceasta înseamnă că în cazurile în care cursorul se află în interiorul unei linii,
apăsarea unei taste determină inserarea caracterului corespunzător (caracterele de
la dreapta cursorului deplasându-se corespunzător).
Modul de lucru al editorului poate fi comutat de la ,,inserare” la
,,substituţie”, apăsând tasta INSERT. În modul ,,substituţie”, la apăsarea unei
taste, caracterul indicat de cursor este înlocuit de cel introdus. Schimbarea
modului de lucru al editorului este semnalată prin schimbarea formei cursorului.
De exemplu, o altă variantă pentru a înlocui cuvântul salut prin SALUT
este următoarea:
• se poziţionează cursorul la începutul cuvântului;
• se apasă tasta INSERT, trecând astfel în modul ,,substituţie”;
• se introduce cuvântul SALUT, caracterele introduse înlocuindu-le pe cele
existente anterior;
• se apasă din nou tasta INSERT, pentru a reveni la modul „inserare”.
167
în care a fost detectată eroarea şi se afişează un mesaj referitor la cauza probabilă
a erorii.
În cazul programelor de dimensiuni mai mari se pot face compilări chiar
înainte de editarea completă a textului programului sursă, pentru a verifica dacă
porţiunea introdusă a fost corect dactilografiată.
168
În cazul exemplului considerat, o singură execuţie a programului este
suficientă pentru a constata dacă acesta funcţionează corect. De cele mai multe ori
sunt însă necesare mai multe execuţii succesive, pentru diferite seturi de date. În
procesul de testare a programului este posibil să fie detectate erori. În cazul unei
erori detectate de mediul de programare, execuţia se termină cu afişarea unui
mesaj de eroare corespunzător. Alte erori sunt cele observate de utilizator, atunci
când compară rezultatele afişate de program cu cele pe care le aştepta.
Corectarea erorilor impune modificări ale textului programului sursă,
urmate de compilare şi execuţie.
169
• prin introducerea numelui fişierului;
• apăsând mai întâi tasta TAB, după care banda luminoasă de selecţie
trebuie poziţionată, folosind tastele direcţionale, pe numele fişierului dorit.
Selecţia devine efectivă în momentul apăsării tastei ENTER, moment în
care se deschide o fereastră de editare în care apare conţinutul fişierului selectat.
170
- ALT+H sau F10,H -determină afişarea meniului Help, din care pot fi
selectate diferite ecrane de informare;
- F1 - are ca efect afişarea ecranului corespunzător contextului curent;
- CTRL+F1 - se utilizează în cazul în care pe parcursul editării este
necesară obţinerea de informaţii ajutătoare cu privire la un element al limbajului.
În astfel de cazuri este suficient să se deplaseze cursorul până la elementul
respectiv (de exemplu un cuvânt cheie sau un operator) şi să se dea comanda
CTRL+F1;
- SHIFT+Fl - determină afişarea ecranului de informare Index;
- ALT+F1 - în urma acestei comenzi se revine la fereastra de informare
activată anterior, sau se afişează o primă fereastră.
Sesiunea de informare se încheie la apăsarea tastei ESC.
171
a) literele alfabetului latin: a, b, c, …, z.
A, B, C, …, Z.
b) cifrele arabe: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
c) caractere speciale: +,-,/,*, ^, < >; ( ), [ ], { }, ., :, ;, ’, #, $, @, .. =; la
care se adaugă simbolurile formate din două caractere:
- operatorul de atribuire: =
- operatorii relaţionali <=, >=, = şi < > (diferit)
- delimitatorii de comentarii (* *) echivalenţi cu { }.
Cuvintele rezervate
Sunt cuvinte cu semnificaţie prestabilită de compilator şi nu pot fi folosite
de utilizator într-un alt context decât cel specificat în definirea limbajului
PASCAL. În particular cuvintele rezervate nu pot fi folosite ca identificatori. În
TURBO PASCAL 6.0. există următoarele cuvinte rezervate:
ABSOLUTE EXTERNAL MOD SHR
AND FILE NIL STRING
ARRY FOR NOT THEN
BEGIN FORWARD OBJECT TO
CASE FUNCTION OF TYPE
CONST GOTO OR UNIT
CONSTRUCTOR IF PACKED UNTIL
DESTRUCTOR IMPLEMENTATION PROCEDURE USES
DIV IN PROGRAM VAR
DO INLINE RECORD VIRTUAL
DOWNTO INTERFACE REPEAT WHILE
ELSE INTERRUPT SET WITH
END LABEL SHL XOR
Identificatorii
Sunt nume care desemnează constante, variabile, proceduri, funcţii şi alte
elemente ale unui program PASCAL. Un identificator este o combinaţie de
caractere alfanumerice (litere şi cifre), primul caracter fiind obligatoriu alfabetic.
Singurul caracter special permis la constituirea identificatorilor este liniuţa
de subliniere „__” (underscore). Compilatorul TURBO PASCAL nu face distincţie
între majuscule şi minuscule. Pot fi definiţi identificatori din mai multe cuvinte
legate prin liniuţa de subliniere (__). Exemplu: Matrice __ de __ numere.
172
În principiu, lungimea identificatorilor nu este limitată dar compilatorul
TURBO PASCAL 6.0 ia în consideraţie numai primele 63 de caractere.
Exemple de identificatori ilegali: 2XY, Var, nivel. 4x-y. (2XY începe cu
cifră, VAR este cuvânt rezervat iar ultimul identificator conţine caractere
nepermise în identificatori: punct, minus).
Anumiţi identificatori, numiţi identificatori standard sunt predefiniţi şi se
recomandă folosirea lor sub forma stabilită: sin, cos, arctan, ln, exp, ord, pred,
sqrt, sqr, aud, not, or etc. Se recomandă deci utilizarea identificatorilor standard
drept cuvinte rezervate.
Identificatorii definiţi de utilizator pentru constante, tipuri de date,
variabile, funcţii, proceduri, se numesc identificatori utilizator. Se utilizează
denumiri sugestive care să faciliteze urmărirea programului, dar nu se recomandă
folosirea de identificatori foarte lungi care sunt greu de manevrat în expresii.
Numere
Se reprezintă în notaţia zecimală (baza 10). Un număr întreg se reprezintă
ca un şir de cifre precedat sau nu de un semn (+, -).
Numerele reale se reprezintă în două moduri:
a) fără exponent, caz în care numărul se reprezintă prin parte întreagă,
punct zecimal, parte fracţionară: parte întreagă poate fi precedată de un semn.
Exemple: 1.59 +92.51 477.89911 -0.225
b) (cu exponent sau factor de scară), caz în care numărul se reprezintă prin:
parte întreagă cu sau fără semn, punct zecimal, partea fracţionară, litera E şi un
întreg cu semn de două cifre, aceasta din urmă reprezentând exponentul lui 10.
Exemple:
0.15E + 03 = 0.15 x 1000 = 150
8.007E - 02 = 8.007 x 0.01 = 0.08007
dacă un număr conţine punct zecimal, aceasta din urmă trebuie precedat şi urmat
de cel puţin o cifră. În interiorul unui număr nu poate apare virgula (,).
Şiruri de caractere
Un şir de caractere este o succesiune de caractere încadrate între semnele
apostrof.
Un şir de caractere trebuie să apară pe o singură linie a textului
programului. Spre deosebire de cuvintele rezervate şi de identificatori, în
interiorul şirurilor de caractere se face deosebire între literele majuscule şi
minuscule.
173
Comentarii
Pentru creşterea clarităţii programelor este recomandabil ca în textul lor să
fie incluse anumite explicaţii sau comentarii. În PASCAL un comentariu este o
succesiune de caractere incluse între delimitatorii {şi} sau (* şi *). Exemplu:
{Programul calculează dobânzile în procente}
La compilare, comentariile nu sunt luate în consideraţie, şi nu modifică
efectul programului. Comentariile pot fi inserate oriunde în textul programului.
Delimitatori şi separatori
Delimitatorii sunt semne de punctuaţie sau operatori. De asemenea
cuvintele rezervate pot fi incluse în categoria delimitatorilor. Ei se utilizează
pentru a delimita spaţiul ocupat de unităţile lexicale:
+ - / . : ; = > < < => = < >,: ( ) ‘ [] {} ^.
Separatorii în PASCAL sunt: spaţiul (blank), sfârşitul de linie şi
comentariul. Între două cuvinte rezervate, identificatorii sau numere trebuie
intercalat cel puţin un separator însă nu este permisă intercalarea de separatori în
interiorul cuvintelor rezervate, identificatorilor, numerelor şi simbolurilor
speciale. În rest poate să apară un număr arbitrar de separatori între oricare două
simboluri consecutive.
Pentru separarea instrucţiunilor se utilizează “ ; ”
U11.6. Rezumat
174
compilatoare, programe pentru realizarea aplicaţiilor specifice unui anumit
domeniu etc.).
Bibliografie minimală
1. Tamaş şi alţii – Bazele tehnologiei informaţiei şi comunicaţiilor, Editura
InfoMega, Bucureşti, 2004;
2. Airinei, D., Depozite de date, Editura Polirom, Iaşi, 2002
3. Dospinescu, O., Dezvoltarea aplicaţiilor în Visual Basic.NET, Editura
Polirom, Iaşi, 2004;
4. Date, C.J., Baze de date, Ediţia a opta, Pearson Addison Wesley, Editura
Plus, Bucureşti, 2004.
5. Kris Jamsa, Visual Basic. Net: Sfaturi şi tehnici, Ed. All, Bucureşti, 2003;
6. John Conell, Microsoft Visual Basic.Net. Ed. Teora, Bucureşti, 2003;
7. Davidescu, D.N., Proiectarea sistemelor informatice prin limbajul Unified
Modeling Language (PSI 2), Editura All Beck, Bucureşti, 2003.
175