Sunteți pe pagina 1din 98

LIMBAJE DE PROGRAMARE

Capitolul 1

MODELE, METODE I TEHNICI FOLOSITE N ELABORAREA PROGRAMELOR


1. Definirea i clasificarea limbajelor de programare
Limba (DEX) sistem de comunicare alctuit din sunete articulate, specifice omului, prin care acesta i exprim gndurile sau dorinele. Noiunea de limbaj: este definit ca un sistem pentru comunicare. Limbajele scrise folosesc simboluri (care sunt caractere) pentru a construi cuvinte. ntreg setul de cuvinte formeaz vocabularul limbajului. Modul n care cuvintele pot fi combinate pentru a fi nelese este definit de sintaxa i gramatica limbajului. Sensul dat de cuvinte sau combinaii de cuvinte este definit de semantica limbajului. n domeniul computerelor, limbajele umane sunt denumite limbaje naturale. Din nefericire computerele nu sunt de ajuns de sofisticate pentru a nelege limbajele naturale. Prin urmare comunicarea cu computerele se face prin intermediul unor limbaje specifice computerelor denumite limbaje de programare. Limbajele de programare sunt sisteme convenionale (limbaje artificiale) create de om i care servesc la exprimarea sub form de aciuni executabile mijlocit sau nemijlocit de ctre sistemul de calcul a algoritmului sau logicii de rezolvare a unei probleme. Noiunea de limbaj de programare: este definit ca fiind ansamblul format de un vocabular i un set de reguli gramaticale, necesar instruirii unui computer pentru a realiza anumite activiti. Altfel spus limbajul de programare este o notaie sistematic prin care se descrie un proces de calcul. Orice limbaj (natural sau artificial) presupune definirea sintaxei, semanticii i pragmaticii lui. Sintaxa este un set de reguli ce guverneaz alctuirea propoziiilor dintr-un limbaj. n cazul limbajelor de programare echivalentul propoziiei este programul. Semantica este un set de reguli ce determin nelesul sau semnificaia propoziiilor ntr-un limbaj. Pragmatica indic utilitatea practic a limbajului )uurina utilizrii, independena de sistemul de calcul etc.) Dup modul cum au evoluat n timp limbajele de programare pot fi: limbaje de prima generaie: limbajul main (machine language); limbaje de generaia a doua: limbajul de asamblare (assembly language); limbaje de generaia a treia: limbajele de nalt nivel (high-level programming languages); limbaje de generaia a 4-a : limbaje mai apropiate de limbajul uman dect limbajele de nalt nivel;

limbaje de generaia a 5-a ndreptate spre exploatarea bazelor de cunotine , crearea sistemelor expert i spre rezolvarea problemelor legate de inteligena artificial.

Limbajul main
Reprezint nivelul cel mai elementar al limbajelor de programare. Cnd un computer urmeaz instruciunile unui program se spune c programul este n execuie (running). nainte de a fi executat programul trebuie s fir rezident n memorie.. Adic programul trebuie s ocupe un set de bytes consecutivi n memorie. Totodat programul trebuie scris ntr-un limbaj main intern. Fiecare tip de procesor are propriul limbaj main. Acesta este conceptul de baz cu privire la modul de execuie a unui program. Faptul c programul ce se execut este stocat (chiar i parial) n memoria principal (RAM) duce la concluzia c numai prin schimbarea programului din memoria RAM computerul poate trece la execuia altui proces (task)/program. Aa cum s-a prezentat mai sus toate computerele au un limbaj main intern (specific tipului de procesor). Acest limbaj este codat ntr-o reprezentare binar i este foarte greoi (plictisitor) de utilizat pentru scrierea unui program. Majoritatea instruciunilor programului vor conine astfel dou pri: o parte care se refer la operaia de codare se vor indica ordinea operaiilor; o parte care se refer la adresa din meorie - indic locaia de memorie ce se va utiliza ca operand al instruciunii. operation address meaning code 00010101 10100001 load c(129) into accumulator 00010111 10100010 add c(130) to accumulator 00010110 10100011 store c(accumulator) in location 131 Astfel programatorii care utilizeaz limbajul main vor trebuie s fie ateni n ce zone de memorie se vor stoca date i n ce zone de memorie se vor executa programele (instruciunile). Astfel pot aprea erori de programare datorate suprapunerii scrierii instruciunilor peste date. Prin urmare programarea n limbaj main presupune o bun capacitate de a interpreta datele i instruciunile la nivel de bit. Totodat aceasta reprezint si posibilitatea de a se genera alte programe i de a le executa. Concluzii: este limbajul pe care computerul l nelege n mod direct; n limbajul main programele se scriu n cod binar: succesiuni de 0 i 1; fiecare instruciune din limbajul main este o combinaie de 4 bits (LOAD-0000; ADD-0001); programatorul trebuie s cunoasc detaliat structura hardware a computerului; programatorul trebuie s gestioneze fr greeal alocarea adreselor de memorie pentru un program; 3

pot aprea multe erori datorit: concepiei programului, sintaxei, suprapunerii adreselor de memorie, etc.

Limbajul de asamblare
Permite folosirea codurilor simbolice pentru adrese, date i operaii. Atenia necesar evitrii ocuprii acelorai adrese de memorie este foarte solicitant (greoaie) n programarea n limbaj main. Astfel dac programatorul modific un program i decide s mai introduc ceva atunci toate celelalte adrese de memorie utilizate pn atunci se vor schimba i trebuie s examineze ntregul program din nou i s decid iari cu privire la modul cum va aloca memoria datelor i instruciunilor. Astfel au aprut ncepnd cu 1950 limbajele de asamblare care sunt forme mai prietenoase ale limbajului main. Astfel comenzile limbajului main au fot nlocuite de comenzi mnemonice (gestioneaz memoria!!! nu e foarte ortodox). Astfel limbajul de asamblare are grij s converteasc comenzile mnemonice n comenzile corespunztoare limbajului main. Programatorul poate folosi adrese simbolice pentru reprezentarea datelor. Acest limbaj va atribui adresele n limbaj main i va verifica dac datele distincte nu se suprapun la stocare. Astfel scurtul program de mai sus se poate scrie n limbaj de asamblare astfel: Operation address code LOAD A ADD B STORE C Evident acest limbaj evit o multitudine de erori de alocare a memoriei. Limbajul de asamblare presupune existena unui program numit assembler (asamblor) care s traduc programele n limbaj main. Asamblorul nlocuiete codarea mnemonica (cum ar fi ADD) cu coduri binare corespunztoare limbajului main i aloc adrese de memorie pentru toate variabilele simbolice utilizate (A, B, C ) i se asigur c aceste adrese sunt distincte. Astfel prin uurarea procesului de programare s-a introdus un nou nivel de procesare pentru computer. Astzi limbajele de asamblare sunt nc utilizate pentru unele programe critice deoarece aceste limbaje confer programatorului un control foarte precis a ceea ce se ntmpl n computer. Limbajele de programare nc necesit ca programatorul s aib foarte bune cunotine cu privire la structura intern a computerului. Limbajele de asamblare sunt i ele specifice computerului pe care ruleaz astfel c programatorul trebuie sa-i rescrie programul pentru un alt tip de computer. Concluzii: programele se scriu n mod text pentru ca apoi sa fie traduse intr-o form binar corespunztoare limbajului main; limbajul de asamblare este tradus n limbaj main de ctre assembler; operaia se numete asamblare; 4

limbajele de asamblare nc solicit programatorului cunoaterea de multe detalii hardware; sunt specifice anumitor tipuri de computere; limbajul de asamblare mpreun cu limbajul main formeaz categoria limbajelor de nivel sczut (lowlevel languages).

Limbajele evoluate (High level Languages)


Evident c de la apariia computerului tot s-a pus problema de a se obine un proces de programare ct mai uor. Aceasta ar presupune ca activitatea de programare sa se poat face cu un bagaj de cunotine cu privire la funcionarea intern a computerului ct mai mic. Dup cum s-a vzut anterior limbajul main i limbajul de asamblare presupune o bun cunoaterea funcionrii interne a computerului. O alt direcie pentru uurarea programrii ar fi aceea ca programele s fie prezentate ntr-o limb ct mai familiar persoanei care dorete s programeze (s rezolve o anumit problem). Astfel au aprut programarea de nalt nivel care permite formularea soluiilor problemei de rezolvat n termeni mai apropiai de cei folosii de oameni. Aceste limbaje au fost concepute pentru a permite programrii s fie mult mai uoar i cu mai puine erori iar programatorul nu trebuie s cunoasc detalii cu privire la structura intern a unui anumit tip de computer. Aceste limbaje sunt mult mai apropiate de limbajul uman. Primul limbaj evoluat a fost FORTRAN II aprut n 1958. Programul prezentat mai sus se poate scrie n acest limbaj astfel: C=A+B Se observ c spre deosebire de limbajul main i limbajul de asamblare expresia de mai sus este mul mai uor de neles, mai rapid de scris i evit multe erori de scriere. Pentru a putea fi executate, ca i n cazul limbajului de asamblare, computerul nu nelege n mod direct aceste limbaje evolute i de aceea ele trebuie procesate printr-un program specializat care traduce limbajele evolute n limbajul main intern al computerului respectiv. Instruciunile n limbajele evoluate se numesc enunuri i se aseamn mult cu limbajul uman sau cu conveniile de scriere n matematic. Dup modul cum se face aceast transpunere a programelor evoluate exist dou tipuri de astfel de programe specializate: interpretor: traduce succesiv instruciunile de nalt nivel ntr-o form intermediar care este apoi executat. compiler (compilator): traduce instruciunile de nalt nivel direct n limbaj main. Avantajul interpretorului este c poate execut un program imediat. Compilatorul necesit mai mult timp. Programele produse de compilator ruleaz mul mai rapid dect cele produse de interpretor.

Majoritatea programelor evolute au la dispoziie att compilator ct i interpretor. De obicei interpretorul se folosete n timpul realizrii unui program pentru testarea unor mici seciuni ale programului. Unele limbaje evoluate sunt concepute s lucreze numai cu interpretor (BASIC, LISP). Un alt mare avantaj al limbajelor evoluate este acela c dac limbajele sunt standardizate atunci fiecare productor de computere (procesoare) va putea s realizeze compilatorul care s respecte standardele i s traduc programele n limbajul main specific productorului. Astfel devine posibil ca un program, respectndu-se aceste standarde, s poat fi compilat pe diverse computere i apoi executat. Prin scrierea unui program ntr-un limbaj evoluat se face o economie imens de timp. Astfel programatorul pierde mai puin timp pentru scrierea ntr-un limbaj mult mai apropiat de cel uman dect dac acelai program ar fi scris n limbaj main. Timpul de compilare al programului este de ordinul secundelor.

Generatia a 4-a cuprinde limbajele orientate ctre utilizatorii finali. Folosind


aceste limbaje, utilizatorii neinformaticieni pot s-i rezolve singuri propriile probleme, dialognd cu calculatorul. Se elimin etapa de programare i se asigur o implicare i un interes mai mare din partea utilizatorului. Majoritatea specialitilor grupeaz limbajele din generaia a 4-a n urmtoarele produse: limbaje de interogare (SQL) generatoare de rapoarte (Easytrieve Plus, Datatrieve, Mark V. etc) generatoare de aplicaii i/sau proiecte (FOCUS, Mantis, Natural, NOMAD2, IDEAL MAPPER, pachete de aplicaii DeskTop Publishing) generatoare de grafice (independente Tell-al graph, SAS, ADRS/B6 ncorporate n spreadsheet-uri LOTUS, EXCEL, QUATTRO, ncorporate n SGBD - FoxGraph); instrumente de sprijinire a deciziilor ( programe de calcul tabelar-Quattro, Lotus, Excel sau pachete program statistice SPSS, SAS etc)

Generatia a 5-a cuprinde limbajele care sunt sau vor fi ndreptate spre exploatarea
bazelor de cunotine, crearea sistemelor expert i mai general spre rezolvarea problemelor legate de inteligen artificial. Un rol deosebit revine limbajelor pentru programarea orientat pe obiecte (Samlltalk, C++, MANDALA, LISP, PROLOG). Folosind alt criteriu de clasificare modalitatea de descriere a problemei de rezolvat, limbajele de programare pot fi grupate n: Limbaje procedurale Limbaje neprocedurale Limbajele procedurale descriu pas cu pas algoritmii de rezolvare a unei probleme. n aceast categorie se nscriu limbaje de nivel nalt ca BASIC, COBOL, FORTRAN, PASCLA, etc. Limbajele neproce4durale sunt limbaje de nivel foarte nalt care definesc scopul urmrit fr a da detalii asupra modului de rezolvare a acestuia. Din aceast categorie fac parte Smalltalk, Prolog etc. J.E. Sammet mparte limbajele n: Limbaje procedurale (LP), de nivel nalt, numite i limbaje algoritimice folosite pentru descrierea algoritmic printr-un set ordonat de instruciuni;

Limbaje neprocedurale (LNP), de nivel foarte nalt, n care succesiunea instruciunilor din program nu influeneaz dect n foarte mic msur succesiunea execuiei; Limbaje specializate orientate pe problem/aplicaie, limbaje cu caracter neprocedural, bazate pe o mulime de funcii ce pot fi referite explicit; Limbaje conversaionale, care asigur dialogul utilizator-sistem pe parcursul execuiei unui program.

2. Metode i tehnici de programare


2.1. Programe i produse program definire i clasificare Programul reprezint totalitatea instruciunilor i/sau comenzilor pregtite i ordonate n prealabil conform unei logici prestabilite, stocate n memoria calculatorului i utilizate pentru rezolvarea unei anumite probleme. Ansamblul activitilor de concepere, dezvoltare i ntreinere a programelor se numete programare. Conceptul de program sau produs program desemneaz att programul propriu-zis ct i operaiile manuale i documentaia necesare pentru dezvoltarea, utilizarea i ntreinerea lui. Programele pot fi grupate n: Programe de baz ce servesc ca interfa logic ntre resursele sistemului informatic i programele de aplicaii; Programele aplicative ce se compun din programe care coordoneaz calculatorul n execuia/realizarea sarcinilor precise de prelucrare a datelor conform cerinelor utilizatorului final. Pe piaa programelor informatice sunt profilate dou tendine: Cumprarea de ctre utilizatorii finali, direct de la furnizori, a programelor la cheie, ce folosesc limbaje conversaionale i naturale i care pot fi folosite pe o gam larg de calculatoare; Abandonarea, n activitatea de programare, a limbajelor tehnice i a limbajelor procedurale, n favoarea limbajelor neprocedurale i a celor naturale, care se apropie de limbajul uman. Exist mai multe metode de elaborare a produselor program. Caracteristicile principale ale acestor metode se regsesc n metodele i tehnicile utilizate i n prezent.

2.2. Metoda programrii clasice


Prin programarea clasic se face referire la primii ani de dezvoltare a programelor, respectiv nceputul anilor 50, perioad n care existau puine reguli, majoritatea viznd scrierea programelor. De aceea, programarea clasic este impropriu numit metod, ns se face delimitarea de evoluiile ulterioare din domeniul programrii calculatoarelor. Programarea clasic presupune conceperea monolitic a programului prin parcurgerea unor etape1:
1

Grama, A., Filip, M., Medii de programare in economie, Editura Sedcom Libris, Iai, 2000

analiza problemei n vederea stabilirii exacte a cerinelor informaionale ale utilizatorilor; elaborarea schemei logice a programului; scrierea programului surs; compilarea i ansamblarea programului; testarea i corectarea programului; exploatarea programului. Dezvoltarea programelor n aceast perioad prezenta o serie de neajunsuri dintre care mai importante erau: elaborarea intuitiv sau artizanal a algoritmilor de rezolvare a problemei; existena numeroaselor operaii de salt (instruciuni GOTO) ce conduc la un timp mare de execuie a programului i fac dificil nelegerea programului i modificarea acestuia, chiar dac acesta dispune de documentaie; imposibilitatea desfurrii activitii de programare n echip; ineficiena i slaba productivitate a activitii de programare, mai ales n cazul programelor mai mari etc. Acestea sunt doar cteva din motivele care au determinat progrmatorii s identifice i s formuleze reguli care s-i ghideze n activitatea lor i care au condus la apariia unor metode de programare.

2.3. Metoda programrii modulare


Programarea modular poate fi considerat prima metod de programare propriu-zis. Premisele apariiei ei au fost create odat cu apariia limbajului FORTRAN, care oferea posibilitatea utilizrii subprogramelor i compilrii lor separate. Compilarea separat a dus la apariia bibliotecilor de subprograme. Programarea modular este o metod de concepere a programelor care presupune descompunerea problemei de rezolvat n mai multe subprobleme mai simple, conform preceptelor gndirii carteziene: orice problem, orict de complex ar fi, poate fi descompus n subprobleme rezolvabile mai uor dect problema iniial. n acest mod, programatorii se pot concentra numai asupra unei subprobleme, considernd-o ca o problem de sine stttoare, dar care este mai simpl i mai uor de rezolvat. Trebuie remarcat deja interesul pentru instituirea de reguli n conceperea programelor i nu doar pentru scrierea programelor, precum i considerarea lor ca activiti independente; proiectarea modulelor programului se face independent de limbajul de programare ales, doar la scrierea programelor inndu-se cont de specificul fiecrui limbaj. Fiecrei subprobleme i va corespunde, n principiu, un modul de program, iar produsul-program va fi constituit prin integrarea modulelor componente, dezvoltate separat. De aici deriv i numele metodei programarea modular. Modulul este considerat o unitate structural de sine stttoare, fie program, fie subprogram, fie o unitate de program2. Un modul poate fi format, la rndul su, din mai multe module. Modulele sunt relativ independente, ceea ce nseamn c modificarea unui modul nu implic neaprat modificarea celorlalte module. Astfel, n cazul modificrii structurii unui program, dac funcia pe care o realizeaz un modul nu este afectat, atunci acel modul va fi utilizat n continuare fr modificri. n fapt, obiectivul principal urmrit la proiectarea modulelor const n identificarea unor module ct mai generale i mai independente ntre ele, care s permit reutilizarea lor n cazul modificrii programelor. De asemenea, modulele pot comunica ntre ele prin transmiterea de date.
2

Freniu, M., Prv, B., Elaborarea programelor. Metode i tehnici moderne, Editura Promedia, 1994

Fiecare modul are rolul su bine precizat i realizeaz o funcie n cadrul ntregului program, n conformitate cu rezultatele descompunerii funcionale a problemei de rezolvat, realizat prin aplicarea strategiei descendente (top-down). De fapt, din abordarea modular s-a desprins coala descompunerii funcionale 3. Metoda presupune identificarea funciilor pe care le va realiza programul n vederea rezolvrii problemei, asocierea unui modul pentru una sau mai multe din funciile identificate, stabilirea legturilor dintre module, obinndu-se astfel structura programului. Dup ce structura programului este clar definit, se trece la transpunerea modulelor n construcii sintactice specifice limbajului de programare ales (scrierea programelor-surs), compilarea acestora i realizarea celorlalte faze necesare obinerii programelor executabile. Avantajele programrii modulare sunt multiple, printre cele mai importante se numr: creterea calitii programelor obinute; ele conin mai puine erori, sunt mai uor de neles i de modificat. Sporirea productivitii i eficienei n activitatea de programare, prin facilitarea lucrului n echip i utilizarea bibliotecilor de subprograme. Uurarea testrii programului prin efectuarea unei testri la nivelul modulelor. Obinerea unor produse-program extensibile, ceea ce permite adugarea unor noi module n programul existent dac ulterior se dorete realizarea unei noi funcii.

2.4. Metoda programrii structurate


Metoda programrii structurate reprezint o dezvoltare a metodei programrii modulare prin introducerea unor noi principii, instrumente i tehnici, cu scopul unei mai bune stpniri a complexitii programelor mari. Complexitatea programului privete dificultatea elaborrii produselor-program odat cu creterea dimensiunii acestora. Complexitatea programelor crete exponenial i nu liniar cu dimensiunea sa. De aceea, obiectivul principal al programrii structurate a fost acela de a introduce ordine i rigoare n elaborarea de produse-program, ca o cale de stpnire a complexitii. Fr a intra n detalii, s spunem c pn n prezent metoda programrii structurate a reuit s realizeze doar parial obiectivul propus. Principiile programrii structurate au fost introduse de Bohm i Jacopini n 1966, atunci cnd ei au demonstrat c pentru a exprima logica intern a oricrui program sunt suficiente trei tipuri de structuri de control: structura secvenial, structura alternativ i structura repetitiv, iar fiecare din aceste structuri, ca parte dintr-un program, are o singur intrare i o singur ieire. Prin umare, programarea structurat ar putea fi definit ca programarea fr instruciunea GOTO. Programarea structurat a fost consacrat la nceputul anilor 70 prin contribuiile a numeroi autori: Dijkstra, Hoare, Mills, Baker, Wirth, Dahl, Warnier etc. n aceast perioad, aplicarea tehnicilor structurate era limitat la activitatea de scriere a programelor, urmrindu-se oferirea unor soluii la urmtoarele probleme: Cum ar trebui s arate un program? Care este legtura dintre structura static i structura dinamic a unui program? Cum poate fi controlat complexitatea unui program atunci cnd mrimea lui crete?
3

Oprea, D., Analiza i proiectarea sistemelor informaionale economice, Editura Polirom, Iai, 1999

Un alt obiectiv urmrit n programarea structurat privete modul de scriere a unui program astfel nct el s fie uor de neles i modificat. Claritatea unui program poate fi obinut, n afara utilizrii celor trei structuri de control fundamentale, prin respectarea urmtoarelor dou reguli: scrierea indentat a textului programului i inserarea de comentarii n textul programului. Metoda programrii structurate a evoluat continuu, n sensul introducerii disciplinei nu doar n scrierea programelor, ci i n celelalte faze ale elaborrii programelor: analiza, proiectarea, testarea etc. Astfel, programarea structurat poate fi definit ntr-un sens restrns i unul larg4. n sens restrns, programarea structurat face referire la activitatea de codificare (scriere a programelor) i reprezint o metod de construire a programelor n conformitate cu un set de reguli care solicit utilizarea unui format strict, a structurilor de control standard i a unui set de construcii logice. n sens larg, programarea structurat reprezint o metodologie care impune disciplin asupra formei programelor, n analiza, proiectarea, scrierea i testarea programelor; ea este o metodologie de programare pentru construirea de programe modulare, ordonate ierarhic, prin utilizarea structurilor de control standard. Astzi, prin programare structurat se face referire la sensul su larg, motiv pentru care se vorbete de filozofia structurat. n concluzie, meritul principal al tehnicilor structurate este acela de a fi preluat toate practicile i experienele acumulate n programare i de a le fi formalizat i standardizat. Programarea structurat preia principiile programrii modulare pe care le dezvolt, dar se deosebete de aceasta cel puin prin dou aspecte: modularizarea ierarhic a programelor i utilizarea structurilor de control fundamentale. Avantajele oferite de metoda programrii structurate sunt numeroase, reinnd n continuare doar cteva dintre acestea: creterea calitii programelor; sporirea flexibilitii programelor, ceea ce uureaz ntreinerea lor; organizarea raional a ntregului proces de dezvoltare a programelor; creterea productivitii n dezvoltarea programelor de aplicaie prin specializarea activitilor.

2.5. Metoda programrii orientat-obiect


Programarea orientat-obiect pune n centrul ateniei noiunea de obiect, considerat drept o entitate care se poate distinge de alte entiti i care are o semnificaie n contextul aplicaiei modelate. Obiectul asociaz datele i prelucrrile n cadrul aceleiai entiti, rmnnd vizibil doar interfaa obiectului. Obiectele cu proprieti similare, comportament similar i relaii similare fa de alte obiecte constituie o clas de obiecte. Un obiect comport un aspect static, reprezentat prin intermediul unor variabile de stare numite atribute i un aspect dinamic, reprezentat de comportamentul obiectului i implementat prin intermediul metodelor asociate obiectului respectiv. Aspectul static este ascuns de aspectul dinamic. n acest fel, abordarea orientatobiect se distinge de abordarea structurat. n locul unei structurri separate a datelor i a funciilor (reprezentate de prelucrri), se modeleaz entiti active formate din structuri de date ascunse de funcii. Un program este privit ntr-o manier global,
4

Martin, J., McClure, C., Op. cit., pp. 41-42

10

ca un ansamblu de obiecte care interacioneaz prin intermediul mesajelor, fiecare obiect avnd asociat propriul set de operaii. Obiectul, n viziunea programrii orientate-obiect, are urmtoarele caracteristici: identitate: obiectul este o entitate discret care poate fi distins de alte entiti; clasificare: obiectele cu aceleai atribute i operaii sunt grupate n clase, iar un obiect este considerat o instan a clasei din care face parte; polimorfism: aceeai operaie poate avea comportament diferit n funcie de obiectul la care este ataat, implementarea concret a unei operaii ntr-o anumit clas numindu-se metod; motenire: atributele i operaiile se transmit de la o clas la alta de-a lungul unei relaii ierarhice. Pentru transmiterea similaritilor de la o clas de obiecte la alta, n condiiile pstrrii diferenelor ntre acestea, se utilizeaz generalizarea i motenirea. Generalizarea este relaia dintre o clas i una sau mai multe versiuni rafinate ale ei, n care clasa care se rafineaz se numete superclas, iar fiecare versiune mai rafinat se numete subclas. Atributele i operaiile comune sunt grupate n superclas i se spune c sunt motenite de subclase. Punctele forte ale abordrii orientat-obiect constau n capacitatea de a modela obiecte complexe, de a exprima ntr-o manier integrat dinamica obiectelor, ncapsularea acestor obiecte pentru a ascunde implementarea lor, posibilitatea reutilizrii unor componente ale produsului-program. Punctele slabe sunt reprezentarea monolitic a aplicaiilor, ceea ce nu corespunde cu adevrat percepiei ce o avem asupra realitii i marele efort de abstractizare. Preceptele abordrii orientat-obiect au fost aplicate cu succes mai nti n domeniul programrii, iar de la nceputul anilor 90, ca i n cazul tehnicilor structurate, s-au accentuat preocuprile specialitilor pentru implementarea lor i n celelalte faze ale elaborrii programelor. n consecin, au aprut mai multe metode orientate-obiect de relizare a produselor-program. n vederea simplificrii procesului de dezvoltare a programelor prin abordarea orientat-obiect, s-au nregistrat numeroase preocupri de integrare a diferitelor metode orientate-obiect existente. Dintre aceste ncercri, cea mai cunoscut i mai reuit s-a concretizat n standardul UML (Unified Modeling Language). UML a rezultat prin integrarea a trei din cele mai cunoscute metode orientate-obiect: OOD (Object Oriented Design) propus de Booch, OMT (Object Modelling Technique) propus de Rambaugh i OOSE (Object-Oriented Software Engineering) propus de Jacobson. n 1996, OMG Object Management Group i-a manifestat interesul pentru rezultatele muncii celor trei autori, n vederea adoptrii UML ca standard n modelarea orientat obiect. n urma colaborrii i cu ali specialiti din domeniu, UML a fost adoptat ca standard OMG n septembrie 1997, fiind astfel utilizat de majoritatea productorilor de instrumente de dezvoltare a sistemelor informatice i specialiti n domeniu. OMG i-a asumat responsabilitatea dezvoltrii ulterioare a standardului UML.

2.6. Programarea vizual


Complexitatea mediilor de dezvoltare a aplicaiilor i bariera artificial ce se interpune ntre programator i aplicaii sunt doar dou impedimente pe care le elimin programarea vizual. n plus, uurina de nvare i exploatare a limbajelor constituie

11

un argument hotrtor n favoarea programrii vizuale. Obiectivul declarat al acesteia este ca programarea s devin mai uoar pentru programatori i mai accesibil nespecialitilor, indiferent de destinaia limbajului: proiectarea rapid a aplicaiilor, prototipizare, simulri etc. n oricare domeniu, limbajele vizuale trebuie s permit utilizatorului s se concentreze asupra problemei ce o are de rezolvat i mai puin asupra limbajului de programare propriu-zis Notaiile vizuale au fost utilizate, practic, de la apariia programrii, ele devenind treptat tot mai complexe. Programatorii au neles facilitiile i puterea pe care le confer notaiile vizuale, mai ales n contextul tehnologiilor tot mai sofisticate. n mod natural, oamenii se raporteaz la lumea real n mod grafic, iar imaginile se constituie ca i component principal a gndirii creative. n aceste condiii, limbajele de programare textuale s-au dovedit destul de dificil de nvat pentru oameni dealtfel creativi i inteligeni. Prin reducerea sau eliminarea complet a necesitii de a traduce ideile vizuale n reprezentri textuale, uneori artificiale, devine posibil atenuarea curbei de nvare a unui limbaj de programare. Programarea vizual mbrac mai multe forme i acoper o arie larg de aplicaii, de unde i diversitatea opiniilor i a punctelor de vedere. Astfel, unii specialiti consider c acest concept a aprut odat cu mediile de programare precum Visual Basic sau Visual C++. Pentru alii, Visual Basic este nereprezentativ pentru domeniul vast al tehnologiilor care poart eticheta vizual. Ei consider c programare vizual nseamn Prograph (Pictorius), Visual AppBuilder (Novell) sau Parts (Digitalk). Nu exist o definiie unanim acceptat pentru programarea vizual, dar majoritatea specialitilor sunt de acord c este limbaj de programare vizual acela care-i realizeaz toate sarcinile de programare ntr-o manier vizual, fr a face uz de reprezentarea textual. O definiie frecvent citat consider c programarea vizual nseamn utilizarea de expresii vizuale (grafice, icon-uri, desene) n procesul de programare5. Mai este ntlnit n literatura de specialitate termenul de programare vizual pur care are n vedere modul de proiectare al unui program, prin operare direct asupra unui set de elemente grafice. Operarea direct se realizeaz prin intermediul unor tehnici de interaciune, iar programul se dezvolt fr a scrie instruciuni sub form de text. Pentru Visual Basic i altele asemenea exist noiunea de limbaje de programare transformate vizual, care au implementate anumite tehnici de reprezentare vizual a informaiilor, ce se suprapun unor limbaje textuale6. Un alt concept este cel al mediilor de programare vizual, definite de unii autori ca i mediile n care sunt implementate limbajele de programare vizual. n alte opinii, mediile de programare vizual (Visual Programming Environment) asigur dezvoltarea rapid a aplicaiilor (RAD Rapid Application Development). Ele se caracterizeaz printr-un grad ridicat de utilizare a elementelor grafice i sunt utilizate n scopul accelerrii dezvoltrii i distribuiei aplicaiilor, motiv pentru care sunt denumite i medii de dezvoltare vizual a aplicaiilor. Ar fi poate util o separare ntre aceste dou concepte limbaje de programare vizual i medii de programare vizual. Primul are n vedere limbajele care se sprijin pe tehnicile vizuale pe ntreg parcursul procesului de programare: proiectarea, testarea, depanarea i execuia se realizeaz n acelai mediu vizual. Mediul de
Shu, N.C., Visual Programming Languages: A Perspective and Dimensional Analysis, International Symposium on New Directions in Computing, Norway, 1985 6 Menzies, T., Evaluation Issues for Visual Programming Languages, www.cse.unsw.edu.au
5

12

programare vizual lucreaz adesea cu reprezentri vizuale suprapuse elementelor textuale. Cele mai des ntlnite n practic sunt limbajele de proiectare a interfeelor grafice care, combinate cu elemente textuale sunt utilizate n proiectarea de aplicaii. Caracteristicile programrii vizuale, care se concretizeaz n simplificarea i optimizarea procesului de programare din punct de vedere al timpului necesar construirii aplicaiei au transformat mediul de programare vizual ntr-un mediu RAD. n categoria mediilor RAD se ncadreaz: Visual Basic, Visual FoxPro i Visual C + + (Microsoft), Delphi (Borland), Visual Objects (Computer Associates), PowerObjects (Oracle), Power Builder (Power Software), SQL Windows (Gupta), VisualAge (IBM). Liderul pieei RAD este Visual Basic, produs de Microsoft. Cei de la Microsoft au observat la timp apariia unei noi categorii de utilizatori, numit generic power users. Aceasta a derivat din cea a utilizatorilor finali i poate fi numit utilizatori finali avansai care, fr a fi profesioniti, au acumulat suficiente cunotine i i pot rezolva singuri o bun parte din problemele curente folosind aceste medii de programare. ntr-un mediu de dezvoltare vizual se cuprind7: mediul de lucru integrat, care asigur dezvoltarea aplicaiei i permite accesul la toate componentele unei aplicaii; instrumente vizuale de descriere a interfeei, folosite pentru a defini form-uri, ferestre de dialog, machete de rapoarte etc. Plasarea controalelor se face prin drag&drop, iar definirea proprietilor printr-un inspector de obiecte; limbajul de programare, care este n continuare necesar, n ciuda tuturor facilitilor vizuale oferite de aceste medii de lucru. Acesta este mai mult sau mai puin orientat obiect (exemple: diverse variante de Basic, Pascal, limbaje xBase, SmallTalk); suportul pentru conectarea la diferite surse de date conectivitatea prin ODBC (Open DataBase Connectivity) este cea mai frecvent ntlnit; componentele vizeaz obinerea unui spor de productivitate n dezvoltarea aplicaiilor i se refer la dou aspecte: utilizarea de componente prefabricate i reutilizarea codului de la o aplicaie la alta; suportul pentru activitile specifice distribuiei (compilarea aplicaiei, realizarea discurilor de instalare, a documentaiei etc.). Figura de mai jos ilustreaz o parte dintr-o aplicaie scris n Visual Basic. Se observ c este vorba despre o fereastr intitulat CALCUL AMORTIZARE, ceea ce indic scopul utilizrii ei. Ea poart numele de form, termen ntlnit la noi i ca formular sau chiar form. Form-ul reprezint zona principal de lucru, o aplicaie constnd de regul din mai multe form-uri, legate ntre ele n funcie de logica ei. Practic, ntreaga aplicaie se desfoar n limitele form-urilor, pe care sunt plasate diverse componente ce au ataate secvene de cod. Aa cum se observ n figur, astfel de componente sunt: casetele de text (text box), etichete (label), butoane de comand (command button). Ele sunt denumite generic controale (n engl. controls) i sunt de fapt obiecte, descrise printr-o parte static (descriptiv) i una dinamic. Numrul lor este extrem de mare, n fiecare mediu de dezvoltare existnd posibilitatea de a lucra i cu
7

Srbu, M., Dezvoltarea rapid a aplicaiilor, n Byte, nr. 10/1995, pp. 75-77

13

controale externe (numite third-party components, deoarece pot fi create de alte firme i nglobate n aplicaii). n fine, trebuie precizat aici c nsi form-ul este tratat ca un obiect, avnd toate caracteristicile care sunt descrise n continuare. Ca i obiect programabil, un control este definit n primul rnd printr-un ansamblu de proprieti. O proprietate poate fi definit ca un atribut nominalizat al unui obiect programabil. Proprietile definesc att caracteristicile unui obiect (dimensiune, culoare, poziie pe ecran), ct i modul n care se comport un obiect (de exemplu, un obiect poate fi la un moment dat, activ sau inactiv, sau poate fi afiat pe form sau ascuns). Orice proprietate a unui obiect are o valoare care se poate modifica la proiectare i/sau execuie.
form-ul etichete

casete de text

butoane de comand

Form-ul CALCUL AMORTIZARE, realizat n Visual Basic

Orict de multe proprieti ar avea, un obiect este complet descris cu ajutorul metodelor, pentru c acestea indic ce face obiectul. Deci, proprietile descriu un obiect, n timp ce metodele permit unui obiect s fac ceva. Proprietile sunt date, metodele sunt secvene de instruciuni. O metod reprezint o procedur asociat sau incorporat, un bloc de cod care poate fi invocat pentru a asocia o anumit aciune unui obiect. n Visual Basic, o metod nu se poate modifica. Exist totui o clas special de metode care se pot modifica, numite proceduri eveniment. Procedura eveniment este un subprogram ataat unui obiect care conine rspunsul obiectului la proceducerea unui eveniment. Procedurile eveniment sunt cele care particularizeaz comportamentul unui obiect ntr-o aplicaie. n varianta Visual Basic - ca i a celorlalte medii vizuale de dezvoltare programul const dintr-un ansamblu de rutine, cele mai multe avnd dimensiuni reduse. Acestea se numesc proceduri eveniment i fiecare trateaz un eveniment individual. O astfel de procedur se execut dac i numai dac se produce evenimentul pentru care ea a fost scris. Altfel spus, un program va rspunde unui eveniment care se produce la rulare numai dac a fost scris o procedur pentru evenimentul respectiv, altfel acesta va fi ignorat. Fiecare control plasat pe un form suport mai multe evenimente. De exemplu, o caset de text poate rspunde la unul din urmtoarele evenimente: clic, dublu clic, introducerea unui text. Dac pentru evenimentul clic este scris o procedur, atunci

14

cnd ruleaz aplicaia i se execut clic pe caseta de text (se produce n acest fel evenimentul) se va lansa automat n execuie procedura definit. Cele prezentate mai sus ne ndreptesc s considerm mediile de dezvoltare vizual a aplicaiilor mai mult drept limbaje/medii multiparadigm, ele reunind principii ale: programrii vizuale (manipularea de reprezentri vizuale); programrii OO (lucrul cu obiecte, principiile ncapsulrii i reutilizrii); programrii dirijate de evenimente; programrii structurate (utilizarea structurilor de control fundamentale n cadrul procedurilor).

3. ELABORAREA PRODUSELOR-PROGRAM
Elaborarea unui produs-program constituie o activitate deosebit de complex, care necesit utilizarea unei metodologii clare i unitare. De regul, o asemenea activitate se desfoar n echipe de lucru complexe n care sunt inclui analiti, specialiti ai domeniului pentru care se dezvolt produsul-program, programatori, specialiti n testarea i implementarea produselor-program, utilizatori etc. Literatura de specialitate pune n discuie o multitudine de probleme legate de metodologia elaborrii produselor-program i subliniaz n mod deosebit necesitatea existenei unei metodologii unitare. Totui, putem afirma c n forma sa final orice produs-program poate fi privit ca un sistem cu funcii i componente proprii, cu intrri, ieiri, prelucrri specifice i bucl de autoreglare i cu un scop bine stabilit.

3.1. Modele de elaborare a produselor-program


Din punct de vedere practic, elaborarea unui produs-program presupune parcurgerea unui anumit numr de activiti specifice obinerii acestuia. Exist un numr nsemnat de modele pentru elaborarea unui produs-program, dintre care cele mai importante sunt: modelul n cascad, modelul n V, modelul spiral, modelul liniar, modelul incremental, modelul RAD. 3.1.1. Modelul n cascad Dintre toate modelele enumerate mai sus, modelul n cascad este cel mai des utilizat n practic. Activitile avute n vedere la elaborarea produselor-program n cazul modelului n cascad (vezi i figura) sunt: definirea problemei; analiza; proiectarea; dezvoltarea; testarea; implementarea; ntreinerea.

15

Definirea problemei Validare -Verificare Analiz Validare -Verificare Proiectare Validare -Verificare Dezvoltare problemei Validare -Verificare Testare Validare -Verificare Implementare Validare -Verificare Exploatare-ntreinere Validare -Verificare

Modelul n cascad de elaborare a unui produs-program

Acest model a fost dezvoltat de ctre Royce n 1970 i este cel mai familiar programatorilor. Aa dup cum se observ n figura precedent, caracteristica fiecrei etape const n a se finaliza cu o verificare i o validare n scopul eliminrii eventualelor anomalii care ar putea s apar n cadrul fiecreia. Dac se constat eventuale anomalii, atunci se va reveni la etapa precedent pn cnd acestea vor fi eliminate. n acest fel se realizeaz o minimizare a costului pentru produsul-program dezvoltat. n acelai timp, trecerea de la o faz la alta, n sus i n jos, ofer modelului un caracter iterativ i incremental. 3.1.2. Modelul n V Modelul n V poate fi considerat ca un caz particular al modelului n cascad prin faptul c activitile necesare elaborrii produsului-program sunt reprezentate grafic sub forma lui V. Esena modelului const n aceea c separ primele etape ale procesului de dezvoltare n sub-activiti ce au legtur cu construcia sistemului. Aceast organizare sub forma literei V este dat de faptul c se pune n relaie direct de dependen primele etape cu cele aflate n partea de jos din modelul n cascad. n acest model se delimiteaz urmtoarele activiti8 [Grama, 2000,55]: 1. analiza cerinelor i studiul de fezabilitate; 2. specificarea global; 3. proiectarea de ansamblu; 4. proiectarea de detaliu; 5. programarea; 6. testarea unitar; 7. integrarea i testul de integrare; 8. testul de acceptare; 9. implementarea i testul sistem.
8

Grama, A., Filip, M., Medii de programare n economie, Editura Sedcom Libris, Iai, 2000, p. 55

16

Constatm c din lista de mai sus activitile 1-5 influeneaz n mod permanent o activitate din 6-9, ceea ce permite o mai bun organizare a etapelor finale. Dezavantajul acestui model const n c nu pune n eviden posibilitatea relurii unei activiti deja parcurse, ceea ce poate s conduc la depistarea unor anomalii funcionale ale produsului-program n faza de implementare. Acest lucru va duce la reluarea ntregului proces de elaborare a produsului program cu costuri corespunztoare i pierderi de timp. 3.1.3. Modelul incremental n modelele prezentate anterior rezult c dup o descompunere n elementele componente, acestea sunt dezvoltate independent unele dup altele, n paralel sau secevenial potrivit cu resursele disponibile. n modelul incremental, la un moment dat se dezvolt un singur subansamblu de componente. Iniial se dezvolt un nucleu, iar apoi succesiv se dezvolt incrementii care sunt totodat i integrai n sistemul propriu-zis. Avantaje: fiecare dezvoltare n parte este mai puin complex; integrrile sunt progresive; dup fiecare integrare de increment sistemul poate fi exploatat. Dezavantaj: necesitatea ca specificarea nucleului, a incremenilor i interaciunea lor s fie stabilite de la nceputul proiectului. 3.1.4. Modelul n spiral Modelul n spiral a fost propus n 1988 de ctre B. W. Boehm i este cel mai cunoscut model evolutiv. El are la baz dou premise9: natura iterativ a dezvoltrii i nevoia de planificare i evaluare a riscurilor fiecrei iteraii; realizarea validrii ct mai devreme posibil i de ct mai multe ori, prin construirea prototipurilor. Obiectivul principal urmrit prin modelul spiral este gestiunea atent a riscurilor prin combinarea modelului cascad cu prototipizarea. Se construiete mai nti o prim versiune a sistemului, sub forma unui prototip, n care nu este definit ntregul sistem ci sunt luate n considerare doar caracteristicile sale principale. Dup transpunerea prototipului n aplicaie, aceasta este evaluat de ctre beneficiari, iar n funcie de rezultatul evalurii se pot defini i implementa noi caracteristici ale sistemului, construindu-se un nou prototip ce va fi supus evalurii. Acest proces se reia de mai multe ori, urmtoarele prototipuri fiind versiuni din ce n ce mai complete ale sistemului propus. Modelul cascad se va regsi n cadrul fiecrei iteraii. Modelul spiral este descompus n mai multe activiti-cadru maxim 6, cum sunt prezentate n continuare: comunicarea cu beneficiarul (stabilirea i meninerea contactului dintre beneficiar i proiectant); planificarea (definirea resurselor, a termenelor limit de realizare); analiza riscului (riscuri tehnice i de organizare); proiectarea (definirea uneia sau mai multor reprezentri ale aplicaiei);
9

Oprea, D., Analiza i proiectarea sistemelor informaionale economice, Ed. Polirom, Iai, 1999, p. 68

17

construirea i lansarea; evaluarea beneficiarului (feed-back din partea beneficiarului asupra schimbrilor din noua versiune instalat). Cea mai cunoscut variant a modelului este cea bazat pe 4 elemente majore, ca n figura de mai jos. Printre avantajele modelului spiral se pot enumera: diminuarea riscurilor la nivel de prototip, prin angajarea treptat n proiect a echipei de dezvoltare i a beneficiarilor; valorificarea experienei anterioare n planificarea activitilor pentru prototipul urmtor; evaluarea riscurilor asociate proiectului n mai multe momente; simplificarea operaiunilor de evaluare a ceea ce este necesar n etapa (prototipul) urmtoare, inclusiv prin prisma costurilor.
Planificare Analiza riscului

Evaluarea beneficiarului

Proiectare

Ilustrarea modelului n spiral

Aplicarea cu succes a modelului spiral este condiionat de profesionalismul echipei de dezvoltare i flexibilitatea n aciune, inclusiv n alocarea de fonduri, dar i n definirea activitilor de ntreprins. 3.1.5. Modelul RAD Dezvoltarea aplicaiilor trebuie s rspund, ca orice domeniu de activitate, principiului productivitii i eficienei economice. Detaliind, putem identifica mai multe aspecte ce trebuie avute n vedere n dezvoltarea unei aplicaii10: productivitatea resurselor; calitatea produsului; timpul de realizare; simplificarea ntreinerii; satisfacia utilizatorului. Modelul RAD i propune s porneasc de la surs, adic de la nevoile utilizatorilor. Utilizatorul se gsete n centrul ateniei, fiind clientul sistemului ce se realizeaz.
Silvestre, P., Verlhac, D., Le development de systemes dinformation, Edition Hermes, Paris, 1996, p. 112
10

18

RAD reprezint un arhetip revoluionar de succes n software-ul anilor 90, caracterizat pe scurt prin mai repede, mai bine, mai ieftin, ceea ce este posibil de realizat printr-o abordare foarte riguroas, bazat pe echipe mici de specialiti bine pregtii, pe utilizarea prototipurilor i impunerea unor limite rigide de timp n planificarea activitilor. RAD se bazeaz pe modelul spiral, ceea ce permite dezvoltarea incremental i repetitiv. Dei nu reiese din figura modelului, trebuie precizat influena metodelor orientate-obiect, ce asigur o eficien sporit pentru RAD, prin utilizarea de componente pre-fabricate. De asemenea, RAD apeleaz la generarea automat a codurilor prin sisteme CAPS (Computer-Aided Prototyping System), care nlocuiesc scrierea manual, mai nceat a codului i minimizeaz erorile. n fine, RAD nseamn flexibilitate, prin faptul c permite utilizatorilor s foloseasc propriile limbaje de interogare sau generatoare de rapoarte. Dup definirea de ctre J. Martin a filosofiei RAD11 a urmat un val de propuneri de modele de dezvoltare a aplicaiilor de tip RAD.
Planificarea cerinelor

Proiectare

Construire

Finalizare

Fazele unui ciclu de dezvoltare RAD

RAD se individualizeaz prin urmtoarele caracteristici: utilizarea de echipe mixte, formate n medie din 6 persoane, incluzndu-i pe utilizatorii finali, manageri i pe dezvoltatorii sistemului (aceast denumire face referire la specialistul multilateral, ce are att cunotine specifice analizei de sistem, ct i de proiectare i programare). Trebuie precizat c experiena anterioar este deosebit de important, iar succesul proiectului este asigurat prin implicarea activ a utilizatorilor, ca i prin comunicarea i colaborarea permanent ntre membrii echipei; utilizarea de instrumente specializate care asigur: dezvoltarea vizual, crearea de prototipuri, planificarea i gestiunea timpului, colaborarea i lucrul n echip, folosirea componentelor re-utilizabile i a componentelor API, controlul versiunilor; renunarea la caracteristici sau componente secundare (n special cu rol de mbuntire a interfeei sau a dialogului cu utilizatorul) pentru a asigura ncadrarea n termenele stabilite. De regul, ntregul proces de dezvoltare are o durat maxim de 6 luni; prototipizarea iterativ, evolutiv. Etapele unui ciclu de dezvoltare RAD pot fi prezentate i n succesiunea: analiz, proiectare, realizare i integrare, testare i implementare, dar ntr-un mod
11

Martin, J., Rapid Application Development, Macmillan, 1991

19

diferit fa de modelul clasic. Pentru ilustrare ne vom opri asupra ciclului de dezvoltare James Martin, cel mai reprezentativ dintre ciclurile de dezvoltare RAD. Exist n acest ciclu 4 faze: (1) identificarea i planificarea cerinelor, (2) proiectare, (3) construire, (4) finalizare. Planificarea cerinelor are ca obiectiv determinarea funciunilor sistemului. Utilizatorul trebuie s aib un rol activ n aceast faz. Faza se desfoar n aanumitele ateliere de lucru (workshop), de tip Joint Requirements Planning. Activitile desfurate pot fi grupate n: evidenierea problemelor, identificarea i precizarea cerinelor, planificarea sarcinilor. Proiectarea realizeaz modelarea sistemului prin prototipuri i alte instrumente de modelare. Activitatea se desfsoar n ateliere de lucru de tip Joint Application Design. Dup stabilirea modelului de lucru se ntocmete rapid prototipul. Fiecare prototip va fi testat i validat n atelierele de lucru. Construirea sistemului este apanajul specialitilor informaticieni, care transpun modelele fazei anterioare n programe. Utilizatorii testeaz componentele i le valideaz sau solicit, dac e necesar, ameliorarea acestora. Faza se ncheie prin integrarea componentelor n sistemul final. Aa cum reiese i din figur, aceast faz i precedenta se constituie ntr-un ciclu iterativ, pn la obinerea rezultatului dorit (Iterate Until Done). Pe parcursul acestui ciclu prototipurile definite i revizuite pot evolua n prototipuri operaionale. Finalizarea se refer la punerea n exploatare a sistemului. Aceast faz continu testrile asupra produsului final, impune schimbri organizaionale, formeaz i instruiete utilizatorii finali. n sintez, modelul RAD se bazeaz pe urmtoarele soluii12: Includerea utilizatorilor n echipa de realizare a aplicaiei i implicarea activ a acestora. S-a pornit de la faptul c utilizatorii sunt sursa cerinelor informaionale, ca i beneficiari direci ai aplicaiei, deci opinia lor este determinant pentru succesul aplicaiei. Implicarea direct i continu a utilizatorilor n procesul de dezvoltare este esenial pentru succesul RAD. Ea prezint importan n detectarea din timp a eventualelor erori, tiind c dac defectul este descoperit mai repede, costul remedierii va fi mai sczut. Costul corectrii erorilor crete odat cu trecerea dintr-o etap a ciclului de via n alta. Gestiunea optim a timpului. Se fixeaz intervale scurte de timp pentru realizarea componentelor. Un proiect de dimensiuni mari va fi descompus n subproiecte cu posibiliti de realizare n paralel. Pentru a asigura respectarea termenelor, se vor realiza mai nti versiuni care vor cuprinde doar funcionalitile de baz. n final, se vor integra i funcionalitile complementare. Dezvoltarea incremental, numit i ciclu de elaborare n spiral. Este un factor ce contribuie la sporirea vitezei de realizare a aplicaiilor. n loc s se lanseze direct produsul final, aplicaia va apare n versiuni succesive. Se realizeaz prototipuri ale aplicaiei prin parcurgerea a 3 etape: determinarea cerinelor informaionale, transpunerea lor sub form de aplicaie, testarea acesteia de ctre utilizatori. Utilizarea prototipurilor permite ca utilizatorii s observe i s corecteze sistemul. Reutilizarea. O aplicaie nu mai este vzut ca un ansamblu de programe executabile mpreun cu un ansamblu de date, care comunic prin intermediul unor interfee. Aplicaia reprezint un ansamblu de servicii/componente care rspund unor obiective sau cerine.
12

Silvestre, P., Verlhac, D., Op. cit., pp. 112-113

20

Utilizarea de instrumente CASE pentru generarea rapid i fr erori a programelor.

3.2. ALGORITMI I TEHNICI DE REPREZENTARE


3.2.1. Noiunea de algoritm Conceptul de algoritm desemneaz o mulime finit de operaii (instruciuni, comenzi) cunoscute, care executate ntr-o ordine bine stabilit, pornind de la un set de valori de intrare produc n timp finit, un alt set de valori, de ieire. Pentru a fi programabil, orice algoritm, trebuie s ndeplineasc cumulativ anumite condiii, cum sunt: s fie clar i coerent, exprimnd cu rigurozitate i fr ambiguiti operaiunile de prelucrare a datelor i ordinea lor de succesiune; s fie complet, descriind etap cu etap procesul de prelucrare a datelor, fr omisiuni; s aib caracter finit, adic s fie asigurat ncheierea algoritmului dup un anumit numr de pai. Algoritmizarea unei probleme presupune parcurgerea etapelor urmtoare: definirea unui enun precis al problemei; transformarea acestui enun n enun algoritmic; reprezentarea enunului algoritmic cu ajutorul instruciunilor specifice (organigrame, tabele de decizie, limbaje algoritmice etc); Observaie. Aceeai problem poate fi algoritmizat sub mai multe forme, neimpunndu-se existena unui algortim unic. 3.2.2. Reprezentarea algoritmilor Cele mai utlizate tehnici de reprezentare sunt: schemele logice/flowchart pseudocodurile diagramele arborescente tabele de decizie.

3.2.2.1. Schemele logice au rolul de a reprezenta grafic fluxul general al datelor i a algoritmului de prelucrare. Se disting 2 tipuri de scheme logice: Schemele logice de sistem care au rolul de a indica sistemul de resurse afectat pentru obinerea rezultatelor scontate. Acestea schmatizeaz relaiile dintre informaii i suporturile de date, fluxul informatizat preconizat, operaiile ce se efectueaz asupra informaiilor prin procedee automate sau manuale. n cadrul lor exist unul sau mai multe blocuri de prelucrare ce reprezint proceduri independente de prelucrare i deci programe diferite pentru calculator. Scheme logice de program sintetizeaz succesiunea etapelor de rezolvare a unei probleme constituind o reprezentare grafic a funciilor algoritmului utlizat. i n cadrul acestor scheme se folosesc simboluri standard, crora li se asociaz n principiu anumite instruciuni. Schema logic reprezint de fapt un graf orientat n care exist cel puin urmtoarele elemente: o instruciune de pornire (START) i una de oprire (STOP); instruciuni de :

21

citire a datelor; decizie; atribuire; scriere/afiare a rezultatelor prelucrrii. sgei care indic sensul fluxului de prelucrare, deci ordinea de execuie a operaiilor elementare. Ordinea n care instruciunile programului sunt executate constituie structura de control a acestuia. Structurile de control se mpart n general n 2 categorii: structuri secveniale structuri nesecveniale Cele secveniale sunt folosite n cazul programelor simple, n care ordinea execuiei instruciunilor sau modulelor de instruciuni coincide cu ordinea sintactic a acestora. Forma general a unei structuri secveniale este: o o o o a(1) a(2) a(3) .unde a(1), a(2),..a(n) sunt aciuni ce se execut n aceast ordine . . a(n) n exemplul: citete a,b,c m:=(a+b+c)/3 scrie m

a(1) a(2) a(3)

sunt implicate 3 aciuni a(1), a(2), a(3) care constau n: citirea a 3 valori calculul mediei aritmetice afiarea rezultatului Structurile nesecveniale apar n cazul n care instruciunile se execut numai n anumite condiii i/sau se repet n funcie de rezultatul evalurii unor condiii. Structurile nesecveniale pot fi: alternative (de decizie sau selecie) repetitive multiple/mixte Structura alternativ este acea structur n care se efectueaz un ciclu de operaii sau altul n funcie de o anumit condiie (C) impus de logica de rezolvare a problemei. Condiia poate fi de: verificare a coninutului i a naturii unor zone de memorie; verificare a coninutului unui contor, a crui valoare poate crete sau descrete; verificare a corectitudinii unor date de intrare etc. Cazul general de program (P) cu structur alternativ are forma:

22

P=M1; {M2 dac C=DA i M3 dac C=NU}; M4 n care M1, M2, M3, M4 sunt modulele programului P, iar C condiia evaluat. Derularea programului se realizeaz astfel: sub forma P=M1; M; M4 cnd condiia C este ndeplinit; sub forma P=M1. M3; M4 cnd condiia C nu este ndeplinit Schematic structura alternativ (IF THEN - ELSE) se prezint astfel:

Structura alternativ Dac M3 nu conine instruciuni se obine o structur alternativ cu ramur vid: Derularea programului este: P=M1 dac C=DA, atunci M2; M4 P=M1, dac C=NU atunci M4

23

Structura alternativ cu ramur vid Structura repetitiv permite reluarea identic de mai multe ori a aceluiai modul de instruciuni. Numrul de repetri poate fi predefinit (FOR) sau condiionat de rezultatul evalurii unei condiii (WHILE-DO sau DO - UNTIL). n primul caz este vorba de structura repetitiv cu un numr definit de pai (DO FOR), numrul de repetiii este controlat de o variabil V, numit variabil de control, care are o valoare iniial Vi i una final Vf, ambele prestabilite i o raie R (un increment) care se adaug la valoarea curent a variabilei de control, dup fiecare execuie a modulului repetitiv. Ieirea din structura repetitiv se realizeaz atunci cnd variabila de control depete valoarea final.

Structura repetitiv controlat prin FOR 24

Derularea structurii repetitive controlat prin FOR, pentru o secven de program SP se realizeaz astfel: Sp=MODUL pentru V<Vf n cel de al doilea caz, n funcie de plasarea condiiei, structura repetitiv poate fi condiionat anterior (WHILE DO) sau condiionat posterior (DO UNTIL). n structura repetitiv condiionat anterior evaluarea condiiei precede execuia modulului repetitiv. Execuia i eventual repetarea modulului se va face numai cnd condiia este adevrat. Derularea structurii condiionate anterior se prezint astfel: Sp=ct timp C=DA execut MODUL REPET NCEPUT

MODUL INIIAL

DA C NU MODUL FINAL MODUL REPET

SFRIT Structura repetitiv condiionat anterior n structura repetitiv condiionat posterior evaluarea condiiei se realizeaz dup fiecare execuie a modulului. Reluarea execuiei modulului are loc att timp ct condiia nu este adevrat. Derularea structurii repetitive condiionate posterior se prezint astfel: Sp=Execut MODUL REPET pn cnd C=DA Structura multipl este recomandat n cadrul programelor complexe cnd pe diverse niveluri de organizare se rentlnesc toate tipurile de structuri prezentate. Practica a demonstrat c pentru definirea structurii de control a oricrui program sunt suficiente structura secvenial, cea alternativ i cea repetitiv condiionat anterior, numite i structuri fundamentale de control.

NCEPUT 25

MODUL INIIAL

MODUL REPET DA C NU

MODUL FINAL

SFRIT Structur repetitiv condiionat posterior 3.2.2.2. Pseudocoduri Pseudocodul este un limbaj de proiectare a programelor de nivel intermediar, fiind ntre limbajele formale i cele naturale. Logica acestuia este apropiat de limbajele de programare utiliznd ns cuvinte i expresii uzuale din limbajul natural. El are puine reguli sintactice lsnd programatorului o mare libertate n programare. n dicionarul de informatic, pseudocodul este definit ca limbaj utlizat n proiectarea i documentarea programelor obinut prin grefarea unor reguli sintactice pe limbajul natural. Structurile de control sunt reprezentate prin folosirea unor cuvinte cheie (dac.atunci.altfel..; execut.pn cnd .etc) i printr-o anumit aliniere a liniilor de program n pagin. Poate fi utilizat n toate fazele proiectrii de sus n jos, precum i ca mijloc de documentare. Nu exist restricii de definire unic a formei pe care trebuie s o aib un pseudocod, dei n unele reprezentri se folosesc propoziii simple i propoziii complexe. Propoziiile simple descriu operaiile ce se vor codifica ulterior direct cu ajutorul instruciunilor limbajelor de programare: deschide fiier, citete articol, scrie articol etc. Propoziiile complexe descriu operaiile ce urmeaz a fi detaliate ulterior i sunt precedate de semnul #. Fiecare propoziie ncepe cu un verb care trebuie s exprime operaiunea descris. Cu ajutorul pseudocodurilor pot fi reprezentate toate structurile fundamentale. Structura secvenial

26

Fiecare operaiunea, n acest caz, se reprezint printr-o propoziie. Ele sunt flancate de termenii nceput i sfrit fiind aliniate pe vertical n ordinea desfurrii operaiunilor. De exemplu, pentru stabilirea valorii produselor, cunoscndu-se cantitatea i preul unitar, pseudocodul poate avea structura: _ nceput citete CODPROD, DENPROD, CANT, PRE calculeaz VALOARE=CANT*PRET scrie DENPROD, VALOARE _ Sfrit Structura alternativ Aceast structur presupune existena unei condiii n funcie de care n program are loc o ramificare. Formatul general pentru un pseudocod cu structura alternativ este: nceput Dac condiie adevrat Atunci Propoziia 1 Propoziia 2 Propoziia m Altfel Propoziia 1 Propoziia 2 propoziia n sfrit Sfrit

alternativa1

alternativa 2

Exemplu de pseudocod, cu structur alternativ pentru calculul salariilor. Se accept de la terminal ca date de intrare: Marca , numele salariatului, numrul de ore lucrate i tariful pe o or. Calculul se va realiza numai dac salariatul are ore lucrate. nceput Accept de la terminal: MARC, NUME,NR_ORE, TARIF Dac NR_ORE 0 Atunci #calculeaz SALARIU=NR_ORE*TARIF altfel afieaz mesajul articol care nu se prelucreaz Sfrit Sfrit

27

Structura alternativ cu o ramur vid apare atunci cnd una din ramificaiile din program nu conine instruciuni sau comenzi. Pseudocodul pentru o astfel de structur are formatul general: nceput Dac condiie adevrat Atunci Propoziia 1 Propoziia 2 Propoziia n Sfrit Sfrit Sfrit De exemplu, actualizarea unei baze de date presupune adugarea de noi articole, modificarea sau tergerea unor articole existente. La un moment dat poate fi executat doar una din aceste operaii, controlul fiind asigurat de variabila I. Aceast variabil nu poate lua dect valorile 1 pentru adugare, 2 pentru modificare i 3 pentru tergere. nceput precizeaz i dac i=1 atunci # adaug articol dac i=2 atunci #modific articol dac i=3 atunci #terge articol sfrit sfrit sfrit Structura repetitiv condiionat anterior are formatul general nceput Ct timp condiie adevrat Execut Propoziia 1 Propoziia 2 sfrit sfrit sfrit

28

De exemplu, pentru stabilirea soldurilor pentru produsele existente n stoc se poate folosi urmtorul pseudocod care codific o structur repetitiv condiionat anterior: nceput Ct timp STOC>0 Calculeaz SOLD=STOC*PRE Afieaz DENPROD, STOC, SOLD Sfrit Sfrit Structura repetitiv condiionat posterior are formatul general: nceput Execut Propoziia 1 Propoziia 2 Propoziia n Pn cnd condiia este adevrat Sfrit Pentru acelai calcul al soldurilor produselor din stoc, pseudocodul cu structura repetitiv condiionat posterior se poate prezenta astfel: nceput Execut Calculeaz SOLD=STOC*PRE Afieaz DENPROD, STOC, SOLD Pn cnd STOC <0 Sfrit Pentru a asigura apropierea de limbajele de programare la ora actual n multe cazuri se adopt o notare n limba englez pentru marcarea structurilor de control. De exemplu o structur alternativ generalizat devine o structur de t ip IF..THEN..ELSE.. astfel: IF condiie adevrat THEN Propoziie 1 ELSE Propoziie 2 ENDIF 3.2.2.3. Diagramele arborescente mbin descompunerea descendent cu utilizarea structurilor de control astfel nct parcurgerea lor se face de sus n jos (topdown) i de la stnga la dreapta (left-right). Diagrama arborescent propus de Tabourier este cea mai apropiat de teoria programrii structurate, motiv pentru care sunt prezentate n continuare structurile folosite n cadrul acesteia.

29

Structura secvenial (BLOCK, S1, S2) BLOCK

S1

S2

Structura alternativ (IF..THEN..ELSE, C, S1, S2) sau cu o ramur vis (IF..THEN, C, S) IF THEN ELSE IF THEN

S1

S2

Structur repetitiv condiionat anterior (WHILE DO, C, S) WHILE DO C S

Structur repetitiv condiionat posterior (DO UNTIL, S, C) DO UNTIL S C

3.2.2.4. Tabele de decizie O tabel de decizie este un instrument adaptat pentru rezolvarea unei probleme care comport un numr mare de alternative. Ele exprim o extindere a logicii matematice n general i a logicii booleene n special, fiind un mijloc accesibil de concepere modular a programelor. Acest mijloc de analiz permite inventarierea tuturor aciunilor care pot fi posibile prin combinarea condiiilor precizate. O tabel de decizie este compus din patru pri: Enunul condiiilor Introducerea condiiilor Enunul aciunilor Aciuni de executat Dup caz, tabelele de decizie se pot prezenta sub diferite forme:

30

cu intrri extinse folosite atunci cnd toate condiiile sunt prezentate n clar fiind importante; cu intrri limitate atunci cnd condiiile nu sunt enunate n clar ci sub form boolean; nlnuite cnd condiiile pot fi disociate, aciunea putnd s cuprind un apel la alte tabele de decizei; simplificate cnd sunt suprimate incompatibilitile i imposibilitile

31

Capitolul 2

SISTEMUL DE GESTIUNE A BAZELOR DE DATE VISUAL FOXPRO


1. Aspecte generale ale SGBD-ului Visual FoxPro
Visual FoxPro este un sistem de gestiune a bazelor de date relaionale, ce dispune de un limbaj de programare procedural, puternic i flexibil, util n descrierea datelor i a aplicaiilor. Se va prezenta versiunea Visual FoxPro 5, ce face parte din pachetul integrat de medii de dezvoltare de aplicaii Microsoft Visual Studio 97 pentru Windows i Internet. Produsul folosete facilitile oferite de noul stil de programare, n principal modelul orientrii pe obiecte, modelul programrii conduse de evenimente i cel al programrii vizuale. SGBD-ul Visual FoxPro are n componen un gestionar al aplicaiilor (Project Manager) care controleaz ntreaga activitate, punnd la dispoziie elementele utile tuturor operaiunilor necesare cum ar fi: generatoare (Designers), asisteni integrai (Builders) i asisteni speciali (Wizards). Altfel spus, Visual FoxPro este un SGBD care mbin caracteristicile modelului relaional de organizare a datelor cu cele ale programrii orientate pe obiect. Fiind o component a pachetului Microsoft Visual Studio 97 pentru Windows i Internet, Visual FoxPro (prescurtat n cele ce urmeaz VFP) are o interfa cu utilizatorul modernizat, cu un aspect unitar cu cel al programelor sistemului de operare Windows 9x. Fereastra principal a unei sesiuni Visual FoxPro este redat n figura 4.1. Prin sesiune de lucru se nelege totalitatea comenzilor VFP executate ntre o lansare a programului i comanda de prsire a mediului (QUIT). Modurile de lucru ce pot fi folosite de utilizator n cadrul unei sesiuni de lucru sunt: modul de lucru asistat sau interfaa Visual FoxPro - cel mai simplu mod de lucru, dar i cel mai restrictiv, ntruct nu sunt folosite toate facilitile oferite de VFP. Acesta const n activarea i folosirea meniurilor implicite, respectiv a opiunilor acestora din bara de meniuri; Bara de meniuri Bara de instrumente Bara de titlu

Suprafaa de lucru

Figura 1

Fereastra de comenzi

32

modul de lucru direct sau comand - modul de lucru implicit la deschiderea unei sesiuni de lucru VFP. Acestui mod de lucru i este specific fereastra de comenzi (Command), n care se introduce, pe fiecare rnd, cte o comand. modul de lucru programat - cel n care sunt create programele; presupune cunoaterea aprofundat a comenzilor i funciilor VFP pentru a putea fi exploatate performant. Sintaxa general a unei comenzi cuprinde elementele: verb [lista expresii] [FIELDS list cmpuri] [domeniu] [FOR expr_log1] [WHILE expr_log2] [TO FILE nume_fiier TO PRINTER TO ARRAY masiv TO variabila_memorie] [ALL [LIKE EXCEPT masc]] [IN alias] [NOOPTIMIZE] unde: verb este un cuvnt rezervat, obligatoriu, reprezentnd numele comenzii i aciunea de executat; lista expresii cuprinde iruri de operanzi legai ntre ei prin operatori; FIELDS list cmpuri - este clauza prin care sunt specificate cmpurile ce rspund la comanda dat; domeniu - clauza prin care se stabilete ct din fiier va fi exploatat de comand; FOR expr_log1 - clauza cu ajutorul creia sunt selectate doar nregistrrile pentru care condiia expr_log1 este adevrat; WHILE expr_log2 clauza este aplicat ncepnd de la articolul curent i acioneaz ct condiia este adevrat; prima nregistrare ce nu ndeplinete condiia duce la abandonarea comenzii; TO FILE nume_fiier TO PRINTER TO ARRAY masiv TO variabila_memorie rezultatele obinute n urma comenzii pot fi salvate ntr-un fiier, la imprimant, ntr-un masiv sau o variabil de memorie. ALL [LIKE EXCEPT masc indic includerea/excluderea de sub incidena comenzii a unor fiiere, cmpuri sau variabile de memorie conform mtii; IN alias permite manipularea datelor dintr-o alt zon de lucru; NOOPTIMIZE inhib tehnica Rushmore de accesare rapid a nregistrrilor. n formatul general al comenzilor VFP sunt utilizate urmtoarele convenii de sintax: - cuvintele rezervate sunt scrise cu litere mari; - denumirile date de utilizator sunt scrise cu litere mici; - parantezele ptrate indic clauze opionale; - bara vertical indic opiunile exclusive n mod reciproc; - literele mici ce apar ca prefix n faa numelui variabilei indic tipul de dat pentru respectiva variabil: c pentru date de tip character, n pentru numeric, l pentru logical, d pentru date, t pentru time, y pentru currency, o pentru object i e pentru alte expresii. O comand este lansat, dup scriere, prin acionarea tastei Enter . Ea poate fi refolosit, fr a fi necesar tastarea din nou a acesteia, prin

33

mutarea cursorului pe rndul ce conine comanda respectiv i apsarea tastei Enter . Modul de lucru direct este folosit, de obicei, pentru familiarizarea utilizatorului cu formatele generale ale comenzilor n vederea crerii ulterioare a programelor sau n exploatarea ocazional a bazelor de date.

2. Tipuri de date n Visual FoxPro


Tipul unei date este o caracteristic ce stabilete modul n care data este nregistrat pe suportul de memorie al sistemului de calcul, precum i modul de interpretare i prelucrare a acesteia. Tipurile de date folosite n VFP sunt: logic sau boolean (logical) folosit pentru gestiunea pe un octet a datelor ce pot lua doar dou valori: adevrat (true) sau fals (false); construcia afiat are forma .T. sau .F. ir de caractere (character) folosit pentru introducerea a maxim 254 de caractere, alinierea datelor de acest tip fiind implicit la stnga; caracter binar (binary) - asemntor cu tipul caracter, dar datele sunt memorate n format binar; numeric (numeric) pentru manipularea numerelor de pn la 20 de cifre, din care 19 pot fi zecimale; atunci cnd numerele au o valoare informativ (numere de telefon, numere de cont, de factur etc.), este de preferat declararea lor ca date de tip caracter; alinierea datelor de acest tip este implicit la dreapta; valut sau monetar (currency) - pentru memorarea valorilor exprimate n bani; dimensiunea implicit este de 8 octei, cu 4 poziii zecimale; flotant (float) reprezentarea datelor n memoria intern este n virgul flotant; este folosit, de obicei, n calculele tiinifice, cu grade mari de precizie; numeric dublu (double) - pentru memorarea numerelor foarte mari, n virgul mobil, cu dubl precizie; dimensiunea implicit este de 8 octei; numeric ntreg (integer) folosit pentru stocarea datelor numerice ca valori binare, pe 4 octei, ceea ce nseamn economie de spaiu de memorare pentru fiecare nregistrare; dat calendaristic (date) pentru gestionarea datelor calendaristice, ntr-un format de 8 octei; ordinea implicit este formatul american ll/zz/aa, acesta putnd fi modificat prin comenzi de tip SET DATE nume_format; dat calendaristic i timp (date time) pentru introducerea suplimentar, pe lng data calendaristic, a timpului, n format hh:mm:ss AM/PM; memorarea datelor se face pe 8 octei, 4 pentru dat i 4 pentru timp; memo (memo) pentru prelucrarea irurilor de caractere de dimensiuni mari sau variabile, sau cu un anumit grad de confidenialitate; datele sunt memorate n blocuri ce au dimensiunea predefinit de 64 octei; memo binar (binary) asemntor cu tipul memo, dar datele sunt memorate n format binar; general (general) pentru stocarea unor elemente create cu ajutorul altor programe (documente, foi de calcul, imagini etc.) utiliznd tehnica OLE, de ncorporare i legare a obiectelor.

3. Crearea bazelor de date relaionale

34

O baz de date relaional reprezint o structur folosit la memorarea i gestionarea datelor, descriind un anumit tip de obiecte. n VFP o baz de date relaional are asociat un fiier special (cu extensia .dbc) n care sunt memorate tabelele componente, relaiile permanente ntre tabele, dicionarul de date asociat bazei de date etc. n modul de lucru direct, o baz de date se creeaz scriind n fereastra de comenzi urmtoarea comand: CREATE DATABASE [DatabaseName | ?] n care: DatabaseName - reprezint numele dat de ctre utilizator bazei de date; ? - deschide o fereastr n care, n zona de editare, se poate tasta un nume nou sau se poate alege unul din cele afiate. Exemplu. n modul de lucru direct, baza de date biblioteca.dbc se creeaz cu comanda: CREATE DATABASE biblioteca n modul de lucru asistat se folosesc comenzile File New Database, pictograma New File. Indiferent de modul de lucru folosit, se deschide fereastra Database Designer, cu propria bar de instrumente, iar n meniul sistem apare un nou submeniu numit Database. Bara de instrumente conine butoane pentru realizarea diferitelor operaii (Add Table, New Table etc.), opiuni ce se regsesc i n submeniul Database.

4. Crearea tabelelor
Un tabel reprezint o structur n care se pot memora date ce descriu un anumit tip de elemente. Fiecare caracteristic a elementelor alctuiete un cmp, iar elementele propriu-zise sunt memorate n nregistrri. Tabelele pot fi libere (free) sau incluse n baza de date. 4.1. Metode directe de creare a tabelelor n modul de lucru direct, pentru a crea un tabel, se folosete comanda: CREATE [FileName | ?] n care: [FileName] este numele tabelului, dat de utilizator; ? este un parametru ce deschide o fereastr n care, n zona Enter Table, se poate edita un nume nou pentru tabel sau se poate alege unul din cele afiate. n modul de lucru asistat, se alege submeniul File, opiunea New, butonul New Table i apoi pictograma New File (figura 2). Dac se dorete crearea unui tabel inclus ntr-o baz de date, se alege din submeniul Database opiunea New Table. Extensia implicit a unui tabel este .dbf. Indiferent de modul de lucru folosit, se deschide fereastra Table Designer, n care vor fi completate caracteristicile noului tabel. n figura 3 este prezentat structura tabelului cititori.dbf.

35

Figura 2 Fereastra Table Designer conine o zon inferioar n care pot fi exploatate facilitile specifice containerelor (validri de cmpuri, valori prestabilite etc.). Definirea unui tabel presupune specificarea numelui tabelului, a cmpurilor componente, a caracteristicilor acestora i a indecilor folosii la ordonarea datelor din tabel. Fiecare cmp al tabelului este caracterizat prin: name (nume) specific numele fiecrui cmp (trebuie s fie unic); type (tip) specific tipul datelor ce pot fi memorate n cmp; width (lungime) specific numrul de caractere pe care l ocup fiecare dat memorat n cmpul respectiv; decimal (numrul de zecimale) pentru cmpurile numerice, se specific numrul de cifre de dup punctul zecimal; lungimea total specificat la width trebuie s cuprind i numrul de zecimale, precum i punctul zecimal propriu-zis; index (fanionul de indexare) indic dac se stabilete un index pe baza cmpului respectiv; null (fanionul de valoare nul) indic dac n cmpul respectiv se poate memora o valoare nul. Exemplu. Crearea tabelului cititori.dbf const n urmtoarea secven de pai: scrierea comenzii CREATE cititori; completarea ferestrei Table Designer cu urmtoarea structur (figura 4.3): nr_permis N (numeric) 5 nume C (character) 15 prenume C (character) 8 cnp C (character) 13 localitatea C (character) 10 telefon C (character) 10 36

Figura 3 Asemntor cu modul de creare a tabelului cititori.dbf s-au creat i tabelele carte, domeniu i imprumut, componente ale bazei de date biblioteca, cu urmtoarele structuri: - pentru tabelul carte.dbf: cota N 6 nume_a C 10 prenume_a C 10 titlu C 20 coddomeniu N 2 editura C 10 an_aparitie N 4 nr_volume N 3 pret N 6 valoare N 9 - pentru tabelul imprumut.dbf: cota N 6 nr_permis N 5 data_i D 8 data_r D 8 - pentru tabelul domeniu.dbf: coddomeniu N 2 denumire C 15 Toate aceste caracteristici se completeaz n fereastra Table Designer, pagina Fields. n figura 4, este prezentat baza de date biblioteca.dbc cu cele patru tabele componente: carte.dbf, cititori.dbf, domeniu.dbf i imprumut.dbf. Pagina etichetat Indexes este asociat paginii Fields i conine informaii atunci cnd s-au stabilit chei de indexare. Tot aici (figura 5), pot fi stabilite sensul ordonrii (n coloana Order), numele etichetei index (n coloana Name), tipul de index (din lista Type), cheia de indexare (coloana Expression) i un filtru care s restrng accesul la nregistrrile din tabel, pe baza unor condiii impuse de utilizator (coloana Filter). 37

Pagina Table (figura.6) afieaz informaii privind tabelul care se creeaz (nume, numr cmpuri, lungime etc.). Dup ce a fost stabilit structura tabelului, se activeaz butonul OK. Se deschide o fereastr n care este afiat o ntrebare referitor la introducerea de nregistrri n tabel. Dac rspunsul este pozitiv, se deschide o nou fereastr ce cuprinde macheta de ncrcare a primului articol din tabel. Dac rspunsul este negativ, tabelul se nchide, fiind salvat doar structura lui. Ulterior, prin comenzi de adugare, se pot ncrca articole.

Figura 4

Figura 5 Coninutul fiecrui tabel (carte, cititori, imprumut, domeniu), component al bazei de date biblioteca, este dat n figurile 7, 8, 9 i 10. nregistrrile acestor tabele vor fi supuse ulterior diferitelor prelucrri.

38

Figura 6

Figura 7

Figura 8

Figura 9

39

Figura 10

5. Deschiderea i nchiderea bazelor de date i a tabelelor


5.1. Deschiderea i nchiderea bazelor de date n modul de lucru asistat, se apeleaz meniul File, opiunea Open; n zona de editare Files of Types se alege Database (*.dbc), iar n zona File name se precizeaz numele bazei de date. Dac se alege modul de lucru direct, n fereastra de comenzi se scrie comanda OPEN DATABASE, care are ca efect deschiderea bazei de date cu numele specificat. Sintaxa comenzii este: OPEN DATABASE [FileName | ?] Dac numele bazei de date nu este specificat i se folosete parametrul ?, se deschide fereastra Open, din care se selecteaz numele bazei de date ce se dorete a fi deschis. Exemplu. Se deschide baza de date biblioteca, urmnd ca ulterior s se efectueze operaii asupra acesteia: OPEN DATABASE biblioteca Comanda cu care se nchide o baz de date are formatul general: CLOSE DATABASE [ALL] Clauza ALL nchide toate bazele de date deschise. Dac este omis clauza, comanda va nchide doar baza de date activ. 5.2. Deschiderea i nchiderea tabelelor n modul de lucru asistat, un tabel poate fi deschis alegnd din submeniul File, opiunea Open i apoi completnd n fereastra deschis cele dou zone de editare, astfel: n zona Files of types - tipul fiierului - Table (*.dbf), iar n zona File name - numele fiierului. O alt posibilitate, asemntoare cu cea de mai sus, este urmtoarea: din submeniul Window se alege opiunea Data Session. Se deschide o fereastr cu acelai nume ca al opiunii (figura 11). Se acioneaz butonul Open care deschide o fereastr de dialog pentru alegerea tabelului dorit, identic cu cea descris mai sus. Tabelul ales va fi afiat n lista din stnga a ferestrei Data Session. Dac tabelul este ncorporat ntr-o baz de date, atunci deschiderea sa va determina implicit i deschiderea bazei de date din care face parte. Exemplu. Se deschide tabelul carte.dbf, din baza de date biblioteca.dbc. Figura 4.12 prezint fereastra Data Session, avnd n partea stng tabelul carte i n partea

40

de jos numele bazei de date din care face parte tabelul deschis (Database: Biblioteca), numrul zonei de lucru ocupate (Work area: 1) i numrul total de nregistrri din tabelul deschis (Records:12).

Figura 11

Figura 12 ntr-o sesiune de lucru pot fi deschise simultan 32767 de tabele. Sistemul aloc pentru fiecare din ele cte o zon de memorie numit zon de lucru (work area). La un moment dat poate fi activ doar o singur zon de lucru numit zon curent. Selectarea unei anumite zone de lucru se face cu comanda SELECT, cu urmtorul format general: SELECT nWorkArea | cTableAlias unde: - nWorkArea specific numrul zonei selectate; - cTableAlias specific aliasul tabelului ce se activeaz (aliasul reprezint un nume suplimentar de identificare a tabelului ce se deschide). Comanda ?SELECT () returneaz numrul zonei de lucru curente, iar ?SELECT(1) selecteaz ultima zon nefolosit. n modul de lucru direct, comanda folosit pentru deschiderea unui tabel este USE, cu sintaxa: USE [[DatabaseName.]Table | SQLViewName | ?] [IN nWorkArea | cTableAlias]

41

DatabaseName. Table | SQLViewName | ? indic numele tabelului ce va fi deschis sau a vederii SQL. Dac se folosete parametrul ?, se deschide fereastra de dialog Open prezentat anterior. Cea mai utilizat clauz suplimentar este: IN nWorkArea | cTableAlias - determin deschiderea tabelului ntr-o zon de lucru specificat, alta dect cea curent. Exemplul 1. Pentru deschiderea tabelului cititori.dbf n zona de lucru 2, comanda este urmtoarea: USE cititori IN 2 Comenzii USE i sunt asociate funciile: ALIAS([nWorkArea | cTableAlias]) ntoarce alias-ul zonei de lucru specificate; DBF([cTableAlias | nWorkArea]) returneaz numele tabelului deschis n zona de lucru specificat; USED([nWorkArea | cTableAlias]) ntoarce valoarea logic de adevr .T. sau de neadevr .F., dup cum zona specificat conine sau nu un tabel. Exemplul 2. Se cere aflarea alias-ului pentru tabelul carte: USE carte ALIAS biblio ? ALIAS() Pe ecran va fi afiat cuvntul biblio, reprezentnd alias-ul tabelului carte. Exemplul 3. Se afieaz pe ecran numele tabelului deschis mpreun cu calea lui de acces: USE carte ?DBF() Pe suprafaa de lucru va fi afiat urmtorul rezultat: C:\PROGRAM FILES\DEVSTUDIO\VFP\CARTE.DBF Exemplul 4. Se verific dac zona de lucru este ocupat sau nu, n funcie de anumite operaii efectuate cu tabele. USE carte ?USED() && deschide n zona 1 tabelul carte && verific dac zona este ocupat

Rezultatul afiat pe suprafaa de lucru este .T., ceea ce nseamn c zona de lucru este ocupat. Simbolurile && marcheaz o zon de comentarii. SELECT 2 ?USED() && este selectat zona de lucru 2 && verific dac zona este ocupat

Rezultatul afiat pe suprafaa de lucru este .F., ceea ce nseamn c zona de lucru nu este ocupat. nchiderea tabelelor se realizeaz cu comenzile: USE CLOSE ALL && nchide tabelul curent && nchide toate fiierele deschise

Pentru prsirea sesiunii de lucru Visual FoxPro i rentoarcerea n sistemul de operare Windows se folosete comanda QUIT.

42

6. Afiarea i modificarea structurii tabelelor


Structura unui tabel creat anterior poate fi afiat folosind una din comenzile LIST STRUCTURE sau DISPLAY STRUCTURE, cu sintaxa: LIST DISPLAY STRUCTURE Figura 13 afieaz pe ecran structura tabelului cititori. Modificarea structurii unui tabel se poate face n modul de lucru asistat, cu comanda View Table Designer. n modul de lucru direct, comanda ce realizeaz modificarea structurii unui tabel este MODIFY STRUCTURE. Indiferent de modul de lucru folosit, pe ecran apare fereastra Table Designer, identic cu cea activat n cazul crerii tabelului. Modificrile ce pot fi efectuate sunt: schimbarea numelui cmpurilor, a tipului de dat, a dimensiunii, introducerea de noi cmpuri (cu butonul Insert), tergerea de cmpuri (cu butonul Delete). ntruct prin aceast comand se pot pierde informaii din tabel, se recomand crearea n prealabil a unei copii de siguran. n figura 4.4 este afiat fereastra Table Designer pentru tabelul cititori.

Figura 13

7. Afiarea coninutului unui tabel


Atunci cnd nu intereseaz n mod deosebit aspectul rezultatelor obinute, pentru afiare se folosesc comenzile LIST i DISPLAY cu sintaxa: LIST DISPLAY [[FIELDS] FieldList] [Scope] [FOR lExpression1] [WHILE lExpression2] n mod implicit, comanda LIST determin afiarea tuturor cmpurilor tabelului. Clauza FIELDS se folosete pentru a afia doar anumite cmpuri ce vor fi introduse n list. Clauzele Scope, FOR i WHILE indic domeniul

43

nregistrrilor ce vor fi afiate. Celelalte clauze din format au aceleai funciuni ca i cele din comenzile anterioare. Domeniul implicit pentru comanda LIST este ALL. Exemplu. Pe ecran se afieaz informaii din tabelul carte.dbf, dar numai cmpurile Nume_a, Titlu, An_aparitie pentru crile aprute dup 1995. USE carte LIST FIELDS nume_a, titlu, An_aparitie >1995 FOR; An_apariie

Pe suprafaa de lucru sunt afiate informaiile ce respect condiiile impuse (figura 14).

Figura 14 Dei comanda DISPLAY are format comun cu LIST, totui, n utilizarea lor, exist cteva diferene i anume: Domeniul implicit pentru DISPLAY este nregistrarea curent, iar pentru LIST este ALL, aa nct expresiile DISPLAY ALL i LIST, respectiv DISPLAY i LIST NEXT, sunt echivalente. Pentru expresia DISPLAY ALL afiarea este ecran cu ecran, iar pentru LIST n defilare continu. Coninutul unui tabel mai poate fi afiat n format tabelar, cu ajutorul comenzii BROWSE (figura 15).

Figura 15

44

8. Prelucrarea nregistrrilor din tabele


Prelucrarea nregistrrilor din tabele const n actualizarea nregistrrilor, n fapt, n adugarea de noi date, modificarea sau tergerea logic i/sau fizic a datelor existente. Principalul instrument pentru realizarea diferitelor prelucrri a datelor din tabele este fereastra Browse. Coninutul tabelului este afiat ntr-o form tabelar asemntoare unei pagini din Excel, coloanele reprezentnd cmpurile, iar liniile fiind nregistrrile tabelului. Deschiderea ferestrei Browse se poate realiza prin mai multe modaliti, i anume: n fereastra de comenzi se scrie comanda BROWSE; se apeleaz comanda View Browse; n fereastra Data Session, din submeniul Window, dup selectarea tabelului, se acioneaz butonul Browse. Odat deschis fereastra Browse, n meniul sistem este adugat un nou submeniu, Table, care conine comenzi pentru realizarea diferitelor prelucrri asupra tabelului. 8.1. Adugarea de noi nregistrri n tabele Adugarea de noi nregistrri ntr-un tabel se poate face, n funcie de poziia pe care o va ocupa noua nregistrare, la sfritul tabelului sau n interiorul tabelului. Pentru a aduga o nou nregistrare la sfritul tabelului, fiind deschis fereastra Browse, se alege opiunea Append Mode din submeniul View, sau din submeniul Table, opiunea Append New Record. Comanda de adugare a unei nregistrri la sfritul tabelului este APPEND, iar pentru o nregistrarea goal, APPEND BLANK, urmnd ca informaiile s se ncarce mai trziu prin alte comenzi. Comanda APPEND permite i extinderea tabelului curent prin adugarea la sfritul lui a unor articole preluate dintr-un alt fiier. Acelai lucru se obine dac, odat deschis fereastra Browse, din submeniul Table se alege opiunea Append Records.Se va deschide fereastra Append From n care se va introduce numele tabelului din care se adaug nregistrri. n funcie de criteriile impuse de utilizator, se vor completa zonele afiate n urma acionrii butonului Options, respectiv Fields sau For (figura 17).

Figura 17

45

Exemplu. Lucrnd n modul direct, la sfritul tabelului cititori.dbf se adaug date dintr-un alt tabel, cititori1.dbf, tabel cu aceeai structur. Se adaug numai cititorii din localitatea Iasi. n final, se va afia tabelul. Secvena de instruciuni necesar acestor operaii este urmtoarea: USE cititori APPEND FROM cititori1 FOR localitate =IASI BROWSE Pentru a introduce o nregistrare n interiorul unui tabel, se folosete comanda INSERT. Dac se folosete i clauza BEFORE, atunci noua nregistrare va fi plasat naintea celei curente. Clauza BLANK are acelai efect ca i n cazul comenzii APPEND. 8.2. Modificarea coninutului unui tabel Modificarea datelor dintr-un tabel se poate face n modul de lucru direct cu una din comenzile: BROWSE, CHANGE, EDIT, REPLACE. Comenzile CHANGE i EDIT sunt identice i deschid ferestre verticale asemntoare cu cele de ncrcare a nregistrrilor. Comanda BROWSE este cea mai utilizat referitor la prelucrrile de efectuat asupra nregistrrilor dintr-un tabel. Comanda REPLACE este comanda de modificare propriu-zis, nlocuind fiecare cmp specificat cu rezultatul evalurii expresiei asociate. Sintaxa comenzii este: REPLACE FieldName1 WITH eExpression1 [ADDITIVE] [, FieldName2 WITH eExpression2 [ADDITIVE]] ... [Scope] [FOR lExpression1] [WHILE lExpression2] [IN nWorkArea | cTableAlias] [NOOPTIMIZE] Clauza ADDITIVE poate fi folosit numai pentru cmpurile de tip memo, efectul constnd n adugarea noului coninut la cel iniial. Domeniul implicit al comenzii este nregistrarea curent. Dac se dorete modificarea altei nregistrri sau a unui grup de nregistrri, se folosesc clauzele Scope, FOR sau WHILE. Exemplu. n tabelul carte, deoarece cmpul valoare nu conine i valoarea TVA-ului, se va modifica acest cmp: USE carte REPLACE ALL valoare WITH valoare*1.19 BROWSE Pentru obinerea aceluiai rezultat, fiind deschis fereastra Browse, se apeleaz submeniul Table, opiunea Replace Field. Se afieaz o fereastr de dialog n care, din lista Field, se selecteaz cmpul valoare. Expresia cu care se va nlocui acest cmp este valoare*1.19 (figura 18). Din lista Scope se alege domeniul All, modificarea realizndu-se astfel pentru toate nregistrrile tabelului.

46

Figura 18 8.3. tergerea nregistrrilor dintr-un tabel tergerea nregistrrilor unui tabel se poate face la nivel logic sau fizic. Realizarea operaiei presupune utilizarea comenzilor sau a meniului sistem, respectiv submeniul Table. n cazul tergerii logice, nregistrarea nu este tears propriu-zis din tabel, ci este marcat pentru tergere cu semnul *. Comanda folosit pentru realizarea acestei operaii este DELETE, cu urmtorul format general: DELETE [Scope] [FOR lExpression1] [WHILE lExpression2] [IN nWorkArea | cTableAlias] Domeniul implicit al comenzii este nregistrarea curent. Clauzele din formatul general au acelai rol ca la celelalte comenzi precedente. Cu comanda SET DELETED ONOFF este controlat accesul la nregistrrile marcate pentru tergere. Opiunea implicit este OFF i admite accesarea tuturor nregistrrilor indiferent de marcajul lor de tergere. Opiunea ON mpiedic accesul comenzilor FoxPro la nregistrrile marcate pentru tergere. Exemplul 1. Vor fi terse din tabelul carte toate crile de la editura ECONOMICA i vor fi afiate pe ecran informaii doar din cmpurile titlu i editura: USE carte DELETE FOR editura =ECONOMICA LIST FIELDS titlu, editura Rezultatul secvenei de instruciuni de mai sus este redat n figura 19. Se observ c n dreptul nregistrrilor ce respect condiia impus de utilizator apare semnul *.

47

Figura 19 Pentru ca nregistrrile marcate pentru tergere s nu fie luate n considerare la prelucrare, se folosete comanda: SET DELETED ON LIST FIELDS titlu, editura Rezultatul este vizibil n figura 20, observndu-se dispariia celor dou nregistrri marcate anterior cu semnul *. Testarea marcajului de tergere al unei nregistrri se face cu funcia DELETED() care returneaz valoarea logic True (.T.) dac nregistrarea curent este marcat pentru tergere i False (.F.) n caz contrar. Exemplul 2. n tabelul carte, se testeaz dac nregistrrile cu numerele 3 i 4 sunt marcate pentru tergere. Dup deschiderea tabelului, cu comanda GO, se realizeaz poziionarea pe articolul cu numrul 3, apoi pe cel cu numrul 4. USE carte GO 3 ?DELETED() Rezultatul obinut n urma secvenei de instruciuni de mai sus este valoarea .T., ceea ce nseamn c nregistrarea cu numrul 3 este marcat pentru tergere. GO 4 ?DELETED() Rezultatul obinut este valoarea .F., nsemnnd c nregistrarea cu numrul 4 nu este marcat pentru tergere.

48

Figura 20 nregistrrile marcate pentru tergere pot fi refcute, redevenind accesibile tuturor comenzilor. Comanda ce realizeaz aceast operaie este RECALL, cu sintaxa: RECALL [Scope] [FOR lExpression1] [WHILE lExpression2] Comanda are aceleai clauze ca DELETE. Exemplul 3. n tabelul carte se va anula marcajul de tergere pentru titlul FINANTE (figura 21), folosind urmtoarele instruciuni: USE carte RECALL FOR titlu=FINANTE LIST FIELDS titlu, editura Se vor afia pe suprafaa de lucru doar informaiile referitoare la titlul crilor i editura la care au aprut.

49

Figura 21 Dac se folosete fereastra Browse, marcarea pentru tergere se realizeaz prin alegerea opiunii Delete Records din submeniul Table sau, mai simplu, printr-un clic pe marcatorul de tergere din dreptul nregistrrii respective. Acest marcator este un comutator plasat ntr-o coloan special din partea stng a ferestrei (figura 22). Demarcarea unei nregistrri terse logic se realizeaz prin deselectarea marcatorului din dreptul nregistrrii sau prin alegerea opiunii Recall Records din submeniul Table. tergerea fizic presupune eliminarea permanent a nregistrrilor din tabel. Comenzile folosite sunt PACK i ZAP.

Figura 22 Comanda PACK elimin permanent toate nregistrrile marcate n prealabil pentru tergere. Dup executarea comenzii, nregistrrile terse nu mai pot fi recuperate. Comanda ZAP terge definitiv toate nregistrrile din tabelul curent, fr ca acestea s fi fost marcate pentru tergere nainte; este echivalent cu secvena de instruciuni: DELETE ALL PACK Dac se folosete fereastra Browse, tergerea fizic a nregistrrilor marcate logic se realizeaz prin alegerea opiunii Remove Deleted Records din submeniul Table.

50

9. Ordonarea nregistrrilor din tabele


Exploatarea unui tabel implic ordonarea dup anumite criterii a datelor coninute de acesta. De obicei, ncrcarea datelor se realizeaz ntr-un mod aleatoriu, iar actualizarea se face dup necesiti obiective ce nu coincid ntotdeauna cu ordinea din tabele. Ordonarea unui tabel presupune stabilirea unui criteriu dup care s fie parcurse nregistrrile. Criteriul de ordonare, numit i cheie de ordonare, este o expresie alctuit dintr-un cmp sau o combinaie de cmpuri ale tabelului. Exist dou metode de ordonare a unui tabel: ordonarea fizic a tabelului sau sortarea ordonarea logic sau indexarea tabelului. 9.1. Sortarea nregistrrilor din tabele Sortarea presupune schimbarea nregistrrilor ntre ele, dup un anumit algoritm, pn se obine ordinea dorit. Se obine astfel un nou tabel, cu nume diferit, dar cu aceeai structur, care conine aceleai nregistrri cu ale tabelului iniial, dar ordonate dup criteriul impus. Sortarea se realizeaz cu ajutorul comenzii SORT, cu sintaxa: SORT TO TableName ON FieldName1 [/A | /D] [/C] [, FieldName2 [/A | /D] [/C] ...] [ASCENDING | DESCENDING] [Scope] [FOR lExpression1] [WHILE lExpression2] [FIELDS FieldNameList Tabelul care se obine n urma operaiei de sortare trebuie specificat n clauza TO. Criteriul de sortare se stabilete n clauza ON i poate conine unul sau mai multe cmpuri, numite chei de sortare. Pentru fiecare cmp cheie, se pot asocia parametri suplimentari: /A pentru ordonare cresctoare dup cmpul respectiv, /D pentru ordonare descresctoare. Parametrul /C (Case sensitive) este folosit n cazul cmpurilor de tip ir de caractere, atunci cnd se dorete ignorarea diferenei prioritare ntre literele mari i literele mici. Clauzele ASCENDING i DESCENDING sunt asemntoare cu parametrii /A i /D, dar difer prin faptul c acioneaz la nivel de nregistrare. Prin folosirea clauzelor opionale [Scope], [FOR], [WHILE], [FIELDS], tabelul rezultat n urma sortrii poate s conin doar nregistrrile care satisfac condiiile de selecie. Exemplu. Plecnd de la tabelul cititori, se vor ordona nregistrrile dup cheia de sortare nume, selectnd doar cititorii din localitatea IASI. n figura 24, n fereastra de comenzi (Command), este prezentat secvena corespunztoare de instruciuni, iar ntr-o fereastr Browse tabela cititsort obinut n urma sortrii.

51

Figura 24 9.2. Indexarea nregistrrilor din tabele Indexarea, spre deosebire de sortare care realizeaz un nou tabel, presupune o ordonare logic a datelor din tabele, prin crearea unui nou fiier numit fiier index asociat tabelului. Acest fiier nu conine nregistrri, ci doar informaii privind ordinea de accesare a nregistrrilor. Prin indexare, ordinea fizic a nregistrrilor din tabel nu se modific. Se schimb modul n care utilizatorul are acces la datele respective. 9.2.1. Crearea fiierelor index n versiunile mai vechi de FoxPro exist dou clase de indeci: simpli i compui. Indecii simpli conin un singur criteriu de indexare, iar cei compui mai multe astfel de criterii. Indecii compui sunt i ei de dou tipuri: structurali (memorai ntr-un fiier index cu acelai nume cu al tabelului) i nestructurali (memorai n fiiere cu nume diferite de cel al tabelului). Indecii structurali sunt deschii automat la deschiderea tabelului, iar cei nestructurali trebuie deschii explicit. n versiunile Visual FoxPro, indecii compui structurali sunt creai implicit, devenind astfel mai avantajoi. Aceti indeci sunt memorai ntrun singur fiier cu extensia .cdx. Fiecrui index dintr-un asemenea fiier i se atribuie un nume, numit etichet index. La acest nume se face referire n comenzile de prelucrare. Indecii compui structurali pot fi de mai multe tipuri, i anume: normal (Regular) care construiesc pentru fiecare nregistrare a tabelului cte o nregistrare n fiierul respectiv, indiferent de multiplicarea cheii de indexare. Altfel spus, ntr-un tabel indexat toate nregistrrile sunt accesibile, indiferent de valoarea cheii de indexare. unic (Unique) care permit o valoare unic a cheii de indexare. n cazul tabelelor cu valori repetate ale cheii de indexare, se include n fiierul index numai prima apariie a nregistrrii cu valoarea respectiv a cheii, urmtoarele nregistrri cu aceeai valoare a cheii de indexare fiind ignorate, dei fizic exist.

52

candidat (Candidate) - sunt asemntori cu cei unici, dar interzic ncrcarea de nregistrri care dubleaz valoarea cheii de indexare, genernd un mesaj de eroare. cheie primar (Primary) - sunt folosii n cazul n care se creeaz relaii ntre tabele, fiind criteriul care identific n mod unic nregistrrile tabelului. Responsabilitatea stabilirii tipului de index i revine programatorului. Astfel, pentru tabelul cititori.dbf nu se pot stabili indeci de tip unic, candidat sau cheie primar pentru cmpul nume, ntruct pot exista mai muli cititori cu acelai nume. n cazul unui index unic, a doua persoan din tabel cu acelai nume nu va fi accesibil, iar n cazul indecilor candidat sau cheie primar, nu va putea fi introdus nregistrarea corespunztoare celei de-a doua persoane. Cmpul nr_permis sau cnp (cod numeric personal) ar putea fi index unic, candidat sau cheie primar, ntruct acestea identific n mod unic fiecare persoan. Indecii compui structurali pot fi precizai odat cu crearea tabelului, direct n fereastra Table Designer, pagina cu eticheta Indexes, dup ce n pagina Fields, n cmpul respectiv, a fost marcat fanionul de indexare. Fiecare element ce trebuie introdus n aceast fereastr a fost descris la crearea tabelelor, pagina Indexes (figura 4.5). O alt modalitate de creare a indecilor simpli i compui const n folosirea comenzii INDEX, cu formatul general: INDEX ON eExpression TO IDXFileName | TAG TagName [OF CDXFileName] [FOR lExpression] Prin clauza ON eExpression este precizat ordinea de accesare a nregistrrilor; eExpression poate fi de tip numeric, caracter i dat calendaristic, incluznd cmpuri din tabel, funcii, operatori, constante, variabile din memorie. Clauza TO IDXFileName permite crearea unui fiier index simplu (numit i index de sine stttor), cu extensia implicit .idx i numele specificat de utilizator. Fiecare fiier conine un singur index i este independent de celelalte. Clauza TAG TagName [OF CDXFileName] permite crearea unui fiier index compus, cu extensia .cdx. ntr-un astfel de fiier, se poate stoca un numr nelimitat de expresii de indexare distincte. Fiierele structurale se creeaz implicit prin clauza TAG TagName (nume etichet) i au acelai nume cu al tabelului. Aa cum am mai amintit, acest tip de index se deschide automat odat cu tabelul. Fiierele nestructurale se creeaz cu ajutorul clauzei OF CDXFileName, numele lor fiind specificat explicit de ctre utilizator. Clauza FOR lExpression permite ca indexul astfel creat s acioneze ca un filtru asupra tabelului. Urmtoarele funcii pot fi asociate operaiei de indexare: NDX(), cu sintaxa: NDX(nIndexNumber [, nWorkArea | cTableAlias]), ce returneaz numele fiierului index simplu deschis n

53

zona de lucru specificat (nWorkArea) i care corespunde numrului de ordine dat (nIndexNumber). MDX() i CDX() au acelai format ca i NDX() i returneaz numele fiierului index compus deschis. TAG() returneaz numele fiecrei etichete a indexului compus curent. KEY() returneaz cheia de indexare. Exemplu. Se va crea pentru tabelul carte un index compus structural pentru accesul crilor dup valoare, n ordine cresctoare. n fereastra de comenzi se va introduce urmtoarea secven de instruciuni: USE carte DISPLAY ALL INDEX ON valoare TAG valoare DISPLAY ALL ?CDX(1) && afieaz numele indexului structural Pe suprafaa de lucru va fi afiat numele i calea de acces a fiierului index structural obinut: C:\PROGRAM FILES\DEVSTUDIO\VFP\CARTE.CDX) Indexarea tabelului presupune crearea fiierului carte.cdx, n care se memoreaz poziiile nregistrrilor din tabel, n ordinea dorit (n exemplul considerat, ordine cresctoare, dup cmpul valoare). Accesul la datele din tabelul indexat carte se face dup schema din figura 25. Dac se dorete citirea datelor referitoare la cartea cu valoarea a 5-a ca mrime, se procedeaz astfel: Sistemul citete din fiierul index asociat (carte.cdx) nregistrarea din poziia a 5-a, care conine att valoarea cheii pentru nregistrarea respectiv, ct i indicatorul ctre nregistrarea corespunztoare din tabel. Pe baza acestui indicator, se stabilete poziia fizic a nregistrrii corespunztoare din tabel (n exemplul din figura 4.25, dup cum indic sgeata, este nregistrarea 1). Se citesc apoi datele din tabel. Carte.cdx Carte.dbf Valoar Pozii Nr.nre Nume_a Valoare Figura 4.25 e e g 89250 10 1 EMINESCU 178500 10710 2 2 BACOVIA 107100 9.2.2. 0 3 REBREANU 142800 Deschiderea 12852 9 4 SADOVEANU 266560 i nchiderea 0 5 VINTILA 226100 fiierelor 14280 3 6 STANCU 476000 index 0 7 PETRUS 178500 17850 1 Fiierele 0 index pot fi 17850 7 deschise cu ajutorul mai multor comenzi, dintre care cele 0 mai utilizate sunt: USE, SET ORDER, SET INDEX. 20230 8 0 . 54

n cazul comenzii USE, formatul general a fost explicat la paragraful referitor la deschiderea tabelelor, inclusiv clauzele specifice deschiderii fiierelor index (INDEX, ORDER etc.). Un tabel poate avea mai muli indeci, dar la un moment dat doar unul este activ. Ordinea n care este parcurs tabelul este determinat de indexul activ. Pentru a activa un alt index, dup deschiderea tabelului, se folosete comanda SET ORDER cu sintaxa: SET ORDER TO [nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [IN nWorkArea | cTableAlias] [ASCENDING | DESCENDING]] Clauzele au aceleai semnificaii ca n cazul comenzii INDEX. Exemplul 1. Avnd creai indecii nume.idx i cititori.cdx (cu eticheta oras), vor fi accesai cititorii dup eticheta oras. Instruciunile care se introduc n fereastra de comenzi sunt: USE cititori INDEX nume.idx, cititori.cdx SET ORDER TO TAG oras BROWSE ?TAG(1) && returneaz numele etichetei indexului curent Pe suprafaa de lucru se va afia rezultatul obinut i anume ORAS. Comanda SET INDEX este folosit pentru deschiderea ulterioar a unor fiiere index pentru tabelul curent. Sintaxa comenzii este: SET INDEX TO [IndexFileList | ? ] [ORDER nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]] [ADDITIVE] Clauzele au aceeai semnificaie ca n cazul comenzii INDEX, cu precizarea c n cazul clauzei ADDITIVE fiierele specificate sunt adugate la lista deja existent. Pentru a reactualiza toate fiierele index deschise i asociate tabelului curent, se folosete comanda REINDEX. Pentru nchiderea fiierelor index din zona de lucru curent, cu excepia celui structural, se folosesc comenzile: SET INDEX TO fr nici o clauz suplimentar CLOSE INDEX Comenzile CLOSE ALL, USE i CLOSE DATABASE nchid i fiierele index deschise. Exemplul 2. Se actualizeaz indecii nume.idx i cititori.cdx asociai tabelului cititori.dbf. Urmtoarea secven de instruciuni presupune deschiderea tabelului i a indecilor precizai i, apoi, actualizarea tabelului: USE carte INDEX nume.idx, cititori.cdx REINDEX

10. Relaii ntre tabele


10.1. Stabilirea relaiilor ntre tabelele unei baze de date

55

Modelul relaional al bazelor de date implic organizarea datelor n tabele legate ntre ele prin relaii. Aceste relaii pot fi: temporare sau dinamice, create prin comenzi n programele de prelucrare, fiind disponibile numai la rularea acestora; permanente, create automat de sistem la deschiderea bazei de date care conine tabelele legate, fiind memorate n fiierul bazei de date. Pentru a crea relaii permanente ntre tabele, tabelul printe (conductor) trebuie s aib un index candidat sau primar i tabelul copil (condus) orice fel de index. Faptul c n tabelul printe indexul este candidat sau primar determin stabilirea unor relaii de tip 1:1 sau 1:m, ntruct tipul indexului nu permite existena mai multor nregistrri cu aceeai valoare a cheii de indexare. Exemplul 1. Fiind deschis baza de date biblioteca.dbc, cu tabelele componente carte.dbf, cititori.dbf, imprumut.dbf i domeniu.dbf, se cere stabilirea relaiilor dintre ele. Indecii necesari stabilirii relaiilor sunt: - pentru tabelul carte: index primar cmpul cota i index normal cmpul coddomeniu; - pentru tabelul domeniu: index primar cmpul coddomeniu; - pentru tabelul cititori: index primar cmpul nr_permis; - pentru tabelul imprumut: index primar cmpul cota i index candidat cmpul nr_permis. n fereastra Database Designer, pentru a realiza legtura ntre tabelul domeniu.dbf (tabel printe) i tabelul carte.dbf (tabel copil), se trage cu mouse-ul indexul coddomeniu din tabelul copil carte.dbf peste indexul cu acelai nume din domeniu.dbf. Relaia stabilit este de tip 1:m. Expresia dup care s-a stabilit legtura ntre aceste dou tabele este cmpul comun coddomeniu. ntre tabelele mprumut(printe) i cititori(copil), precum i mprumut (printe) i carte (copil) se stabilesc relaii de tip 1:1, n acelai mod ca n exemplul precedent. Fereastra Database Designer, cu relaiile stabilite ntre tabele, arat ca n figura 26. Stabilirea unei relaii ntre dou tabele se poate realiza i cu ajutorul comenzii SET RELATION, cu formatul general: SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1 [, eExpression2 INTO nWorkArea2 | cTableAlias2 ...] [IN nWorkArea | cTableAlias] Comanda stabilete o relaie ntre tabelul printe i unul sau mai multe tabele copii, specificate prin zonele de lucru sau alias-urile lor. Criteriile dup care o nregistrare din tabelul copil corespunde unei nregistrri din tabelul printe sunt specificate prin expresiile eExpression1, eExpression2

56

Figura 26 Exemplul 2. Se va stabili o relaie ntre tabelele domeniu i carte, indexate, n prealabil, dup cmpul comun coddomeniu. USE carte SELECT 2 && selecteaz zona de lucru 2 USE domeniu SET ORDER TO coddomeniu && activeaz fiierul index SELECT 1 && selecteaz prima zon de lucru SET RELATION TO coddomeniu INTO 2 GOTO 5 && poziioneaz cursorul pe nregistrarea 5 DISPLAY SELECT 2 DISPLAY && afieaz nregistrarea pentru care valoarea cmpului coddomeniu este identic cu cea din nregistrarea 5 a tabelei carte. nlturarea unei relaii dintre dou tabele se face cu comanda: SET RELATION OFF INTO child table care terge relaia specificat dintre tabelul activ i tabelul copil (child table). Comanda SET RELATION TO fr alte clauze terge toate relaiile tabelului activ. 10.2. Integritate referenial Integritatea referenial reprezint un ansamblu de reguli impuse tabelelor ntre care s-au stabilit relaii. Aceste reguli sunt utile atunci cnd se dorete modificarea unor date din tabel. Modificrile dintr-un tabel afecteaz relaia acestuia cu un alt tabel.

57

Adugarea unei nregistrri noi, tergerea sau modificarea unei nregistrri sunt cteva dintre evenimentele tratate prin integritate referenial. Opiunile referitoare la integritatea referenial a unei relaii se specific n fereastra Referential Integrity Builder. Pornind din fereastra Database Designer, se execut dublu clic pe linia de legtur dintre cele dou tabele i apoi, din fereastra de dialog Edit Relationship, se selecteaz butonul Referential Integrity . Fereastra Referential Integrity Builder (figura 27) conine trei pagini, fiecare dintre ele controlnd cte un eveniment, astfel: Rules for Updating conine reguli pentru actualizare, ce includ opiunile referitoare la modificarea datelor din tabelele legate i anume: - Ignore (ignorare) sunt permise modificrile unor date din tabelul printe, chiar dac nregistrrile din tabelul copil rmn fr corespondent. - Restrict (restricionare) modificarea este oprit n cazul n care exist nregistrri corespunztoare n tabelul copil. - Cascade (modificare n cascad) sunt modificate automat toate nregistrrile din tabelul copil conform noii valori a cheii relaiei. Rules for Deleting reguli pentru tergere; includ opiunile referitoare la tergerea nregistrrilor din tabelul printe ale unei relaii, astfel: - Ignore (ignorare) este permis tergerea, chiar dac n tabelul copil exist nregistrri legate de nregistrarea tears din tabelul printe. - Restrict (restricionare) oprete tergerea atunci cnd exist nregistrri corespunztoare n tabelul copil. - Cascade (tergere n cascad) - sunt terse automat toate nregistrrile din tabelul copil legate de nregistrarea printe tears. Rules for Inserting reguli pentru inserare; cuprind opiunile referitoare la adugarea de noi nregistrri la tabelele legate, astfel: - Ignore (ignorare) este permis adugarea noii nregistrri n tabelul copil, indiferent dac exist sau nu corespondent n tabelul printe. - Restrict (restricionare) este generat un mesaj de eroare atunci cnd se ncearc adugarea unei nregistrri n tabelul copil fr s existe corespondent n tabelul printe.

58

Figura 27

11. Generatoare n Visual FoxPro


Generatoarele sunt instrumente ncorporate n pachetul VFP, care, cu minim de informaii oferite de utilizator, permit executarea rapid a unei game largi de aciuni asupra tabelelor sau a bazelor de date. Ele asigur realizarea uoar a ecranelor, meniurilor, rapoartelor, interogrilor i a etichetelor, fr a scrie programe surs. Principiul de funcionare a generatorului cere ca utilizatorul s-i specifice, prin intermediul interfeei VFP, opiunile i cerinele sale, iar VFP s genereze programe obiect pe baza acestora. n seciunile urmtoare se prezint cteva noiuni privind realizarea rapoartelor, etichetelor, meniurilor, formelor i proiectelor cu ajutorul generatoarelor. Generatorul de filtre a fost prezentat n paragraful referitor la interogarea bazelor de date. 11.1. Generatorul de rapoarte Rapoartele reprezint liste cu structuri complexe ce cuprind ansambluri de informaii construite pe baza datelor din tabele, informaii care urmeaz a fi afiate pe ecran, salvate ntr-un fiier text sau listate la imprimant. Generatorul de rapoarte este un utilitar al sistemului VFP care permite utilizatorului construirea raportului n mod interactiv, prin folosirea diferitelor ferestre de dialog, opiuni etc. Lansarea generatorului de rapoarte se poate face n modul de lucru direct, cu comanda: CREATE REPORT [FileName | ?] sau, n modul de lucru asistat, prin alegerea din meniul File a opiunii New, butonul Report, pictograma New File sau Wizard. Indiferent de modul de lucru folosit, n bara meniului sistem devine disponibil meniul Report (figura 40) i se deschide fereastra Report Designer pentru configurarea noului raport (figura 41).

Figura 4.40 Implicit, fereastra de configurare prezint 3 benzi orizontale (figura.41): banda Page Header (antet de pagin), n care se pot plasa texte, constante, variabile care vor fi afiate sau tiprite n partea superioar a fiecrei pagini a raportului final (de exemplu: titlu, antet, numr de pagin, dat).

59

banda Detail (detalii) reprezint coninutul propriu-zis al raportului i conine informaii din baza de date folosite n raport. Pot fi i cmpuri calculate pe baza expresiilor construite de utilizator. banda Page Footer (subsol de pagin) cuprinde texte, constante, variabile ce vor fi afiate sau tiprite n partea inferioar a fiecrei pagini din raport. Implicit, n aceast band figureaz funcia Date() i variabila Page No care afieaz data sistemului i numrul paginii.

Figura.41 Pe lng aceste benzi, mai pot fi afiate ulterior i altele, prin alegerea unor opiuni din meniul Report. Astfel, benzile Title i Summary sunt afiate prin alegerea opiunii Title/Summary i activarea comutatoarelor respective din fereastra de dialog deschis. Banda Title (titlu) conine un titlu ce se afieaz o singur dat pe prima pagin a raportului. Banda Summary (rezumat) poate cuprinde, pe ultima pagin a raportului, informaii rezumative i/sau calcule generale privind datele din raport. Atunci cnd se dorete gruparea articolelor dup criterii stabilite de utilizator, n fereastra de configurare devin disponibile benzile Group Header (antetul grupului) - ce conine informaii care asigur identificarea fiecrui grup n parte i Group Footer (subsolul grupului) ce poate conine calcule intermediare pe baza datelor din fiecare grup, rezumate i/sau subtotaluri realizate pe baza informaiilor din grup. Definirea grupurilor de articole se realizeaz cu opiunea Data Grouping din meniul Report. Pentru o grupare corect, naintea lansrii generatorului de rapoarte, este necesar indexarea tabelului dup criteriul folosit ca element de grupare. Se pot obine i aa numitele rapoarte rapide prin alegerea opiunii Quick Report din meniul Report. n fereastra de dialog deschis (figura 42), se stabilete structura raportului rapid.

60

Figura 4.42 Butoanele de comand Field layout stabilesc cum vor fi plasate cmpurile n banda de detalii, respectiv pe coloane sau pe linii. Dac se activeaz caseta de validare Titles, atunci, n antetul raportului, vor fi afiate, pe coloane, numele cmpurilor. Dac se activeaz i caseta Add alias, la numele cmpurilor din banda de detalii se va ataa i aliasul tabelului din care fac parte. Caseta Add table to data environment activat salveaz informaiile privind starea mediului VFP. Butonul Fields permite selectarea din fereastra Field Picker a cmpurilor ce vor face parte din raport. n benzile rapoartelor pot fi incluse, cu ajutorul instrumentelor din bara utilitar Report Controls Toolbar, activat din meniul View, diferite tipuri de obiecte precum texte, cmpuri ale tabelelor sau cmpuri calculate, elemente grafice (linii, chenare), imagini. Modificarea structurii unui raport creat anterior se face fie prin alegerea din meniul File a opiunii Open i apoi a numelui raportului respectiv, fie cu ajutorul comenzii MODIFY REPORT care are urmtoarea sintax: MODIFY REPORT [FileName | ?] Executarea unui raport se realizeaz cu comanda REPORT FORM: REPORT FORM FileName1 | ? FileName1 reprezint numele raportului. Exemplu. Se folosete tabelul carte, din care se va obine un raport cu titlul SITUAIA FONDULUI DE CARTE, n care articolele se grupeaz dup codul domeniului (coddomeniu). Pentru fiecare domeniu, se calculeaz valoarea total a crilor, iar n finalul raportului, valoarea total a ntregului fond de carte. USE carte INDEX ON coddomeniu TO domen CREATE REPORT carte Din meniul Report se alege opiunea Quick Report pentru a se obine un raport rapid. Pentru scrierea titlului, se activeaz opiunea Title Band, apoi butonul Label din Report Controls Toolbar si se scrie titlul n zona dorit. Pentru gruparea datelor, din meniul Report se va selecta Data Grouping Insert. Se va activa butonul cu trei puncte pentru a lansa constructorul de expresii (Expression Buider). Din fereastra acestuia, se selecteaz cmpul dup care se dorete gruparea datelor (coddomeniu) i dup care s-a realizat indexarea bazei de date. Pentru calcularea valorii totale, n banda Group Footer se selecteaz din bara de instrumente butonul ab (field) i din fereastra constructorului de expresii (Expression Builder)

61

se selecteaz cmpul valoare. Se revine apoi la butonul Calculations, de unde se alege tipul de calcul dorit - n cazul exemplului propus - Sum (suma). n banda Summary se calculeaz asemntor suma total pentru ntregul fond de carte. Fereastra Report Designer va arta, n final, ca n figura 43.

Figura 43 Pentru previzualizarea raportului obinut, se folosete View Preview, rezultatul fiind cel din figura 44.

Figura 44 11.2. Generatorul de etichete Informaiile din tabele sau baze de date pot fi prezentate n etichete, sub form simplificat. Sunt folosite pentru obinerea crilor de vizit, a invitaiilor, etichetelor produs, etichetelor pentru coresponden, fluturailor pentru salarii etc. Lansarea generatorului de etichete (Label Designer) se face n modul de lucru asistat, prin apelarea meniului File, opiunea New, butonul Label i pictograma New File sau Wizard sau n modul de lucru direct cu comanda: CREATE LABEL [FileName | ?] 62

Pe ecran se deschide fereastra New Label care permite alegerea, dintr-o list predefinit, a parametrilor fizici ai etichetei ce se va obine (lime, nlime, numr de etichete pe o pagin). Crearea etichetelor se aseamn cu crearea rapoartelor, la definirea lor fiind folosit acelai meniu Report, mpreun cu bara de instrumente Report Controls Toolbar. Dup alegerea tipului de etichet, se deschide fereastra de configurare Label Designer, asemntoare cu fereastra Report Designer. n aceast fereastr, poate fi obinut o etichet rapid prin activarea opiunii Quick Report din meniul Report. ntr-o astfel de etichet sunt incluse primele 5 cmpuri din tabelul curent. Pentru configurarea unei etichete personalizate, se folosesc butoanele din Report Controls Toolbar. Modificarea unei etichete create se realizeaz folosind meniul File, opiunea Open sau cu comanda: MODIFY LABEL [FileName | ?] Exemplu. Se obine, plecnd de la tabelul carte, o etichet care va cuprinde cota crii (cota) i codul domeniului din care face parte cartea (coddomeniu). Se deschide tabelul carte. Se scrie comanda CREATE LABEL; se alege tipul de etichet, iar din meniul Report se selecteaz opiunea Quick Report (figura.45).

Figura 45 Field Layout - pentru dispunerea cmpurilor pe vertical. Fields i eticheta Field Picker. Se aleg cmpurile cota i coddomeniu n lista Selected fields, apoi butonul OK (figura 4.46).

63

Figura 46

Figura 47 Dac se dorete introducerea unui cmp calculat se folosete bara de instrumente Report Controls Toolbar, respectiv butoanele pentru text (A) i pentru cmpuri (ab). Selectarea butonului ab are ca efect deschiderea ferestrei Report Expression. n continuare, selectnd butonul cu trei puncte () se lanseaz constructorul de expresii (Expression builder), cu ajutorul cruia se introduce expresia dorit (figura 47). Fereastra Label Designer este prezentat n figura 48.

Figura 48 Previzualizarea etichetei obinute (carte.lbx) se obine apelnd meniul View, opiunea Preview (figura 49).

64

Figura 49

12. Elemente de programare clasic


12.1. Scrierea, programelor modificarea, depanarea i execuia

Programul surs reprezint totalitatea instruciunilor i/sau comenzilor pregtite i ordonate conform unui algoritm, utilizate pentru rezolvarea unei anumite probleme sau realizarea unei aciuni. Ansamblul activitilor de concepere, dezvoltare i ntreinere a programelor se numete programare. Scrierea i modificarea programelor surs se poate realiza cu ajutorul unui editor de texte ncorporat n sistemul VFP, lansat cu comanda MODIFY COMMAND sau, altfel, apelnd File New Program New File. Formatul general al comenzii este: MODIFY COMMAND [FileName | ?] [NOEDIT] [NOMENU] [NOWAIT] [RANGE nStartCharacter, nEndCharacter] [[WINDOW WindowName1] [IN [WINDOW] WindowName2 | IN SCREEN]] [AS nCodePage] [SAME] [SAVE] Clauza NOEDIT permite vizualizarea programului n fereastra de editare fr posibilitatea de a-l modifica. Clauza NOMENU inhib afiarea meniului Format din bara meniului sistem. Clauza NOWAIT anuleaz n program pauza determinat de comanda MODIFY COMMAND, nchiznd fereastra de editare. Clauza RANGE nStartCharacter, nEndCharacter permite selectarea unei pri din fiierul de comenzi i ncrcarea acesteia n fereastra de editare. Zona selectat este specificat prin cele dou expresii numerice ce delimiteaz prima i ultima linie. Clauza WINDOW WindowName1 specific fereastra ale crei caracteristici le va prelua fereastra de editare. Clauza IN [WINDOW] WindowName2 | IN SCREEN include fereastra de editare n fereastra specificat sau pe ecran. Clauza SAME permite editarea ferestrei nainte ca aceasta s fie activ. Clauza SAVE permite ca, dup prsirea ferestrei de editare, aceasta s rmn vizibil pe ecran. Fiierul obinut n urma editrii are extensia .prg. Lansarea n execuie a programului realizat se efectueaz cu comanda DO, urmat de numele programului, prevzut cu extensie. Dac extensia este omis, sistemul va cuta i executa fiierele cu acelai nume i extensiile .exe (fiier executabil), .app (aplicaie), .fxp (fiier compilat), .prg (fiier surs), n aceast ordine. n timpul execuiei comenzii DO, 65

sistemul realizeaz i compilarea programului. Se verific dac instruciunile editate sunt corecte din punct de vedere sintactic. Dac exist erori, programul este ntrerupt, urmnd ca acestea s fie corectate. Dup compilare, se obine un fiier cu extensia .fxp. Chiar dac instruciunile sunt corecte din punct de vedere sintactic, pot exista erori la conceperea algoritmului de lucru, erori ce duc la blocarea programului. Acestea pot fi depistate la rularea programului. Pentru a nu realiza blocarea calculatorului prin rularea la infinit a programului, se poate ntrerupe execuia lui cu ajutorul butoanelor Cancel, Suspend, Ignore din fereastra de dialog Program Error sau cu comenzile RETURN (abandoneaz execuia programului i pred controlul programului apelant), CANCEL (termin execuia i pred controlul ferestrei de comenzi), QUIT (nchide sesiunea de lucru Visual FoxPro). Procesul de detectare i eliminare a erorilor dintr-un program poart numele de depanare. Depanatorul inclus n VFP (Debugger) este unul performant, oferind faciliti precum rularea pas cu pas a instruciunilor, rularea la vitez redus, rularea continu pn la un anumit punct, vizualizarea dinamic a coninutului variabilelor folosite n programul depanat etc. O dat pornit depanatorul, execuia unui program este nsoit de urmrirea sa n depanator i invers, un program rulat n depanator i produce efectele n VFP. Altfel spus, programul apare rulnd n ambele aplicaii (depanator i VFP), n depanator urmrindu-se instruciunile executate, iar n SGBD efectul acestora. 12.2. Structuri de control n cadrul modelului programrii structurate exist trei structuri fundamentale: secvenial sau liniar, alternativ sau ramificat i repetitiv. Structura liniar este cea n care instruciunile sunt executate una dup alta, n ordinea n care apar n program. Structura alternativ condiioneaz executarea unui grup de instruciuni de rezultatul evalurii unei condiii. Sunt folosite comenzile IFENDIF (structura alternativ cu o ramur i dou ramuri), DO CASE ENDCASE (structura alternativ cu mai multe ramuri) i funcia IIF(). Comanda IFENDIF are sintaxa urmtoare: IF lExpression [THEN] Commands [ELSE Commands] ENDIF Este evaluat expresia (lExpression) i dac este adevrat se execut tot grupul de instruciuni pn la ELSE sau, dac lipsete ELSE, pn la ENDIF. Dac nu este ndeplinit condiia i ELSE exist, atunci se execut tot grupul de instruciuni de la ELSE pn la ENDIF. Funcia IIF() are un efect asemntor cu al comenzii IFENDIF. Formatul general al funciei este: IIF(lExpression, eExpression1, eExpression2)

66

Se evalueaz condiia i, dac este ndeplinit, se returneaz valoarea eExpression1, n caz contrar returnndu-se valoarea eExpression2. Structura alternativ cu mai multe ramuri permite selectarea unei singure alternative din mai multe posibile. Este implementat prin comanda DO CASE ENDCASE: DO CASE CASE lExpression1 Commands [CASE lExpression2 Commands ... CASE lExpressionN Commands] [OTHERWISE Commands] ENDCASE Execuia comenzii are loc astfel: este evaluat prima expresie logic i, dac este adevrat, se execut secvena de instruciuni (Commands). n caz contrar, este evaluat urmtoarea expresie logic i se execut secvena de instruciuni corespunztoare etc. Dup identificarea primei expresii logice adevrate i executarea secvenei de comenzi corespunztoare, comanda se ncheie, programul continund cu prima instruciune de dup ENDCASE. Dac toate expresiile logice evaluate sunt false, se execut grupul de comenzi corespunztor clauzei OTHERWISE, iar n cazul n care clauza este absent, se ncheie execuia comenzii. Comanda DO CASE simuleaz o cascad de IF-uri, aa nct orice IF poate fi nlocuit cu o structur DO CASE care are o singur ramur CASE. Structurile repetitive alctuiesc aa numitele bucle, ce reprezint secvene de comenzi executate de mai multe ori. Aceste secvene de instruciuni se mpart n dou grupe: - cu numr cunoscut de pai n care un grup de comenzi se execut de un numr cunoscut de ori. - cu numr nedefinit de pai n care un grup de comenzi se execut de un numr variabil de ori, dependent de o condiie a comenzii. Comenzile folosite n cazul primei grupe sunt FORENDFOR i SCANENDSCAN. Comanda FOR are sintaxa: FOR Var = nInitialValue TO nFinalValue [STEP nIncrement] Commands [EXIT] [LOOP] ENDFOR | NEXT Comanda determin executarea repetat a grupului de instruciuni (Commands). Variabila Var contorizeaz numrul de execuii ale buclei FOR. Valoarea iniial a variabilei contor va fi nInitialValue. Dup fiecare execuie a grupului de instruciuni, dac exist clauza STEP, variabila este incrementat/decrementat cu o valoare de increment (nIncrement); dac aceast clauz lipsete, valoarea de incrementare este 1. La prima 67

execuie a grupului de instruciuni, variabila Var va avea valoarea iniial (Initial Value), la a doua execuie valoarea iniial plus valoarea de increment, la a treia execuie valoarea iniial plus valoarea de increment luat de dou ori etc. Atunci cnd valoarea variabilei (Var) crete peste valoarea final (Final Value) sau scade sub valoarea final (n cazul incrementului negativ), se va iei din bucl, programul continund cu urmtoarea instruciune de dup ENDFOR. Comanda LOOP determin reluarea executrii comenzii FOR, iar EXIT ieirea forat din ciclul FOR i continuarea execuiei programului cu comanda imediat urmtoare de dup ENDFOR. Cea de-a doua comand din cadrul primei grupe, SCANENDSCAN are formatul general: SCAN [NOOPTIMIZE] [Scope] [FOR lExpression1] [WHILE lExpression2] [Commands] [LOOP] [EXIT] ENDSCAN Comanda este specializat n lucrul cu tabele i realizeaz parcurgerea tabelului curent i executarea grupului de instruciuni (Commands) pentru fiecare nregistrare care aparine domeniului specificat prin clauzele Scope, FOR i WHILE. Cel de-al doilea tip de bucl, cu numr nedefinit de pai, este implementat prin intermediul comenzii DO WHILEENDDO. Formatul general al comenzii este: DO WHILE lExpression Commands [LOOP] [EXIT] ENDDO Comanda determin execuia repetat a grupului de instruciuni (Commands), att timp ct valoarea expresiei logice (lExpression) este adevrat (.T.). Dac n urma evalurii expresiei logice se obine valoare fals (.F.), execuia comenzii se ncheie. Dac este ndeplinit condiia, se vor executa comenzile dintre DO WHILE i ENDDO pn cnd, n urma evalurii expresiei logice, se obine valoarea fals; n acest caz, execuia buclei se ncheie i programul continu cu prima instruciune de dup ENDDO. Comenzile LOOP i EXIT au aceeai semnificaie ca la comanda FORENDFOR. Se prezint n continuare cteva exemple n care se folosesc comenzile precedente. Exemplul 1. Pornind de la tabelul cititori, urmtoarea secven de program va afia care cititori sunt din IASI i care nu. Comanda ? este folosit pentru afiarea pe ecran a unor expresii. USE cititori DO WHILE NOT EOF() IF localitatea="IASI" ?"Cititorul "+ nume+"este din IASI" 68

ELSE ?"Cititorul "+ nume +"nu este din IASI" ENDIF SKIP ENDDO Rezultatul obinut n urma execuiei secvenei de program de mai sus este redat n figura 50.

Figura 50 Exemplul 2. Acelai efect ca n exemplul precedent l are i secvena de program corespunztoare acestui exemplu. Se folosete funcia IIF() n locul comenzii IFENDIF. USE cititori DO WHILE NOT EOF() ? IIF(localitatea="IASI", "cititorul " + nume +; "este din Iasi", "cititorul" + nume + "nu este din IASI") SKIP ENDDO Rezultatul obinut n urma execuiei sevenei de instruciuni de mai sus este la fel cu cel prezentat n figura 4.28. Exemplul 3. Se creeaz un program cu cteva opiuni legate de operaii cu tabele (adugare nregistrri, modificare, listare). Utilizatorul va alege o opiune dintr-o list, urmnd ca programul, n funcie de alegere, s execute operaiile. Pentru nceput, se afieaz meniul de opiuni. n continuare, n program, se folosete comanda INPUT, cu ajutorul creia utilizatorul va introduce opiunea proprie. Secvena de program corespunztoare este: USE cititori ? "1. Introducere noi nregistrri" ? "2. Modificare nregistrri " ? "3. Listare" ? "4. Ieire INPUT "Introducei opiunea " TO var DO CASE CASE var = 1 APPEND CASE var = 2

69

BROWSE CASE var = 3 LIST OTHERWISE QUIT ENDCASE Ca rezultat al execuiei programului din exemplu, pe ecran se va afia meniul de opiuni creat (figura 51), urmnd ca ulterior utilizatorul s introduc opiunea dorit, iar programul s execute operaiile.

Figura 51 Exemplul 4. Plecnd de la tabelul carte, se afieaz titlul i autorul crilor aprute la editura POLIROM. n acest scop, se va folosi comanda SCANENDSCAN. USE carte SCAN FOR editura="POLIROM" ? titlu, nume_a ENDSCAN Rezultatul obinut n urma execuiei secvenei de comenzi este prezentat n figura 52.

Figura 52 Exemplul 5. Considernd tabelul carte, se calculeaz i se afieaz pe ecran valoarea total a crilor. Vor fi folosite variabilele de memorie nr (iniializat prin funcia RECCOUNT() care returneaz numrul total de nregistrri din tabel) i total (care va nsuma valoarea tuturor crilor din tabel). Astfel, secvena de program va cuprinde instruciunile: USE carte nr =RECCOUNT() total=0 FOR i=1 TO nr GO i total = total +valoare ENDFOR ?"Valoarea totala a crilor este:", total, "lei"

70

Dup execuia programului de mai sus, pe suprafaa de lucru va fi afiat textul Valoarea totala a crilor este: i rezultatul obinut n urma calculului, respectiv 2474130 lei.

71

CAPITOLUL 3

NOIUNI DE BAZ PRIVIND PROGRAMELE DE CALCUL TABELAR


Foaia de calcul, registrul de lucru, tipuri de date, formule, funcii, comenzi, macro-comenzi
Instrumentul specific de lucru al programelor de calcul tabelar este centralizatorul electronic. Centralizatorul electronic reprezint un tabel de dimensiuni foarte mari, structurat n linii i coloane, n care se pot defini simplu modelele de rezolvare a problemelor. n literatura de specialitate de la noi este ntlnit i sub alte denumiri: foaie de calcul electronic, tabel electronic sau chiar "spreadsheet", dup denumirea din limba englez. n literatura de specialitate din alte ri apare, de asemenea, sub diverse denumiri: spreadsheet (worksheet) n englez, feuille de calcul electronique, respectiv tableur n francez, chiffreur n franceza canadian, hoja de calculo n spaniol. Foaia de calcul electronic ofer posibiliti de introducere a datelor i definire a modelelor, posibiliti de calcul, posibiliti de vizualizare, posibiliti de exprimare grafic, posibiliti de simulare etc (vezi fig. nr. 3.1). Registrul de lucru (workbook) este un fiier cu extensia .xls n care sunt stocate modelele definite i datele n Excel. Un registru de lucru poate conine mai multe foi de calcul (sheet, worksheet), ceea ce permite reunirea i organizarea unor tipuri variate de informaii ntr-un singur fiier. Astfel, un grafic poate fi plasat n foaia de calcul ce conine datele sau ntr-o foaie distinct (chart sheet) care va fi inclus n registrul de lucru. n Excel, numele foilor de calcul apar n partea de jos a ferestrei de lucru (vezi fig. nr. 3.2), avnd asociate implicit numele Sheet1, Sheet2 .a.m.d., nume pe care utilizatorul le poate modifica dup dorin. Cnd se execut clic pe numele unei foi de calcul, aceast devine foaia de calcul curent.

72

indicator c su curent linia de editare

linia de titlu

linia de meniu

linii de instrumente

linia de stare

buton de derulare orizontal

linia de derulare vertical

3.1. Model de analiz a rentabilitii pe produse n EXCEL


foi de calcul

Fig. nr.

foaia de calcul curent

deplasare la urmtoarea/precedenta foaie de calcul deplasare la prima/ultima foaie de calcul

Fig. nr. 3.2. Dispunerea foilor de calcul ntr-un registru de lucru

Fiecare csu (caset, celul) poate fi referit printr-o adres (referin) care indic linia i coloana la ntretierea creia se afl. Sunt dou stiluri practicate pentru specificarea adreselor: stilul consacrat de LOTUS: A1; A2; F5; ;IV16384; stilul consacrat de MULTIPLAN: R1C1; R2C1; R5C6; ;R16384C256. n mod implicit, EXCEL utilizeaz stilul A1, n care coloanele sunt identificate cu o liter (de la A la IV, pentru cele 256 de coloane), iar liniile cu numere (de la 1 la 65536). Se poate trece la stilul R1C1, prin comanda Options din meniul Tools, din care se selecteaz opiunea R1C1 reference style din pagina General. Acest stil este util atunci cnd se lucreaz 73

cu macrouri, deoarece face posibil calcularea poziiei rndurilor sau coloanelor din foaia de calcul. Pentru a face referire la un grup de csue, se vor indica adresa colului stnga-sus i adresa colului dreapta-jos ale zonei de specificat, separate prin caracterul : (dou puncte). ntr-o foaie de calcul se pot referi i date din alte foi de calcul ale aceluiai registru, sau chiar din alt registru de lucru. n acest caz, adresa csuei va fi precedat de numele foii de calcul (avnd ca separator caracterul !), iar dac este dintr-un alt registru, se va specifica i numele acestuia, ntre paranteze ptrate (vezi exemplele de mai jos).
Exemple: A20 (csua aflat pe coloana A i pe rndul 20) F10:F20 (grupul de csue de pe coloana F, pe rndurile de la 10 la 20) B12:E12 (grupul de csue de pe rndul 12, pe coloanele de la B la E) 6:6 (toate csuele de pe rndul 6) 4:8 (toate csuele de pe rndurile de la 4 la 8) C:G (toate csuele de pe coloanele de la C la G) Studenti!C5 (csua C5 din foaia de calcul Studenti, din acelai registru) [d:\utilizatori\medii.xls]Evaluare!D2 (csua D2 din foaia de calcul Evaluare, din registrul de lucru salvat n fiierul medii.xls)

Programele de calcul tabelar lucreaz, n principiu, cu dou tipuri eseniale de date: date numerice i date tip ir de caractere. Sistemul detecteaz tipul datei dup natura primului caracter introdus sau dup coninut. n principiu, dac primul caracter este o liter data este considerat de tip ir de caractere, dac ncepe cu o cifr data este considerat de tip numeric. Programele de calcul tabelar gestioneaz i date calendaristice: intern ele sunt reprezentate ca valori numerice, iar afiarea se poate face n diferite formate. De exemplu, pentru ca raportul din fig. nr. 3.1. s conin data calendaristica de 11-Feb-99, trebuie ca n caseta B3 s introducem numrul 36202 (vezi fig. nr. 3.3.) i s solicitm prin comanda Format, Cells afiarea ca dat calendaristic. De regul, Excel recunoate o dat calendaristic atunci cnd este introdus n formatul ll/zz/aa. Astfel, 01/25/00 va fi interpretat ca data de 25 ianuarie 2000. n legtur cu specificarea anului prin ultimele dou cifre, se aplic urmtoarele reguli: anii 2000 2029 sunt recunoscui atunci cnd se scriu valorile 00, 01, , pn la 29 (spre exemplu, 5/21/23 este interpretat ca 21 mai 2023); anii 1930 1999 sunt recunoscui atunci cnd se scriu valorile 30, 31, , pn la 99. Trebuie precizat c programul de calcul tabelar Excel poate lucra cu 2 sisteme pentru date calendaristice: sistemul 1900 (utilizat implicit de Excel pentru Windows) i sistemul 1904 (utilizat implicit de Excel pentru Macintosh). n sistemul 1900, pentru 1 ianuarie 1900 corespunde valoarea numeric 1, iar pentru 31 decembrie 9999 valoarea 2958465. Sistemul 1904 ncepe numrtoarea cu 2 ianuarie 1904, ce are asociat valoarea 1 i o finalizeaz cu 31 decembrie 9999, pentru care asociaz valoarea 2957063. Pentru a schimba sistemul 1900, din meniul Tools se alege Options, unde se alege opiunea 1904 date system din pagina Calculation. 74

Coninutul unei csue poate fi i o formul sau o funcie. Formulele i funciile ncep printr-un caracter special: =; +; -; @; etc. Prin intermediul acestora se poate exprima o mare diversitate de calcule. De fapt, formulele i funciile sunt elementele eseniale ale centralizatorului electronic, din care deriv performana i capacitile de simulare. Printr-o formul se definete coninutul unei csue n funcie de coninutul altor csue. Relaia rmne adevrat pentru orice coninut al csuelor folosite ca argumente n formule. Dac se schimb coninutul csuelor folosite ca argumente, instantaneu se modific i coninutul csuei care conine formula. Modelul prezentat n fig. nr. 3.3. poate fi utilizat n analiza rentabilitii mai multor categorii de produse. Este suficient s introducem datele de intrare, iar pe baza formulelor existente vom obine imediat rezultatele. ntruct graficul din fig. nr. 1. este construit pe baza datelor din prima parte a modelului, de fiecare dat se va modifica i graficul. Dac sunt mai multe produse vom trece la inserarea de linii, respectiv la copierea formulelor deja introduse.

Fig. nr. 3.3. Formule i funcii utilizate n modelul de rezolvare EXCEL

O formul/funcie care specific o relaie de calcul valabil pentru mai multe rnduri sau coloane poate fi copiat; adresele csuelor se vor actualiza corespunztor. n cazul mutrii unei formule, adresele nu se actualizeaz. Astfel, dac formula =D5-C5 din E5 este copiat n E6 ea devine =D6-C6. Acest tip de adrese se numesc adrese relative. n schimb, dac se copie formula =E5*$F$3 din G5 n G6 aceasta devine =E6*$F$3 i nu =E6*F4. $F$3 face parte din categoria adreselor absolute. Dac dorim ca o csu s conin aceeai valoare ca i o alt csu, se va introduce semnul egal, urmat de adresa csuei ce conine valoarea respectiv. Csua ce conine aceast

75

formul se numete csu dependent: atunci cnd se modific valoarea din csua referit, ca efect al recalculrii automate, se va modifica i coninutul csuei dependente. Corectarea formulelor introduse, tergerea coninutului unor csue sau grupuri de csue se poate face la fel de simplu i rapid ca n procesoarele de texte. Pentru corectare se utilizeaz linia de editare (vezi fig.nr. 3.1), care se apeleaz prin executarea unui clic sau prin apsarea tastei F2. tergerea se realizeaz cu ajutorul tastelor Delete sau Backspace. De asemenea, exist posibilitatea atribuirii de nume unor csue sau grupuri de csue astfel c scrierea formulelor devine mai simpl, mai rapid i mai aproape de logica problemei de rezolvat. De exemplu, =SUM(costuri); =SUM(preturi); =SUM(profit) sunt mult mai semnificative din punct de vedere al analizei rentabilitii dect =SUM(C5:C7); =SUM(D5:D7); =SUM(E5:E7) (vezi fig.nr. 3.3). n acest scop, grupului C5:C7 i se atribuie numele costuri, grupului D5:D7 i se atribuie numele preturi, iar grupului E5:E7 i se atribuie numele profit. Funciile reprezint formule predefinite n sistem. Utilizatorul trebuie doar s specifice numele funciei i argumentele, respectnd regulile de sintax. Numrul i natura argumentelor depind de tipul funciei: matematice, logice, financiare, speciale, statistice, pentru baze de date, pentru date calendaristice etc. n fig. nr. 3.3. s-a exemplificat utilizarea funciei statistice SUM. n locul funciei =SUM(C5:C7) se putea folosi i formula: =C5+C6+C7. La fel ca limbajele de programare din generaiile anterioare, programele de calcul tabelar dispun de comenzi i macro-comenzi prin care se pot defini i declana anumite operaiuni sau parametri (inserare de linii, coloane, csue etc.; stabilire parametri de format; gestionare ferestre de afiare etc.). Comenzile permit declanarea unor operaiuni n foaia de calcul i sunt desemnate prin cuvinte cheie. Comenzile sunt grupate n meniuri i submeniuri cu mai multe niveluri. n versiunile sub MS-DOS se utilizau, de obicei, meniuri tip linie. n versiunile sub Windows se utilizeaz meniuri derulante (vezi fig. nr. 3.4.). Concomitent se asigur posibilitatea folosirii rapide a comenzilor mai des ntlnite prin intermediul pictogramelor din liniile de instrumente afiate n partea superioar a ecranului. De asemenea, exist i posibilitatea definirii i utilizrii de linii de instrumente personalizate.

Fig. nr. 3.4. Secven din sistemul de comenzi EXCEL

76

Tabelul nr. 3.1. Exemplu de macrou Excel

EXCEL versiunea 7.0 ' ' Macro1 Macro ' Macro recorded 02-12-00 by StEcon ' Sub Macro1() ActiveCell.FormulaR1C1 = "=NOW()" Selection.NumberFormat = "d-mmmyy" Selection.Columns.AutoFit End Sub

Macro-comenzile (macro-urile) sunt similare instruciunilor i comenzilor din limbajele de programare clasice i permit descrierea grupurilor de operaiuni repetitive. n acest fel nu mai este necesar repetarea comenzilor ci doar apelarea modulelor de program realizate. Modulele de program poate fi asociate unor combinaii de taste, unor obiecte sau pot fi organizate n meniuri i submeniuri similare celor oferite de sistem. Primele versiuni ale programelor de calcul tabelar utilizau un limbaj de macro-uri asemntor limbajelor de asamblare (se bazau pe mnemonice obinute din iniialele comenzilor). Ultimele versiuni folosesc ca limbaj de macro-uri un limbaj evoluat (ex. EXCEL folosete limbajul Visual Basic for Applications). n plus ofer i posibilitatea nregistrrii automate a macro-urilor. n tabelul 3.1 se exemplific un modul de program pentru inserarea datei calendaristice n EXCEL. Dac iniial programele de calcul tabelar se bazau doar pe utilizarea facilitailor oferite de foile de calcul, pe msura evoluiei ele au devenit instrumente software integrate. Asfel un program de calcul tabelar integreaz, n general, instrumente destinate urmtoarelor lucrri: definirea modelelor n foile de calcul; reprezentarea grafic a datelor din modelele definite; crearea i editarea de obiecte grafice (Drawing toolbar); baze de date (liste); definirea de programe, utiliznd tehnica macro-urilor; instruire sau faciliti de tip Help; navigare Web; import/export de date de la/ctre alte programe de calcul tabelar sau SGBD-uri.

Sistemul de ajutor
La fel ca majoritatea aplicaiilor din categoria 4GL, programele de calcul tabelar se nva lucrnd. n cazul Excel, se ofer asisten interactiv extins, mbuntit de la o versiune la alta. Astfel, utilizatorul are 3 alternative pentru a obine rapid informaia solicitat (vezi i fig. nr. 3.5):

77

cutare n indexul interactiv (meniul Help, opiunea Contents and Index); formularea unei ntrebri (meniul Help, opiunea Microsoft Excel Help sau Office Assistant din linia de instrumente); obinerea de informaii despre elementele afiate pe ecran (meniul Help, opiunea Whats this sau butonul Help contextual din linia de instrumente).
Help contextual Office Assistant

Fig. nr. 3.5. Linia de instrumente Standard. Butoanele Help

Comanda Contents and Index din meniul Help deschide fereastra Help Topics, n care sunt incluse 3 categorii de comenzi, grupate n 3 pagini: Contents afieaz informaii grupate n funcie de aciunile ntreprinse (crearea unei foi de calcul, exportul de date, formatarea csuelor .a.m.d.); Index afieaz o list a tuturor operaiunilor, comenzilor i opiunilor Excel, n ordine alfabetic. Este posibil deplasarea direct n cadrul listei prin tastarea uneia sau mai multor litere sau a cuvintelor cutate; Find permite cutarea n toate resursele Help a unor cuvinte cheie specifice, definite de utilizator. O modalitate mai prietenoas de a obine informaii interactiv este dialogul cu asistentul (Office Assistant), care se poate apela din meniul Help, din linia de instrumente sau prin apsarea tastei F1 (cu meniunea c, prin opiunea utilizatorului, tasta F1 poate fi asociat i comenzii Contents and Index din meniul Help). n toate produsele Microsoft Office asistentul apare sub numele Clippit, iar forma de prezentare este cea din imaginea alturat. Dialogul cu asistentul arat ca n fig. nr. 3.6. Utilizatorul va formula ntrebarea i o va specifica n caseta text, dup care va lansa comanda Search. Office Assistant nlocuiete facilitile de ajutor Answer Wizard i Tip Wizard din versiunile anterioare Excel.

Fig. nr. 3.6. Dialogul cu asistentul n EXCEL

78

n fine, utilizatorul poate afla explicaii despre ceea ce este afiat pe ecran folosind sistemul de help contextual, care se apeleaz din meniul Help (opiunea Whats this), din linia de instrumente sau prin combinaia Shift-F1. La apelarea acestei opiuni cursorul i modific aspectul, atandu-i-se un semn de ntrebare. Dac se doresc explicaii asupra semnificaiei unui element de pe ecran, se plaseaz indicatorul mouse-ului pe elementul respectiv i se execut clic. Este exemplificat alturi o astfel de explicaie, pentru comanda asociat butonului Format Painter din linia de instrumente standard. Trebuie precizat ca help-ul contextual rmne activ pn la selectarea unui element pentru care se doresc explicaii. El mai poate fi dezactivat prin apsarea tastei Esc sau prin clic pe butonul corespunztor din linia de instrumente. O variant a help-ului contextual este Tooltip prin care se afieaz numele comenzilor asociate butoanelor din liniile de instrumente de pe ecran atunci cnd indicatorul mouse-ului este poziionat pe un buton. Aceast opiune (Show Tooltips) poate fi activat sau inhibat din meniul View, Toolbars.

79

PRINCIPII DE REALIZARE A APLICAIILOR INFORMATICE N PROGRAMELE DE CALCUL TABELAR Reguli de respectat n proiectarea i utilizarea aplicaiilor n programele de calcul tabelar
Programele de calcul tabelar reprezint instrumente orientate ctre utilizatorii finali, care ofer modele i tehnici de lucru apropiate de modalitile curente de rezolvare a problemelor. Astfel proiectarea aplicaiilor este la latitudinea utilizatorilor. Dar realizarea de aplicaii eficiente i interschimbabile solicit respectarea anumitor reguli13. R1. n formule i funcii se recomand s nu se foloseasc ca argumente constantele. n principiu, orice formul sau funcie reprezint un potenial model de simulare. Utilizarea constantelor ca argumente elimin, din start, acest potenial. Reutilizarea modelului va solicita de fiecare dat rescrierea formulelor sau funciilor. Dac modelul de rezolvare presupune utilizarea unor constante, acestea vor fi plasate n csue distincte i vor fi apelate prin referine absolute. R2. Dimensionarea mrimii liniilor i coloanelor se face n funcie de datele cele mai semnificative i nu de construciile cu rol explicativ din antetul de linie sau coloan. Se recomand ca aceast operaiune s fie efectuat la terminarea construirii modelului n foaia de calcul. n mediul WINDOWS dimensionarea mrimii liniilor i coloanelor se poate realiza rapid cu ajutor mouse-ului sau prin comenzi de tip Format/Row/AutoFit sau Format/Column/AutoFit. R3. Pentru lucrrile frecvente (facturi, ordine de plat, state de salarii etc.) se recomand utilizarea "abloanelor" oferite de sistem (Spreadsheet Solutions) sau definite de utilizatori n fiiere de tip Template (cu extensia .xlt n Excel). R4. Deplasarea n foaia de calcul, din raiuni de eficien, nu se va realiza exclusiv prin utilizarea tastelor de deplasare tip sgeat (;;;). Enumerm, mai jos, cteva soluii eficiente de deplasare n foaia de calcul: utilizarea de taste care permit deplasarea mai rapid: PgUp; PgDown; Home; utilizarea de combinaii de taste: CTRL + sau ;; ; END + sau ;;; utilizarea butoanelor de deplasare, respectiv a liniilor de deplasare verticale sau orizontale din fereastra de vizualizare a foii de calcul;

Oprea, D., Airinei, D., Meni, G., Dumitriu, F., Aplicaii cu macro-uri LOTUS 1-2-3, Editura Policromia, Piatra Neam, 1995, pp. 36-39.
13

80

inserarea de butoane suplimentare pentru deplasarea rapid de la o zon la alta din foaia de calcul; utilizarea comenzilor de tip GOTO sau GOTO Special combinate cu atribuirea de nume diferitelor zone din modelul de rezolvare R5. Cnd se lucreaz cu foi de calcul multidimensionale se recomand atribuirea de nume semnificative fiecrei foi, n raport de componentele modelului de rezolvare (ex. n loc de Sheet1, Sheet2, Sheet3, , Sheetn se vor folosi denumiri cum ar fi: Meniuri, Help, Preluare facturi, Centralizare, Tiparire etc. ). R6. nainte de a trece la utilizarea modelului realizai salvarea acestuia, prin comenzi de tip SAVE, ntr-un fiier cu nume adecvat lucrrii (Facturi, Stat_sal, Casa, Devize etc.). n caz contrar, riscai s pierdei tot ce ai lucrat dac la execuie sistemul se blocheaz sau intervine un incident neprevzut. Pentru mai mult siguran, realizai chiar salvri periodice. Dac lucrai pe un calculator utilizat de mai multe persoane, atunci e recomandabil s avei un subdirector propriu n care s depozitai toate lucrrile. R7. Componentele modelului de rezolvare se dispun n cascad n cadrul aceleiai foi de calcul sau n foi de calcul diferite. n acest fel se evit alterarea componentelor modelului de rezolvare la actualizarea unora prin inserarea de linii sau coloane. R8. La terminarea construirii modelului se trece la protejarea tuturor zonelor definite n afar de zonele rezervate datelor de intrare. Dac zonele sunt protejate nu se mai pot face nici un fel de modificri asupra coninutului. n acest mod se evit riscul deteriorrii voluntare sau involuntare a modelului de rezolvare. Protecia i asigurarea confidenialitii aplicaiilor poate fi asigurat i prin tehnica ascunderii de linii sau coloane. De asemenea, pentru a preveni suprancrcarea registrului de lucru sau pentru a proteja anumite date, i foile de calcul pot fi ascunse. Se utilizeaz n acest scop comenzile Hide/Unhide corespunztoare elementelor respective (Sheet, Row, Column). R9. Pentru lucrrile mai complexe se recomand utilizarea macro-comenzilor prin limbajul de macro-uri disponibil. Prelucrrile repetitive sunt astfel ncorporate n programe ce se apeleaz ori de cte ori sunt necesare de efectuat. Majoritatea versiunilor din programele de calcul tabelar ofer faciliti de nregistrare automat a macro-urilor. R10. Nu reinventai roata!!! Foarte multe din problemele economice sunt deja rezolvate n programele de calcul tabelar, trebuie doar s furnizai corect argumentele unor funcii sau s apelai la modulele de asisten/ajutor (ex.: calculul dispersiei - VAR; calculul mediei aritmetice - AVERAGE; determinarea trendului unui fenomen - TREND; determinarea ratei interne de rentabilitate - IRR etc.)

81

CATEGORII DE FUNCII DIN PROGRAMELE DE CALCUL TABELAR I POSIBILITI DE UTILIZARE N SIMULRI


Funciile din programele de calcul tabelar reprezint formule des utilizate, prin care se poate executa o mare varietate de calcule, n mod rapid i comod. Se pot efectua calcule financiare, matematice, statistice, cu iruri de caractere, cu date calendaristice etc. De asemenea, funciile se pot folosi pentru crearea de expresii condiionale sau pentru efectuarea de cutri n tabele. Alturi de formule i macro-uri, funciile asigur performanele sporite programelor de calcul tabelar, mai ales n simulri. Deoarece fiecare program de calcul tabelar, respectiv fiecare versiune, are anumite particulariti ne vom opri la o prezentare de principiu a pricipalelor categorii de funcii din EXCEL, cu particularizare pe versiunea 8 (Excel 97).

Sintaxa funciilor
n Excel funciile sunt precedate de semnul =. Pentru utilizatorii de Lotus, Excel asigur compatibilitatea, astfel c se pot introduce funciile precedate de caracterul @. Fiecare funcie are o anumit sintax. Dac sintaxa funciei nu este respectat, sistemul nu o poate interpreta, fiind generat un mesaj de eroare (vezi subcapitolul 3.4.5). Funciile din Excel au urmtorul format general: FUNCIE( ) sau FUNCIE(argument_1,argument_2,...,argument_n) FUNCIE reprezint numele funciei. argument_1,argument_2,...,argument_n reprezint datele pe care funcia le va utiliza n calcule. Dac funcia are n sintax argumente, acestea trebuie s fie incluse n paranteze rotunde. Chiar dac argumentele lipsesc, se vor preciza parantezele. Argumentele precizeaz obiectul funciilor, acele valori utilizate de funcii pentru a realiza operaiuni sau calcule specifice. Ele se exprim prin adresele csuelor (referinele) ce conin valorile, prin nume atribuite csuelor sau prin constante. De exemplu, n funcia SUM(C10..C15), argumentul C10..C15 precizeaz c se vor aduna valorile ntlnite n grupul de csue C10..C15. Argumentele dintr-o funcie pot fi: valori numerice, iruri de caractere, referine de csue i condiii.
Observaii: Cnd argumentul este o valoare numeric se poate utiliza un numr, o formul (expresie) de tip numeric, un nume de grup sau adresa unei csue care conine un numr sau o formul de tip numeric. Cnd argumentul este de tip ir de caractere se poate utiliza o constant tip ir de caractere (orice secven de litere, cifre sau alte caractere, delimitat la stnga i la dreapta

82

de caracterul " (ghilimele)), o formul de tip ir, un nume de grup sau adresa unei csue care conine un ir sau o formul de tip ir. Cnd argumentul este o referin de csu, se poate utiliza un nume de grup sau o adres. Cnd argumentul este o condiie se foloeste o expresie logic (o formul n care se utilizeaz un operator logic (de comparare) sau un nume de grup ori o adres de csu care conine o expresie logic). Totui, ca argument tip condiie se pot folosi expresii numerice sau de tip ir, valori numerice, constante de tip ir sau referine de csue.

Operatorii specific tipul de calcule care se execut asupra argumentelor. Sunt 4 tipuri de operatori: aritmetici (+, -, /, *, %, ^); de comparare (<, >, =, <>, <=, >=); de tip ir (&, utilizat pentru concatenarea irurilor de caractere); de tip referin (caracterul :, utilizat pentru specificarea grupurilor de csue, caracterul , utilizat pentru reuniune, caracterul spaiu pentru intersecia a dou zone din foaia de calcul).
Presupunem c: n D11 este rulajul debitor, n E11 este rulajul creditor, iar n C8 este soldul iniial. Formule de calcul: =C8+D11-E11 =SUM(C8,D11,-E11) Presupunem c: n B4 este numele, n C4 este prenumele. Pentru a afia n formatul prenume nume: =C4& &B4 Pentru a afia n formatul nume, prenume: =B4&, &C4 Presupunem c valoarea respectiv este n C6. Sunt 2 variante: 1. dac folosim o constant: =C6*(1+5%) 2. dac procentul este n csua B2: =C6*(1+$B$2) Presupunem c data documentului este stocat n E4. Se scrie: =Incheiat la data de &TEXT(E4,d-mmm-yyyy) Presupunem c avem lista facturilor dintr-o lun i dorim s aflm valoarea total a facturilor emise n data de 24 ianuarie 2000 (zona B2:B96 conine data facturii, iar zona E2:E96 valoarea). Formula de calcul: =SUMIF(B2:B96,01/24/2000,E2:E96) Presupunem c dispunem de lista prezentat mai sus i dorim s obinem suma facturilor din sptmna 24-29 ianuarie. Formula: =SUM(IF(B2:B96>=DATEVALUE(01/24/2000), IF(B2:B96<=DATEVALUE(01/29/2000), E2:E96))) Obs.: aceasta este o formul de tip array i trebuie
introdus prin combinaia CTRL+SHIFT+ENTER

Tabelul nr. 3.7. Exemple de utilizare a operatorilor

Calculul soldului final al unui cont de activ

Afiarea numelui i prenumelui ntr-o singur csu Sporirea unei valori numerice cu 5% Combinarea unui text cu data calendaristic Calculul totalului n funcie de o valoare aflat ntr-o alt zon Calculul unei valori totale n funcie de rezultatul evalurii a 2 condiii

Numrarea apariiilor unei valori

Presupunem c din lista de mai sus dorim s aflm numrul facturilor emise pe data de 25 ianuarie 2000. Se scrie: =COUNTIF(B2:B96,01/25/2000)

83

Reguli sintactice de baz La introducerea funciilor trebuie s inem cont de urmtoarele recomandri:
1) 2) 3) 4) 5) 6) 7) 8)

Numele funciei trebuie s fie precedat de semnul =. Indiferent de tipul literelor folosite la tastarea numelui funciei, mici sau mari, sistemul le va afia cu majuscule. Nu se las spaii ntre numele funciei i argumente i nici ntre argumente. ntotdeauna includei argumentele funciilor ntre paranteze rotunde. Cnd o funcie devine argument al altei funcii, fiecare dintre ele trebuie s aib argumentele cuprinse ntre paranteze. Exemplu: =IF(SUM(A1..A5)>0,B1,B2). Dac sunt mai multe argumente, acestea se separ prin , (virgul) sau ; (punct i virgul), corespunztor delimitatorului stabilit. O funcie poate avea ca argument o alt funcie. Sistemul atribuie valoarea zero tuturor csuelor libere ale cror adrese sunt folosite ca argumente n funciile financiare, logice sau matematice.

Observaie: Pentru a vizualiza toate formulele/funciile dintr-o foaie de calcul se folosete combinaia de taste CTRL+` (vezi fig. nr. 3.18). Prin aceeai combinaie de taste se revine la afiarea valorilor calculate.

Fig. nr. 3.18. Afiarea formulelor ntr-o foaie de calcul

Categorii de funcii
n Excel, funciile sunt grupate n 11 categorii: (i) Funciile statistice: execut calcule statistice asupra unor serii de date; (ii) Funciile financiare: realizeaz calcule economice pentru mprumuturi, anuiti sau fluxuri financiare; (iii) Funciile logice: calculeaz rezultatul unei expresii condiionale; (iv) Funciile matematice i trigonometrice: execut o mare varietate de calcule complexe cu valori numerice; (v) Funciile de cutare: identific o valoare ntr-un tabel sau ntr-o list; (vi) Funciile pentru date calendaristice i timp: calculeaz valorile ce reprezint data calendaristic i timpul;

84

(vii) Funciile pentru baze de date: efectueaz calcule statistice i interogri asupra bazelor de date; (viii) Funciile tip ir de caractere: lucreaz cu iruri (texte, expresii tip ir) sau constante tip ir; (ix) Funciile tehnice: efectueaz calcule tehnice; (x) Funciile de informare ofer informaii despre csue i despre mediul de lucru; (xi) Funciile definite de utilizator (User Defined Functions): execut calcule specifice aplicaiilor fiecrui utilizator. Funcii statistice Funciile statistice clasice sunt prezentate n tabelul 3.8. De regul, aceste funcii lucreaz doar cu valori numerice, dar sunt definite i variante ale acestor funcii care extind tipurile de date acceptate. Spre exemplu: funcia AVERAGE accept doar valori numerice, iar funcia AVERAGEA accept i date de tip logic sau text (n mod similar, sunt definite funciile COUNTA, MAXA, MINA etc.).
Tabelul nr. 3.8. Principalele funcii statistice

Funcia
AVERAGE COUNT MAX MIN STDEV SUM VAR

Rolul funciei
Calculeaz media aritmetic a valorilor din list. Numr csuele cu un coninut diferit de spaiu din lista indicat. Determin valoarea maxim dintr-o list de valori. Determin valoarea minim dintr-o list de valori. Calculeaz abaterea medie ptratic a valorilor dintr-o list. nsumeaz valorile dintr-o list. Calculeaz dispersia valorilor dintr-o list.

Funcii financiare O parte dintre funciile financiare nu sunt prezente n configuraia standard. Ele pot fi instalate prin programul SETUP, din care se alege componenta Analysis Toolpak. Semnificaiile argumentelor ce se regsesc cel mai frecvent n funciile financiare, cu excepia celor pentru calculul amortizrii, sunt: valoarea viitoare (future value fv), adic valoarea investiiei sau mprumutului dup ce au fost efectuate toate plile; numrul de perioade (number of periods nper) care arat numrul total de pli sau de perioade (ani, luni, zile) ale investiiei; vrsmntul (payment pmt), adic suma pltit periodic pentru o investiie sau un mprumut; valoarea prezent (present value pv) care se refer la valoarea actual a ncasrilor sau plilor ce se vor efectua n viitor; rata dobnzii (rate);

85

tipul (type) care precizeaz intervalul de timp la care se efectueaz plata (spre exemplu, la nceputul lunii sau la sfritul lunii). Dac acest argument lipsete sau are valoarea 0 se consider c plata se face la sfritul perioadei, iar dac are valoarea 1, plata se face la nceputul perioadei.
Observaie: n scrierea funciilor financiare, sumele care reprezint pli sunt introduse ca valori negative, iar sumele care reprezint ncasri ca valori pozitive.
Tabelul nr. 3.9. Principalele funcii financiare

Funcia Amortizare imobilizri


DDB SLN SYD

Rolul funciei

Calculeaz amortizarea imobilizrilor dup metoda degresiv (Double-Declining Balance depreciation). Calculeaz amortizarea imobilizrilor dup metoda liniar (Straight-LiNe depreciation). Calculeaz amortizarea imobilizrilor dup metoda nsumrii cifrelor anilor (Sum-of-the-Years'-Digits). Determin valoarea viitoare (Future Value) a unei investiii curente, pe baz de vrsminte egale i la o rat constant a dobnzii. Determin suma care trebuie pltit periodic, pentru rambursarea unui mprumut. Determin valoarea prezent (Present Value) a unei investiii curente, pe baz de vrsminte viitoare egale. Determin numrul de perioade necesare pentru obinerea unei valori viitoare, pe baza unor vrsminte egale i o rat a dobnzii constant. Determin procentul de dobnd pentru o anuitate. Determin rata intern de rentabilitate (Internal Rate of Return), pentru o serie de venituri (ncasri) generate de o investiie. Calculeaz valoarea actualizat net prezent (Net Present Value) a unei serii de ncasri viitoare generate de o investiie.

Anuiti
FV PMT PV

Obiective financiare
NPER RATE

Previziuni
IRR NPV

Recomandri pentru utilizarea funciilor financiare: ntr-o funcie financiar, durata (numrul de perioade) i rata dobnzii trebuie s se refere la aceeai unitate de timp. Rata dobnzii poate fi exprimat fie n procente, fie n valori zecimale. Dac s-a folosit forma procentual, automat se realizeaz conversia n format zecimal. n funciile financiare care lucreaz cu anuiti se iau n considerare vrsminte egale, efectuate la intervale regulate de timp. O anuitate obinuit este o anuitate n care plata se face la sfritul fiecrui interval de timp.

86

Funcii logice Principalele funcii logice sunt prezentate n tabelul 3.10. Funciile AND, OR, NOT nlocuiesc operatorii logici similari. Ele evalueaz una sau mai multe condiii precizate ca argumente i returneaz valoarea logic adevrat sau fals.
Tabelul nr. 3.10. Funcii logice

Funcia
AND FALSE IF NOT OR TRUE

Rolul funciei
D valoarea logic 1 (adevrat) dac toate condiiile evaluate sunt adevrate (operatorul i logic conjuncie). D valoarea logic 0 (fals). Codific structura de control alternativ. Dac se ndeplinete condiia se execut o aciune, n caz contrar se execut alt aciune. Preschimb valoarea logic a argumentului (negaie). D valoarea logic 1 (adevrat) dac una dintre condiiile evaluate este adevrat (operatorul sau logic disjuncie). D valoarea logic 1 (adevrat).

Funcii matematice Principalele funcii din aceast categorie sunt incluse n tabelul 3.11.
Tabelul nr. 3.11. Principalele funcii matematice

Funcia Generale
ABS EXP INT LN LOG MOD RAND
RANDBETWEEN

Rolul funciei
Calculeaz valoarea absolut. Calculeaz ex, x fiind un anumit exponent. Determin valoarea ntreag a unei valori numerice. Calculeaz logaritmul natural (n baza e). Calculeaz logaritmul n baza 10 (zece). Calculeaz restul mpririi a dou valori numerice. Genereaz un numr aleator cuprins ntre 0 i 1. Genereaz un numr aleator dintr-un interval specificat. Convertete cifrele arabe n cifre romane. Rotunjete o valoare pentru un numr dat de poziii zecimale. Calculeaz rdcina ptrat dintr-un numr pozitiv. Calculeaz arccosinus. Calculeaz arcsinus. Calculeaz arctangent. Calculeaz cosinus. D valoarea numrului PI (3.1415926536). Calculeaz sinus. Calculeaz tangenta.

ROMAN ROUND SQRT

Trigonometrice
ACOS ASIN ATAN COS PI SIN TAN

Funcii de cutare Aceste funcii sunt utilizate pentru cutarea de valori n cadrul listelor sau n baze de date, sau pentru identificarea referinelor unei csue. Cele mai importante funcii de cutare sunt prezentate n tabelul 3.12.

87

Tabelul nr. 3.12. Principalele funcii de cutare

Funcia
ADRESS

Rolul funciei
Construiete adresa unei csue specificate prin numrul rndului i al coloanei, avnd precizat i tipul de adres dorit printr-un argument numeric (1 sau lips pentru adres absolut, 4 pentru adres relativ etc.). Exemplu: ADRESS(2,3) d $C$2. Alege o valoare numeric dintr-o list de valori numerice sau de iruri, pe baza unui index numeric.Exemplu: CHOOSE(2, Ianuarie,Februarie, Martie) va da valoarea Februarie Ofer numrul coloanei corespunztor adresei specificate ca argument. Exemplu: COLUMN(C2) d valoarea 3. Efectueaz cautri, dup un criteriu specificat, ntr-un grup de csue i d ca rezultat coninutul csuei situate la intersecia coloanei n care s-a identificat elementul cutat i a liniei specificate ca argument. Cutarea se face pe linie. Efectueaz cautri, ntr-un grup de csue sau ntr-un tablou (array) i d ca rezultat coninutul csuei situate la intersecia liniei i coloanei ale cror numere au fost specificate ca argumente. Ofer numrul rndului corespunztor adresei specificate ca argument. Exemplu: ROW(A15) d 15. Efectueaz cautri, dup un criteriu specificat, ntr-un grup de csue i d ca rezultat coninutul csuei situate la intersecia liniei n care s-a identificat elementul cutat i a coloanei specificate ca argument. Cutarea se face pe coloan.

CHOOSE

COLUMN HLOOKUP

INDEX ROW VLOOKUP

Funcii pentru date calendaristice i timp


Tabelul nr. 3.13. Funcii pentru date calendaristice i timp

Funcia
DATE

Rolul funciei
Calculeaz un numr corespunztor datei calendaristice specificate prin valori numerice ale anului, lunii i zilei. Exemplu: pentru 8 martie 1999 funcia DATE(99,3,8) d valoarea 36227 (format General) sau 03/08/99 (format Date). Convertete iruri care reprezint data calendaristic n numrul echivalent. Exemplu: DATEVALUE("8-Mar-99") d numrul 36227. Calculeaz numrul zilei din lun pe baza argumentului care se refer la numrul de zile trecute de la 1 ianuarie 1900 sau a datei specificat ca un ir de caractere. Exemplu: DAY(36227) sau DAY(03/08/99) d valoarea 8. Calculeaz numrul lunii din an pe baza argumentului care se refer la numrul de zile trecute de la 1 ianuarie 1900 sau a datei specificat ca un ir de caractere. Exemplu: MONTH(36227) sau MONTH(03/08/99) d valoarea 3. Determin anul calendaristic, exprimat prin dou sau patru cifre, conform formatului selectat, pe baza argumentului care se refer la numrul de zile trecute de la 1 ianuarie 1900 sau a datei specificat ca un ir de caractere. Exemplu: YEAR(36227) d valoarea 1999.

DATEVALUE DAY

MONTH

YEAR

88

Funcia
HOUR

Rolul funciei
Pornind de la un numr subunitar sau de la ora specificat ca un ir de caractere, determin ora corespunztoare din zi. Exemplu: HOUR(0.437615) d valoarea 10, deoarece 0.437615 este asociat la ora 10:30:10 AM; HOUR(5:15 PM) d valoarea 17. Pornind de la un numr subunitar sau de la ora specificat ca un ir de caractere, determin minutul corespunztor din or. Exemplu: MINUTE(0.437615) d valoarea 30, deoarece 0.437615 este asociat la ora 10:30:10 AM; MINUTE(18:15:00) d 15. Calculeaz numrul de zile lucrtoare dintre dou date calendaristice specificate cu ajutorul funciei DATEVALUE. Determin valoarea care corespunde datei i orei curente, dup orologiul calculatorului. Exemplu: NOW() d valoarea 36227.437615 (format General) sau 3/8/99 10:30 (n format Date). Pornind de la un numr subunitar sau de la ora specificat ca un ir de caractere, determin secunda corespunztoare din minut. Exemplu: SECOND(0.437615) d valoarea 10, deoarece 0.437615 este asociat la ora 10:30:10 AM. Calculeaz un numr (cu valori ntre 0 i 0.9999999) corespunztor timpului scurs din zi, specificat prin valorile numerice ale orei, minutului i secundei. Exemplu: pentru 10:30:10 AM, funcia TIME(10,30,10) d valoarea 0.437615. Convertete iruri care reprezint ora n numrul echivalent. Exemplu: TIMEVALUE("10,30,10") d numrul 0.437615. Determin valoarea care corespunde datei curente, dup orologiul calculatorului. Este o pseudofuncie calendaristic, ntruct se realizeaz de sistem prin funciile INT(NOW()). Exemplu: TODAY() d valoarea 36227 (n format General) sau 3/8/99 (n format Date).

MINUTE

NETWORKDAYS

NOW SECOND

TIME

TIMEVALUE TODAY

Recomandri pentru utilizarea funciilor calendaristice: Numrul asociat de Excel, versiunea pentru Windows, datei calendaristice reprezint un numr ntreg din intervalul 1 - 2958525. Astfel, se atribuie zilei de 1 ianuarie 1900 valoarea 1, zilei de 1 februarie 1900 valoarea 32, iar ultima valoare corespunde zilei de 31 decembrie 9999. Numrul asociat de Excel orei exacte reprezint un numr zecimal din intervalul 0.000000 0.99999999. Astfel, se atribuie orei 0 (ce marcheaz nceputul unei noi zile) valoarea 0.000000, orei 12 (amiaz) valoarea 0.500000, iar pentru 23:59:59 valoarea 0.99999999. De regul, Excel recunoate o dat calendaristic i o afieaz n formatul specific, dar pentru ca data sau ora s apar ntr-un alt format se folosete comanda Format, Cells. Chiar dac funcia NOW nu are argumente, este obligatorie prezena parantezelor altfel se obine eroarea #NAME?. Funcii pentru baze de date Aceste funcii sunt asemntoare cu funciile statistice (vezi tabelul 3.14). 89

Tabelul nr. 3.14. Principalele funcii pentru baze de date

Funcia
DAVERAGE DCOUNT DGET

Rolul funciei
Calculeaz media aritmetic a valorilor unui cmp dintr-o baz de date, doar pentru nregistrrile care ndeplinesc un anumit criteriu. Numr csuele ce conin valori numerice dintr-un cmp al bazei de date, dup un anumit criteriu. Determin valoarea asociat cmpului specificat din nregistrarea pentru care condiia este adevrat. Dac nici o nregistrare nu verific acea condiie, se afieaz #VALUE!, iar dac mai multe nregistrri o verific se afieaz #NUM!. Determin valoarea maxim dintr-un cmp al bazei de date, dup un anumit criteriu. Determin valoarea minim dintr-un cmp al bazei de date, dup un anumit criteriu. Calculeaz abaterea medie static a valorilor dintr-un cmp al bazei de date, dup un anumit criteriu. nsumeaz valorile dintr-un cmp al bazei de date, dup un anumit criteriu. Calculeaz dispersia valorilor dintr-un cmp al bazei de date, dup un anumit criteriu.

DMAX DMIN DSTDEV DSUM DVAR

Recomandri pentru utilizarea funciilor tip baz de date: Toate funciile pentru baze de date trebuie s aib trei argumente: grup de intrare, cmp, criteriu. Grupul de intrare trebuie s conin baza de date. Poate fi o adres sau un nume atribuit zonei care conine baza de date. n exemplul din fig. nr. 3.19, grupul de intrare (baza de date) este n zona A1:D7. Cmpul este precizat prin numrul de ordine al coloanei pe care se gsete. Numrul de ordine corespunde poziiei ocupate de coloana care conine cmpul, n zona de intrare. Primei coloane i se asociaz numrul 1, celei de-a doua, numrul 2 .a.m.d. Dac numrul de ordine este o valoare mai mare dect numrul de cmpuri, funcia va afia mesajul de eroare #VALUE!. n exemplul dat, grupul de intrare este alctuit din 4 cmpuri, identificate prin numere de la 1 la 4. Cmpul poate fi precizat i prin numele su, scris ntre ghilimele (n loc de 4 se poate scrie Salariu). Criteriul este zona n care se specific restriciile de selecie. O zon de criterii trebuie s includ numele cmpului (aa cum este specificat n grupul de intrare) i condiia de selecie. Condiia se introduce n csua de sub cea cu numele cmpului. Criteriul poate fi adresa zonei sau un nume atribuit acesteia. n exemplul de mai jos (fig. nr. 3.19) sunt definite 3 criterii: F1:F2, G3:H4 (condiia 1 i condiia 2), H6:H7.

90

Fig. nr. 3.19. Funcii statistice pentru bazele de date. Exemple

Fig. nr. 3.20. Funcii statistice pentru bazele de date. Scrierea formulelor

Funcii tip ir de caractere Cu ajutorul funciilor de tip ir de caractere se poate lucra cu date de tip text n formule sau funcii. Spre exemplu, se poate determina lungimea unui ir de caractere sau se poate converti un text n majuscule. Spre exemplu, formula de mai jos exemplific utilizarea funciei TODAY ca argument al funciei TEXT, ce transform data calendaristic n text (vezi rezultatul n fig. nr. 3.21):
=Raport de activitate la data &TEXT(TODAY( ),dd-mmm-yyyy)

Fig. nr. 3.21. Utilizarea funciei TEXT Tabelul nr. 3.15. Funcii tip ir de caractere

Funcia
CHAR CLEAN CODE CONCATENAT E EXACT FIND LEFT LEN LOWER

Rolul funciei
D caracterul care are codul ASCII specificat ca argument. Exemplu: CHAR(65) d A. terge caracterele netipribile din irul specificat. D codul ASCII al primului caracter din irul specificat. Exemplu: CODE(Alfa) afieaz A. Unete mai multe iruri de caractere ntr-unul singur. D valoarea logic 1 (adevrat) dac cele dou iruri sunt identice i valoarea logic 0 (fals) dac cele dou iruri sunt diferite. Calculeaz poziia primului caracter din irul cutat care a fost identificat n irul n care se face cutarea. Extrage primele n caractere din irul precizat ca argument. Calculeaz numrul de caractere din irul precizat ca argument. Convertete toate literele, din irul precizat ca argument, n litere mici.

91

Funcia
MID PROPER REPT REPLACE RIGHT SEARCH TEXT TRIM UPPER VALUE

Rolul funciei
Extrage un anumit numr de caractere, din interiorul unui ir precizat ca argument. Convertete prima liter, din fiecare cuvnt al irului precizat ca argument, n liter mare, iar restul literelor din cuvnt le convertete n litere mici. Realizeaz duplicarea irului specificat ca argument de un numr precizat de ori. nlocuiete caracterele specificate ale unui ir cu alte caractere. Extrage ultimele n caractere din irul precizat ca argument. Este similar cu FIND, doar c, spre deosebire de aceasta, nu face diferena ntre litere mici i litere mari. Transform o valoare numeric ntr-un ir, folosind formatul specificat. Elimin spaiile de la nceputul i sfritul irului specificat. Convertete toate literele, din irul precizat ca argument, n litere mari. Convertete un ir ce reprezint un numr ntr-o valoare numeric.

Funcii de informare Funciile de informare ofer date privind coninutul csuelor sau mediul de lucru.

92

Tabelul nr. 3.16. Principalele funcii de informare

Funcia
CELL

Rolul funciei
D informaii despre coninutul, formatul datelor sau poziia (numrul rndului sau coloanei) unei csue. Exemple: CELL(contents,A2) afieaz Nume i prenume CELL(row,D31) afieaz 31 CELL(format,A2) afieaz G (adic formatul General) Numr csuele goale (libere) dintr-un grup de csue precizat. Ofer informaii asupra mediului de lucru curent. Argumentul este un text predefinit care se refer la tipul de informaii solicitat. Exemplu: INFO(directory) afieaz numele directorului curent; INFO(release) numele versiunii Excel utilizate etc. Funciile IS confirm/infirm tipul datei specificat prin numele funciei, avnd corespunztor rezultatul TRUE (Adevrat) sau FALSE (Fals). Spre exemplu, ISBLANK d valoarea TRUE dac respectiva csu este goal sau FALSE n caz contrar. n mod similar, ERR se refer la valori de tip eroare, LOGICAL la valori logice, NA la eroarea #N/A, NONTEXT la valori diferite de text, NUMBER la valori numerice, REF la referine, iar TEXT la iruri de caractere. ODD i EVEN indic prezena de valori impare sau pare. Argumentele acestor funcii pot fi adresa csuei sau o valoare concret. Returneaz tipul datei sub forma unui numr. Astfel, dac este o valoare numeric se afieaz 1, dac este text se afieaz 2 .a.m.d.

COUNTBLANK INFO

ISBLANK ISERR ISLOGICAL ISNA ISNONTEXT ISNUMBER ISREF ISTEXT ISEVEN ISODD TYPE

Funcii tehnice Funciile tehnice se mpart n 3 categorii: funcii ce lucreaz cu numere complexe; funcii pentru conversia numerelor ntre diverse sisteme de numeraie (binar, zecimal, octal, hexazecimal); funcii pentru conversia valorilor ntre diverse sisteme metrice (spre exemplu, din km n mile). Trebuie precizat c aceste funcii nu sunt prezente n versiunea standard, fiind incluse n componenta Analysis ToolPak, ce poate fi instalat prin SETUP.

Funcii definite de utilizator n aplicaiile n care trebuie efectuate calcule complexe, pentru care nu sunt definite funcii Excel, utilizatorul i poate defini propriile funcii, folosind limbajul VBA (Visual Basic for Applications).

93

FACILITI GRAFICE N PROGRAMELE DE CALCUL TABELAR Principalele tipuri de grafice


Orice program de calcul tabelar ofer cinci tipuri fundamentale de grafice: liniar, histogram, xy (nor de puncte), zonal, diagram de structur (cerc). n fapt, numrul tipurilor de grafice este mai mare, iar dac se au n vedere i subtipurile, utilizatorul are la dispoziie cteva zeci de variante de grafice. Sub mediul de lucru Windows, pentru majoritatea tipurilor de grafice exist att reprezentare 2 D, ct i 3 D. Column Graph (histogram) const dintr-o serie de bare verticale, fiecare reprezentnd o valoare numeric. Asigur reprezentarea seriilor dinamice de date. Un tip particular de histogram este cea orizontal (bar graph), care permite o mai bun reprezentare comparativ a valorilor, n detrimentul reprezentrii dinamice (n timp). Ambele tipuri de histograme au i varianta de reprezentare tridimensional, precum i varianta stiv, n care se evideniaz relaia dintre parte i ntreg. Line Graph (grafic liniar) reprezint grafic evoluia, n timp, a unuia sau a mai multor fenomene sau procese. Fiecare linie reprezint o categorie de date, iar fiecare punct de pe linie reprezint o valoare a unei date la un moment dat. Sunt utile pentru urmrirea trendului i pentru previziuni. Pie Chart (diagrama de structur) este folosit pentru a evidenia, prin sectoare de cerc, ponderea fiecrei componente a mulimii reprezentate. Pentru a scoate i mai mult n relief anumite elemente, se poate apela la facilitatea de expandare a sectoarelor de cerc. Un mod asemntor de reprezentare a unei structuri este graficul de tip doughnut (grafic de tip inel). Acesta prezint avantajul c poate reprezenta mai multe serii de date. Area Graph (grafic zonal) realizeaz ca i cel liniar reprezentarea evoluiei n timp, dar indic mai clar magnitudinea schimbrilor n timp. XY Graph (grafic de tip XY sau nor de puncte) scoate n eviden corelaiile existente ntre dou iruri de date numerice. Aceste grafice sunt redate prin linii, desenate n sensul dat de valorile de reprezentat ca puncte din grafic. Spre deosebire de graficele tip linie, cele de tip XY folosesc o scal numeric i pe axa Ox. O variant a acestui grafic este cel denumit bubble, n care punctele sunt nlocuite de cerculee, ale cror dimensiuni indic valoarea unei a treia variabile. Pe lng acestea, n programele de calcul tabelar se regsesc i alte tipuri particulare de grafice. Astfel, n Excel utilizatorul mai poate alege dintre urmtoarele tipuri: Radar, n care fiecare categorie reprezentat are propria ax, pornind din acelai punct central al diagramei;

94

Surface, utilizat pentru a gsi combinaiile optime dintre dou seturi

de date. Este o reprezentare tridimensional, asemntoare cu o hart topografic, prezentnd n culori diferite datele ce se regsesc n acelai interval de valori; High-low-close, utilizat adesea pentru prezentarea fluctuaiilor de preuri pe piaa bursier (vezi cele trei componente: cel mai mare, cel mai mic i preul la nchidere), dar i pentru reprezentarea datelor tiinifice (de exemplu, a fluctuaiilor de temperatur). Exist i variante ale acestui tip de grafic, precum Open-high-low-close sau Volume-high-low-close; Cone, Cylinder, Pyramid, care realizeaz reprezentri tridimensionale ale valorilor numerice n form de con, cilindru sau piramid, avnd ca atu un aspect deosebit fa de un grafic clasic, cum este cel de tip Column. La toate acestea se adaug tipurile de grafice personalizate sau definite de utilizator. Acesta are posibilitatea de a aduga n lista de opiuni un tip nou de grafic, derivat din cele oferite de sistem, care va apare n list la utilizrile viitoare, sub un nume stabilit de utilizator. Aa cum se observ din fig. nr. 3.25, utilizatorul poate selecta pentru un grafic unul dintre tipurile standard sau, dac dorete unul dintre tipurile personalizate, va executa clic pe Custom Types i va selecta din list opiunea dorit.
Tipuri personalizate de grafice

Tipuri de grafice standard

Subtipuri de grafice

Tipuri de grafice EXCEL

Fig. nr. 3.25.

Procedura general de creare a graficelor


Orice grafic se creeaz pe baza datelor din foile de calcul, cu meniunea c valorile reprezentate grafic vor fi actualizate ori de cte ori se modific datele din foaia de calcul surs. Majoritatea programelor de calcul tabelar au un asistent (n Excel se numete Chart Wizard), care l ndrum pe utilizator n crearea graficului. Procedura general de lucru este 95

structurat n mai muli pai, care se parcurg cu ajutorul comenzilor Next i Back (nainte/napoi) i care pot fi sistematizai astfel: alegerea tipului de grafic (fig. nr. 3.25); selecia zonei de csue care conine datele de exprimat grafic (dac nu a fost selectat nainte de lansarea Wizard-ului) i precizarea informaiilor despre dispunerea seriilor de date (pe linie/pe coloan), aa cum se poate vedea n fig. nr. 3.26;
Observaie: Este posibil selectarea de zone neadiacente, dac dup selectarea primei zone, se menine apsat tasta CTRL n timp ce se selecteaz celelalte zone. Atenie! Seleciile neadiacente trebuie s formeze un dreptunghi.

Fig. nr. 3.26 Specificarea datelor de reprezentat grafic

specificarea opiunilor pentru mbuntirea graficului (vezi fig. nr. 3.27): titlu grafic (Titles), titluri i format pentru axe (Axes), legend (Legend), etichete pentru date (Date Labels), linii orizontale i/sau verticale (Gridlines) etc.

96

Fig. nr. 3.27. Definirea opiunilor pentru personalizarea graficului

indicarea poziiei (locaiei) graficului (vezi fig. nr. 3.28). Astfel, graficul poate fi:

un obiect inclus ntr-o foaie de calcul (embedded chart), care poate fi plasat cu uurin n orice zon a acesteia, poate fi redimensionat dup cerine i poate fi copiat ntr-o alt aplicaie (de exemplu, Word) prin mecanismul Clipboard; introdus ntr-o foaie independent, denumit Chart Sheet.

Fig. nr. 3.28. Plasarea graficului

terminarea operaiunilor prin selectarea butonului Finish. Aa cum se observ i n figurile de mai sus, utilizatorului i este prezentat graficul n fiecare etap intermediar (ntr-o zon de tip Preview), astfel c el poate mai uor face modificri ale aspectelor care nu corespund dorinelor sale. Se poate reveni oricnd la etapele anterioare (butonul Back) pentru a realiza modificrile dorite.

Fig. nr. 3.29. Linia de instrumente Chart

Fiecare component a graficului (seriile de date, axele, titlurile, legenda etc.) pot fi modificate individual dup terminarea graficului. Fiecare dintre ele are definit un meniu cu comenzi specifice (numit meniu shortcut), ce se apeleaz prin clic dreapta. De asemenea, pentru modificarea unui grafic exist linia de instrumente Chart, care se activeaz automat la selectarea graficului (vezi fig. nr. 3.29).

97

Observaie: Utilizatorul poate crea extrem de rapid, ntr-un singur pas, un grafic pentru datele selectate din foaia de calcul, folosind tipul implicit de grafic (Column, dac nu a fost schimbat de utilizator). Pentru creare se apas tasta F11 (pentru un grafic salvat ntr-o foaie Chart) sau butonul Default Chart (dac lipsete se poate aduga prin View, Toolbars) din linia de instrumente, pentru un grafic inclus n foaia de calcul curent.

Prezentm n continuare cteva operaiuni ce se pot efectua dup realizarea unui grafic: modificarea aspectului graficului (tip, titluri, legend, etichete, etc.), prin alegerea comenzilor corespunztoare din linia de instrumente Chart sau din meniul de tip shortcut; adugarea de noi date, modificnd zona datelor (Data Range) sau utiliznd comenzile Copy i Paste; tergerea unei serii de date din grafic (se apas tasta Delete dup selectarea seriei din grafic); protejarea graficului, mpiedicnd modificarea lui prin comanda Protection din meniul Tools; realizarea de simulri; adugarea unei linii de trend

98