Sunteți pe pagina 1din 87

METODE NUMERICE SI PROGRAMARE Calcul si programare in inginerie utilizand Excel Pachetul de programe Microsoft Office este prezent aproape

pe fiecare calculator din orice unitate de proiectare, exploatare, produc ie, comer sau orice alta societate comerciala. Utilitarul Excel din Microsoft Office este o unealt# foarte puternica &i oricnd la ndemn# permi nd rezolvarea unor probleme inginere&ti complexe, inclusiv programare f#r# alte cheltuieli suplimentare pentru achizi ionarea unor pachete de programe sau limbaje de programare costisitoare si dificil de utilizat. Posibilit# ile remarcabile ale acestui utilitar l recomand# cu prisosin # &i n domeniul la care face referire prezentul curs. SEC(IUNEA I FORMULE, ECUATII, FUNCTII Lucrul cu formule Formulele sunt utilizate pentru a aduna, a sc#dea, a nmul i sau a mp#r i numerele pe foile de calcul. Ele sunt alc#tuite din dou# p#r i: Celulele pe care se dore&te s# le include i n formul#. Operatorii aritmetici, care i spun programului Excel ce calcul dori i s# se efectueze. Formulele Excel ncep ntotdeauna cu un semn egal (=), ceea ce indic# programului Excel c# se dore&te s# crea i o formul#. A&a c# o formul# simpl# va ar#ta cam a&a: =B3-B2 Pentru a vedea toate formulele din foaia de ca1cu1, se alege Options din meniul Tools, selecta i pagina View din caseta de dialog Options, apoi n caseta de validare, Formulas. sau CTRL+` (single left quotation mark) Crearea formulelor S# se alc#tuiasc# o formul# care va sc#dea num#rul con inut n celula B3 din num#rul con inut n celul# si care s# pun# rezultatul n celula B4. (Aceast# formul# este ar#tat# n figura 1.) 1. Pune i numerele n celulele B2 &i B3. n celula B2 pune i un num#r mai mare dect cel din celula B3. 2. Muta i cursorul n celula B4 &i tasta i semnul egal (=). 3. Da i clic n bara de formule. 4. Da i clic pe celula B2. Celula B2 este nconjurat# de un marcaj ce indicnd c# este selectat#. Adresa celulei apare n bara de formule. 5. Asigura i-v# c# nc# mai ave i cursorul n bara de formule si tasta i la dreapta referin ei B2, semnul minus (-), pentru ecua ia dumneavoastr#. 6. Pozi iona i cursorul pe celula B3 &i da i clic. Din nou, adresa celulei apare n bara de formule. 7. Ap#sa i ENTER pentru a termina formula. Dac# a i introdus valori n celulele B2 si B3. valoarea con inut# n B3 este sc#zut# din valoarea din B2, iar diferen a apare n celula B4.

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 1 Crearea formulelor Formulele se refer# la celule, nu la numere Cnd lucra i cu formule, ine i minte c#: O formul# cu referin e la celule (cum ar fi B6*B7) va efectua calculele indicate n formul# indiferent de numerele aflate n acele celule. Pute i schimba numerele din celule, dar formula va efectua aceea&i sarcin# pe care i-a i repartizat-o. Pute i s# crea i &i o formul# care con ine numere, nu referin e la celule. Totu&i formulele, cu multe numere n ele, vor necesita s# v# rentoarce i de multe ori la ele, pentru a face ajust#rile de rigoare; nu ve i putea modifica pur &i simplu, num#rul din celul#. Multe formule sunt un amestec de referin e la celule &i numere fixe. Date1e care se pot schimba sunt cele din celule, n timp ce o valoare fix# poate fi inserat# direct ntr-o formul# ca un num#r. Ordinea opera iunilor n formule. Parantezele care con in opera iuni. Ridicarea la putere. nmul irea &i mp#r irea Adunarea &i sc#derea. Aplicarea de formule la noi celule Se pot copia formulele dintr-o celul# n alta. De exemplu, dac# crea i o ecua ie pentru a aduna toate numerele din coloana D, se poate utiliza o formul# similar# pentru coloanele E &i F. Fiecare dintre urm#toarele metode de copiere ale formulelor produce rezultate diferite: Pentru a aplica o formul# pe care a i creat-o ntr-o coloan# si pentru a o muta la alte coloane, selecta i col ul din dreapta al celulei-formul# &i trage i orizontal, peste coloanele int# (figura 2). Acest proces copiaz# formula n fiecare coloan#, &i, de fiecare dat#, formula se schimb# pentru a se referi la celulele din noua sa coloan#. Aceasta se nume&te o referin # relativ# ia celule (spre deosebire de o referin # absolut#). Pentru a muta o formul# ntr-o nou# celul#, laolalt# cu referin ele sale, da i clic, pe celula-formul#, cu s#geata mouse-ului (da i clic pe marginea celulei) &i trage i-o ntr-un alt loc. Dac# cursorul nu este exact peste marginea celulei, el nu va ar#ta ca o s#geat#. Dac# se dore&te ca s# muta i formula dumneavoastr# ntr-o nou# celul# (nu s# o copia i) &i ca formula s# se refere la celulele din coloana de unde a i mutat-o, ine i ap#sat# tasta CTRL n timp ce trage i formula.

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 2: Aplicarea de formule la noi celule Trage i formula pe care a i creat-o n celula B4, n celulele C4, D4 &i E4. Formulele copiate vor efectua acum calcule pentru noile lor coloane, nu pentru coloana B. Mutarea simultan# a formulelor Pentru a muta sau a copia un grup de formule, ine i ap#sat# tasta SHIFT n timp ce selecta i formulele, elibera i tasta SHIFT, iar apoi muta i-le. Cnd trage i formule grupate ntr-o nou# loca ie, formulele se vor referi la setul ini ial de celule. Dac# ine i ap#sat# tasta CTRL, formulele care vor fi copiate se vor referi la celulele din noua coloan#. Mutarea unei formule n sus sau n jos ntr-o coloan# nu afecteaz# celulele la care se refer#.

Operatorii din formulele Excel Pentru a fi explica i mai u&or, operatorii programului Excel pot fi mp#r i i n patru categorii generale: aritmetici, de compara ie, de text &i de referin #. n majoritatea cazurilor ve i utiliza operatori aritmetici. Ceilal i sunt utili pentru proiecte mai complexe.

Operatorii aritmetici Colec ia standard de operatori aritmetici este: Operator + * / %

Efectueaz# Adunare Sc#dere nmul ire mp#r ire Procentaj

PDF created with pdfFactory trial version www.pdffactory.com

Ridicare 1a putere

Exemple: =B5*10% calculeaz# 10 la sut# din con inutul celulei B5. =B5^2 calculeaz# p#tratul con inutului celulei B5.

Operatori de compara ie Operatorii de compara ie v# permit s# inspecta i dou# valori &i s# ajunge i la o concluzie n privin a valorilor lor relative. Ei sunt de obicei cupla i cu func iile logice din Excel Iat# operatorii de compara ie: Operator Semnifica ie = Egal cu > Mai mare dect >= Mai mare sau egal cu < Mai pu in dect <= Mai pu in sau egal <> Diferit de

Operator de text Singurul operator de text al programului Excel este semnul &. Acesta este utilizat pentru a combina textul. De exemplu, dac# ave i cuvntul cow n celula C7 &i cuvntul boy n C8, formula =C7&C8 va crea &iru1 de text cowboy. Operatori de referin # Excel ofer# &i operatori de referin #. Cea mai obi&nuit# referin # este la un domeniu de celule. De exemplu, expresia B1:C3 se refer# la celulele B 1, C3 &i la toate celulele dintre ele. Operatorul de referin # este semnul : . Adic# ve i folosi dou# puncte pentru a separa prima &i ultima celul# dintr-un domeniu. Referirea la celule n formule Cnd tasta i numele unei celule ntr-o formul#, a i creat o referin #. Ea ofer# formulei o leg#tur# cu acea celul#. S# examin#m diferen a dintre formulele care se refer# la o singur# celul# &i formulele care lucreaz# cu mai multe celule deodat#. Unele formule efectueaz# un calcul cu referire la o anumit# celul#. Aceasta este o referin # la o singur# celul#. Dac# se dore&te ca formula s# se refere la o celul#, da i clic pe celula respectiv# sau tasta i adresa celulei n bara de formule. Iat# un exemplu de referin # la o singur# celul#: =(B3/8)*115%

PDF created with pdfFactory trial version www.pdffactory.com

Aceast# formul# mparte con inutul celulei B3 la 8 &i apoi nmul e&te rezultatul cu 115%. Unele formule calculeaz# un ntreg domeniu de celule. n urm#torul exemplu, celulele de la B3 pn# la B5 reprezint# domeniul de referin # asupra c#ruia va ac iona formula. (8*SUM(B3:B5)*115%) n acest exemplu, formula nmul e&te 8 cu suma celulelor de la B3 la B5 si apoi nmul e&te produsul cu 115%. A&a cum pute i vedea, pentru a specifica un domeniu de celule, insera i dou# puncte ntre dou# adrese de celule. Formula va examina apoi automat toate celulele dintre ele, inclusiv cele dou# celule. Observa ie: n loc s# introduce i un domeniu de celule ntr-o formul#, da i clic &i trage i peste toate celulele pe care dori i s# le include i, iar Excel va insera automat domeniul n formul#. Folosirea tabelelor de c#utare Tabelele de c#utare sunt matrice speciale (domenii de celule) create astfel nct o func ie de c#utare s# poat# folosi datele. Exemplu:

Tabelul de c#utare const# din domeniul de celule A3:B5. Celulele A3 pn# la A5 con in cantit# i, n timp ce celulele B3 la B5 con in pre urile. In exemplul de mai sus, cantitatea pe care o introduce i n coloana A (de exemplu, 10, 25 sau 50) face ca un pre special al materialelor s# apar# n coloana B. Tabelul de c#utare a fost creat pentru a oferi cele mai sc#zute pre uri ($7.75, coloana B) pentru cump#rarea celei mai mari cantit# i (50 sau mai mult, coloana A). Cump#rarea unui volum mai mic de materiale (s# zicem 10 sau mai pu in), face ca celula adiacent# din coloana B s# afi&eze un pre mai mare pentru un bilet. Scopul unui tabel de c#utare este, deci, acela de a permite specificarea unui domeniu de numere introduse ntr-o anumit# coloan# va declan&a un anumit rezultat ntr-o alt# coloan#. A&a cum se vede din acest exemplu, celula B 10 con ine o formul# a unui tabel de c#utare &i afi&eaz# rezultatele unei formule aplicabile. Uneori, se pot utiliza tabele de c#utare care s# cuprind# att text, ct &i numere. In exemplul urm#tor, Excel insereaz# diferite cuvinte n func ie de cantit# ile comandate. Con inutul celulelor din B3, B4 si B5 a fost nlocuit cu text.

PDF created with pdfFactory trial version www.pdffactory.com

Tehnici avansate de lucru cu formule Exist# formule care declan&eaz# ac iuni bazate pe anumite criterii, cum ar fi prezen a unei anumite fraze de text, a unui num#r sau a unei date.

Semnificatia formulei: Daca celula G7 contine IS atunci inmulteste B19 cu 1.08

Figura 3: Formula supravegheaz# celula G7 pentru prezen a textului IS.

PDF created with pdfFactory trial version www.pdffactory.com

Celula B 19 arat# suma tuturor achizi iilor (cantitatea comenzilor) care sunt listate n coloana B. Pentru a crea o formul# care adaug# numerele din coloana B &i care afi&eaz# rezultatele n B:19, trebuie s# se tasteze: Pentru a crea suma achizi iilor, se fac urm#torii pa&i: 1. Se selecteaz# locul n care se dore&te s# apar# suma achizi iilor (n acest exemplu, suma apare n celula B19). 2. Se d# clic pe semnul egal din bara de formule. 3. Se tasteaz# formula Sum(B11:B15) (Excel adaug# automat semnul egal). Pentru a termina formula, se apas# Enter sau clic din nou pe semnul egal. Pentru a face ca o foaie de calcul s# aleag# ntre dou# ac iuni, trebuie s# i se ordone s# supravegheze ndeplinirea unei anumite condi ii. Construirea unei formule Foaia de calcul din figura 3 are un cmp referitor la stat, iar func ia, Ori de cte ori cmpul Stat con ine IS, adaug# TVA la totalul cump#r#turilor. Cmpul Stat este celula G7. Suma cump#r#turilor se af1# n celula B19. Aceast# formul# va ap#rea ntr-un cmp etichetat Total General, care va con ine suma dintre totalul cump#r#turilor &i taxa pe valoare ad#ugat#. Celula B20 va fi celula-formul# care va con ine att formula, ct &i totalul general afi&at. Formula ESTE: =IF(G7=IS,B19*1.08,N/A) Interpretare: Dac# celula G7 con ine IS, atunci nmu1 e&te celula B19 cu 1.08 la sut#. Altfel, afi&eaz# N/A. Stabilirea unei condi ii cu ajutorul func iei if 1. Se d# clic pe celula n care se dore&te s# apar# formula &i apoi pe semnul egal de pe bara de formule. Se d# clic pe s#geata cu vrful n jos af1at# n stnga barei de unelte &i se deruleaz# n jos. Se selecteaz# func ia IF din lista derulant#. Apare o caset# de dialog, figura 4.

Fig. 4: Caseta de dialog a formulei IF. Caseta de dialog are trei linii n care se introduc diferite p#r i ale formulei.

PDF created with pdfFactory trial version www.pdffactory.com

Logical_test Se specific# condi ia a c#rei ndeplinire trebuie s# o verifice formula. n acest exemplu, formula trebuie s# caute textul IS n celula pe care o definit# ca fiind celula Stat. Aceast# celul# este 07. Value_if_true Se specific# ce se va ntmpla dac# se ndepline&te condi ia (True). In acest exemplu, dac# textul IS apare n celula Stat, atunci taxa pe valoare ad#ugat# ar trebui adunat# cu suma achizi iilor. Value_if_false Se specific# ce ar trebui s# se ntmple dac# textul IS nu apare n celula State. In acest caz, n coloana taxei pe valoare ad#ugat# va ap#rea un simplu N/A (non aplicabil). Elaborarea liniei logical_test Trebuie stabili # condi ia pe care se dore&te ca formula s# o supravegheze. 1.Se d# clic pe butonul Range Selector af1at la dreapta primei linii, &i caseta principal# de dialog a formulei este nlocuit# cu o singur# linie af1at# n partea de sus a ecranului.

2. Aceast# parte a formulei ncepe cu o referin # la celul#. n loc s# se tasteze adresa celulei, se d# clic pe celul# (n acest caz, G7), iar referin a la celul# va ap#rea n formul#. 3. Se tasteaz# =IS (inclusiv ghilimelele) pentru a stabili condi ia pe care o va c#uta formula. (orice text introdus, trebuie s# fie tastat n celula G7, pentru ca formula s# func ioneze). Se revine la caseta de dialog a formulei IF 4. Se d# clic din nou pe butonul Range Selector (af1at n dreapta) &i caseta de dialog a formulei IF se va extinde, permi nd introducerea restului formulei. Calcule instantanee Unele calcule importante pot fi f#cute f#r# a mai implica direct o formul#. Adunarea rapid# a numerelor Pentru a aduna un rnd sau o coloan# de cifre, se utilizeaz# facilitatea AutoSum. Se selecteaz# ntregul rnd sau ntreaga coloan# de cifre care se doresc a fi adunate &i se d# clic pe butonul AutoSum. Linia aflat# imediat sub, sau la dreapta grupului de numere selectat, va afi&a suma acestor numere. AutoSum genereaz# de fapt o formul# care este localizat# n celula ce con ine suma. Se poate muta celula-formul# &i ea se va referi tot la acela&i grup de celule. Aceast# libertate de mi&care poate fi important# dac# lista de numere cre&te &i este nevoie de spa iu pentru a ad#uga altele. Efectuarea de calcule obi&nuite pentru a extrage informa ii din celulele selectate Cnd este nevoie de informa ii din anumite celule, se pot face rapid calcule obi&nuite f#r# a mai apela la formule. Pur &i simplu se selecteaz# celulele, se d# clic cu butonul drept oriunde pe bara de stare din Excel (aflat# n partea de jos a ecranului) &i se selecteaz# func ia adecvat# (fig. 5). Se poate utiliza aceast# metod# pentru a ob ine rapid

PDF created with pdfFactory trial version www.pdffactory.com

suma unui rnd sau a unei coloane, sau chiar pentru a totaliza celulele aflate n diferite p#r i ale foii de calcul. Se poate face &i media unui grup de numere, localiza valoarea minim# sau maxim#, sau calcula num#rul de celule completate dintr-o selec ie. Totu&i, nu se poate copia rezultatul n clipboard, sau muta acest rezultat ntr-o celul# diferit#. Aceast# facilitate este pur informativ#.

Figura 5: Selecta i celulele, iar suma lor va ap#rea n partea de jos a ecranului Excel. Clic cu butonul drept pe bara de stare pentru a vedea rezultatul altor calcule

Proiectarea datelor f#r# ajutorul unei formule Nu toate colec iile de date necesit# o formul#. Se pot face proiec ii bazate pe o serie de numere, care s# indice care vor fi valorile urm#toare. Excel utilizeaz# rela iile ntre numerele dintr-un grup de celule selectate si ofer# urm#toarea secven # logic# de numere n celulele vecine. Aceast# facilitate este util#, cnd se dore&te s# se determine care va fi evolu ia unor parametri n urm#toarele luni, bazat# pe valorilor din lunile precedente (figura 6).

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 6: Selectnd cifrele din ianuarie &i februarie &i apoi tr#gnd la dreapta, se pot proiecta evolu iile pentru urm#toarele luni.

Proiectarea instantanee a datelor viitoare Pentru ca Excel s# analizeze rela ia dintre un set de numere &i apoi s# determine care numere vor urma n mod logic, se parcurg urm#toarele etape: 1. Se selecteaz# numerele de la care porne&te proiec ia. Se d# clic pe primul num#r din serie, innd ap#sat# tasta SHIFT &i apoi dnd clic pe ultimul num#r din aceast# serie, sau dnd clic &i tr#gnd de la primul la ultimul num#r. 2. Se plaseaz# mouse-ul peste col ul din dreapta-jos al selec iei (un p#trat mic, negru) &i s#geata mouse-ului se va transforma ntr-o cruciuli #. Se d# clic &i se trage n jos, selectnd cte celule se dore&te. Noile celule continu# conform modelului stabilit de celulele selectate mai nainte. Noile celule sunt umplute cu text sau date numerice, nu cu formule. Proiectarea valorilor ntre anumite numere date Dac# foaia de calcul are valori de nceput &i de sfr&it, Excel poate umple celulele dintre cele dou# valori cu o suit# de numere. Utiliza i aceast# facilitate atunci cnd trebuie s# afla i ce anume s-a ntmplat ntre dou# rezultate. Pentru a proiecta valorile dintre dou# numere, face i urm#toarele: 1. Selecta i num#rul ini ial &i num#rul int#, ap#snd tasta SHIFT n timp ce se d# clic pe fiecare num#r (sau selecta i domeniul dintre cele dou# numere dnd clic &i tr#gnd). 2. Dup# ce a i selectat domeniul, selecta i Fill din meniul Edit &i alege i Series. Va ap#rea caseta de dialog Series.

PDF created with pdfFactory trial version www.pdffactory.com

Pe panoul In din Series se d# clic pe Columns. Se verific# daca este selectat# op iunea Linear &i se d# clic OK. Excel umple celulele dintre pornire &i int#.

Figura 7: Se utilizeaz# comanda Series pentru a completa numerele dintre cele dou# valori existente la cele dou# capete ale rndului sau coloanei. Facilitatea de recalculare automat# din Excel n mod normal, Excel recalculeaz# de fiecare dat# cnd se schimb# vreun num#r pe o foaie de calcul. In afara cazului n care se comand# ceva contrar, Excel recalculeaz# ntotdeauna nainte de a salva. Dac# se dore&te s# se dezactiveze op iunea de recalculare automat#, se selecteaz# Options din meniul Tools &i se d# clic pe pagina Calculation. Sub set#rile Calculation, se d# op iunea Manual. De acum ncolo, pentru a recalcula manual o foaie de calcul, se ap#s# F9. Utilizarea de referin e relative, absolute &i mixte Referin ele relative, absolute &i mixte sunt foarte utile atunci cnd se dore&te s# se copieze sau s# se lipeasc# celule &i s# se mute pe foaia de calcul. O referin # variabil# va varia n func ie de locul n care este copiat# formula. De exemplu, s# presupunem c# o formul# din celula A15 se refer# la celula A1. Dac# se copiaz# formula din A15 &i se lipe&te n celula B15, referin a relativ# va indica apoi spre celula B1. Toate referin ele sunt relative n afara cazului n care se specific# a fi absolute. O referin # absolut#, pe de alt# parte, se refer# ntotdeauna la aceea&i celul#, indiferent unde este copiat# &i lipit# formula pe foaia de calcul. De exemplu, dac# o formul# lin celula A l5 se refer# la celula A1, atunci ea se va referi ntotdeauna la celula A1, chiar dac# se copie &i se lipe&te n alte celule.

PDF created with pdfFactory trial version www.pdffactory.com

O referin # mixt# este, a&a cum indic# si numele, n parte relativ# &i n parte absolut#. Se pot crea trei tipuri de referin e mixte: Referin e mixte care indic# spre o coloan# specific# &i un rnd relativ (cum ar fi $A1) Referin e mixte care indic# spre un rnd specific &i o coloan# relativ# (cum ar fi A$1) Referin e mixte care indic# spre o foaie de calcul specific# &i spre un rnd sau o coloan# relative (cum ar fi Sheet2: $A$1) Pentru a schimba tipul de referin #, se parcurg pa&ii urm#tori: 1. Plasa i punctul de inser ie n interiorul sau lng# celula respectiv#. Ap#sa i F4.

PDF created with pdfFactory trial version www.pdffactory.com

2 UTILIZAREA FUNCTIILOR EXCEL Procesorul de tabele Excel include un num#r mare de func*ii predefinite (232), dar ofer# +i posibilitatea ca utilizatorul s#-+i defineasc# propriile func*ii, potrivit cerin*elor de exploatare a aplica*iilor. Func*iile Excel permit efectuarea de calcule +i prelucr#ri diverse, de la cele mai simple pn# la cele mai complexe. 2.1 FUNC,II PREDEFINITE Func*iile predefinite reprezint# formule speciale care respectnd o anume sintax#, execut# opera*ii +i prelucr#ri specifice, fiind destinate rezolv#rii unor probleme +i aplica*ii ce con*in elemente predefinite de calcul. Unele func*ii predefinite sunt echivalente formulelor: de exemplu, formula de adunare a con*inutului celulelor A1, A2 +i A4, adic# =A1+A2+A4 este echivalent# cu func*ia =Sum(A1:A2;A4). Alte func*ii (majoritatea cazurilor) nu au echivalent n rndul formulelor, rezultatul scontat neputnd fi ob*inut dect prin aplicarea func*iilor predefinite sau putnd fi ob*inut pe cale obi+nuit#, prin aplicarea succesiv# a mai multor opera*ii +i formule. Folosirea func*iilor predefinite este supus# unor reguli foarte stricte, a c#ror nerespectare poate conduce la un rezultat incorect sau generator de eroare. Cea mai mare parte a func*iilor predefinite au trei componente: - semnul "egal"= (sau semnul plus +, pentru compatibilitate cu 1-2-3); - numele func*iei; - unul sau mai multe argumente; Nici un spa*iu nu este admis ca separator ntre cele trei componente ale func*iilor predefinite. Argumentele se afl# nchise ntre paranteze rotunde +i sunt separate printr-un separator zecimal. Acest separator poate fi virgul# sau punct +i virgul#, dup# cum a fost configurat ini*ial sistemul. n exemplele luate, se va lua n considera*ie ca separator zecimal caracterul "punct +i virgul#". Exist# +i func*ii care nu au nevoie de precizarea argumentului, de exemplu:=NOW(), =TRUE(), =TODAY(), etc. Exemplul urm#tor ilustreaz# diferite argumente care se pot ntlni la o func*ie predefinit#: Func*ie predefinit#

Tip argument

=SUM(A2:A7) plaj# continu# de celule =SUM(A2:A7;A9;A11:A20) plaj# discontinu# de celule =MAX(59;36;84) list# de valori =DATE(62;10;18) list# de valori dat# calendaristic# =IF(A1=A2;"Bun";Rau") valoare logic# =INT(SUM(D1:D9) func*ie predefinit# =UPPER("Ionescu") +ir de caractere

PDF created with pdfFactory trial version www.pdffactory.com

=REPT("Ionescu",3) +ir +i valoare numeric# =FACT(6) valoare numeric# Excel accept# urm#toarele tipuri de argumente: - o condi*ie: este o expresie logic# care folose+te unul din operatorii logici =, <, >, <>, <=, >=, NOT( ), AND( ), OR( ) pentru o adres# de celul# sau un nume de cmp. Condi*ia argumentului poate fi deci o formul#, un num#r, un nume de c#mp, un text. Func*ia evalueaz# condi*ia +i procedeaz# la diferite opera*ii n func*ie de faptul dac# condi*ia este adev#rat# sau fals#. - o loca*ie: este o adres#, un nume de cmp, o formul# sau func*ie care genereaz# o adres# sau un nume de cmp. - un text: orice secven*# de caractere inclus# ntre ghilimele, adresa sau un nume de cmp ce con*ine o etichet# tip +ir de caractere sau o formul# sau func*ie care returneaz# o etichet#. Un +ir de caractere folosit ntr-o func*ie trebuie pus ntre ghilimele pentru a nu fi confundat cu un nume de cmp. - o valoare: un num#r, adresa sau numele unei celule care con*ine un num#r, o formul# sau func*ie predefinit# care returneaz# un num#r. Toate tipurile de argumente pot fi folosite mpreun# ntr-o func*ie atunci cnd sintaxa este respectat#. O func*ie predefinit# se poate introduce ntr-o celul# tastnd-o ca atare (conform sintaxei) sau prin intermediul generatorului de func*ii. Cea mai simpl# metod# o reprezint# introducerea nemijlocit# a func*iilor predefinite, corespunz#tor sintaxei, n celula unde se va opera calculul respectiv (metod# recomandat#). n cel de-al doilea caz, se activeaz# selectorul func*iilor predefinite aflat pe bara de editare sau se activeaz# comanda Insert Function (figura 1.52). Apoi, se alege func*ia respectiv#, din caseta de dialog Paste Function, se valideaz# +i se completeaz# sintaxa generat# automat. 2. Se apas butonul egal de pe bara de editare

3. Se alege funia dorit 4. Se completeaz interactiv sintaxa

1. Se poziioneaz cursorul acolo unde se va insera funcia

Fig 2 Etapele inser#rii unei func*ii

PDF created with pdfFactory trial version www.pdffactory.com

Apelarea selectorului de func*ii se face prin ap#sarea butonului = (egal) aflat pe bara de editare, dup# care se deschide lista func*iilor predefinite, se alege func*ia dorit#, dup# care se completeaz# interactiv argumentele.

Fig. 3, 4 Asistentul de func*ii/Exemple de date Acest procedeu este prezentat n figura 3 Func*ia poate fi aleas# din lista func*iilor cele mai utilizate (Most Recently Used), din lista tuturor func*iilor disponibile ordonate alfabetic (All), sau din categoriile de func*ii specializate (Financial, Date & Time, Math & Trig, Statistical ...) n celula din care s-a apelat func*ia predefinit# va apare sintaxa func*iei selectate +i validndu-se opera*ia prin butonul OK se va genera rezultatul respectivei func*ii. Generatorul de func*ii sau mai corect asistentul de func*ii este prezentat n figura 1.53. De regul#, utilizarea asistentului de func*ii presupune parcurgerea a doi pa+i: - pasul 1 semnific# alegerea tipului de func*ie; - pasul 2 presupune completarea interactiv# a sintaxei func*iei respective conform exemplului prezentat n figura 4. Categorii de func*ii predefinite Excel posed# un set impresionant de func*ii predefinite, n num#r de 232, grupate pe tipuri potrivit utilit#*ii acestora la rezolvarea diferitelor probleme.

PDF created with pdfFactory trial version www.pdffactory.com

Astfel, consider#m suficient# n rezolvarea aplica*iilor EXCEL, prezentarea a celor mai importante 99 de func*ii predefinite, grupate pe urm#toarele categorii (figura 5):

Fig. 5 Categorii de func*ii 1. func*ii matematice +i trigonometrice (Math & Trig): permit efectuarea de calcule matematice simple +i complexe; 2. func*ii statistice (Statistical): permit efectuarea unor calcule statistice utiliznd serii de valori; 3. func*ii de informare (Information): afi+eaz# informa*ii despre celule +i cmpuri; 4. func*ii logice (Logical): determin# valoarea de adev#r sau de fals - corespunz#tor unei condi*ii; 5. func*ii baz# de dat# (Database): efectueaz# diferite calcule asupra unor rubrici, ntro baz# de date, corespunz#tor unor criterii definite; 6. func*ii de c#utare +i consultare (Lookup & Reference): permit localizarea con*inutului unei celule; 7. func*ii calendar sau dat# calendaristic# (Date & Time): manipuleaz# numere care reprezint# date calendaristice sau timp; 8. func*ii text sau +ir de caractere (Text): ofer# informa*ii legate de textul existent n celule +i permit opera*ii cu etichete; 9. func*ii financiare (Financial): permit realizarea de calcule economico-financiare predefinite. n continuare, prezent#m cele mai importante func*ii predefinite, preciznd c# cea mai mare a parte a lor sunt perfect compatibile ca sintax# +i ca semnifica*ie cu func*iile arond aferente procesorului de tabele LOTUS 1-2-3. 2.1.1 FUNC,IILE MATEMATICE -I TRIGONOMETRICE Func*iile matematice +i trigonometrice (Math & Trig) permit efectuarea diferitelor calcule, de la cele mai simple la cele mai complexe, pentru rezolvarea de aplica*ii ce solicit# instrumente matematice +i trigonometrice de uz curent.

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 6 Func*ia SUM =SUM(list#) adun# valorile dintr-o list# precizat# ca argument. Lista poate con*ine cpuri continue sau discontinue referite prin adrese (coordonate) sau prin nume de cmp(uri). Func*ia de nsumare este completat# - spre u+urin*a utilizatorului - cu butonul Auto Sum. Func*ia generat# de butonul respectiv nsumeaz# pe linie sau pe coloan# valori adiacente (valorile nu trebuie s# fie ntrerupte n succesiunea lor de celule vide sau de celule care s# con*in# texte). Auto-nsumarea opereaz# astfel pe linie sau pe coloan# pn# acolo unde se ntlne+te primul semn de discontinuitate (figura 6). Pot exista mai multe cazuri (exemplificate n figura 6): - se plaseaz# cursorul acolo unde se dore+te a se calcula suma (eventual selectnd o plaj# de celule pe linie sau o coloan# unde s# se depun# rezultatele - calculelor) +i se activeaz# butonul AutoSum prin dublu-click;

Dublu-clik pe butonul AutoSum

Se selecteaz celula sau plaja de celule unde se va calcula automat suma

Fig. 7 Func*ia AutoSum - se selecteaz# plaja de celule de nsumat, inclusiv zona unde se vor plasa rezultatele nsum#rii (o linie mai jos +i/sau o coloan# mai la dreapta), dup# care se activeaz# butonul AutoSum prin dublu-click. =PRODUCT (list#) multiplic# valorile con*inute ntr-o list#. Un exemplu edificator este prezentat n figura 8.

PDF created with pdfFactory trial version www.pdffactory.com

=SUBTOTAL(referin*#-tip;cmp de regrupat) calculeaz# un rezultat ce provine dintr-o grupare a datelor opernd diferite opera*ii specifice (conform referin*elor-tip) asupra unui cmp de regrupat.

Fig. 8 Func*ia PRODUCT Exemple de referin*e-tip ar fi: 1 AVERAGE Medie 2 COUNT Num#r# 4 MAX Maximum 5 MIN Minimum 6 PRODUCT Produs 9 SUM Sum#

PDF created with pdfFactory trial version www.pdffactory.com

n exemplul prezentat n figura 9 se calculeaz# suma (referin*a-tip 9) valorilor produselor vndute pe 01-Iul-98 (cmpul de regrupat este E31:E33). =SUMPRODUCT(list#) multiplic# valorile situate n celulele corespondente, aferente unor serii de cmpuri, iar apoi adun# rezultatele ob*inute. n exemplul prezentat n figura urm#toare se calculeaz# prin func*ia SUMPRODUCT valoarea total# a vnz#rilor, adic# suma dintre produsele cantit#*ilor (C31:C36) +i pre*urilor (D31:D36). =SUMIF(cmp de evaluat; criteriu; cmp de nsumat) adun# con*inutul celulelor potrivit unui criteriu dat. n exemplul din figura 9 se calculeaz# prin func*ia SUMIF, suma

Fig. 9 Func*iile SUMTOTAL, SUMPRODUCT, SUMIF comisioanelor la vnz#rile de produse (5% din valoare) pentru valorile vndute de peste 10.000.000 lei. n acest caz cmpul de evaluat reprezint# valoarea (E31:E36), criteriul este de tip text +i anume >10000000, iar cmpul de nsumat este comisionul (F31:F36). =ROMAN(num#r;format) converte+te numerele din format cifric arab n text ce semnific# numere cu format cifric roman. Formatul cu valori de la 0 la 4- reprezint# gradul de concizie al num#rului roman nou generat. Num#rul arab de transformat trebuie s# fie ntreg. Un exemplu de astfel de transformare este prezentat n figura 10. =RAND() returneaz# un num#r aleator cuprins ntre 0 +i 1; =ABS(num#r) returneaz# valoarea absolut# dintr-un num#r; =LN(num#r) calculeaz# logaritmul natural

Fig. 10 Func*ia ROMAN al unui num#r specificat ca argument; =LOG(num#r;baz#) returneaz# logaritmul unui num#r ntr-o baz# specificat#;

19

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 11 Func*ii trigonometrice +i POWER +i SQRT =LOG10(num#r) returneaz# logaritmul n baza 10 dintr-un num#r; =EXP(X) calculeaz# baza logaritmului natural ridicat# la puterea X. Baza este o constant# +i are valoarea 2,7182818.;

Fig. 12 Func*ii matematice =MOD(X;Y) calculeaz# restul mp#r*irii argumentului X la arg. Y; =FACT(num#r) calculeaz# factorialul unui num#r pozitiv; =POWER(num#r;putere) returneaz# rezultatul unui num#r ridicat la putere (figura 1.61); =SQRT(num#r) calculeaz# r#d#cina p#trat# a argumentului; =SIN(X) returneaz# valoarea argumentului X n radiani; =COS(X) calculeaz# cosinusul argumentului X n radiani ; =TAN(X) calculeaz# tangenta argumentului X n radiani; =ASIN(X) calculeaz# arc-sinusul argumentului X n radiani (similar =ACOS(X) +i =ATAN(X); =DEGREES(unghi) converte+te radianii n grade; =RADIANS(unghi) converte+te grade n radiani; =ROUND(X,num#r de zecimale) rotunje+te argumentul numeric X la un

Fig. 13 Func*ia de rotunjire num#r specificat de zecimale; =PI() returneaz# valoarea num#rului PI;
20

PDF created with pdfFactory trial version www.pdffactory.com

=INT(num#r) afi+eaz# partea ntreag# a argumentului (a num#rului real), f#r# a-l rotunji. 2.1.2 FUNC,IILE STATISTICE Func*iile statistice (Statistical) permit efectuarea de calcule statistice utiliznd serii de valori: =MAX(list#) returneaz# cea mai mare valoare din list#. Lista poate fi compus# din: numere, formule numerice, adrese sau nume de cmpuri; =MIN(list#) returneaz# cea mai mic# valoare din list#; =AVERAGE(list#) calculeaz# media valorilor din list#; =GEOMEAN(list#) calculeaz# media geometric# a valorilor dintr-o list# =HARMEAN(list#) calculeaz# media armonic# a valorilor dintr-o list#; =MEDIAN(list#) calculeaz# valoarea median# dintr-o list#; =COUNT(list#) num#r# celulele ocupate dintr-o list# de cmpuri; Exemplul din figura 14 ilustraz# utilizarea func*iilor statistice prezentate:

Fig. 14 Func*ii statistice 2.1.3 FUNC,IILE DE INFORMARE Func*iile de informare (Information) afi+eaz# informa*ii referitoare la celule +i cmpuri: =ISBLANK(X) determin# dac# X sau amplasamentul definit de argumentul X este sau nu o celul# vid#. Func*ia returneaz# TRUE -valoarea logic# de adev#r- dac# amplasamentul este o celul# vid# +i FALSE valoarea logic# de fals- n caz contrar; =ISNUMBER(X) verific# dac# X con*ine o valoare numeric#. Func*ia returneaz# TRUE adev#rat- dac# X con*ine un num#r, altfel returneaz# FALSE sau fals. Argumentul X poate fi o valoare, o adres#, text sau o condi*ie); =ISTEXT(X) verific# dac# X con*ine un +ir de caractere, returnnd dup# caz TRUE sau FALSE. =ISNONTEXT(X) verific# dac# X nu con*ine un +ir de caractere, returnnd dup# caz TRUE sau FALSE. =ISLOGICAL(X) verific# dac# argumentul X con*ine o valoare de tip logic returnnd dup# caz TRUE sau FALSE. =ISERROR(X) verific# dac# argumentul X con*ine o valoare de tip eroare, returnnd dup# caz TRUE sau FALSE. O parte din func*iile de informare sunt exemplificate mpreun# cu func*iile logice.
21

PDF created with pdfFactory trial version www.pdffactory.com

2.2 FUNC,IILE LOGICE Func*iile logice (Logical) determin# evaluarea unor expresii +i n func*ie de acestea furnizeaz# ac*iuni sau rezultate complexe, genernd valori de adev#r sau de fals corespunz#tor unor condi*ii (acestea pot fi evaluate +i nl#n*uite cu ajutorul operatorilor logici AND, OR, NOT). =IF(condi*ie;X;Y) testeaz# argumentul condi*ie +i n func*ie de rezultatul evalu#rii logice, genereaz# argumentul X dac# condi*ia este adev#rat# sau argumentul Y dac# aceasta este fals#. Argumentele X sau Y pot fi valori, +iruri de caractere (plasate ntre ghilimele), nume de cmpuri sau adrese de celule sau cmpuri care con*in aceste valori. n locul argumentelor X sau Y se pot imbrica alte structuri condi*ionale IF, generndu-se potrivit condi*iilor ulterioare, X1,Y1 sau X2,Y2 +i a+a mai departe. =AND(evaluare logic#1,evaluare logic#2,...) returneaz# valoarea logic# TRUE dac# toate argumentele sunt adev#rate +i valoarea logic# FALSE dac# unul sau mai multe argumente sunt false; =OR(evaluare logic#1,evaluarea logic#2,...) returneaz# valoarea logic# TRUE dac# orice argument este adev#rat +i valoarea logic# FALSE dac# toate argumentele sunt false; =NOT(evaluarea logic#) inverseaz# valoarea argumentului, returnnd dup# caz TRUE sau FALSE; =TRUE() returneaz# valoarea logic# TRUE; =FALSE() returneaz# valoarea logic# TRUE; Pentru exemplificarea func*iei logice IF, furniz#m urm#toarea aplica*ie pentru calculul impozitului pe salariile colaboratorilor angaja*i cu Conven*ie Civil# de Prest#ri Servicii: Aplica*ia este astfel construit# nct s# exemplifice (didactic) toate func*iile logice (figura 1.65, 1.66). ntr-un prim pas s-a construit o coloan# de Evaluare logic# care returneaz# n func*ie de un test f#cut asupra salariului brut, valoarea logic# de fals (FALSE) dac# salariul brut este text, blank sau este mai mic ca zero +i returneaz# valoarea logic# de adev#r (TRUE) n caz contrar.

Fig. 15 Func*ii logice (I) ntr-un al doilea pas se calculeaz# impozitul pe salarii dac# coloana Evaluare logic# (s-a utilizat func*ia NOT()) nu con*ine valoarea logic# FALSE. n aplica*ia de mai sus s-a construit o structur# condi*ional# imbricat#, unde s-a exemplificat ntr-o ramur# IF +i func*ia logic# AND.

22

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 16 Func*ii logice(II) 2.1.5 FUNC,IILE BAZ/ DE DATE Func*iile baz# de date (Database) returneaz# ac*iuni - valori sau etichete (sum#;medie;maxim;minim; caut#;num#r#) dintr-un cmp de date - corespunz#tor unei baze de date, dup# o anumit# rubric#, conform unui criteriu de selec*ie Func*iile tip baz# de date au n mod invariabil aceea+i list# de argumente: - baza de date: reprezint# tabelul Excel sub forma unui cmp de date, de unde informa*ia va fi consultat# sau extras#; - rubrica: semnific# atributul sau proprietatea asupra c#ruia opereaz# calculul f#cut de func*ia tip baz# de date. Rubrica poate fi identificat# prin numele s#u sau prin num#rul de ordine al acesteia n cadrul bazei de date; - cmp de criterii: reprezint# unul sau mai multe cmpuri continue n care se pot preciza restric*iile, care se regrupeaz# n criterii de selec*ie la care trebuie s# r#spund# interogarea respectiv#. Principalele func*ii tip baz# de date sunt: =DSUM(baz# de date;rubric#/nr.rubric#;cmp de criterii) returneaz# suma valorilor unei rubrici aferente unei baze de date, care r#spunde unui criteriu de selec*ie; =DMAX(baz# de date;rubric#/nr.rubric#;cmp de criterii) returneaz# cea mai mare valoare dintr-o rubric# aferent# unei baze de date, corespunz#tor unui criteriu de selec*ie;

Fig. 17 Aplica*ie pentru func*iile baz# de date =DMIN(baz# de date;rubric#/nr.rubric#;cmp de criterii) returneaz# cea mai mic# valoare dintr-o rubric# aferent# unei baze de date, corespunz#tor unui criteriu de selec*ie; =DAVERAGE(baz# de date;rubric#/nr.rubric#;cmp de criterii) calculeaz# media valorilor unei rubrici aferente unei tabele - pentru o baz# de date, potrivit criteriului de

23

PDF created with pdfFactory trial version www.pdffactory.com

selec*ie specificat=DCOUNT(baz# de date;rubric#/nr.rubric#;cmp de criterii) num#r# celulele ocupate ntr-o tabel# baz# de date, conform unor criterii specificate; =DGET(baz# de date;rubric#/nr.rubric#;cmp de criterii) returneaz# con*inutul unei rubrici pentru o baz# de date, corespunz#tor unui criteriu specificat. Func*ia este util# pentru a reg#si o informa*ie unic#; Exemple edificatoare de utilizare a func*iilor tip baz# de date sunt ilustrate n figura urm#toare, urmnd ca alte aplica*ii mai complexe s# fie prezentate n detaliu n capitolul ce trateaz# bazele de date create +i exploatate sub Excel. Pornind de la un tabel definit pe coordonatele A6:H17, considerat a fi o baz# de date care repertoriaz# facuturile emise de o firm# c#tre clien*ii s#i, se pot pune n eviden*# cu ajutorul func*iilor tip baz# de date, informa*ii calculate potrivit unor interog#ri specifice. Prezent#m n figurile 17- 18 cteva exemple de utilizare a func*iilor tip baz# de date, utiliznd cmpuri de criterii definite de utilizator potrivit unor cerin*e de interogare. 2.1.6 FUNC,IILE DE C/UTARE -I CONSULTARE Func*iile de c#utare +i consultare (Lookup & Reference) permit c#utarea, identificarea +i referirea con*inutului unor celule:

Fig. 18 Modul de utilizare a func*iilor baz# de date =CHOOSE(index-numeric;list# de valori) returneaz# n urma unei alegeri dintr-o list# de valori, o ac*iune sau o valoare, ce urmeaz# a fi activat# sau executat#, corespunz#tor unui index numeric. Indexul numeric determin# care valoare (de tip text, numeric# sau referin*# celular#) din lista de argumente va fi selectat#. Indexul este un num#r cuprins ntre 0 +i 29. =COLUMN(referin*# celular# sau cmp) returneaz# num#rul colanei corespunz#toare referin*ei celulare sau num#rul primei coloane pentru cmpul specificat; =COLUMNS(cmp) returneaz# num#rul de coloane aferente cmpului specificat ca argument; =ROW(referin*# celular# sau cmp) returneaz# num#rul liniei corespunz#toare referin*ei celulare sau num#rul primei linii a cmpului specificat ca argument; =ROWS(cmp) returneaz# num#rul de linii pe care l ocup# cmpul specificat ca argument;

24

PDF created with pdfFactory trial version www.pdffactory.com

=AREAS(referin*# celular#) indic# num#rul de zone contigue dintr-un cmp. Dac# respectivul cmp con*ine mai multe zone contigue, atunci argumentul se mai nchide ntr-o parantez# suplimentar#; n figura 19 sunt prezentate mai multe exemple de utilizare a func*iilor enumerate mai sus.

Fig. 19 Aplica*ie pentru func*iile de c#utare +i consultare =VLOOKUP(cheie;cmp de consultare;coloan# de recuperat) returneaz# con*inutul unei celule ce figureaz# ntr-o coloan# dintr-un tablou de consultare vertical#. Sintaxa func*iei de consultare vertical# admite trei argumente +i anume: - cheie: reprezint# valoarea dup# care are loc c#utarea sau consultarea, (adres# absolut#/relativ# sau nume de cmp); - cmp (sau tabel) de consultare: este cmpul asupra c#ruia opereaz# consultarea prin c#utarea valorii cheii precizate anterior; - coloan# de recuperat: este num#rul coloanei (numerotarea ncepe cu 1) de unde va fi recuperat# informa*ia g#sit# n tabelul de consultare, corespunz#tor valorii cheii de c#utare. n mod obligatoriu tabelul de consultare va fi sortat cresc#tor dup# coloana care con*ine valorile cheii de consultare (comanda Data Sort, iar n rubrica Sort by se va preciza num#rul sau numele coloanei dup# care se va face sortarea) =HLOOKUP(cheie;cmp de consultare;linie de recuperat) returneaz# con*inutul unei celule ce figureaz# ntr-o anumit# linie a unui tablou de consultare orizontal#. Argumentul cheie (sub forma unei referin*e celulare sau nume de cmp) va fi c#utat n prima linie a cmpului de consultare, iar dac# valoarea va fi g#sit# pe un num#rul de linie precizat de ultimul argument, valoarea respectiv# va fi returnat# de func*ia HLOOKUP. n mod obligatoriu tabelul de consultare orizontal# trebuie sortat dup# valorile cresc#toare ale cheii de consultare aflate n prima linie (sortare de la stnga la dreapta). Dac# valorile cheii nu sunt sortate, se va selecta tabelul de consultare +i se va activa comanda de sortare (de la stnga spre dreapta): Data Sort, butonul Option +i din rubrica Orientation se alege op*iunea Sort left to right.

25

PDF created with pdfFactory trial version www.pdffactory.com

Dac# informa*ia c#utat# n tabelul de consultare vertical# sau orizontal# nu va fi g#sit#, se va returna cea mai apropiat# valoare (pe verical# sau pe orizontal#) de cheia de consultare. Pentru exemplificarea celor dou# func*ii de consultare propunem urm#toarea aplica*ie: O societate comercial# de distribu*ie ntocme+te, cu ajutorul procesorului de tabele EXCEL, facturi pentru livr#rile efectuate. Op*ional, respectiva societate efectueaz# +i transportul m#rfii comandate la domiciliul clientului, firma practicnd tarife diferen*iate n func*ie de cantitatea transportat# (n tone) +i de ora+ul de destina*ie. Tarifele de transport sunt grupate ntr-un tablou n func*ie de destina*ie (prima linie) +i de cantitatea transportat# (prima coloan#). Tabloul care urmeaz# a fi considerat tabel de consultare orizontal# a fost definit pe coordonatele F20:J28 (figura 1.70) +i a fost n prealabil sortat de la stnga la dreapta dup# prima linie, adic# dup# destina*ie.

Fig. 17 Date pentru aplica*ia de c#utare. Firma +i are nregistra*i clien*ii ntr-o baz# de date (definit# pe coordonatele E1:I7) (figura 17) care regrupeaz# elementele de identificare ale acestora (Client, Adresa, Localitate, Cod fiscal, Cont bancar). n egal# m#sur# exist# +i o alt# baz# de date definit# pe coordonatele A20:C28 (figura 18) sub forma unui nomenclator de pre*uri pentru fiecare produs n parte. Cele dou# baze de date sunt sortate dup# valorile cresc#toare ale primei coloane +i con*in informa*ii pertinente ce concur# la realizarea automat# a facturii.

Fig. 18 Date pentru aplica*ia de c#utare

26

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 19 Nomenclatorul de pre*uri Factura procesat# cu Excel are urm#toarea form# (figura 19): Utilizatorul va introduce prin tastare, pentru completarea facturii doar denumirea clientului, codul produsului facturat, cota de adaos comercial, cantitatea livrat#, iar op*ional dac# se dore+te sau nu transport, precum +i destina*ia transportului. n rest toate opera*iile sunt f#cute automat cu ajutorul formulelor +i a func*iilor Excel. Factura se proceseaz# n mod obi+nuit, ncepnd a se calcula ntr-un prim timp "Valoarea", Major#rile, "TVA-ul" +i "Valoarea facturat#". La calculul "Valorii" se va lua n calcul +i o cot# variabil# de adaos comercial (celula D10 a fost fixat# cu adres# absolut# -$D$10- pentru a nu se decala la

Fig. 20 Factura ob*inut# copierea formulei ce calculeaz# valoarea), precum +i cheltuielile de transport. Major#rile de ntrziere se pot calcula pe tran+e, prin structuri condi*ionale imbricate. TVA-ul reprezint# 22% din Valoare + Major#ri, iar Valoarea facturii reprezint# suma dintre Valoare, Major#ri +i TVA. ntr-un al doilea timp se pot calcula totalurile pe rubricile procesate anterior utiliznd clasica func*ie SUM. Interesante de prezentat sunt facilit#*ile de consultare vertical# +i orizontal#. La tastarea numelui de client n celula C3, se vor recupera automat dintr-un tabel de consultare vertical# (definit anterior pe coordonatele E1:I7), informa*iile legate de acest identificator +i anume: Adresa, Localitatea, Codul fiscal +i Contul bancar.

27

PDF created with pdfFactory trial version www.pdffactory.com

Astfel n celula C4 s-a scris formula de consultare vertical# (VLOOKUP) (figura 21) pentru recuperarea adresei clientului, anume: se caut# cheia de consultare (celula $C$3Client) n tabelul de consultare definit pe coordonatele $E$1:$I$7 +i n caz c# valoarea este g#sit#, se va recupera informa*ia din coloana 2, corespunz#toare cheii de consultare.

Fig. 21 Func*ia de consultare vertical# Coordonatele cheii +i tabelului de consultare au fost blocate prin utilizarea de adrese absolute pentru ca formula ce con*ine consultarea vertical# s# poat# fi copiat# f#r# ca respectivele coordonate s# se decaleze. Cheia de consultare fiind n acest caz de tip text nu trebuie s# aib# valori vide +i nici numerice. Pentru aceasta, procedura de consultarea vertical# a fost completat# cu teste f#cute asupra celulei care con*ine cheia de consultare ($C$3). Dac# cheia are valoarea vid# ISBLANK($C$3) sau (OR()) dac# con*ine o valoare alta dect text ISNONTEXT($C$3), atunci se va afi+a un spa*iu (), altfel se va face consultarea vertical#. n aceste condi*ii, consultarea vertical# va avea urm#toarea form#: =IF(OR(ISBLANK($C$3);ISNONTEXT($C$3));;VLOOKUP($C$3;$E$1:$H$7;3)), fapt ilustrat +i n figura 22.

Fig. 22 Func*ia de consultare vertical# Dac# se tasteaz# un client care nu exist# n nomenclatorul de clien*i (n tabelul de consultare vertical#), func*ia VLOOKUP nu va semnala lipsa informa*iei din tabel ci va returna informa*ia legat# de cea mai apropiat# valoare a cheii de consultare. De exemplu, dac# s-ar introduce clientul cu numele Sarmis, se vor recupera prin VLOOKUP informa*iile adi*ionale corespunz#toare celei mai apropiate valori ale cheii, adic# informa*iile legate de clientul Star. Func*ia VLOOKUP nu va semnala inexisten*a cheii de consultare Sarmis. Pentru nl#turarea acestui neajuns, procedura de consultare vertical# a fost completat# cu un test de existen*# a cheii ce consultare n tabelul de consultare. Acest test de existen*# verific# dac# valoarea cheii de consultare este g#sit# n prima coloan# a tabelului de consultare. Dac# valoarea respectiv# exist# n tabel nseamn# c# s-a g#sit cheia de consultare +i n consecin*# consultarea vertical# se va efectua returnnd un rezultat corect, altfel se va afi+a spa*iu sau zero (ultimul caz folosindu-se dac# celula respectiv# particip# ulterior la calcule) sau un mesaj de genul cheie inexistent#.

28

PDF created with pdfFactory trial version www.pdffactory.com

Formula de testare a existen*ei cheii de consultare n tabel este urm#toarea: IF(VLOOKUP($C$3;$E$1:$I$7;1)<>$C$3;;VLOOKUP($C$3;$E$1:$I$7;4)). Rubricile: Adresa C4-, Localitatea C5-, Cod fiscal C6-, Cont

Fig. 23 Consultare vertical#. bancar C7- se vor recupera prin acela+i procedeu de consultare vertical#, recupernduse dup# caz, prin func*ia VLOOKUP con*inutul coloanelor 2, 3, 4, +i 5, corespunz#tor valorilor cheii de consultare declarate la adresa $C$3 (figura 23). n mod asem#n#tor se procedeaz# +i cu a doua consultare vertical#, anume: n momentul tast#rii "Codului de produs" este consultat vertical tabelul "PRE,URI" declarat la adresa A20:C28, +i dac# n tabelul respectiv este g#sit# cheia de consultare "Cod produs" - se vor recupera automat: con*inutul coloanei 2 +i 3 din tablou, adic# "Denumire produs" +i "Pre*".

Fig. 24 Aplica*ie de consultare vertical# n figura 24 este prezentat# procedura complet# (cu teste f#cute asupra celulei ce con*ine cheia de consultare +i cu test de existen*# a valorii cheii n tabelul de consultare) de extragere a denumirii produsului, prin consultare vertical#. Similar se procedeaz# pentru extragerea pre*ului din tablou, corespunz#ror valorilor luate de codul produsului. Consultarea orizontal# a tabelului declarat pe coordonatele $F$20:$J$28 are loc dup# valorile luate de cheia de consultare - $G$10 Destina*ia. Dac# cheia este g#sit# n tablou, se va recupera num#rul de linie care va con*ine valoarea cheltuielilor de transport corespunz#toare destina*iei specificate. n exemplul prezentat n figura 25, s-a operat un mic artificiu, anume "Cantitatea livrat#" coincide logic cu num#rul de linie de recuperat orizontal din tablou (astfel, nu s-a precizat num#rul liniei recuperate, ci celula care con*ine livrat#, aflat# la adresa C13). Datorit# faptului c# procedura de consultare orizontal# este opera*ional# ncepnd cu linia 1 (care con*ine invariabil titlurile rubricilor aferente destina*iei), celula Cantitatea livrat# va indica num#rul liniei de recuperat +i va avea valoarea incrementat# cu o unitate pentru a exista o concordan*# ntre valorile luate de aceasta +i num#rul liniei de recuperat. Dac# nu s-ar fi operat acest artificiu, num#rul liniei de recuperat ar fi decalat cu o unitate (adic#, dac# celula C13 Cantitatea livrat# ar fi avut valoarea 3, s-ar fi recuperat linia num#rul 3 din tabel prima linie con*ine titlul rubricilor-, adic# valoarea cheltuielilor de transport aferente pentru 2 tone transportate)

29

PDF created with pdfFactory trial version www.pdffactory.com

Prin func*ia HLOOKUP s-a consultat deci respectivul tablou, c#utndu-se valoarea luat# de Destina*ie n celula $G$10, recuperndu-se num#rul de linie ce corespunde logic cu Cantitatea livrat#. Tabloul de consultare trebuie n mod obligatoriu sortat alfabetic dup# prima linie a sa. Procedura de consultare orizontal# poate fi completat# +i astfel mbun#t#*it# (celula D14) prin urm#toarele teste: - un test f#cut asupra celulelor ce con*in: Destina*ia (s# nu fie valoare vid# sau numeric#) +i Cantitatea livrat# (s# nu fie valoare de tip text, vid# sau zero): =IF(OR(ISNONTEXT($G$10),ISBLANK($G$10),ISTEXT(C14),ISBLANK(C14),C14= 0;0;IF() . Dac# cel pu*in unul din argumente este adev#rat, func*ia va returna valoarea zero, altfel se vor testa +i alte condi*ii de ndeplinit;

Fig. 25 Aplica*ie de consultare orizontal# - un test de existen*# a Destina*iei (celula $G$10) n prima linie a tabloului de consultare orizontal#: =IF(OR(;$G$10<>HLOOKUP($G$10;$F$20:$J$28;1));0;..). Dac# Destina*ia este inexistent# n tablou, func*ia va returneaz# valoarea zero, altfel se procedeaz# la consultarea propriu-zis#; - un test de existen*# a Cantit#*ii livrate n prima coloan# a unui tablou de consultare vertical#: =IF(OR(C14<>VLOOKUP(C14;$E$20:$E$28;1);.). Dac# nu exist# valoarea unei cantit#*i livrate n tabloul de consultare vertical# definit pe coordonatele $E$20:$E$28, func*ia returneaz# zero, altfel se procedeaz# la consultarea propriu-zis#: (HLOOKUP($G$10;$F$20:$J$28;C14+1)); - procedura ar putea fi completat# +i cu un test de efectuare a transportului: astfel, dac# transportul este f#cut de furnizor (celula $D$8 are valoarea da), atunci se procedeaz# la testele de mai sus +i se execut# n final consultarea orizontal#, altfel cheltuielile de transport vor fi zero. Figura 26 indic# coresponden*ele creeate ntre diferitele cmpuri, n procesul de consultare vertical# +i orizontal#.

30

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 26 Consultarea vertical# +i orizontal#. Coresponden*e 2.1.7 FUNC,IILE TIP DAT/ CALENDARISTIC/ -I OR/ Func*iile tip dat# calendaristica +i ora (Date & Time) manipuleaz# +i opereaz# calcule cu valori numerice ce reprezint# date calendaristice sau timp: =NOW() returneaz# un num#r corespunz#tor datei curente - cu zecimale ce reprezint# ora; =TODAY() returneaz# un num#r-dat# corespunz#tor datei curente; =DATEVALUE("+ir de caractere") calculeaz# num#rul-dat# corespunz#tor +irului de caractere n format dat# calendaristic# (+irul trebuie plasat ntre ghilimele); =DATE(an;lun#;zi) calculeaz# num#rul-dat# pentru data calendaristic# specificat# ca argument; =YEAR(num#r-dat#) returneaz# corespunz#tor anului, un num#r cuprins ntre 0 (1900) +i 199 (2099) - extr#gnd rezultatul dintr-un num#r-dat#; =MONTH(num#r-dat#) extrage luna dintr-un num#r-dat#, sub form# de valori cuprinse ntre 1 +i 12; =DAY(num#r-dat#) genereaz# un num#r corespunz#tor zilei cu valori ntre 1 +i 31; =WEEKDAY(X) returneaz# num#rul zilei din s#pt#mn# corespunz#tor argumentului X care poate fi de tip num#r dat# calendaristic# sau text n format dat# calendaristic#; =DAYS360(dat# debut;dat# sfr+it) calculeaz# num#rul de zile ntre dou# date calendaristice considernd anul ca avnd 360 de zile; =TIME(or#;minut;secund#) calculeaz# un num#r-timp corespunz#tor orei, minutului +i secundei; =TIMEVALUE(+ir de caractere) returneaz# num#rul-timp corespunz#tor +irului de caractere specificat n format dat#/or# (ntre ghilimele); =HOUR(num#r-timp) extrage ora dintr-un num#r-timp (0,000000 pentru ora 24:00:00 +i 9,999988426 pentru ora 23:59:59), sub forma unui num#r cuprins ntre 0 +i 23; =MINUTE(num#r-timp) extrage minutul dintr-un num#r-timp, sub forma unui num#r ntreg cuprins ntre 0 +i 59;

31

PDF created with pdfFactory trial version www.pdffactory.com

=SECOND(num#r-timp) extrage secunda dintr-un num#r-timp sub forma unui num#r ntreg cuprins ntre 0 +i 59; Un exemplu edificator de utilizare a func*iilor de tip dat# calendaristic# +i or# este prezentat n figura 28.

Fig. 28 Func*iile tip dat# +i or# 2.1.8 FUNC,IILE TEXT SAU -IR DE CARACTERE Functiile text (Text): permit diferite opera*ii cu +iruri de caractere +i furnizeaz# n egal# m#sur# informa*ii legate de textul existent n celule: =CHAR(cod numeric ASCII) returneaz# caracterul corespunz#tor codului numeric ASCII specificat ca argument; =TRIM(text) afi+eaz# +irul de caractere specificat ca argument n care toate spa*iile inutile sunt anulate (cu excep*ia spa*iilor care separ# cuvintele textului); =CODE(text) returneaz# codul numeric pentru primul caracter din textul specificat ca argument; =CONCATENATE(text1;text2;) concateneaz# mai multe +iruri de caractere specificate ca argumente, ntr-unul singur; =EXACT(tect1;text2) verific# dac# dou# +iruri de caractere sunt identice. Comparnd cele dou# +iruri, func*ia returneaz# valoarea logic# TRUE dac# acestea sunt identice sau valoarea logic# FALSE n caz contrar; =UPPER(text) afi+eaz# cu majuscule textul specificat ca argument; =LOWER(text) afi+eaz# cu minuscule textul specificat ca argument; =MID(text;N;X) afi+eaz# X caractere ale textului specificat ca argument, ncepnd cu pozi*ia N; =LEN(text) returneaz# num#rul caracterelor ce formeaz# textul specificat ca argument; =SUBSTITUTE(text-surs#;N;X;text-nou) returneaz# un nou +ir de caractere (text-nou) la a N-a pozi*ie a textului-surs#, dup# ce au fost anulate X caractere; =REPT(text;num#r de ori) repet# afi+area textului de un num#r specificat de ori; =PROPER(text) determin# scrierea cu majuscul# a fiec#rei prime litere din textul specificat ca argument;

32

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 29 Exemple de func*ii text =VALUE(text) converte+te un text ce reprezint# un num#r ntr-o valoare numeric# (num#rul ce figureaz# n textul tespectiv, trebuie s# corespund# unuia din formate numerice consacrate); =DOLLAR(num#r;zecimale) converte+te un num#r n text, folosind un format monetar; =FIND(text1;text2;N) localizeaz# pozi*ia la care ncepe textul1 n textul2 ncepnd c#utarea cu pozi*ia N; Exemplific#rile func*iilor de tip text sau +ir de caractere se g#sesc prezentate n figura 29. FUNC,IILE FINANCIARE (informativ) Func*iile financiare (Financial) efectueaz# o serie de calcule economico-financiare furniznd prin valorile returnate informa*ii utile referitoare la amortismente, la rentabilitatea investi*iilor, plasamentelor, mprumuturilor etc. =PV(rata dobnzii;num#r de perioade;m#rimea pl#*ii;[valoare viitoare;tipul]) returneaz# valoarea actual# (present value) aferent# unei sume investite sau depozitate la banc#, prin pl#*i periodice, n condi*iile unei rate constante a dobnzii. =FV(rata dobnzii;num#r de periode[;m#rimea pl#*ii; valoarea prezent#; tipul]) returneaz# valoarea viitoare (future value) a unei investi*ii sau plasament n condi*ii de anuitate (pl#*i +i rate ale dobnzii constante).. =PMT(rata dobnzii;num#r de perioade;valoare prezent#[;valoare viitoare;tip]) calculeaz# valoarea lunar# sau anual# a pl#*ii pentru o investi*ie sau un mprumut. =RATE(num#r de perioade;valoarea pl#*ii;valoare prezent#) returneaz# rata dobnzii pe perioada unei anuit#*i, pentru un mprumut sau o investi*ie. =NPER(rata dobnzii;valoarea pl#*ii;valoare prezent#) returneaz# num#rul de perioade de plat# pentru o investi*ie sau un plasament. =NPV(rata dobnzii;valoare1,valoare2,..) calculeaz# valoarea actual# net# a unei investi*ii bazate pe o serie periodic# de intr#ri de numerar (cash flows). =SLN(valoare de inventar;valoare rezidual#;durata normat# de func*ionare) calculeaz# amortismentul linear al unei imobiliz#ri cu o valoare de inventar dat#, *innd cont de o

33

PDF created with pdfFactory trial version www.pdffactory.com

valoare rezidual# estimat#, pentru un num#r de periode ct se presupune c# va func*iona investi*ia. =VDB(valoare de inventar;valoare rezidual#;durata normat# de func*ionare;debutul perioadei;sfr+itul perioadei[;rata de depreciere;comutator]) calculeaz# amortismentul degresiv ajustat (variable declining balance) al unei imobiliz#ri cu o valoare de inventar anume, o oarecare valoare rezidual#; amortizabil# pe mai mul*i ani; cu o anumit# rat# de depreciere. =SYD(valoare de inventar;valoare rezidual#;durat# normat# de func*ionare; perioada pentru care se calculeaz# amortizarea) returneaz# amortismentul degresiv absolut, f#r# a corecta ultimele anuit#*i pentru amortizarea complet# a investi*iei. =DB(valoare de inventar;valoare rezidual#;durat# normat# de func*ionare; perioada pentru care se calculeaz# amortizarea;num#rul de luni pe an de func*ionare a imobiliz#rii) returneaz# amortismentul degresiv absolut, *innd cont de num#rul de luni pe an de func*ionare a imobiliz#rii, deci ia n calcul un posibil aspect sezonier de utilizare al acesteia. =DDB calculeaz# amortizarea dup# metoda softy +i este o func*ie asem#n#toare cu DB, cu excep*ia faptului c# ultimul argument este un factor de multiplicare al amortiz#rii degresive. FUNC(II DEFINITE DE UTILIZATOR Microsoft Excel include un limbaj de programare puternic denumit Visual Basic pentru aplica ii (VBA) care d# posibilitatea utilizatorului s# scrie module care pot fi subrutine sau func ii. O subrutin# poate executa un proces ca de exemplu afi&area unei ferestre de dialog n care utilizatorul introduce date. O func ie (definit# de utilizator) returneaz# o valoare unei celule (sau unui domeniu de celule) n acela&i fel ca &i o func ie predefinit# dintr-o foaie de calcul Excel. n cele ce urmeaz# se va prezenta modul de scriere a func iilor. Experien a n programare este util#, ns# chiar &i f#r# o astfel de experien # facilit# ile VBA sunt accesibile. Se vor exemplifica pentru nceput scrierea unor func ii simple. Func iile sunt utilizate pentru a simplifica scrierea. De exemplu daca e mult mai u&or de scris suma ca =SUM(a1:a20) dect A1+A2+...+A20, o func ie definit# de utilizator poate fi chiar &i mai util# n situa ia cnd, n mod repetat suntem nevoi i s# efectu#m un anumit tip de calcule pentru care Excel nu are func ii predefinite. O data ce o func ie definit# de utilizator a fost scris# corect (liniile de program) ea poate fi utilizat# n acela&i mod ca &i o func ie predefinit#. O func ie definit# de utilizator de creeaz# in trei etape: 1) Se selecteaz# sau creeaz# un foaie - modul (Module) utiliznd comenzile Insert/Macro/Module din meniu. Foaia poate fi redenumit# pentru a fi mai sugestiv# f#cnd dublu - click pe numele implicit (module1). Nu se vor utiliza nume pentru foaie care sunt nume de func ii existente. O singura foaie modul poate fi utilizat# pentru a g#zdui mai mult de o singur# func ie. n cele ce urmeaz# ns# se vor crea func ii pe foi module diferite. 2) Se tasteaz# liniile de program n limbaj Visual Basic pentru func ie ca de exemplu: Function name [(arglist)][As type] [statements]

34

PDF created with pdfFactory trial version www.pdffactory.com

[name = expression] [Exit Function] [statements] [name = expression] End Function name Numele dat func iei arglist Lista argumentelor pasate functiei. Argumentele sunt separate unul de celalalt prin virgula, type Tipurile valorilor returnate de func ie. statement O linie valid# de comand# Visual Basic. expression O expresie ce urmeaz# s# fie setat# la valoarea ce va fi returnat# de c#tre functie. Valorile dintre parantezele p#trate [] sunt op ionale. 3) Se testeaz# func ia creat# utiliznd-o ntr-o foaie de calcul Excel. Dac# valoarea returnat# este eronat# se revine la etapa 2. Daca se editeaz# o func ie la care s-a f#cut deja referire, foaia se recalculeaz# apasnd tasta F9. Exemplu 1: O func ie simpl# n acest exerci iu se va scrie o func ie definit# de utilizator care s# calculeze aria unui triunghi c#ruia i se dau doua laturi &i unghiul dintre acestea dup# formula: Area = *a*b*sin() Pentru a testa func ia formula din D3 este =0.5 * A3 * B3 * SIN( RADIANS (C4)) &i va calcula aria astfel nct vom putea s# verific#m func ia. Se vor copia n jos pn# n linia 6. Deocamdat# E4:E6 se vor l#sa goale.
Latura A Functie test pentru calculul ariei Latura B Unghi Formula 1 2 90 2 2 2 2 2 3 45 60 45 Functia

1 1 1.414213562 1.414213562 1.732050808 1.732050808 2.121320344 2.121320344

Se tasteaza Alt+F11, apoi din meniul Insert se selecteaz# macro, apoi module pentru a crea o noua foaie modul. Se scriu urm#toarele linii program f#r# num#rul liniei: 1 ' To compute area of triangle 2 ' given two sides and the included angle 3 Function Triarea(side1, side2, Theta)
35

PDF created with pdfFactory trial version www.pdffactory.com

Alpha = Application.Radians(Theta) ' Degrees to Radians Triarea = 0.5 * sidel * side2 * Sin(Alpha) ' Compute area End Function Se revine la foaia de calcul &i se introduce formula =TRIAREA(A4, B4, C4). Op ional se poate utiliza procedeul Wizard oferit de Excel pentru introducerea datelor cerute de func ie. Numele func iei create poate fi g#sit la categoria User-defined. Func ia TRIAREA poate fi g#sit# n orice foaie de calcul apar innd dosarului de calcul curent. Valorile din coloanele D &i E trebuie s# coincid#. Se reaminte&te c# dup# orice reeditare a func iei trebuie ap#sat# tasta F9 pentru a se recalcula foaia. Semnifica ia liniilor de program este urm#toarea: Linia 1 este un comentariu utilizat pentru documentare. Visual Basic ignor# orice text care urmeaz# dup# apostrof &i afi&eaz# textul n verde. Linia 2 continu# comentariul. Linia 3 deschide func ia cu cuvntul cheie Function. Cuvintele cheie sunt afi&ate n albastru. Se pot utiliza ca nume de func ie orice nume dar trebuie avut grij# s# nu coincid# cu numele unei foi de calcul existente sau cu o alt# func ie. Argumentele func iei desemneaz# variabilele ce stocheaz# valorile primite de la foaia de calcul. |n foaia de calcul, func ia este apelat# sau invocat# utiliznd formula =TRIAREA(A3,B3,C3). Aceasta paseaz# valorile argumetelor c#tre func ie prin pozi ie &i nu prin nume. Astfel valoarea din celula A3 este transmis# variabilei Side1 din func ie. Linia 4 - variabila alpha prime&te o valoare ntr-o linie de atribuire. Este comod s# se introduc# unghiul n grade n celul# dar, deoarece se utilizeaz# o func ie trigonometric#, trebuie calculat echivalentul n radiani. S-ar fi putut utiliza urm#toarea linie de program: Alpha=Theta*3.1416/180 dar a fost aleas# func ia mult mai exact# RADIANS. ntruct aceasta nu este o func ie Visual Basic ci una Excel este necesar s# fie precedat# de cuvntul cheie Application urmat de un punct. Elementul alpha se nume&te variabil#. Pentru variabile, func ii sau argumente este recomandabil s# se utilizeze nume scurte, semnificative. Este obligatoriu s# se respecte urm#toarele trei reguli: Primul caracter trebuie s# fie o liter#. Visual Basic nu face distinc ie ntre literele mari sau mici. Dac# se utilizeaz# de exemplu numele term ntr-un loc &i Term in alt loc, Visual Basic va schimba numela n a&a fel ca s# coincid# ultimei forme utilizat#. Un nume nu trebuie s# con in# spa ii, puncte, semne de exclama ie, @, $ sau #. Un nume nu trebuie s# coincid# cu un cuvnt cheie rezervat Visual Basic. n general acestea sunt afi&ate n albastru. Pot fi g#site n Help for keywords. Oricum nu trebuiesc memorate toate c#ci Visual Basic le selecteaz# &i afi&eaz# un mesaj de eroare. La sfr&itul liniei 3 se g#se&te un comentariu explicativ ce ncepe cu un apostrof. Comentariul poate fi att o linie de sine st#t#toare sau ad#ugat unei ale linii. Linia 5 - n aceast# linie de program, func iei i este atribuit# o valoare ce va fi returnat# foii de calcul. Fiecare func ie trebuie s# con in# cel pu in o linie de program care atribuie o valoare func iei. Func ia trigonometric# sin este disponibil# n Visual Basic deci nu mai este nevoie s# se apeleze la instruc iunea Application. Linia are de asemenea un comentariu precedat de apostrof. Linia 6 termin# func ia cu End Function. Toate func iile trebuie s# se termine cu End Function.

4 5 6

36

PDF created with pdfFactory trial version www.pdffactory.com

Rezolvarea ecuatiilor n Excel Aflarea r#d#cinilor Se vor examina metodele de aflare a r#d#cinilor ecua iilor neliniare ca de exemplu ale ecua iei polinomiale (3x3-7x2-22x+40=0) sau ale ecua ie transcedentale (exp(-x) sin(x)=0). Dac# ecua ia se scrie ca f(x) atunci o r#d#cin# a ecua iei este o valoare a lui x asfel ca valoarea lui f(x)=0. Unele ecua ii se pot rezolva analitic, ca de exemplu ecuatia de gradul doi. Cu altele metodele analitice pot fi foarte complexe sau chiar nu exist#. n aceste situa ii putem utiliza metode numerice pentru a g#si r#d#cinile aproximative. Microsoft Excel pune la dispozi ie dou# instrumente (Goal Seek &i Solver) pentru aflare r#d#cinilor. n primul exemplu este ar#tat modul cum poate fi implementat# pe o foaie de calcul metoda bisec iei sau a njumat# irii intervalului. Exemplele urm#toare utilizeaz# Goal Seek &i Solver pentru a afla r#d#cinile aproximative. Exemplu 1: Metoda bisec iei n figura 8 valorile lui F(a) &i F(b) sunt reprezentate de o parte &i de alta a axei x. De aceea ntre a &i b se g#se&te o r#d#cin# a lui F(x). S# presupunem c# m este mijlocul intervalului dintre a &i b. Deoarece F(m) are semnul opus lui F(b), Aceast# r#d#cin# se g#se&te ntre m &i b. Prin njum#t# ire intervalului avem o idee mai exact# cu privire la valoarea r#d#cinii. Putem acum s# njum#t# im intervalul dintre b &i m &i astfel s# mbun#t# im localizarea r#d#cinilor. Urm#rind func ia G(x) observ#m c# trebuie s# utiliz#m valorile m &i a pentru a afla urm#toarea urm#toare aproxima ie. Aceasta ne permite s# concepem un algoritm pentru a g#si o r#d#cin# a lui f(x): Se incepe cu valori ale lui a &i b pentru care f(a) &i f(b) au semne opuse. Loop Gaseste mijlocul intervalului m=(a+b)/2 Calculeaz# valoarea f(m) Daca f(m) &i f(b) au semne opuse Atribuie lui a valoare lui m Altfel Atribuie lui b valoare lui m &i lui a valoare lui b Sfr&it dac# Pn# cnd se atinge precizia dorit#.

37

PDF created with pdfFactory trial version www.pdffactory.com

Fig .8 Pozitia mijlocului intervalului Figura 9 este un grafic al func iei exp(-x) - sin(x) evalaut# pentru valori ale lui x de la 0 la 4. Cu siguran # aceast# ecua ie are o r#d#cin# de aproximativ 0.6 &i alta de aproximativ 3. sarcina noastr# este s# gasim r#dacinile cu o precizie mai bun#. n exemplele urm#toare se va utiliza Goal Seek &i Solver pentru a afla r#d#cinile ecua iei si pentru a le compara ntre ele.

Fig. 9 Graficul func iei exp(-x) - sin(x) pentru valori ale lui x de la 0 la 4. Deschide nou carnet de calcul. Pe foaia num#rul 1 se introduce textul din celulele A1:F3, Fig. 10. Pe linia 4 se introduce: A4: 0.5 Prima valoare a lui a B4: 1 Prima valoare a lui b C4: =(A4+B4)/2 Calculeaz# valoare punctul din mijloc m D4: =EXP(-A4)-SIN(A4) Valoarea lui f(a) E4: =EXP(-B4)-SIN(B4) Valoarea lui f(b) F4: =EXP(-C4)-SIN(C4) Valoarea lui f(m) n A5 se introduce formula =IF(SIGN(F4)<>SIGN(E4),C4,A4). Aceasta compar# semnele lui f(a) &i f(b). Dac# sunt diferite celula A5 ia valoare lui m din prima aproxima ie. n caz contrar celula re ine vechea valoare a lui a.

38

PDF created with pdfFactory trial version www.pdffactory.com

Aflarea radacinilor prin metoda bisectiei a 0.5 0.5 0.5 0.5625 0.5625 0.578125 0.5859375 b 1 0.75 0.625 0.625 0.59375 0.59375 0.59375 mijloc 0.75 0.625 0.563 0.594 0.578 0.586 0.59 f(a) 0.1271051 0.1271051 0.1271051 0.0364802 0.0364802 0.0144946 0.0036031 f(b) -0.4735915 -0.2092722 -0.0498358 -0.0498358 -0.0072207 -0.0072207 -0.0072207 f(mijloc) -0.2092722 -0.0498358 0.0364802 -0.0072207 0.0144946 0.0036031 -0.0018173

Aflarea radacinilor prin metoda bisectiei

a 0.5 =IF(SIGN(F4)<>SIGN(E4),C4,A4) =IF(SIGN(F5)<>SIGN(E5),C5,A5) =IF(SIGN(F6)<>SIGN(E6),C6,A6) =IF(SIGN(F7)<>SIGN(E7),C7,A7) =IF(SIGN(F8)<>SIGN(E8),C8,A8) =IF(SIGN(F9)<>SIGN(E9),C9,A9) =IF(SIGN(F10)<>SIGN(E10),C10,A10) =IF(SIGN(F11)<>SIGN(E11),C11,A11) =IF(SIGN(F12)<>SIGN(E12),C12,A12) =IF(SIGN(F13)<>SIGN(E13),C13,A13) =IF(SIGN(F14)<>SIGN(E14),C14,A14) =IF(SIGN(F15)<>SIGN(E15),C15,A15) =IF(SIGN(F16)<>SIGN(E16),C16,A16) =IF(SIGN(F17)<>SIGN(E17),C17,A17) =IF(SIGN(F18)<>SIGN(E18),C18,A18) =IF(SIGN(F19)<>SIGN(E19),C19,A19) =IF(SIGN(F20)<>SIGN(E20),C20,A20) =IF(SIGN(F21)<>SIGN(E21),C21,A21)

b 1 =IF(A5=A4,C4,B4) =IF(A6=A5,C5,B5) =IF(A7=A6,C6,B6) =IF(A8=A7,C7,B7) =IF(A9=A8,C8,B8) =IF(A10=A9,C9,B9) =IF(A11=A10,C10,B10) =IF(A12=A11,C11,B11) =IF(A13=A12,C12,B12) =IF(A14=A13,C13,B13) =IF(A15=A14,C14,B14) =IF(A16=A15,C15,B15) =IF(A17=A16,C16,B16) =IF(A18=A17,C17,B17) =IF(A19=A18,C18,B18) =IF(A20=A19,C19,B19) =IF(A21=A20,C20,B20) =IF(A22=A21,C21,B21)

mijloc =(A4+B4)/2 =(A5+B5)/2 =(A6+B6)/2 =(A7+B7)/2 =(A8+B8)/2 =(A9+B9)/2 =(A10+B10)/2 =(A11+B11)/2 =(A12+B12)/2 =(A13+B13)/2 =(A14+B14)/2 =(A15+B15)/2 =(A16+B16)/2 =(A17+B17)/2 =(A18+B18)/2 =(A19+B19)/2 =(A20+B20)/2 =(A21+B21)/2 =(A22+B22)/2

f(a) =EXP(-A4)-SIN(A4) =EXP(-A5)-SIN(A5) =EXP(-A6)-SIN(A6) =EXP(-A7)-SIN(A7) =EXP(-A8)-SIN(A8) =EXP(-A9)-SIN(A9) =EXP(-A10)-SIN(A10) =EXP(-A11)-SIN(A11) =EXP(-A12)-SIN(A12) =EXP(-A13)-SIN(A13) =EXP(-A14)-SIN(A14) =EXP(-A15)-SIN(A15) =EXP(-A16)-SIN(A16) =EXP(-A17)-SIN(A17) =EXP(-A18)-SIN(A18) =EXP(-A19)-SIN(A19) =EXP(-A20)-SIN(A20) =EXP(-A21)-SIN(A21) =EXP(-A22)-SIN(A22)

f(b) =EXP(-B4)-SIN(B4) =EXP(-B5)-SIN(B5) =EXP(-B6)-SIN(B6) =EXP(-B7)-SIN(B7) =EXP(-B8)-SIN(B8) =EXP(-B9)-SIN(B9) =EXP(-B10)-SIN(B10) =EXP(-B11)-SIN(B11) =EXP(-B12)-SIN(B12) =EXP(-B13)-SIN(B13) =EXP(-B14)-SIN(B14) =EXP(-B15)-SIN(B15) =EXP(-B16)-SIN(B16) =EXP(-B17)-SIN(B17) =EXP(-B18)-SIN(B18) =EXP(-B19)-SIN(B19) =EXP(-B20)-SIN(B20) =EXP(-B21)-SIN(B21) =EXP(-B22)-SIN(B22)

f(mijloc) =EXP(-C4)-SIN(C4) =EXP(-C5)-SIN(C5) =EXP(-C6)-SIN(C6) =EXP(-C7)-SIN(C7) =EXP(-C8)-SIN(C8) =EXP(-C9)-SIN(C9) =EXP(-C10)-SIN(C10) =EXP(-C11)-SIN(C11) =EXP(-C12)-SIN(C12) =EXP(-C13)-SIN(C13) =EXP(-C14)-SIN(C14) =EXP(-C15)-SIN(C15) =EXP(-C16)-SIN(C16) =EXP(-C17)-SIN(C17) =EXP(-C18)-SIN(C18) =EXP(-C19)-SIN(C19) =EXP(-C20)-SIN(C20) =EXP(-C21)-SIN(C21) =EXP(-C22)-SIN(C22)

Fig. 10 Calculul radacinilor prin metoda bisectiei

39

PDF created with pdfFactory trial version www.pdffactory.com

n B5 se introduce formula =IF(A5=A4,C4,B4). Aceasta compar# semnele lui f(m) &i f(b). Valorile in A5 &i A4 sunt egale cnd a nu a fost nlocuit de m; n care caz noua valoare a lui b este valoarea m din prima aproxima ie. n caz contrar se folose&te valoarea b. Se copiaz# D4:F4 n jos pe linia 5. Aceasta opera iune termin# prima itera ie din bucla. Din linia 5 se vede ca valoare func iei este -0.04984 pentru x=0.625. Se copiaz# A5:F5 n jos pn# la linia 24. (unele liniile sunt ascunse n Fig 3 din lips# de spa iu) n linia 4, f(b) &i f(m) au acela&i semn, astfel c# noua valoare a lui b din linia 5 este valoare precedenta a lui m. Acela&i lucru se ntmpl# la trecerea de la linia 5 la linia 6. Acum f(b) &i f(m) au aceea&i valoare, astfel n linia 7 valoarea lui m este atribuit# lui a &i noua valoare a lui b este fosta valoare a lui a. Intervalul este njum#t# it pe m#sur# ce ne deplas#m n josul paginii de calcul. Dup# 20 de itera ii intervalul se reduce printr-un factor de 220 , cca. un milion de njum#t# iri. Pe lina 24, pentru x=0.588533, func ia este evaluat# la 8*10-8 ceea ce este rezonabil de apropiat de zero. Valorile n A &i B nu se mai schimb# prea mult n acest moment. Se pot largi coloanele pentru a se observa mai bine ce se modific#. Din figura 9 &tim c# exist# o r#d#cin# n vecin#tatea lui 3. nlocui i valorile ini iale ale lui a &i b n linia 4 pentru a g#si a doua r#d#cin#. Nu conteaz# dac# se utilizeaz# 3 &i 4 sau 3 &i 3.5. Aflarea r#d#cinilor cu Goal Seek Cum s-ar putea r#spunde la aceast# ntrebare: pentru ce valori ale lui x func ia 3x3-10x2 x + 1 ia valoarea 100? R#spunsul poate fi aflat cu u&urin # cu ajutorul lui Goal Seek din Excel. S# presupunem c# A1 con ine orice valoare (s# spunem 1) iar coloana B1 con ine formula =3*A1^3- 10*A1^2-A1+1.
1

=3*A1^3- 10*A1^2-A1+1

Cnd ruleaz# Goal Seek trebuiesc specificate trei lucruri &i anume: c# B1 este celula care ne intereseaz# celula Set Cell, 2) c# valoarea c#uta # este 100 &i c# A1 este celula a c#rei valoare urmeaz# s# fie schimbat# celula By Changing (de schimbat). Goal Seek este un instrument foarte u&or dar limitat. n sec iune urm#toare se va vedea c# Solver este mult mai puternic.

Exemplul 2: O ecua ie de gradul doi n acest exerci iu vom g#si r#d#cinile ecua iei 2x2 - 5x 12 = 0 utiliznd Goal Seek.. Inti o aproximare grafica a r#d#cinilor

40

PDF created with pdfFactory trial version www.pdffactory.com

30

300 51
76 105 200138 150175 216 100261

250

Serie s1

50 0 -50

-1 0

-7

-4

-1

Apoi din meniul Tools alegem Goal Seek pentru ecua ia din celula C1:
5 -1 =2*A1^2 - 5*A1-12

Se completeaz# fereastra aplica iei astfel:

Aflarea r#d#cinilor cu Solver Instalarea &i executarea Solver Optiunea solver nu se instaleaza implicit atunci cand se instaleaza pachetul de programe Office. Pentru a instala Solvern Excel, se face clic pe Add-Ins din meniul Tools, apoi se selecteaz# caseta Solver Add-In. Se face clic pe OK &i Excel va instala Solver. CD-ul de instalare al Office-ului trebuie s# se afle n unitate. Dup# ce se instaleaz# programul de completare (Add-In), se poate executa Solver dac# se face clic pe Solver n meniul Tools. Fereastra aplicatiei arat# astfel:

11

41

PDF created with pdfFactory trial version www.pdffactory.com

Completarea se face asem#n#tor. Rezultatele ob inute sunt ns# de o precizie mult mai mare. Aplicatia Solver poate fi utilizata &i n probleme de optimizare, n fereastra Subject to the Constrains introducndu-se restric iile problemei de optimizare.

Rezolvarea sistemelor de ecua ii liniare - functia MDETERM () Functia MDETERM(array) returneaz# valoarea determinantului unei matrici. Sintax#: MDETERM(array) Array este un tablou (matrice) cu un numar egal de linii si coloane. Observa ii Array poate fi introdus# ca un domeniu (range) de celule, de examplu, A1:C3; ca o constanta tablou ex. {1,2,3;4,5,6;7,8,9} (sau ca un nume al orc#rei variante men ionate anterior). Dac# oricare din celulele tabloului este gol sau contine text, MDETERM returneaz# eroarea #VALUE! MDETERM returneaz# de asemenea eroarea #VALUE! Daca tabloul nu contine un num#r egal de linii &i coloane. Determinantul unei matrici este un num#r rezultat din valorile con inute in tablou. Pentru un tablou A1:C3 de trei linii si trei coloane determinantul se define&te ca: MDETERM(A1:C3) = A1*(B2*C3-B3*C2) + A2*(B3*C1-B1*C3) + A3*(B1*C2B2*C1) Determinantul unei matrici se utilizeaz# n general pentru rezolvarea sistemelor de ecua ii matematice care implic# mai multe variabile. MDETERM este calculat cu o precizie de 16 cifre, ceea ce poate conduce la o mic# eroare numeric#, de exemplu pentru o matrice singular# de 1E-16.

42

PDF created with pdfFactory trial version www.pdffactory.com

Exemplu: 1 2 3 4 5 A Data 1 1 1 7 B Data 3 3 1 3 C Data 8 6 1 10 D Data 5 1 0 2

Formula =MDETERM(A2:D5) =MDETERM({3,6,1;1,1,0;3,10,2}) =MDETERM({3,6;1,1}) =MDETERM({1,3,8,5;1,3,6,1})

Rezultat Determinant al matricei din tabelul anterior (valoare 88) Determinantul matricei ca o constanta tablou (1) Determinantul matricei din constanta tablou (-3) Returneaza o eroare deoarece tabloul nu are un numar egal de linii si coloane (#VALUE!)

43

PDF created with pdfFactory trial version www.pdffactory.com

Exemplu de foaie de calcul pentru rezolvarea unui sistem de 5 ecuatii cu 5 necunoscute


=A1 =A1 =A2 =A3 =A4 =A5 =A6 =A1 =A2 =A3 =A4 =A5 =A6 =F1 =F2 =F3 =F4 =F5 =F6 x1 4 2 54 4 1 =B1 =B1 =B2 =B3 =B4 =B5 =B6 =F1 =F2 =F3 =F4 =F5 =F6 =B1 =B2 =B3 =B4 =B5 =B6 x2 -34 4 -76 76 23 =C1 =F1 =F2 =F3 =F4 =F5 =F6 =C1 =C2 =C3 =C4 =C5 =C6 =C1 =C2 =C3 =C4 =C5 =C6 x3 3 98 6677 98 1 =F1 =D1 =D2 =D3 =D4 =D5 =D6 =D1 =D2 =D3 =D4 =D5 =D6 =D1 =D2 =D3 =D4 =D5 =D6 x4 -6 -4 12 7 -3 =E1 =E1 =E2 =E3 =E4 =E5 =E6 =E1 =E2 =E3 =E4 =E5 =E6 =E1 =E2 =E3 =E4 =E5 =E6 x5 8 -43 0 -76 1 TL =A2*H$1+B2*I$1+C2*J$1+D2*K$1+E2*L$1 =A3*H$1+B3*I$1+C3*J$1+D3*K$1+E3*L$1 =A4*H$1+B4*I$1+C4*J$1+D4*K$1+E4*L$1 =A5*H$1+B5*I$1+C5*J$1+D5*K$1+E5*L$1 =A6*H$1+B6*I$1+C6*J$1+D6*K$1+E6*L$1 567 XI=Dxi/D 2 76 X3= Dx2= X2= Dx2= X1= Dx1= D= 4

44

PDF created with pdfFactory trial version www.pdffactory.com

=A2 =A3 =A4 =A5 =A6

=B2 =B3 =B4 =B5 =B6

=C2 =C3 =C4 =C5 =C6

=F2 =F3 =F4 =F5 =F6

=E2 =E3 =E4 =E5 =E6

Dx2=

X3=

=A1 =A2 =A3 =A4 =A5 =A6

=B1 =B2 =B3 =B4 =B5 =B6

=C1 =C2 =C3 =C4 =C5 =C6

=D1 =D2 =D3 =D4 =D5 =D6

=D33 =D34 =D35 =D36 =D37 =D38

Dx2=

X3=

45

PDF created with pdfFactory trial version www.pdffactory.com

SEC(IUNEA II PROGRAMARE N EXCEL Visual Basic pentru aplicatii prezentare sumar# Visual Basic este un limbaj de programare deosebit de puternic pentru numeroase aplica ii, mai ales c# ncepnd cu versiunea 5.0 i-au fost ad#ugate o serie de caracteristici care l-au f#cut, pe deplin, un limbaj orientat pe obiecte. Visual Basic a devenit aproape la fel de structurat, flexibil, puternic n ce prive&te manipularea bazelor de date, orientat pe obiecte, egaland sau depasind facilitatile oferite de C, Pascal, FORTRAN, Fox sau Smalltalk. Interfa a cu utilizatorul

Interfa a cu utilizatorul este ceea ce vede de fapt cineva, atunci cnd programul este n execu ie. O interfa # cu utilizatorul, sub Visual Basic, este alc#tuit# din formulare (forms) n cazul Excel fiind chiar foaia de calcul, &i obiecte (objects). De regula un formular este o fereastr# care apare pe ecran. Toate programele Visual Basic au cel pu in un formular, de&i majoritatea au mai multe. Obiectele sunt elementele care apar ntr-un formular, cu ar fi butoanele de comand#, bare de deruare &i butoanele de op iune (dreapta sus). Un obiect i permite utilizatorului s# dea comenzi c#tre program. Pasul urm#tor dup# proiectarea interfe ei const# n definirea propriet# ilor fiec#rei ferestre si ale fiec#rui obiect. Propriet# ile unui obiect i determin# numele, culoarea, dimensiunile, localizarea &i aspectul pe ecran (stanga-mijloc-jos).

46

PDF created with pdfFactory trial version www.pdffactory.com

Obiectele diferite au propriet# i diferite. De fiecare dat# cnd se creaz# un obiect nou, Visual Basic i asigneaz# valori prestabilite ale propriet# ilor. De&i se pot folosi aceste valori prestabilite, se recomand# modificarea acestora n func ie de program. Instruc iuni BASIC Scrierea unui program Visual Basic este diferit# de scrierea unui program n Pascal sau C. Programatorii care folosesc C si Pascal ncep de obicei cu scrierea instruc iunilor, n timp ce, n Visual Basic se ncepe cu schi area interfa a cu utilizatorul. Pasul urm#tor implic# scrierea comenzilor BASIC (numite si instruc iuni, code) care vor face ca programul s# func ioneze. Scopul instruc iunilor Visual Basic este acela de a indica obiectelor dintr-o fereastr# cum s# ac ioneze atunci cnd utilizatorul face un anumit lucru. De exemplu, dac# se execut# clic cu mousul pe butoanele de comand# OK sau Cancel nu se ntmpl# nimic pn# cnd nu se scriu comenzile BASIC, care spun exact ceea ce trebuie s# se ntmple. Ori de cte ori un utilizator apas# pe o tast#, mi&c# mousul sau execut# clic pe butonul mousului, acest lucru este numit un eveniment (event). De fiecare dat# cnd are loc un eveniment, comenzile BASIC i comunic# calculatorului apari ia unui eveniment. Modul proiectare si modul rulare Din view-toolar se bifeaza controltoolbox. Se intra in modul proiectare respectiv rulare facand click pe pictograma reprezentata printr-un echer si creion. Formele &i controalele Forma constituie funda ia de la care se pleac# n proiectarea interfe ei. Cu ajutorul lor se vor construi ferestre &i casete de dialog. Forma este locul unde se vor insera controale cu care utilizatorii interac ioneaz# n timp ce folosesc aplica ia. Controalele sunt acele lucruri care le permit utilizatorilor care folosesc programul s# fac# diferite lucruri: s# introduc# un text, s# apese un buton, s# valideze o op iune, s# vad# con inutul unui fi&ier din interiorul aplica iei etc. Ce sunt controalele intrinseci &i ce sunt controalele ActiveX ? Controalele intrinseci sunt un num#r relativ mic de controale, dar foarte puternice, disponibile n fiecare edi ie Visual Basic, &i care se ncarc# automat la lansarea IDE (Integrated Development Environment) n Toolbox. De&i controalele intrinseci sunt foarte puternice, ele nu satisfac toate nevoile de programare. De aceea versiunile mai noi de Visual Basic (5,6) ofer# posibilitatea de a folosi o serie ntreag# de controale ActiveX. Acestea nu fac parte din mediul de programare &i nu sunt nc#rcate n mod automat la lansarea IDE. Utilizatorul trebuie s# stabileasc# o leg#tur# ntre proiect &i o anumit# component#. Acest lucru se realizeaz# selectnd comanda Components &i bifnd din lista de controale ce se doresc a fi folosite n proiect. Noul control va fi afi&at n Toolbox. Ad#ugarea &i &tergerea controalelor Ad#ugarea controalelor se poate realiza astfel: I. executnd un click pe controlul dorit. Se plaseaza cursorul in locul dorit s# fie col ul

47

PDF created with pdfFactory trial version www.pdffactory.com

stnga sus al controlului. Se deplaseaz# mouse-ul innd ap#sat butonul stng pn# cnd Controlul are dimensiunea dorit#. Pentru &tergerea unui control: clic cu moue-ul pe el &i apoi ap#snd tasta Delete sau comanda Delete din meniul de context (Edit) Mutarea redimensionarea &i blocarea controalelor Pentru a muta un control n cadrul formei se selecteaz# &i innd mouse-ul ap#sat pe el, se trage de el pn# ajunge n pozi ia dorit#. Pentru a schima dimensiunile unui control se pozi ionez# cu mouse-ul pe una din laturi &i n momentul n care cursorul mouse-ului s-a transformat ntr-o s#geat# se deplasa i mouse-ul pn# cnd controlul are dimensiunea dorit#. Proprieta i &i evenimentelor Formele &i controalele Visual Basic sunt obiecte ce au propriile propriet# i, metode &i evenimente. Propriet# ile sunt atribute pe care le posed# obiectul &i care i descriu modul de apari ie. Name, top, left, height, width, visible sunt doar cteva din propriet# ile ce se ntlnesc la marea majoritate a controalelor. Majoritatea propriet# olor unui control (sau forme) sunt afi&ate n fereastra Properties &i pot fi setate (primi valori ) n timpul proiect#rii aplica iei(design-time). O mic# parte din propriet# i sunt accesibile doar n timpul execu iei programului(run-time). Metodele stabilesc comportamentul acestor obiecte, indicnd ce pot face ele efectiv. Metodele sunt de fapt ni&te proceduri, adic# blocuri de cod, care determin# obiectul s# fac# un anumit lucru.(ex: metoda Move ntlnit# la majoritatea controalelor determin# o schimbare a pozi iei controlului.)

Evenimentele definesc interac iunea cu utilizatorul. Evenimentele sunt ceea ce se ntmpl# cnd un obiect face ceva. Evenimentul este o ac iune recunoscut# de c#tre un obiect. Fiecare obiect are un set predefinit de evenimente care i se pot ntmpla &i pentru care se poate scrie cod care se va executa n momentul producerii acelui eveniment. Pentru fiecare eveniment se poate scrie o procedur#, numit# numeobiect_ eveniment
48

PDF created with pdfFactory trial version www.pdffactory.com

care se va executa n momentul producerii acelui eveniment. n general se pot scrie proceduri pentru evenimentele considerate importante pentru aplica ie, nu se scriu proceduri pentru toate evenimentele. Stabilind propriet# ile unui obiect &i scriind cod pentru a r#spunde la evenimente se particularizeaz# obiectul astfel nct s# r#spund# la cerin ele aplica iei.

Proiectarea unei forme Formele constituie funda ia de la care se ncepe construirea unei interfe e n Visual Basic. Ele constituie ferestrele prin intermediul c#rora utilizatorul va interac iona cu aplica ia. Formele posed# propriile propriet# i, evenimente &i metode cu ajutorul c#rora se poate le controla modul de afi&are &i comportamentul. In Cazul Excel acestea sunt chiar foile de calcul. Primul pas n proiectarea unei forme este stabilirea propriet# ilor. Acestea pot fi stabilite n timpul proiect#rii (design time) cu ajutorul ferestrei Properties window , sau n timpul execu iei (run time) scriind cod. Not# Timpul proiect#rii (design time) este timpul n care se lucreaz# la aplica ie n mediul de programare. Timpul execu iei (run time) este timpul n care aplica ia ruleaz# pe calculator &i se poate lucra cu ea. Majoritatea propriet# ilor formei influen eaz# modul de afi&are. Proprietatea Caption stabile&te care va fi mesajul afi&at n bara de titlu a formei; proprietatea Icon stabile&te iconi a pentru form#; proprietatea MaxButton &i MinButton stabilesc dac# forma poate s# fie maximizat# sau minimizat# n timpul rul#rii. Schimbnd proprietatea BorderStyle se poate controla modul de redimensionare al formei. Propriet# ile Height &i Width stabilesc dimensiunile ini iale ale formei; propriet# ile Left &i Top stabilesc loca ia formei fa # de col ul stnga sus al ecranului; proprietatea WindowState stabile&te modul n care se va afi&a forma la nceput: minimizat#, maxmizat# sau normal#; proprietatea Name stabile&te un identificator cu ajutorul c#ruia pute i referi forma respectiv#. Este recomandat s# fie schimbate aceste de numiri cu unele mai familiare &i mai u&or de re inut. Utilizarea butoanelor de comand# Butoanele de comand# sunt utilizate pentru a permite utilizatorilor aplica iei s# ndeplineasc# o anumit# sarcin#. Utilizatorii vor executa click pe buton sau l vor selecta n alt mod (ap#snd tasta Tab pn# ajung la ele apoi tasta Enter), moment n care butonul va ar#ta ca &i cum ar fi ap#sat. Cu ajutorul propriet# ii Caption se poate afi&a text pe buton. Cel mai frecvent eveniment ntlnit la acest control &i pentru care se scrie cel mai mult cod este evenimentul Click. De cte ori utilizatorul va ap#sa butonul acest eveniment se va produce &i va determina executarea codului ce se afla scris in procedura numit# NumeButon_Click(). Utilizarea controalelor ce manipuleaz# texte Principalele contoale utilizate pentru manipularea textelor sunt etichet# (Label) &i caset# de text (TextBox).

49

PDF created with pdfFactory trial version www.pdffactory.com

Eticheta este un control grafic folosit pentru afi&area de text pe care utilizatorul nu l poate modifica. Textul ce va fi afi&at se stabile&te prin intermediul propriet# ii Caption . Acesta poate fi stabilit din faza de proiectare dar se poate modifica n timpul execu iei prin intermediul codului. Spre deosebire de controlul etichet#, controlul Caset# de text este folosit pentru a fi&a text furnizat de programator din faza de proiectare, introdus de utilizator la rulare sau asociat controlului prin program. Deci controlul poate fi folosit &i pentru ca aplica ia s# preia diferite informa ii de la utilizatori. Textul care se va afi&a sau care va fi preluat se gestioneaz# cu ajutorul propriet# ii Text. Dac# textul trebuie afi&at pe mai multe linii proprietatea MultiLine trebuie s# aib# valoarea True. De asemenea cu ajutorul propriet# ii ScollBars se pot ad#uga controlului bare de defilare.

Utilizarea controalelor ce permit alegerea anumitor optiuni Majoritatea aplica iilor permit utilizatorilor s# aleag# dintre anumite op iuni, pornind de la un simplu da sau nu pn# la selectarea unor articole dintr-o list# cu mii de posibilit# i. Caseta de validare (CheckBox) Un control caset# de validare ofer# utilizatorilor posibilitatea de a alege sau nu o anumit# ob ine. Cnd utilizatorul alege acea op iune caseta de validare este marcat#; semnul de marcare dispare cnd caseta este deselectat#. Prorietatea Valuie este utilizat# pentru a determina starea controlului: 1=bifat, 2=nebifat, 2=Indisponibil . Cu ajutorul propriet# ii Caption pute i ad#uga test n dreptul casetei. n cadrul unei forme pot exista o multitudine de casete de validare utilizatorul s# le bifeze cte vrea.Ca &i la butoanele de comand# evenimentul click al controlului apare ori de cte ori utilizatorul efectueaz# clik pe caseta de validare. n acel moment procedura aferent# evenimentului clik al controlului &i ncepe execu ia. Procedura evenimentului va trebui s# testeze starea n care se afl# caseta de validare. Exemplu de utilizare a acestui control. La o form# se adaug# un control caste# de validare numit chkVerifica &i un control etichet# pe numit lblVerifica . Se adaug# apoi n fereastra de cod urm#toarele rnduri: Private Sub chkVerifica_Click() Select Case chkVerifica Case 0 mesaj= Op iunea nu este bifat# Case 1 mesaj=Op iunea este bifat# Case 2 mesaj= Op iunea este indisponibil# End Select

50

PDF created with pdfFactory trial version www.pdffactory.com

lblVerifica.Caption=mesaj End Sub Eticheta va afi&a un text indicnd starea casetei.

Butonul de op iune (OptionButton) Butoanele de op iune reprezint#, de asemenea, un set de op iuni la dispozi ia utilizatorului. Dar spre deosebire de casetele de validare utilizatorul are posibilitatea s# marcheze o singur# op iune. Selectarea unui buton implic# automat deselectarea celorlalte. Toate butoanele de op iune plasate direct pe form# constituie un singur grup. Dac# se mai doreste s# se introduc# un alt set de butoane de op iune trebuie s# fie ncadrate n interiorul unui Frame. Butonul de op iune care este marcat are proprietatea Value=True n timp ce celelalte butoane din grup au proprietatea Value=False. De asemenea, de cate ori utilizatorul marcheaz# sau demarcheaz# un buton de op iune se declan&eaz# eveniment click() al controlului care ncepe execu ia procedurii aferent# acestui eveniment. n aceast# procedur# se poate scrie cod care s# verifice starea butonului.

Caseta cu lista (ListBox) Caseta cu list# este un control ce permite afi&area unei serii de articole din care utilizatorul poate alege unul sau mai multe. Implicit articolele sunt afi&ate pe o singur# coloan# ns# acest lucru se poate schimba prin modificarea propriet# ii Columns. Dac# num#rul de variante este mai mare se va afi&a, n mod automat, o bar# de derulare vertical#. Dac# se dore&te ca utilizatorul s# poat# selecta mai multe articole din list#, proprietatea MultiSelect trebuie s# ia valoarea 2. Proprietatea ListCount a unei liste returneaz# num#rul de articole din list#. Proprietatea ListIndex este utilizat# pentru a determina num#rul articolului selectat. Numerotarea articolelor n list# ncepe de la 0. Pentru a prelucra selec ia se utilizeaz# n special evenimentele Click sau DoubleClick ale casetei cu list#. De exemplu, la executarea unui click ntr-o caset# numit# lstAlegere urm#toarea secven # de cod va afi&a selec ia utilizatorului ntr-o etichet# numit# lblAlegere : Private Sub lstAlegere_Click() lblAlegere.Caption=lstAlegere.List(lstAlegere.ListIndex) End Sub Ad#ugarea unui articol n list# se face cu ajutorul propriet# ii AddItem. 1tergerea unui articol se face cu metoda RemoveItem iar &tergerea ntregului con inut al listei cu metoda Clear. Caseta combinat# (ComboBox) Caseta combinat# este un control ce combin# caracteristicile controlului caset# cu list# cu cele ale controlului caset# de text. Dac# utilizatorul nu dore&te s# selecteze nici una din

51

PDF created with pdfFactory trial version www.pdffactory.com

op iunile din list# poate s# adauge una n por iunea casetei de text a controlului. Exist# trei tipuri de caset# combinat#, n func ie de valoarea propriet# ii Style: 0 caset# derulant# combinat# con ine o list# derulant# &i o caset# de text. Utilizatorul are posibilitatea s# selecteze din list# una sau s# scrie n caseta de text. 1 - caset# combinat# simpl# con ine o cast# de text &i o list# nederulant#. Dimensiunea unui asemenea control este suma dimensiunilor por iunii de editare &i a listei. 2 caset# cu list# derulant# acesta nu este deloc o caset# combinat#. Permite doar selectarea din lista derulant# , por iunea de text fiind neaccesibil#. Pentru exemplificarea modului de utilizare a casetelor cu list# &i a casetelor combinate se prezenta urm#torul program. Utilizatorul are la dispozi ie o caset# combinat# din care poate alege o anumit# variant# cu ajutorul mouse-ului sau poate scrie una &i apoi apas# Enter. Alege i pe rnd mai multe variante. Respectiva variant# va fi trecut# automat in prima caset# cu list#. Prima caset# cu list# permite utilizatorului s# selecteze mai multe op iuni odat#. Selectarea se face innd ap#sat# tasta Ctrl &i efectund click cu mouse-ul pe op iunile pe care dori i s# le selecta i. La ap#sarea butonului Mutare op iunile selectate vor fi transferate n cea de-a doua caset# cu list#. Utilizatorul mai are la dispozi ie &i butonul golire la ap#sarea c#ruia se golesc ambele liste. Se adaug# pe foaie urm#toarele controale : o caset# combinat#, dou# casete cu list# &i doua butoane de comand#. Se seteaz# astfel urm#toarele propriet# i: Caset# combinat# Caset# cu list# 1 Caset# cu list# 2 Name cboFructe Name lstFructe1 Name lastFructe2 List Mere MultiSelect 2 Pere Prune Caise Nuci Buton de comand# 1 Buton de comand# 1 Name cmdMutare Name cmdGolire Caption Mutare Caption Golire Se adaug# urm#torul cod : Private Sub cboFructe_Click() lstFructe1.AddItem cboFructe.List(cboFructe.ListIndex) End Sub Private Sub cboFructe_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then lstFructe1.AddItem cboFructe.Text cboFructe.Text = End If

52

PDF created with pdfFactory trial version www.pdffactory.com

End Sub Private Sub cmdGolire_Click() lstFructe1.Clear lstFructe2.Clear End Sub Private Sub cmdMutare_Click() Dim i As Integer: i = 0 Do nrelem = lstFructe1.ListCount 1 b = True For i = 0 To nrelem If lstFructe1.Selected(i) = True Then lstFructe2.AddItem lstFructe1.List(i) lstFructe1.RemoveItem (i) b = False Exit For End If Next i Loop While b = False End Sub Utilizarea controalelor ce afiseaz# imagini &i grafic# Deoarece Visual Basic este un sistem de operare cu interfa # grafic# este important ca s# ofere o posibilitate de afi&a imagini grafice n cadrul interfe ei aplica iilor. Visual Basic ofer# programatorilor patru controale cu ajutorul c#rora pot afi&a imagini grafice. Acestea sunt: Cutia de poze (PictureBox), Imagine (Image), Figur# (Shape), Linie(Line). Caseta cu poz# (PictureBox) Este un control utilizat pentru a pentru a fi&a poze &i imagini grafice utilizatorilor. Poza care se afi&eaz# este stabilit# de proprietatea Picture care utilizeaz# ca valoare numele fi&ierului ce con ine poza (op ional se poate specifica &i calea). n timpul execu iei programului, pentru a afi&a o poz# sau pentru a o schimba folosi i func ia LoadPicture pentru a stabili proprietatea Picture. Picture1.Picture=LoadPicture(2Poza.gif2) Dac# poza care va fi afi&at# nu are aceea&i dimensiune cu ceea a controlului se poate seta proprietatea AutoSize=True &i astfel controlul va avea acelea&i dimensiuni cu poza. ns# redimensionarea controlului nu va ine cont de celelalte elemente de interfa # putnd s# le acopere.

53

PDF created with pdfFactory trial version www.pdffactory.com

Caseta cu poz# poate fi folosit# &i ca un container pentru alte controale. De exemplu plasnd n cutia de poze controale imagine care s# se comporte ca butoane se poate transforma n bar# de instrumente sau introducnd controale etichet# care s# afi&eze text se poate transforma n bar# de stare. Se poate deasemenea utiliza metodele Circle, Line sau Pset pentru a afi&a imagini grafice n cutia de poze. Imagine (Image) Se utilizeaz# pentru a afi&a o imagine dintr-un fisier de pe disc pe un form. La selectare si plasare pe form nu este afisat# nici o imagine. Trebuie definite propriet# ile prin care se indic# imaginea de afi&at &i modul de afi&are al acestui form. Cea mai important# este este proprietate Picture prin care se deschide o caset# de dialog care permite alegerea unui fisier grafic.

Elementele componente ale unei aplicatii Visual Basic Setul de caractere Pentru a putea scrie instruc iuni pe care calculatorul s# le interpreteze se folosesc cuvinte. Aceste cuvinte sunt entit# i formate din caractere. n cazul limbajului Visual Basic se pot folosi urm#toarele caractere: - literele mari &i mici ale alfabetului limbii romne: A-Z, a-z; - Cifrele sistemului de numerota ie zecimal:0-9; - Caractere speciale: + - / ^ () [] {}. , ; :_ ! # % & $ etc.; - Caracterele speciale perechi: <=, >=, := <>; - Separatorii: spa iu, tab &i caracteru Enter. Identificatori Un identificator este numele unui element dintr-un program, fie el variabil#, constant#, tip definit de utilizator, enumerare, procedur#, func ie, obiect, metod#, proprietate, control, form# modul sau chiar proiectul nsu&i. Un proiect Visual Basic poate s# con in# maxim 32000 identificatori. Un identificator trebuie s# respecte ur#toarele reguli: - s# nceap# cu o liter#; - s# nu con in# n interior unul din caracterele: . %!$&#@; - numele variabilelor nu pot fi mai lungi de 255 caractere iar cele ale controalelor, modulelor, formelor &i claselor nu pot fi mai lungi de 40 caractere; - nu trebuie s# existe doi identificatori identici cu acela&i scop; - exist# o serie de identificatori standard, defini i de Visual Basic. O redeclarare a lor va duce la nerecunoa&terea sensurilor ini iale; - nu pot fi identificatori cuvintele cheie ale limbajului. Cuvintele cheie sunt identificatori cu semnifica ie fixat#, care nu pot fi folosi i n alt context dect cel precizat de semantica limbajului. Exemple: Dim, Private, Public, Array , For , Next, If, Then ,Else, End etc.. Pentru a face codul ct mai lizibil identificatorii folosi i ar trebui s# descrie rolul lor n

54

PDF created with pdfFactory trial version www.pdffactory.com

aplica ie. De aceea mul i programatori folosesc prefixe n definirea identificatorilor care indic# tipul de date referit &i scopul lor. Comentarii, separatori, mp#r irea liniei Comentariile sunt &iruri de caractere care au n fa # caracterul (`). Au rolul de a face textul programului mai lizibil. Exemple: Aici ncepe programul Dim iVirsta as Integer Vrsta angaja ilor Dim iGreutatea as Interger Greutatea angaja ilor n kilograme De asemenea se pot utiliza comentariile pentru a determina compilatorul s# nu mai execute anumite instruc iuni (facilitatea este folosit# mai ales n faza de corectare a programului). n general n Visual Basic se scrie doar o singur# declara ie pe o linie. Totu&i, dac# se doreste, se pot scrie mai multe declara ii pe o singur# linie desp#r indu-le cu ajutorul separatorului de instruc iuni &i declara ii care este caracterul (:) . Exemplu: Dim a as Integer : a=10 De asemenea pentru a spori lizibilitatea programelor, dac# o declara ie este prea mare o se poate scrie pe mai multe linii. Acest lucru se realizeaz# folosind caracterul continuator de linie ( _)( un spa iu urmat de o linie jos). Exemplu: Private Declare Function GetVolumeInformation Lib _ kernel32 Alias GetVolumeInformationA _ (ByVal lpRootPathName As String, _ ByVal lpVolumeNameBuffer As String, _ ByVal nVolumeNameSize As Long, _ lpVolumeSerialNumber As Long, _ lpMaximumComponentLength As Long, _ lpFileSystemFlags As Long, lpFileSystemNameBuffer, _ ByVal nFileSystemNameSize As Long) As Boolean Private Declare Function GetDriveType Lib kernel32 Alias _ GetDriveTypeA (ByVal lpRootPathName As String) As Integer

Tipuri de date Tipul unei date define&te mul imea de valori pe care le poate con ine o variabil# &i mul imea de opera ii care pot fi efectuate cu elementele mul imii respective. n func ie de tipul de dat# pe care-l stocheaz# o anumit# variabil# compilatorul aloc# o zon# mai mare sau mai mic# de memorie pentru a fi reprezentat#.

55

PDF created with pdfFactory trial version www.pdffactory.com

Cu fiecare tip de dat# sunt permise o serie de opera ii. Astfel: - opera iile care se pot face cu valorile unui tip ntreg sunt: adunarea (+); sc#derea(-); nmul irea(*); mp#r irea ntreag# (\) a \ b returneaz# ctul mp#r irii lui a cu b; mp#r irea real#(/); restul mp#r irii ntregi (mod); ridicarea la putere (^) de asemenea sunt permise opera iile rela ionale: mai mic sau egal (<=); mai mic (<); egal (=); mai mare(>); mai mare sau egal (>=); Rezultatul unor astfel de opera ii este de tip boolean, avnd valorile True sau False. - opera iile care se pot face cu valorile unui tip real sunt: adunarea (+); sc#derea(-); nmul irea(*); mp#r irea(/); ridicarea la putere (^); sunt permise opera iile rela ionale prezentate la tipurile ntregi; - &irurile de caractere suport# opera ia de concatenarea (&) &i opera iile de compara ie (<,<=,=,>=,>). Prin concatenare dou# sau mai multe &iruri de caractere pot fi lipite formnd un singur &ir de caractere. Cu ajutorul opera iilor de compara ie se stabile&te pozi ia alfabetic# a &irurilor de caractere; - valorile logice, booleane (True &i False) suport# urm#toarele opera ii logice: negarea logic# (Not); &i logic (And); sau logic (Or); sau exclusiv logic (Xor); echivalen a logic# (Eqv); implica ia logic# (Imp); - tipurile de dat# de tip obiect suport# o singur# opera ie cea de compara ie (Is). Cu ajutorul acestei opera ii se verific# dac# dou# variabile de tip obiect refer# acela&i obict sau nu. Constante n programe se ntlnesc valori constante ce se repet# de nenum#rate ori. Astfel, pentru a spori lizibilitatea programului &i pentru a nu fi nevoie de numeroase modific#ri n caz c# o valoare des ntlnit# trebuie modificat#, se pot folosi constantele. O defini ie de constant# introduce un identificator ca sinonim al unei valori constante. n Visual Basic exist# dou# tipuri de constante: - intrinseci sau definite de sistem . Visual Basic pune la dispozi ie o serie ntreag# de constante pentru culori, taste, figuri etc. - simbolice sau definite de utilizator. Se pot defini propriile constante cu ajutorul cuvntului cheie Const astfel: [Public|Private] Const NumeConstanta[As type] = expresie Exemple: Const PI = 3.14159265358979 Const NR_ZILE_LUCRATORE = 22 Const ZI_DE_NASTERE = #02.04.1981# Const NUME_DE_COD = 2Calul2

56

PDF created with pdfFactory trial version www.pdffactory.com

Variabile Pentru a realiza diferite func iuni, programele trebuie s# stocheze informa ia, cum ar fi de exemplu un document de editat n mai multe sesiuni de lucru cu calculatorul, ntr-un fi&ier &i n memoria intern#. Dup# cum se &tie, de fiecare dat# cnd se ruleaz# un program, sistemul de operare ncarc# instruc iunile programului n memoria calculatorului. Astfel un program care tip#re&te un document, de fiecare dat# cnd ruleaz# va afi&a un mesaj care cere numele fi&ierului &i num#rul de copii care se doresc a fi tip#rite. Cnd se scriu aceste informa ii, programul p#streaz# valorile introduse n anumite loca ii de memorie. Pentru a ajuta programul s# g#seasc# loca ia de memorie unde au fost plasate datele , fiecare loca ie de memorie are o adres# unic#, cum ar fi loca ia 0, 1,2 ,3 &i a&a mai departe. Deoarece pot fi milioane de asemenea adrese, inerea eviden ei fiec#rei loca ii poate deveni foarte dificil#. Pentru a simplifica stocarea informa iei programele definesc variabile. Acestea sunt ni&te nume pe care programul le asociaz# cu anumite loca ii din memorie. A&a cum indic# &i cuvntul variabil#, valoarea pe care programul o p#streaz# n aceste loca ii se poate modifica n cursul execu iei programului. Variabile poate s# stocheze valori diferite n momente diferite. O variabil# se caracterizeaz# prin dou# elemente: numele variabilei care este un identificator cu ajutorul c#ruia putem s# referim variabila pe parcursul programului &i tipul variabilei care determin# ce tip de dat# poate stoca variabila. n func ie de tipul variabilei compilatorul aloc# o zon# mai mic# sau mai mare de memorie pentru variabila respectiv#. Din punct de vedere al utiliz#rii variabilelor Visual Basic poate fi considerat un limbaj cu 2 feluri de variabile: cu tip &i f#r# tip. Folosirea variantelor f#r# tip de date (prin utilizarea tipului implici Variant) a devenit deosebit de important#. Tipul Variant con ine nu numai variabila dar &i informa ii despre variabil#. A declara o variabil# nsemn# a-i comunica programului de la nceput despre ea astfel nct programul s# &tie ct# memorie s#-i aloce &i unde. Declararea unei variabile se face astfel: [Public| Private] Dim NumeVariabil# as TipVaribil# Public, Private, Dim sunt cuvinte specifice limbajului Visual Basic care i spun c# se declar# o variabil#; NumeVaribil# este identificatorul variabilei; As este un cuvnt cheie care i spune programului c# se dore&te declararea tipul variabilei TipVariabil# este numele unui tip de date din cele pe care le accept# Visual Basic Exemple: Dim i as Integer define&te variabila i de tip Integer Dim dtZiSalar as Date define&te variabila dtZiSalar de tip Date Private sNume as String define&te variabila sNume de tip String Public lstListaPreturi as ListBox define&te variabila lstListaPreturi ce va con ine o referin # c#tre un obiect de tip ListBox

57

PDF created with pdfFactory trial version www.pdffactory.com

O caracteristic# deosebit de important# a variabilelor este domeniul de valabilitate &i durata de existen #. Astfel exist# variabile locale la nivelul unei proceduri. Aceste variabile se declar# in interiorul procedurii cu ajutorul cuvntului cheie Dim .Ele exist# atta timp ct se execut# procedura n care au fost declarate. De asemenea ele pot fi utilizate numai n cadrul acelei proceduri neavnd nici o semnifica ie n alt# parte a programului. Au un domeniu de valabilitate doar la nivelul proceduri &i au o durat# de via # temporar#. Este recomandat s# se foloseasc# Dim doar pentru declararea acestui tip de variabile chiar dac# Visual Basic v# va permit s#-l folosi i &i n alte contexte. Un alt tip de variabile sunt cele cu domeniu de vizibilitate la nivelul unui modul. Aceste variabile pot fi folosite oriunde n interiorul modulului n care au fost declarate. Exist# atta timp ct este folosit modulul respectiv. Este recomandabil ca declararea lor s# se fac# cu ajutorul cuvntului cheie Private n loc de Dim chiar dac# Visual Basic accept# &i Dim. Un al treile tip de variabile sunt cele globale la nivelul ntregului program. Acestea sunt pot fi folosite oriunde n program, au un domeniu de valabilitate global Exist# atta timp ct se execut# programul. Declararea acestor variabile se face cu cuvntul cheie Public. Un alt tip de variabile sunt cele statice. Aceste pot avea un domeniu de valabilitate local# sau la nivelul unei proceduri dar o durat# de existen # permanent#. Declararea se face cu ajutorul cuvntului cheie Static. Spre exemplu se poate defini o variabil# static# la nivelul unei proceduri. E va fi vizibil# doar la nivelul acelei proceduri dar &i va p#stra valoarea &i dup# ce procedura &i va termina execu ia. Dac# procedura va fi din nou apelat# variabila static# nu va fi ini ializat# automat de Visual Basic, lucru ce se ntmpl# cu variabilele care nu sunt statice, ci va avea valoare pe care a avut-o la ultima ei folosire. Variabilele locale la nivelul unui modul sau publice se declar# n sec iune de declara ii a modulului (Declarations). Declararea variabilelor se poate face n dou# moduri : implicit sau explicit. n modul implicit o variabil# este considerat# declarat# la prima ei folosire. Nu este necesar# o declarare prealabil# cu ajutorul cuvintelor cheie Dim, Private,Public. n mod implicit Visual Basic le declar# de tip Variant pe toate. Declararea explicit# a variabilelor presupune ca nainte s# folosi i o variabil# s# o declara i anterior cu ajutorul unuia dintre cuvintele cheie Dim, Private, Public. Se poatei scrie la nceputul modului op iunea Option Explicit sau se poate cere mediului de programare s# fac# acest lucru automat selectnd din meniul Tool->Options->Editor op iunea Require Variable Declaration &i in acest caz Visual Basic va aten iona dac# se utilizeaz# o variabil# nedeclarat# anterior. Este deosebit de folositoare aceast# op iune (&i este recomandat s# fie folosit#) pentru a evita gre&elile legate de tip#rirea numelor variabilelor. Una dintre cele mai periculoase erori ntlnite la declararea unei variabile este urm#toarea: Dim a, b,c as Integer . Nu se definesc trei variabile a,b,c de tip Integer ci de fapt numai c

58

PDF created with pdfFactory trial version www.pdffactory.com

este de tip Integer celelalte fiind n mod implicit de tip Variant .Corect este Dim a as Integer , b as Integer, c as Integer. Stocarea datelor n variabile se face cu ajutorul instruc iuni de atribuire. Exemple: iNotaMaxima = 10 variabila va stoca valoarea 10; sNume = Popescu - variabila va stoca &irul de caractere 2Popescu2 dtDataNasterii=#01.05.1980# - variabila va stoca data 01.05.1980 Semnul egal din aceste exemple este operator de atribuire &i nu operator de egalitate. n versiunile mai vechi de Basic la opera ia de atribuire se folosea &i cuvntul cheie Let pentru a se face distinc ie ntre opera ia de atribuire &i cea de egalitate. (majoritatea limbajelor fac aceast# distinc ie folosind operatori diferi i). Cnd se creaz# o variabil#, Visual Basic i atribuie n mod implici o valoare in func ie de tipul de variabilei. O alt# problem# deosebit# n leg#tur# cu variabilele o constituie conversia tipurilor. Vor exista situa ii n care se va dori s# se atribuie unei variabile de un anumit tip o valoare de alt tip lucru care nu este posibil. De aceea va trebui s# se fac# o conversie a valorii de atribuit la tipul variabilei. n numeroase cazuri Visual Basic execut# n mod automat aceste conversii de date ns# este recomandat ca programatorul s# realizeze aceste conversii utiliznd func iile de conversie. Proprietatile controalelor Notiunea Focus arata controlul care va receptiona un eveniment Clic simulat prin tasta Enter. Proprietatea Cancel &i proprietatea Default. Proprietatea Cancel este specific# butoanelor de comand# &i este cumva asem#n#toare cu focus-ul. Dac# proprietatea Cancel a unui buton de comand# are valoarea True, respectivul buton va recepta un eveniment clic simulat atunci cnd, la execu ie, utilizatorul apas# tasta Esc. Se &tie c# tasta Esc are semnifica ia de abandonare a unei ac iuni sau opera iuni, context n care se recomand# ca proprietatea Cancel s# aib# valoarea True pentru butoanele de comand# de tipul Exit sau Abandon, n atare condi ii, p#r#sirea form-ului (uneori &i a aplica iei) se poate face prin clic pe butonul respectiv, prin ap#sarea tastei Esc (dac# butonul are setat True pentru proprietatea Cancel) sau printr-o combina ie de taste (dac# s-a folosit caracterul & n textul propriet# ii Caption). Un singur buton de comand# de pe un anumit form poate avea valoarea True pentru proprietatea Cancel. Proprietatea Default arat# care dintre butoanele de comand# din form-ul curent intercepteaz# un clic simulat de ap#sarea tastei Enter. n acest scop, pentru butonul de comand# dorit, proprietatea Default trebuie s# aib# valoarea True. Un singur buton de comand# de pe un anumit form poate avea True pentru proprietatea Default (stabilirea valorii True pentru un nou buton va face ca la precedentul proprietatea Default s# ia automat valoarea False, men inndu-se astfel integritatea form-ului). Ordinea parcurgerii controalelor. Proprietatea TabIndex Am ar#tat c# focus-ul se poate muta de la un control la urm#torul prin ap#sarea tastei TAB (sau Shift+TAB pentru precedentul). n mod implicit, ordinea de mutare cu tasta

59

PDF created with pdfFactory trial version www.pdffactory.com

TAB este dat# de ordinea n care au fost definite controalele. Dar nu ntotdeauna controalele sunt definite n ordinea n care trebuie parcurse la utilizarea aplica iei, iar unele controale nu este necesar s# primeasc# focus (spre exemplu, nu are sens s# stabilim focus pentru o etichet#). Se utilizeaz# proprietatea TabIndex pentru care se stabilesc valori numerice: 0 pentru primul control, l pentru al doilea, 2 pentru al treilea &.a.m.d. Observa ie. E bine de re inut c# n Visual Basic numerotarea elementelor unei mul imi (articolele dintr-o list#, variabilele dintr-un tablou) ncepe de la 0 (zero) &i se termin#, logic, cu n - l, de&i exist# &i cteva excep ii. Butoane de comand# (Command Button) Sunt utilizate pentru declan&area unei ac iuni sau opera iuni, cum ar fi tip#rirea la imprimant#, salvarea sau abandonarea aplica iei. Pentru definirea unui buton de comand#: > se plaseaz# &i se contureaz# butonul pe form; > se definesc propriet# ile Name (preferabil cu prefixul cmd) &i Caption; > se adaug# cod pentru evenimentul Click. Exist# 36 de propriet# i &i 15 evenimente posibile pentru un buton de comand#. Cu toate acestea, cel mai adesea se definesc numai propriet# ile Name &i Caption &i se scrie doar procedura pentru evenimentul Click. Totu&i, n aplica iile elaborate se lucreaz# cu mai multe propriet# i, cele mai importante fiind prezentate n tabelul 1. Tabelul 1. Principalele propriet# i ale unui buton de comand# Proprietate Descriere BackColor Specific# culoarea fundalului butonului. Se alege dintr-o list# de culori. Pentru a putea schimba culoarea implicit# trebuie modificat# valoarea propriet# ii Style (1-Graphical, n loc de 0-Standard). Cancel Stabile&te dac# butonul va recepta un eveniment clic la ap#sarea tastei Esc. Caption Este textul care se afi&eaz# pe butonul de comand#. Default Stabile&te dac# butonul va recepta un eveniment clic la ap#sarea tastei Enter, chiar dac# un alt control de ine focusul. Enabled Stabile&te dac# butonul este activ (True) sau nu (False). Are valoarea implicit# True. Font Permite schimbarea tipului, m#rimii &i atributelor fontului. Height Precizeaz# n#l imea butonului n twips. Left Indic# distan a pn# la marginea stng# a form-ului, n twips. MousePointer Stabile&te forma cursorului mouse-ului atunci cnd, la execu ie, utilizatorul indic# butonul de comand#. Picture Precizeaz# numele unei imagini grafice de tip icon (fi&ier de tip .ico) care apare pe buton (valoarea propriet# ii Style trebuie s# fie 1-Graphical). Style Stabile&te dac# butonul va ap#rea ca un buton Windows standard - numai cu text (valoarea 0-Standard) sau cu text &i imagine (valoarea 1Graphical).

60

PDF created with pdfFactory trial version www.pdffactory.com

Tablndex TabStop ToolTipText

Top Visible

Width Etichete (Label) Con in texte (titluri, explica ii sau indica ii) care se afi&eaz# pe form n pozi ii bine precizate. Cel mai adesea o etichet# nso e&te o caset# de text, con innd explica ii asupra a ceea ce trebuie s# introduc# utilizatorul n caseta de text. Textul afi&at de o etichet# (valoarea propriet# ii Caption) se poate modifica pe parcursul execu iei aplica iei, conform cerin elor, dar numai prin codul-surs#. Tabelul 2. Principalele propriet# i ale unei etichete Proprietate Descriere Alignment Indic# modul de aliniere a textului etichetei (stnga, dreapta, centru). AutoSize Dac# este setat# True, modific# dimensiunile etichetei atunci cnd, la execu ie, este introdus un text prea mare pentru dimensiunile date. BackColor Specific# culoarea fundalului etichetei. Se alege dintr-o list# de culori. BackStyle Stabile&te stilul fundalului etichetei. BorderStyle Stabile&te stilul marginii etichetei. Caption Este textul care se afi&eaz# pe etichet#. Enabled Stabile&te dac# eticheta este activ# (True) sau nu (False). Are valoarea implicit# True. Font Permite schimbarea tipului, m#rimii &i atributelor fontului. ForeColor Stabile&te culoarea textului etichetei. Height Precizeaz# n#l imea etichetei n twips. Left Indic# distan a pn# la marginea stng# a form-ului n twips. MousePointer Stabile&te forma cursorului mouse-ului atunci cnd, la execu ie, utilizatorul indic# eticheta. Tablndex Specific#, printr-o valoare numeric#, pozi ia n ordinea de parcurgere a controalelor la momentul execu iei (eticheta nu poate de ine focus, dar poate face parte din aceast# ordine). ToolTipText Precizeaz# textul (explica ii sau indica ii) ce se va afi&a ntro caset# de tip tooltip, la indicarea etichetei cu ajutorul mouse-ului. Top Indic# distan a pn# la marginea de sus a form-ului, n

Specific#, printr-o valoare numeric#, pozi ia n ordinea de parcurgere a controalelor la execu ie. Precizeaz# dac# butonul va ob ine (True) sau nu (False) focus la parcurgerea cu tasta TAB. Precizeaz# textul (explica ii sau indica ii) ce se va afi&a ntro caset# de tip tooltip, la indicarea butonului cu ajutorul mouse-ului. Indic# distan a pn# la marginea de sus a form-ului, n twips. Stabile&te dac# butonul va ap#rea pe ecran la execu ie (True) sau este invizibil (False). Precizeaz# l# imea butonului n twips.

61

PDF created with pdfFactory trial version www.pdffactory.com

twips. Visible Stabile&te dac# eticheta apare pe ecran la execu ie (True) sau este invizibil# (Fa s e). Width Precizeaz# l# imea etichetei n twips. WordWrap Stabile&te dac# este posibil# scrierea textului pe mai multe linii n cadrul etichetei. Ca &i la butoanele de comand#, practic se utilizeaz# mai mult propriet# ile Name &i Caption, pe lng# cele de dimensionare, care se pot preciza automat, o dat# cu plasarea etichetei. Pot ap#rea probleme specifice atunci cnd lungimea textului con inut variaz# dac# acest text este introdus la execu ia aplica iei - dimensiunile etichetei se pot dovedi prea mari sau prea mici. Ajustarea automat# a textului va permite afi&area corespunz#toare a acestuia. Tabelul 3. Principalele propriet# i ale unei casete de text Proprietate Descriere Alignment Indic# modul de aliniere a textului n caset# (stnga, dreapta, centru). BackColor Specific# culoarea fundalului casetei. Se alege dintr-o list# de culori. BorderStyle Stabile&te stilul fundalului casetei. Enabled Stabile&te dac# caseta este activ# (True) sau nu (False). Are valoarea implicit# True. Font Permite schimbarea tipului, m#rimii &i atributelor fontului. ForeColor Stabile&te culoarea cu care se va scrie textul. Height Precizeaz# n#l imea casetei n twips. Left Indic# distan a pn# la marginea stng# a form-ului n twips. Locked Precizeaz# dac# utilizatorul poate (True) sau nu (False) s# editeze textul ce apare n caset#. MaxLength Specific# num#rul maxim de caractere pe care le poate introduce utilizatorul n caset#. Valoarea implicit# 0 nseamn# num#r nelimitat. MousePointer Stabile&te forma cursorului mouse-ului atunci cnd, la execu ie, utilizatorul indic# acest control. MultiLine Permite (True) sau nu (False) introducerea textului pe mai multe linii. La scrierea pe mai multe linii se poate utiliza proprietatea ScrollBars, pentru a permite deplasarea mai facil# n caset#. PasswordChar Stabile&te caracterul care apare repetat n caset# atunci cnd utilizatorul introduce o parol#. ScrollBars Specific# prezen a barelor de derulare n cazul scrierii textului pe mai multe linii. Tablndex Specific#, printr-o valoare numeric#, pozi ia n ordinea de parcurgere a controalelor la execu ie. TabStop Precizeaz# dac# controlul va ob ine (True) sau nu (False) focus la execu ie. Text Specific# textul care se va afi&a ini ial n caset#. Acesta

62

PDF created with pdfFactory trial version www.pdffactory.com

poate fi nlocuit sau nu de c#tre utilizator la execu ie. Precizeaz# textul (explica ii sau indica ii) ce se va afi&a ntro caset# de tip tooltip la execu ie, la indicarea c#su ei de text cu ajutorul mouse-ului. Top Indic# distan a pn# la marginea de sus a form-ului n twips. Visible Stabile&te dac# controlul va ap#rea pe ecran la execu ie (True) sau este invizibil (False). Width Precizeaz# l# imea casetei n twips. Atunci cnd logica aplica iei o permite, se recomand# ca n caseta de text s# se scrie o valoare implicit# (proprietatea Text), pe care utilizatorul poate s# o men in# sau s# o schimbe. De remarcat absen a propriet# ii Caption. Observa ie: dup# parcurgerea principalelor propriet# i pentru trei dintre cele mai utilizate controale se observ# c# multe dintre ele se repet#, avnd aceea&i semnifica ie. Astfel, dac# a i n eles rolul propriet# ii Visible de la etichete, o pute i utiliza exact la fel &i pentru alte controale, n plus, dac# sunt nel#muriri n privin a unei propriet# i, se ob ine imediat ajutor prin ap#sarea tastei F1 dup# ce s-a selectat proprietatea respectiv#. Propriet# ile form-ului Fiind el nsu&i un obiect, ca &i celelalte controale, form-ul are propriet# ile sale. Cele mai importante propriet# i sunt cuprinse n tabelul ToolTipText Tabelul 4 Principalele propriet# i ale unui form Proprietate Descriere BackColor Specific# culoarea fundalului form-ului. Se alege dintr-o list# de culori. BorderStyle Stabile&te stilul fundalului form-ului. Caption Este textul care se afi&eaz# n linia de titlu a form-ului. Enabled Stabile&te dac# form-ul este activ (True) sau nu (False). Se lucreaz# cu aceast# proprietate doar n aplica ii cu mai multe form-uri (MDI). Font Permite schimbarea tipului, m#rimii &i atributelor fontului. ForeColor Stabile&te culoarea cu care se va scrie textul. Height Precizeaz# n#l imea form-ului n twips. Icon Arat# imaginea de tip icon ce se va afi&a pe taskbar atunci cnd utilizatorul minimizeaz# form-ul. Left Indic# distan a pn# la marginea stng# a ecranului, n twips. MaxButton Specific# dac# form-ul va avea sau nu buton de maximizare. MinButton Specific# dac# form-ul va avea sau nu buton de minimizare. MousePointer Stabile&te forma cursorului mouse-ului atunci cnd, la execu ie, utilizatorul indic# form-ul. Moveable Stabile&te dac# utilizatorul poate muta sau nu form-ul pe ecran, la momentul execu iei.

63

PDF created with pdfFactory trial version www.pdffactory.com

Picture ScaleMode ShowInTaskbar StartUpPosition

Top Visible Width WindowState

Precizeaz# numele unei imagini de tip icon (fi&ier de tip .ico) care apare pe fundalul form-ului la execu ie. Stabile&te unitatea de m#sur# utilizat# pentru form (twip, pixel, inch, centimetri sau altele). Implicit este twip. Stabile&te dac# form-ul apare sau nu la execu ie n linia de start a Windows-ului. Stabile&te pozi ia form-ului pe ecran (implicit acesta apare n stnga sus, dar poate fi afi&at centrat pe ecran sau centrat n cadrul unui form-p#rinte -vezi aplica iile MDI). Indic# distan a pn# la marginea de sus a ecranului, n twips. Stabile&te dac# form-ul va ap#rea pe ecran la execu ie (True) sau este invizibil (False). Precizeaz# n#l imea form-ului, n twips. Stabile&te starea ini ial# a ferestrei n care apare form-ul la execu ie (minimizat#, maximizat# sau cu acelea&i dimensiuni ca la proiectare).

Derularea unei aplica ii presupune purtarea unui dialog cu utilizatorul, att sub forma ntrebare-r#spuns, ct &i prin afi&area de componente grafice pe un form. O prim# variant# de realizare a dialogului o constituie etichetele &i casetele de text, dar acestea nu pot afi&a mesaje de eroare sau de avertizare ntr-un format adecvat. Se utilizeaz# n acest scop casetele de mesaj (Message Box). Casetele de intrare (Input Box) se utilizeaz# pentru introducerea datelor, avnd op iuni suplimentare fa # de casetele de text. STRUCTURI DE CONTROL Din teoria program#rii se &tie c# algoritmul de rezolvare a unei probleme se codifica utiliznd structurile de control. Acestea arat# de fapt c#ile pe care le poate urma prelucrarea datelor.

b Figura 1. Structurile de control fundamentale

Structurile de control fundamentale sunt secven a (a), selec ia (b) &i itera ia (c), iar reprezentarea grafic# din figura 1 arat# succesiunea n care se vor executa instruc iunile programului. Structurile de control din categoriile b) &i c) cuprind condi ii; n func ie de rezultatul evalu#rii acestora (adev#rat sau fals), ac iunea ia un curs sau altul. Condi iile sunt construite cu ajutorul operatorilor de comparare.
64

PDF created with pdfFactory trial version www.pdffactory.com

Operatorii de comparare n timp ce operatorii matematici produc ca rezultat valori numerice, operatorii de comparare sunt utiliza i n expresii care produc rezultatul Adev#rat sau Fals (True/ False). Rezultatul evalu#rii unei condi ii este ntotdeauna de tip Boolean, de unde &i cele dou# c#i posibile de ac iune, ntruct operatorii de comparare se utilizeaz# pentru construirea condi iilor, ei se mai numesc operatori condi ionali. Tabelul 1. Operatorii de comparare Operat Exemplu Descriere or > IblProfit .Caption > Are rezultatul True (adev#rat) atunci Estimat cnd valoarea din stnga este strict mai mare (numeric sau alfabetic) dect cea din dreapta. < Salariu < 1200000 Are rezultatul True atunci cnd valoarea din stnga este strict mai mic# (numeric sau alfabetic) dect cea din dreapta. s Vrsta = LimitaMin Are rezultatul True atunci cnd valoarea din stnga este egal# sau identic# cu cea din dreapta. >= Nume >= "Popa" Are rezultatul True atunci cnd valoarea din stnga este mai mare sau egal# (numeric sau alfabetic) dect cea din dreapta. <= N <= IblNumar.Caption Are rezultatul True atunci cnd valoarea din stnga este mai mic# sau egal# (numeric sau alfabetic) dect cea din dreapta. o txtRaspuns .Text <> "Da" Are rezultatul True atunci cnd valoarea din stnga este diferit# de cea din dreapta. Not#: dac# nu este adev#rat# condi ia construit# cu oricare dintre operatorii de comparare, atunci rezultatul nu poate fi dect False (fals). De remarcat din tabelul l c# operatorii de comparare se pot utiliza att pentru valori numerice, ct &i pentru &iruri de caractere. La compararea &irurilor, trebuie s# se in# cont de codurile ASCII ale literelor, n aceast# reprezentare A este 65, iar a este 83. Considernd o variabil# strRaspuns, valoarea Da" este diferit# de DA". Observa ie: Visual Basic nu face diferen # ntre literele mari &i literele mici. Atunci cum este Da" diferit de DA"? Diferen a litere mari - litere mici nu se refer# la cuvintelecheie (de exemplu, declara ia Dim se poate scrie &i dim sau DIM, iar txtNumePren este acela&i lucru cu txtnumepren), ci la constantele de tip &ir de caractere. Pentru exemplificarea compara iilor, vezi tabelul 2. Tabelul 2. Rezultate compara ii - exemple

65

PDF created with pdfFactory trial version www.pdffactory.com

Compara ie Rezultat 4 > 2 True 4 < 1 False 4 < 8 True "Popa" <= "Popescu" True "Nu" o "NU" True 0 >= 0 True 0 <= 0 True 1 <> 2 True 2 >= 3 False Combinarea condi iilor cu ajutorul operatorilor logici Condi iile pot fi compuse din subcondi ii, prin utilizarea operatorilor NOT, AND &i OR (vezi tabelul 3). Operatorul NOT (nega ie logic#) are ca efect inversarea valorii de adev#r a unei condi ii. Nega ia trebuie utilizat# cu aten ie &i numai dac# nu exist# alternativ# (pentru exemplul din tabelul 3 exista o variant# mai simpl#: strRasp<>"Da"). Operatorul AND (&i" logic) face ca o condi ie s# fie adev#rat# dac# &i numai dac# subcondi iile care o compun sunt ambele adev#rate. Operatorul OR (sau" logic) face ca o condi ie s# fie adev#rat# dac# cel pu in una dintre subcondi iile care o compun este adev#rat#. n scrierea unor asemenea condi ii compuse trebuie cunoscut# prioritatea operatorilor logici. Ordinea n care se evalueaz# o condi ie este n mod normal de la stnga la dreapta, dar operatorii logici o pot schimba; cel mai important n ordinea priorit# ii este Not, urmat de And &i Or. Tabelul 3.Utilizarea operatorilor logici Operator Exemplu Descriere And If (A > B) And Are rezultatul True (adev#rat) atunci (C < D) cnd ambele condi ii sunt adev#rate. Or If (A > B) Or (C < Are rezultatul True (adev#rat) atunci D) cnd m#car una dintre condi ii este adev#rat#. Not If NottstrRasp = Are rezultatul True (adev#rat) atunci "Da") cnd condi ia evaluat# este fals# &i invers. Pentru modificarea ordinii de evaluare implicite ntr-una dorit# de programator se folosesc parantezele, care au exact acela&i rol cu cele din aritmetica elementar#. Exemplu: sngSalar>1000000 And 1=1 este adev#rat# doar dac# sngSalar este mai mare de 1000000; sngSalar>1000000 Or 1=1 este adev#rat# oricnd; sngSalar>1000000 And intAn=2001 Or 1=1 este adev#rat# oricnd; sngSalar>1000000 And (intAn=2001 Or 1=1) este adev#rat# dac# &i numai dac# sngSalar este mai mare de 1000000 &i intAn este 2001.
66

PDF created with pdfFactory trial version www.pdffactory.com

Observa ie: Aten ie la compatibilitatea tipurilor celor dou# valori supuse compar#rii. Cu alte cuvinte, nu se poate compara direct o valoare numeric# cu un &ir de caractere. O astfel de compara ie genereaz# un mesaj de eroare de tipul Data type mismatch", care indic# nepotrivirea. Compatibilitatea tipurilor se refer# la faptul c# se pot compara dou# date numerice, chiar dac# sunt de tipuri diferite (de exemplu, Integer &i Single). Structuri alternative (selec ia) Instruc iunea If Este probabil cea mai ntlnit# instruc iune n logica derul#rii unei aplica ii. If evalueaz# o condi ie n urma c#reia se execut# una din dou# ac iuni posibile (specificate prin blocuri de instruc iuni). Un format frecvent utilizat este: If <condi ie> Then <bloc de instruc iuni> End If Spre exemplu, consider#m c# n calculul salariului la firma X se acord# un spor de 10% din salariu angaja ilor care realizeaz# vnz#ri mai mari de 100 milioane lei n luna respectiv#. Valoarea vnz#rilor este introdus# de utilizator ntr-o caset# de text denumit# txtVanzari. Pentru calculul sporurilor, se va scrie urm#toarea secven # de cod: If (txtVanzari.Text > 100000000) Then ' se calculeaz# sporul cuvenit sngSporVanz = txtVanzari.Text * 0.1 'se cumuleaz# sporul cuvenit la total sporuri sngSporuri = sngSporuri + sngSporVanz End If Datele introduse de utilizatori prin intermediul controalelor precum casetele de text in de proprietatea Text, care este foarte flexibil#. Atunci cnd se introduc cifre, Visual Basic le converte&te tacit ntr-o valoare numeric# cu care se pot realiza calcule. La execu ia secven ei de mai sus se verific# dac# valoarea introdus# n caseta de text este mai mare de 100 de milioane. Cnd condi ia este adev#rat#, se calculeaz# sporul cuvenit &i se adaug# sporul calculat la total sporuri, n caz contrar, nu se execut# nimic. Poate p#rea ciudat# formula de calcul pentru total sporuri. Matematic, semnul =" arat# egalitatea dintre cele dou# p#r i, n Visual Basic &i n multe alte limbaje, el are &i semnifica ia de atribuire: elementului din stnga i se atribuie valoarea din dreapta, n exemplul de fa # s-a realizat actualizarea variabilei sngSporuri. O interpretare complet# ar suna astfel: la valoarea precedent# (sngSporuri din membrul drept) se adaug# sporul realizat (sngSporVanz) &i se ob ine o nou# valoare a totalului sporurilor (sngSporuri din membrul stng). Observa ie: nu este obligatorie prezen a parantezelor n scrierea condi iei. Ele ajut# doar la delimitarea acesteia de restul codului. Se recomand#, cum am mai men ionat, scrierea indentat# a instruc iunilor, pentru a urm#ri mai u&or logica prelucr#rilor. O instruc iune If scurt# se poate scrie pe o singur# linie, f#r# a fi necesar terminatorul End If, astfel: If <condi ie> Then <instruc iune>

67

PDF created with pdfFactory trial version www.pdffactory.com

Instruc iunea If. . . Then. . .Else n forma simplificat# de mai sus, If execut# o secven # de instruc iuni doar atunci cnd condi ia testat# este adev#rat#. Pentru a defini o alt# secven # de instruc iuni care s# se execute atunci cnd condi ia este fals#, se utilizeaz# formatul complet al lui If, astfel: If <condi ie> Then <bloc de instruc iuni 1> Else <bloc de instruc iuni 2> End If Spre exemplu, consider#m c#, n calculul valorii de plat# corespunz#toare facturilor ntocmite, firma X ofer# o reducere de 5% pentru facturile care au valori mai mari de 20 de milioane lei. If (sngValFact >= 20000000) Then sngValDePlata = sngValFact * 0.95 Else sngValDePlata = sngValFact End If Un exemplu complex este prezentat n continuare. ntr-o caset# de intrare i se cere utilizatorului s# specifice numele localit# ii. Dac# utilizatorul a terminat dialogul prin butonul Cancel, atunci variabilei strLocalitate i s-a atribuit un &ir nul (""). Dac# utilizatorul a introdus numele localit# ii, acesta se va afi&a ntr-o caset# de mesaj. Dim strLocalitate, As String ' I se cere utilizatorului sa specifice numele localit# ii ' Valoarea implicita este Ia&i strLocalitate = InputBox("Specifica i localitatea", __ "Nume localitate", "Ia&i") ' Se verifica localitatea introdusa If (strLocalitate = "") Then ' Utilizatorul a selectat butonul Cancel MsgBox "Nu a i introdus nici o localitate" Else ' Utilizatorul a indicat localitatea. MsgBox "A i introdus localitatea " & strLocalitate" End If Operatorii logici simplific# modul de scriere a structurilor alternative. In exemplul de mai jos, consider#m c# o anumit# tax# este O pentru cei care au vrsta sub 25 de ani sau peste 60 de ani. F#r# operatorul logic Or, secven a s-ar scrie: If (sngVarsta < 25) Then sngTaxa = 0 Else If (sngVarsta >60) Then sngTaxa = 0 End If End If Dac# se utilizeaz# operatorul logic Or, secven a este mai concis#: If (sngVarsta < 25) Or (sngVarsta >60) Then

68

PDF created with pdfFactory trial version www.pdffactory.com

sngTaxa = 0 End If Instruc iunea Select Case (structura alternativ# generalizat#) S-a observat din exemplele de mai sus c#, pentru a codifica mai multe alternative, este posibil# imbricarea mai multor instruc iuni If, dar cu ct num#rul acestora este mai mare, cu att urm#rirea lor devine mai dificil#. Exemplul ce urmeaz# vine n sprijinul acestei afirma ii. If (intCategorie = 1) Then IblTitlu.Caption = "Grad didactic: Preparator" Else If (intCategorie = 2) Then IblTitlu.Caption = "Grad didactic: Asistent " Else If (intCategorie = 3) Then lblTitlu.Caption = " Grad didactic: Lector" Else If (intCategorie = 4) Then lblTitlu.Caption = " Grad didactic: Conferen iar" Else If (intCategorie = 5) Then IblTitlu.Caption = " Grad didactic: Profesor" Else lblTitlu.Caption = "Personal nedidactic" End If End If End If End If End If Codul de mai sus devine pu in mai clar dac# se folose&te o variant# special# a instruc iunii If, anume If...Then...ElseIf. Aceasta nu con ine dect un terminator End If. If (intCategorie = 1) Then lblTitlu.Caption = "Grad didactic: Preparator" Elseif (intCategorie = 2) Then lblTitlu.Caption = "Grad didactic: Asistent " Elseif (intCategorie = 3) Then lblTitlu.Caption = " Grad didactic: Lector" Elseif (intCategorie = 4) Then IblTitlu.Caption = " Grad didactic: Conferen iar" Elseif (intCategorie = 5) Then IblTitlu.Caption = " Grad didactic: Profesor" Else IblTitlu.Caption = "Personal nedidactic" End If O alternativ# elegant# pentru astfel de situa ii este instruc iunea Select Case, ce permite selec ia multipl#. Formatul ei este: Select Case <expresie> Case <valoarel> <bloc de instruc iuni> Case <valoare2> <bloc de instruc iuni> ...

69

PDF created with pdfFactory trial version www.pdffactory.com

[Case <valoaren> <bloc de instruc iuni>] [Case Else <bloc de instruc iuni>] End Select Acest format pare, la prima vedere, la fel de dificil ca &i o secven # de If-uri imbricate. Se au n vedere mai multe valori posibile pentru <expresie>, care poate fi numeric# sau &ir de caractere. In func ie de valoarea efectiv# a expresiei, se va executa un singur bloc de instruc iuni. Dac# expresia are o valoare ce nu se reg#se&te ntre valorile prev#zute se va executa - dac# s-a specificat blocul de instruc iuni de dup# Case Else (altfel, nu se execut# nimic). Exemplul privind stabilirea gradului didactic este rescris cu ajutorul instruc iunii Select Case. Select Case intCategorie Case 1: IblTitlu.Caption = "Grad didactic: Preparator" Case 2: IblTitlu.Caption = "Grad didactic: Asistent " Case 3: IblTitlu.Caption = " Grad didactic: Lector" Case 4: IblTitlu.Caption = " Grad didactic: Conferen iar" Case 5: IblTitlu.Caption = " Grad didactic: Profesor" Case Else: IblTitlu.Caption = "Personal nedidactic" End Select Deci, dac# variabila intCategorie ar avea valoarea 3, s-ar afi&a n textul etichetei lblTitlu Grad didactic: Lector", execu ia continund cu urm#toarea instruc iune de dup# End Select (dac# exist#). Orice alt# valoare n afara celor de la l la 5 ar genera textul Personal nedidactic". Observa ie: se pot scrie dou# sau mai multe instruc iuni pe aceea&i linie dac# sunt separate prin caracterul :". Pentru a extinde posibilit# ile de utilizare a structurii alternative generalizate, exist# &i alte formate pentru Select Case. Un prim format permite compararea expresiei cu o valoare, folosind alt operator dect cel de egalitate. Se scrie astfel: Select Case <expresie> Case is <rela ie> <bloc de instruc iuni> Case is <rela ie> <bloc de instruc iuni> [Case is <rela ie> <bloc de instruc iuni>] [Case Else <bloc de instruc iuni>] End Select Un al doilea format posibil are n vedere mai multe intervale de valori n care poate s# se ncadreze <expresie>. Select Case <expresie> Case <expresiel> To <expresie2> <bloc de instruc iuni> Case <expresiel> To <expresie2> <bloc de instruc iuni> [Case <expresiel> To <expresie2> <bloc de instruc iuni>] [Case Else <bloc de instruc iuni>] End Select

70

PDF created with pdfFactory trial version www.pdffactory.com

Exist# &i un format care folose&te mai multe valori separate prin virgule, ca n exemplul: Select Case intCategorie Case 1,2,4,5 IblTitlu.Caption = "Personal didactic" Case 3 IblTitlu.Caption = "Cercet#tor &tiin ific" Case Else IblTitlu.Caption = "Personal nedidactic" End Select Mai mult dect att, este posibil# &i combinarea formatului standard cu cele suplimentare descrise. Exemplul de mai jos prezint# o astfel de combina ie, prin care se testeaz# n diferite moduri valoarea variabilei sngMediaGen. Select Case sngMediaGen Case is < 5: lblFinal.Caption = "Situa ie &colara neincheiata" Case 9.15 To 9.99: IblFinal.Caption = "Bursa de studiu" Case 10: lblFinal.Caption = "Bursa.de merit" Case Else: lblFinal.Caption = "Nu este bursier." End Select

Structuri repetitive (itera ia) Prin itera ie se n elege o secven # de program a c#rei execu ie se repet#, n func ie de cerin ele aplica iei. Spre exemplu, o procedur# care calculeaz# num#rul de puncte ob inute la finele anului I de to i cei 1200 de studen i trebuie s# se repete de 1200 de ori. Sau o procedur# pentru actualizarea pre urilor produselor, care preia datele despre produse dintr-un fi&ier de date, se va repeta pn# cnd se ajunge la sfr&itul fi&ierului. Structura repetitiv# Do While. . . Loop (execut#-ct-timp) Este probabil cel mai frecvent utilizat# n programele Visual Basic (instruc iunile repetitive se mai numesc bucle). Formatul general al instruc iunii Do este: Do While <condi ie> [<bloc de instruc iuni>] [Exit Do] [<bloc de instruc iuni>] Loop O varianta mai veche &i mai simpl# este: While <condi ie> [<bloc de instruc iuni>] Wend Instruc iunile din cuprinsul buclei (una sau mai multe) se execut# n mod repetat, ct timp condi ia testat# este adev#rat# (structur# repetitiv# condi ionat# anterior). Prin Loop se marcheaz# sfr&itul itera iei. Dac# ntre timp condi ia devine fals#, programul continu# cu instruc iunea ce urmeaz# dup# Loop. Trebuie precizat aici c# dac# din start condi ia este fals#, blocul de instruc iuni nu se va executa nici m#car o dat#! Aten ie! Exist# riscul unei bucle infinite, dac# nu se are n vedere o modalitate de actualizare a variabilei testate n <condi ie>.

71

PDF created with pdfFactory trial version www.pdffactory.com

Structura repetitiv# Do Until. . . Loop (execut#-pn#-cand) Spre deosebire de Do While, Do Until execut# un bloc de instruc iuni ct timp condi ie este fals#. Altfel spus, pn# cnd o condi ie devine adev#rat# (structur# repetitiv#, condi ionat# posterior). Nu exista avantaje folosind Do While sau Do Until. Trebuie aleasa forma care se potrive&te cel mai bine (n viziunea programatorului) unei situa ii date. Formatul general al instruc iunii Do Until este: Do Until <condi ie> [<bloc de instruc iuni>] [Exit Do] [<bloc de instruc iuni>] Loop Tot ceea ce s-a discutat la Do While r#mne valabil (cu excep ia faptului c# bucla se execut# ct timp condi ia este fals#). Exemplul anterior se poate rescrie astfel: Do Until ((intVarsta >= 18) And (intVarsta <= 55)) MsgBox "Pentru a putea participa, trebuie sa ave i" & _ " vrsta intre 18 si 55 de ani", vbExclamation, "Eroare!" ' se solicita vrsta strVarsta = InputBox('Ce vrsta ave i?", "Preluare date") ' se verifica daca s-a introdus o valoare 'daca s-a ap#sat Cancel, abandonam If (strVarsta = "") Then Exit Do End I f intVarsta = Val(strVarsta) Loop If intVarsta = 0 Then End Else MsgBox "Deci ave i " & intVarsta & " ani." End I f Observa ie: De aceast# dat#, operatorul logic folosit n condi ie este And ntruct ne intereseaz# s# solicit#m va pn# ce aceasta se situeaz# n intervalul [18,55], pe cnd la exemplul anterior se solicita vrsta att timp ct nu era n unul din intervalele (0,18) ori (55, 32767). Exist# ni&te variante ale instruc iunilor Do While &i Do Until care permit executia necondi ionat# a unui bloc de instruc iuni cel pu in o dat#: Do [<bloc de instruc iuni>] [Exit Do] [<bloc de instruc iuni>] Loop While|Until <condi ie> Execu ia blocului de instruc iuni se reia sau nu, n func ie de rezultatul evaluarii condi iei. Cu un astfel de format, secven a de cod anterioar# devine mai eficient#:

72

PDF created with pdfFactory trial version www.pdffactory.com

Dim strVarsta As String Dim intVarsta As Integer Do ' Se preia valoarea introdusa de utilizator strVarsta = InputBox("Ce vrsta ave i?", "Preluare date") ' Se verifica daca s-a introdus o valoare If (strVarsta = "") Then Exit Do End I f intVarsta = Val(strVarsta) If ((intVarsta < 18) Or (intVarsta > 55)) Then ' Valoarea introdusa nu respecta restric ia MsgBox "Pentru a participa, trebuie sa ave i" & _ " vrsta intre 18 si 55 de ani", _ vbExclamation, "Eroare!" End I f Loop While ((intVarsta < 18) Or (intVarsta > 55)) If intVarsta = O Then End Else MsgBox "Deci ave i " & intVarsta & " ani." End I f Plasnd func ia InputBox () la nceputul buclei, aceasta se va executa o dat# pentru a cere introducerea vrstei &i se va repeta doar dac# valoarea introdus# nu respect# restric ia stabilit#. Instruc iunea For. . . Next Codific# structura repetitiv# cu num#r definit de pa&i, n care o secven # de cod se repet# de un num#r specificat de ori. Formatul de utilizare este: For <contor> = <val-start> To <val-stop> [Step <increment>] [<bloc de instruc iuni>] [Exit For] [<bloc de instruc iuni>] Next <contor> Repetarea este controlat# de o variabil# - <contor> - care ia valori ntr-un interval specificat. Variabila nu trebuie declarat# anterior: ea prime&te o valoare ini ial# (<valstart>). Dup# o execu ie, variabila este incrementat#/decrementat# cu valoarea specificat# prin clauza Step (implicit se consider# valoarea 1), apoi comparat# cu valoarea final# (<val-stop>). Dac# nu a ajuns la valoarea final#, execu ia blocului de instruc iuni se reia. n caz contrar, execu ia trece la linia de dup# Next. Exit For are cam acela&i rol ca Exit Do de la comenzile Do ... Loop. Exemplu: intSuma = 0 For intNumar = l To 10

73

PDF created with pdfFactory trial version www.pdffactory.com

intSuma = intSuma + intNumar Next intNumar Secven a de mai sus calculeaz# suma numerelor de la l la 10. Variabila-contor este intNumar, ce are valoarea ini ial# l &i valoarea final# 10 (pasul este 1). intSuma este variabila care va reda suma numerelor de la l la 10, fiind ini ializat# cu valoarea 0. La prima execu ie a buclei, intNumar are valoarea l, valoare care se adun# la intSuma: intSuma = intSuma + l Cnd se ajunge la Next, intNumar se realizeaz# incrementarea variabilei-contor cu l, astfel c# intNumar va avea valoarea 2, valoare ce va fi adunat# la intSuma: intSuma = intSuma + 2 Repetarea se va face n mod evident de 10 ori, pn# cnd intNumar ajunge la valoarea 10, ce va fi adunat# la intSuma: intSuma = intSuma + 10 Dup# a 10-a execu ie, instruc iunea Next va duce intNumar la valoarea 11, care este mai mare dect valoarea final#, astfel c# se produce ie&irea din bucl#, continund cu urm#toarea instruc iune de dup# Next. Sigur c# adunarea numerelor de la l la 10 se facea mult mai u&or printr-o singur# linie decod:intSum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10. Este mai greu daca sunt 100 sau 1000 de numere sau mai multe. Instruc iunea propus# mai sus nu mai este la fel de u&or de scris, n schimb, n secven a For . . . Next s-ar fi modificat doar valoarea final# pentru variabila de control (For intNumber = l To 100). Dac# este necesar se poate lucra cu un pas negativ, ca n exemplul ce urmeaz#: For intNr = 5 To l Step -l Beep Next intNr Aceast# secven # produce de 5 ori un semnal sonor (instruc iunea Beep), realiznd pentru intNr num#r#toarea invers# (valoarea de start este mai mare dect valoarea de oprire de data aceasta). Exemplu care utilizeaz# clauza Exit For: For intN = l To intNrSalariati sngSalariu = Val(strSalariu) If (sngSalariu = 0) Then Exit For Next intN n exemplul de mai sus, se porneste de la ideea c# dac# valoarea salariului este 0, se produce ie&irea din bucl#. De regul#, Exit For, ca &i Exit Do, sunt executate n contextul unei instruc iuni I f. Observa ie: n mod similar se poate utiliza n cadrul unei proceduri instruc iunea Exit Sub, care realizeaz# ie&irea for at# din procedur#. PROGRAMAREA MODULAR/ N VISUAL BASIC Programarea structurat#, responsabil#" cu introducerea structurilor de control n programe, combinat# cu programarea modular# contribuie la cre&terea eficien ei &i productivit# ii n proiectarea de aplica ii. Prin divizarea aplica iei n mai multe proceduri se reduce efortul, o dat# cu num#rul de erori n scrierea programelor. De asemenea, este simplificat# ntre inerea aplica iei.

74

PDF created with pdfFactory trial version www.pdffactory.com

Chiar dac# nu se cunoaste nimic despre metoda program#rii structurate, modul de elaborare a aplica iilor n Visual Basic este un ghid. Procedurile-eveniment de dimensiuni mici, scrise pentru realizarea diverselor sarcini, n locul programelor vaste, monolitice, concretizeaz# programarea structurat#. Atunci cnd o procedur#-eveniment este foarte complex#, ea este descompus# n proceduri mai mici, apelate la nevoie. Spre exemplu, secven a dintr-o procedur# pentru calculul salariilor de mai jos apeleaz# (prin instruc iunea Call) trei proceduri, care execut# sarcini clare. Call Ini ializare () If txtCalculSal= "Regie" Then Call CalculSalRegie() Else Call CalculSalAcord () EndIf Se urm#re&te mp#r irea unei sarcini n subsarcini &i a acestora n alte subsarcini, pn# la ultimul nivel de detaliere posibil, n condi iile n care o procedur# apelat# poate, la rndul s#u, s# apeleze o alt# procedur#. Codul devine astfel foarte bine structurat, simplu &i u&or de urm#rit, iar corectarea erorilor &i modificarea programului sunt simplificate. n programarea modular# se utilizeaz# frecvent doi termeni: procedur# apelat# (procedura care a fost invocat# de o alt# procedur#) &i procedur# apelant# (procedura care a invocat o alt# procedur#). Apelul procedurilor. Subrutine &i func ii n exemplul de mai sus a fost folosit# instruc iunea Call, al c#rei rol este de apelare a procedurii al c#rei nume se specific#. Formatul s#u este: Call <nume-procedur#> La sfr&itul execu iei procedurii apelate (marcat prin End Sub sau Exit Sub) procedura apelant# redobnde&te controlul asupra execu iei aplica iei. La fel se ntmpl# &i cu func iile apelate: se execut# procedura definit# pentru func ia respectiv#, dup# care se returneaz# o valoare &i controlul procedurii din care s-a apelat func ia. Deci, pe lng# procedurile-eveniment, Visual Basic lucreaz# cu alte trei categorii de proceduri: - subrutine (proceduri) standard; - proceduri func ii; - proceduri proprietate Aceste categorii de proceduri nu sunt declan&ate de producerea unui eveniment. Ele sunt definite &i apelate apoi de oriunde din program. De fapt, apelarea se poate face de oriunde dac# procedura a fost definit# prin cuvntul-cheie Public; dac# este definit# cu Private, ea va putea fi apelat# doar de celelalte proceduri ale modulului din care face parte. Procedurile standard &i func iile sunt p#strate n modulul form-ului, dup# procedurileeveniment sau ntr-un modul extern, ata&at proiectului. Singura deosebire dintre func ii &i subrutine este c# func ia returneaz# o valoare pe care procedura apelant# o atribuie unei variabile sau unui control (cuvintele-cheie sunt Function. . . End Function), n timp ce subrutina nu (cuvintele-cheie sunt Sub. . . End Sub). Deci, o procedur# standard (subrutin#) este o procedur# independent# non-eveniment care se execut# atunci cnd este apelat# de o alt# procedur#. O func ie este o procedur#

75

PDF created with pdfFactory trial version www.pdffactory.com

independent# non-eveniment care se execut# atunci cnd este apelat# de o alt# procedur# &i c#reia i returneaz# dup# execu ie o valoare. n general, programatorii prefer# s# pun# procedurile standard de utilitate general# n module externe. Se includ aici subrutinele &i func iile necesare n mai multe aplica ii diferite. Spre exemplu, procedura care tip#re&te antetul firmei va fi utilizat# n mai multe aplica ii, astfel c# se va scrie codul o singur# dat#, se va salva ntr-un modul extern, care se va include n orice aplica ie n care este necesar# tip#rirea antetului. Pentru a ad#uga un modul extern ntr-o aplica ie, n fereastra Project Explorer se execut# clic dreapta &i se selecteaz# comanda Add Module. Noul modul apare n structura proiectului - prin dublu clic se deschide fereastra Code n care se va scrie codul. Definirea subrutinelor Termenii subrutin#" &i procedur#" sunt sinonimi. Subrutinele sunt frecvent utilizate n aplica iile complexe. Exemplu o aplica ie pentru calculul salariilor. Dup# cum se &tie, se realizeaz# calcule specifice pentru determinarea salariului de baz#, apoi a diferitelor sporuri, a impozitului etc. Se pot defini subrutine distincte pentru fiecare calcul n parte. Pentru definirea unei subrutine ce calculeaz# pentru fiecare student punctajul ob inut la sfr&itul semestrului la disciplina Medii de programare, se parcurg urm#torii pa&i: 1. se stabile&te un nume adecvat, ct mai explicit, pentru procedur# (de exemplu CalculPunctaj sau Punctaj PartialMedii); 2. dac# se are n vedere utilizarea procedurii &i n alte aplica ii se adaug# un nou modul standard (din cele cu extensia . bas), altfel se adaug# codul n modulul form-ului (la sfr&itul acestuia); 3. considernd c# se adaug# n modulul form-ului curent, se ncepe cu Private Sub CalculPunctaj() (dac# se omit parantezele, Visual Basic le va ad#uga automat); Visual Basic scrie automat sfr&itul procedurii End Sub; 4. se scrie codul. Pentru o subrutin# local#, acela&i rezultat se ob ine prin comanda Tools|Add Procedure, care va genera automat prima &i ultima linie a procedurii. Private Sub CalculPunctaj() Dim sngNotaTestl As Single, sngNotaTest2 As Single,_ sngNotaLab As Single, sngNotaProiect As Single, sngPunctaj As Single Dim intNrAbsente As Integer ' ini ializare variabile sngNotaTestl = txtNotaTl sngNotaTest2 = txtNotaT2 sngNotaLab = txtNotaLab sngNotaProiect = txtNotaP intNrAbsente = txtNrAbs If intNrAbsente > 3 sngPunctaj = 0

76

PDF created with pdfFactory trial version www.pdffactory.com

Else SngPunctaj = sngNotaTestl*0.15 + sngNotaTest2*0,15 sngNotaProiect*0.l Endlf lblPunctaj = Format(sngPunctaj, "##.###") End Sub

+ sngNotaLab*0.1

Observa ie: dac# subrutina ar face parte dintr-un modul extern, toate numele controalelor trebuie precedate de numele form-ului (exemplu: frmNote. txtNrAbs. Text). Daca se studiaza partea de ini ializare a variabilelor se observa ca datele se preiau din mai multe casete de text, dar n instruc iunile de atribuire nu s-a specificat proprietatea Text aceasta este proprietatea implicit# pentru o caset# de text. Apelarea acestei proceduri dintr-o alt# procedur# (s# zicem procedura-eveniment Click () a unui buton de comand# de pe form) se poate face: Call CalculPunctaj() sau CalculPunctaj Deci, o procedur# se poate apela prin simpla specificare a numelui ei, caz n care nu se mai specific# nici parantezele. Definirea func iilor Singura deosebire esen ial# fa # de subrutine este c#, la redarea controlului, func ia returneaz# o valoare care se va utiliza n procedura apelant#; de aceea &i modul de apelare este diferit. Considernd exemplul dintr-un capitol anterior - func ia VErori () care verific# posibilele erori la preluarea datelor, apelarea ei NU se face prin: VErori() Aceast# func ie (&i oricare alta) returneaz# o valoare, care se atribuie de obicei unui control sau unei variabile, se utilizeaz# ntr-o rela ie de calcul ori se compar# valoarea returnat# cu una dintre valorile posibile (n cazul nostru func ia returneaz# valoarea 0 sau 1): If VErori 0=1 Then Exit Sub End If Dac# func ia Calclmp () s-ar utiliza pentru determinarea impozitului pe salariu, atunci valoarea returnat# ar fi a impozitului calculat, care se poate utiliza astfel: IblImpozitSal.Caption = CalcImp() sau sngTotalRetineri = sngTotalRetineri + CalcImp() Spre deosebire de func iile predefinite (built-in functions), o func ie definit# de utilizator nu se include automat ntre func iile bibliotecii Visual Basic, dar poate fi salvat# ntr-un modul extern, accesibil de oricte ori este necesar. Dac# sunt definite mai multe astfel de func ii &i subrutine, se poate alc#tui o bibliotec# de rutine generale, accesibile oric#rei aplica ii.

77

PDF created with pdfFactory trial version www.pdffactory.com

Modul de definire a unei proceduri func ii este asem#n#tor cu cel al subrutinelor, nceputul &i sfr&itul unei astfel de proceduri se scriu: Public Function VErori() As Integer ... End Function n linia de nceput se specific# domeniul (se va scrie Private dac# func ia este accesibil# doar dintr-un form), numele func iei &i tipul valorii returnate (As Integer arat# c# se returneaz# un num#r ntreg). Deocamdat# nimic despre argumentele (sau parametrii) func iei. Exemplu unei func ii care calculeaz# comisionul din vnz#ri cuvenit agen ilor unei firme, n condi iile n care: - to i agen ii primesc 1% din vnz#rile realizate; - dac# vnz#rile sunt mai mari de 100 de milioane, agen ii primesc un bonus de 0.5% din vnz#ri, iar dac# sunt mai mari de 200 de milioane, bonusul este de 0.8% din vnz#rile realizate. Private Function Comision() As Single Dim sngVanzari As Single, sngComis As Single Dim sngCG As Single, sngCSl As Single; sngCS2 As Single ' ini ializare variabile ' indicarea comisioanelor din vnz#ri acordate sngCG =0.01 sngCSl = 0.005 sngCG = 0.008 'preluarea valorii vnz#rilor sngVanzari = Val(txtVanzari) 'calcul comision general din vnz#ri sngComis = sngVanzari * sngCG 'ad#ugare comision suplimentar Select Case sngVanzari Case Is >= 200000000 sngComis = sngComis + sngVanzari*sngCSl Case Is 100000000 To 200000000 sngComis = sngComis + sngVanzari*sngCS2 End Select Comision = sngComis ' Returneaza valoarea calculata End Function De re inut modalitatea n care unei func ii i este atribuit# valoarea calculat#: Comision = sngComis Nu exist# nici o variabil# cu numele Comision; se folose&te numele func iei, care prime&te astfel valoarea variabilei sngComis.

78

PDF created with pdfFactory trial version www.pdffactory.com

Observa ie: pentru a ncheia o procedur# func ie nainte de finalul propriu-zis se folose&te instruc iunea Exit Function. De avut n vedere n acest caz c# ntotdeauna func ia trebuie s# returneze o valoare: atribuirea valorii de returnat trebuie s# se fac# nainte de Exit Function. Observa ia este valabil# &i dac# n func ie avem o structur# de control alternativ# - trebuie prev#zut# cte o ie&ire din func ie pe fiecare ramur# a acestei structuri de control. Utilizarea de argumente n procedurile apelate n Visual Basic se lucreaz# cu dou# tipuri de variabile: locale &i globale. Reamintim c# o variabil# local# poate fi utilizat# numai n procedura n care a fost declarat#. Variabilele declarate n sec iunea general# a modulului form-ului (General) sunt globale, fiind disponibile pentru toate procedurile din modul. Variabilele declarate cu Public (n loc de Dim) n sec iunea general# sunt globale pentru ntreaga aplica ie. De regul# se lucreaz# cu variabile locale (este chiar recomandat de practica program#rii s# se evite pe ct posibil variabilele publice - din cauza unor conflicte de nume ori de con inut pe care le pot genera), ceea ce ridic# problema disponibilit# ii variabilelor n procedurile apelate, n mod normal, o variabil# local# dintr-o procedur# apelant# nu poate fi utilizat# de o procedur# apelat# din aceasta. Singura posibilitate de partajare a datelor este prin intermediul unei liste de argumente. Atunci cnd o procedur# apelat# are nevoie de date din procedura apelant#, aceasta i trimite prin instruc iunea Call &i o list# de argumente. Printr-o list# de argumente se transmit procedurii apelate variabilele locale necesare acesteia pentru prelucr#rile de efectuat. Dup# transmiterea datelor, acestea r#mn variabile locale, dar vor putea fi utilizate n execu ia procedurii apelate, n func ie de modalitatea de transmitere a variabilelor, sunt posibile &i modificarea valorii acestor variabile de c#tre procedura apelat# &i transmiterea noilor valori procedurii apelante. Numele de argumente utilizate la apelarea unei proceduri pot fi diferite de numele utilizate de aceasta, n exemplul urm#tor variabila Y de la nceputul procedurii este aceea&i cu variabila X din cadrul procedurii apelate (la fel W cu V). Call Calcul(X,V) 'apelare procedura ... Public Sub Calcul(Y As String, W As Single) 'ncepe procedura Singura restric ie este ca num#rul de argumente transmise, ordinea &i tipul lor s# fie acelea&i ca n instruc iunea Call. Este obligatoriu de precizat tipul tuturor argumentelor transmise la nceputul procedurii apelate, care trebuie s# fie cel declarat pentru variabilele transmise n procedura apelant#. Dac# se transmit unei proceduri variabile de tip list#, nu trebuie indicat indicele variabilei n lista de argumente, ci doar parantezele de rigoare. Se va scrie: Public Sub Calcul(AniVechime() As Integer, SalBaza() As Single, Op ional ConditiiGrele() As Single, _ Altele () as Single) Cu ajutorul func iei UBourid () se determin# cea mai mare valoare a indicelui unei variabile list#, aflnd deci num#rul de valori dintr-o list# (pentru c i salaria i se aplic# acest calcul): intNrSal = Ubound(SalBaza) Am ntlnit aici cuvntul-cheie Op ional, care permite declararea unui argument ce poate lipsi la apelul procedurii. Spre exemplu, dac# folosim aceast# procedur# la calculul

79

PDF created with pdfFactory trial version www.pdffactory.com

sporurilor pentru salaria ii din sectoarele calde ale unui combinat siderurgic, va trebui s# transmitem sporurile de condi ii grele; dac# o folosim pentru salaria ii care nu sunt direct productivi, nu va fi nevoie (probabil) de astfel de sporuri. Se poate apela o procedur# &i f#r# specificarea cuvntului-cheie Call (&i f#r# paranteze, n cazul acesta): Calcul Numele procedurii este suficient pentru a o apela. Argumentele se trec sub forma unei liste dup# numele procedurii: Calcul AniVechimeUzina(),SalBazaUzina(), ConditiiGreleUzina(), AlteleUzina() fa # de varianta complet#: Call Calcul(AniVechimeUzina(),SalBazaUzina(), ConditiiGreleUzina (),AlteleUzina()) Not#: Argumentul op ional ConditiiGreleUzina () se va omite dac# nu e cazul s# prelu#m astfel de sporuri, astfel: Calcul AniVechimeUzina(),SalBazaUzina(), AlteleUzina() O alt# posibilitate de transmitere a argumentelor n Visual Basic este folosirea argumentelor cu nume (named arguments). Aceast# tehnic# reclam# precizarea numelui argumentului urmat de operatorul : =" &i are o mare utilitate n transmiterea argumentelor n alt# ordine dect au fost ele definite n procedura apelat#, sau n s#rirea" argumentelor op ionale, astfel: Calcul AniVechime():=AniVechimeUzina() , _ SalBaza():= SalBazaUzina () , _ Altele():=AlteleUzina() Observa ie: din moment ce listele din tabloul de mai sus au toate acela&i num#r de elemente (fiind vorba de acela&i num#r n de salaria i), s-ar fi putut lucra cu un singur masiv, cu n linii &i 4 coloane, declarate de tip Single (ordin de m#rime care include &i Integer-ul de la AniVechime). Dac# ntr-un astfel de tablou e nevoie de mixarea elementelor de tip numeric cu unele de tip &ir de caractere ori dat# calendaristic#, el ar trebui declarat de tip Variant. Trebuie avut ns# n vedere faptul c# tablourile de tip Variant consum# mult mai mult# memorie dect tipurile de dat# conven ionale". Transmiterea argumentelor prin adres# (referin #) &i prin valoare Exist# dou# variante de transmitere a argumentelor, n func ie de care se indic# dac# procedura care le prime&te le poate modifica &i transmite napoi modific#rile sau nu. Dac# se transmit prin adres# (modul implicit n Visual Basic), procedura apelat# poate modifica valorile variabilelor transmise, modific#ri care sunt apoi transmise procedurii apelante. Dac# se transmit prin valoare, procedura apelat# ar putea modifica valorile, dar aceste modific#ri nu se pot transmite procedurii apelante. Transmiterea prin adres# permite func iei sau subrutinei s# actualizeze variabilele, modific#rile fiind percepute de variabile &i n procedura apelant#. Dup# ce acesta redobnde&te controlul, variabilele transmise &i modificate vor r#mne cu noile valori. Transmiterea prin valoare protejeaz# variabilele transmise, valorile lor neputnd fi modificate n procedura apelant# (procedura apelat# prime&te copii ale variabilelor din procedura apelant#). Se recomand# transmiterea datelor prin valoare, atunci cnd modificarea lor nu e necesar# sau e riscant#. S-a specificat c# modul implicit de transmitere este prin adres# - deci cu posibilitate de modificare (exist# pentru acest mod cuvntul-cheie ByRef, care de obicei se omite).

80

PDF created with pdfFactory trial version www.pdffactory.com

Pentru a indica transmiterea prin valoare trebuie specificat cuvntul-cheie ByVal naintea fiec#rei variabile de transmis prin valoare. n exemplele urm#toare sunt redate dou# proceduri: procedura Modifica prime&te datele prin adres# &i actualizeaz# valorile variabilelor, iar procedura NuModifica prime&te datele prin valoare, astfel c#, de&i le modific# valoarea, ele vor r#mne neschimbate n procedura apelant#. Sub Modifica (X As Integer, Y As Single) ' transmitere argumente prin adresa N = N * 2 ' dubleaz# valoarea S=S*2 ' cnd procedura apelanta redobnde&te controlul ' cele doua variabile locale vor avea alte valori End Sub Sub NuModifica (ByVal X AS Integer, ByVal Y As Single) ' transmitere argumente prin valoare N = N * 2 'dubleaz# valoarea S = S * 2 ' cnd procedura apelanta redobnde&te controlul ' cele doua variabile locale vor avea acelea&i valori ' ca atunci cnd au fost transmise (nu se modifica) End Sub FUNC(II PREDEFINITE Visual Basic ofer# utilizatorului mai multe func ii, grupate n categorii (numerice, &ir, pentru dat# &i timp, de formatare) pentru a realiza diferite opera iuni pentru care altfel ar trebui scrise secven e de iod. Unei func ii i se indic# 0, l sau mai multe argumente, cu ajutorul c#reia func ia execut# calcule sau prelucr#ri &i furnizeaz# un rezultat. Principalele func ii Visual Basic, pe categorii: Func ii numerice Cuprind func ii matematice &i trigonometrice, avnd ca argumente &i ca rezultate valori numerice. Cteva func ii reprezentative sunt cuprinse n tabelul 1. Sunt utilizate n calcule matematice &i inginere&ti. Tabelul 1. Cteva func ii numerice Func ie Descriere Abs() Calculeaz# valoarea absolut# a argumentului specificat. Atn() Calculeaz# arctangenta. Cos () Calculeaz# cosinus. Exp() Calculeaz# ex, x fiind un anume exponent. Log () Calculeaz# logaritm. Sin () Calculeaz# sinus. Sqrt () Calculeaz# r#d#cina p#trat# dintr-un num#r pozitiv. Tan() Calculeaz# tangenta. La func iile numerice fundamentale se adaug# o list# suplimentar# de func ii derivate (Derived Math Functions). Func ii de tip &ir

81

PDF created with pdfFactory trial version www.pdffactory.com

Aceste func ii realizeaz# prelucr#ri simbolice asupra unor &iruri de caractere. Cele mai frecvent utilizate func ii sunt prezentate n tabelul 2. S-au specificat &i argumentele func iilor. Tabelul 2. Principalele func ii de tip &ir Func ie Descriere Chr (<int>) D# caracterul care are codul ASCII specificat ca argument. Lcase (<str>) Converte&te toate literele din &irul specificat ca argument n litere mici. Left(<str>, <int>) Extrage primele <int> caractere din &irul <str>. Len(<str>) Calculeaz# num#rul de caractere din &irul <str> specificat. Ltrim(<str>) Elimin# spa iile de la nceputul unui &ir de caractere. Mid(<str>, <intStart> Extrage int caractere din interiorul &irului <str>, [, <intLen>]) ncepnd cu caracterul din pozi ia <intstart>. Dac# nu se precizeaz# <intLen>, se extrag toate caracterele, pn# la sfr&it. Right(<str>, <int>) Extrage ultimele int caractere din &irul <str>. Rtrim(<str>) Elimin# spatiile de la sfr&itul unui &ir de caractere. Str(<num>) Converte&te valoarea numeric# care este argument ntr-un &ir de caractere. Trim(<str>) Elimin# spa iile de la nceputul &i de la sfr&itul unui &ir. Ucase(<str>) Converte&te toate literele din &irul specificat n litere mari. Exemple de utilizare: > Pentru a stabili dac# la stabilirea unei parole utilizatorul a specificat cel pu in 5 caractere se poate utiliza func ia Len () astfel: If Len(strParola)<5 Then MsgBox "A i specificat doar " & Len(strParola) Endlf > Pentru a vedea dac# utilizatorul a r#spuns afirmativ la o ntrebare, trebuie s# se in# cont c# acesta putea r#spunde Da", da" sau DA". Pentru a nu testa toate variantele, se va folosi func ia Ucase (), care face conversia n majuscule: If Ucase(strRasp) = "DA" Then Compararea se face, fire&te, tot cu majuscule... O alt# variant# de lucru este conversia n litere mici, prin LCase (). > Dac# se dore&te afi&area ntr-o caset# de mesaj a notei ob inute la un examen de fiecare student, va trebui s# se converteasc# valoarea numeric# n &ir de caractere prin func ia St r (): MsgBox strNumeStud & " a ob inut nota " & _ str(sngNota) > Dac# ntr-o prelucrare se utilizeaz# primele 5 caractere din numele studen ilor (s# zicem, drept criteriu de repartizare a studen ilor pe grupe), se va scrie: strCriteriul = Left(txtNumeStudent, 5)

82

PDF created with pdfFactory trial version www.pdffactory.com

> Dac# un &ir de caractere utilizat ntr-o prelucrare poate avea spa ii la nceput sau la sfr&it, acestea se pot elimina prin func iile LTrim (), RTrim () sau Trim (), ca n exemplul de mai jos: strSirulMeu= " <orice text> " strSirScurtatSt. = LTrim (strSirulMeu) 'sirul va fi "<orice text> " strSirScurtatDr = RTrim (strSirulMeu) '&irul va fi " <orice text>" strSirScurtatDeTot = Trm(strSirulMeu) '&irul va fi "<orice text>" Func ii pentru dat# calendaristic# &i timp Sunt utilizate frecvent n aplica ii: de la afi&area datei &i/sau orei curente, la transformarea din ani n zile sau din ore n minute. Principalele func ii sunt incluse n tabelul 3. Tabelul 3. Func ii pentru dat# &i timp Func ie Descriere Date Red# data curent#. DateSerial (<intAn>, Red# data specificat# prin cele trei argumente. <intLuna>, <intZi>) DateAdd (<strInterval>, Adun# num#rul de intN la data specificat# prin <intN>, <dteData>) dteData, corespunz#tor intervalului de timp dorit (strlnterval). DateDiff (<strInterval>, Calculeaz# num#rul de intervale de timp <datal>, <data2>) (specificat prin strlnterval) dintre dou# date DatePart (<strInterval>, Determin# intervalul specificat dintr-o dat# <dteData>) calendaristic#. Now Red# data &i ora curent#. Time Red# ora curent#. Timer Determin# num#rul de secunde care au trecut de la miezul nop ii. TimeSerial (<ora>, <min>, Red# ora specificat# prin cele trei argumente. <sec>) Observa ie: ntruct nu au argumente, func iile Date, Now, Timer &i Time nu folosesc parantezele. Func iile din aceast# categorie returneaz# de obicei valori de tip dat# calendaristic# &i timp, care se p#streaz# n variabile de tip Date. Pentru a p#stra data na&terii ntr-o variabil# se va scrie: dteDataNastere = DateSerial(1981,5, 29) La func ia DateSerial (), ordinea argumentelor trebuie s# fie cea indicat# de formatul func iei. Anul (dac# este n secolul XX) se poate specifica doar prin ultimele 2 cifre: 81 n loc de 1981. Afi&area respectivei date se va face n func ie de set#rile stabilite de sistem sau de formatul indicat, n mod similar se utilizeaz# TimeSerial (). Cu ajutorul func iei DateSerial () se poate afi&a o dat# specificat# printr-o expresie. Dac# dorim s# afi&#m data la care trebuie returnat# o carte mprumutat#, adic# peste 15 zile de la data de 18 octombrie 2000, putem scrie: dteDataReturn = DateSerial(2000,10,18+15)

83

PDF created with pdfFactory trial version www.pdffactory.com

Func iile DateAdd(), DateDiff () &i DatePart () sunt mai complexe, dar &i deosebit de utile pentru diferite calcule legate de dat# &i timp. n formatul lor trebuie specificat intervalul de timp care se are n vedere, sub forma unui &ir de caractere, astfel: h ora d ziua m luna n minut q trimestru s secunda y zi din an w zi din s#pt#mn# ww s#pt#mn# yyyy an Spre exemplu, lucr#m cu o variabil# pentru data emiterii unei facturi: dteDataFact. 1tiind c# termenul de plat# este de 21 de zile, se poate determina data la care factura devine scadent# prin: IngScadenta = DateAdd("d", 21, dteDataFact) n mod similar, putem afla data cu 21 de luni n urm# fa # de data curent#: IngAnterioara = DateAdd("m", -21, dteDataCurenta) Observa ie: &irurile de caractere ce indic# intervalul de timp avut n vedere se scriu ntre ghilimele. Pentru a afla intervalul de timp care s-a scurs ntre dou# date, exprimat n zile, luni sau ani, dup# caz, folosim DateDiff (). Spre exemplu, num#rul de luni care a trecut de la darea n folosin # a unui mijloc fix se determin# cu: IngLuniVechime = DateDiff("m", Date, dteDatlnFolosinta) Pentru data curent# s-a utilizat func ia Date. Putem afla n care zi a s#pt#mnii a fost dat n folosin # mijlocul fix, dac# scriem: intCareZi = datePart("w", dteDatInFolosinta) Rezultatul este un num#r ntreg cu valori de la l (duminic#) la 7 (smb#t#). Dac# vrem s# afl#m cte zile mai sunt pn# la sfr&itul anului, scriem: intCateRamase = 365 - datePart("y", Date) Pe lng# func iile prezentate, exist# trei func ii utilizate pentru a extrage, ntr-o variabil# de tip Integer, ziua, luna sau anul dintr-o dat# calendaristic#: Day(), Month() &i Year (). Fiecare dintre ele are un singur argument: data calendaristic# din care se extrage informa ia dorit#, ca n exemplul urm#tor: intAnCurent = Year(Now) Func ia Timer se poate dovedi util# dac# se dore&te m#surarea intervalului de timp scurs ntre dou# momente. Se utilizeaz# dou# variabile: prima p#streaz# num#rul de secunde scurse de la miezul nop ii Ia momentul to, iar a doua num#rul de secunde scurse de la miezul nop ii la momentul t|. Iat# un exemplu de utilizare: Dim IngStart As Long Dim IngStop As Long Dim IngCatTimp As Long Dim strRasp As String IngStart = Timer Do strRasp = InputBoxC'Cat fac 275 + 295?", "Repede") Loop Until Val(strRasp) = 570 IngStop = Timer IngCatTimp = IngStop - IngStart MsgBox ("V-au trebuit" & Str (IngCatTimp) &" secunde!") Nu confunda i func ia Timer cu evenimentul Timer al controlului cu acela&i nume!

84

PDF created with pdfFactory trial version www.pdffactory.com

Func ii pentru testarea tipurilor de date Func iile Is... () sunt denumite &i func ii pentru inspectarea datelor, stabilind dac# o variabil# este sau nu de un anume tip. Rezultatul acestor func ii poate fi True (adev#rat) sau False (fals). Aceste func ii sunt prezentate n tabelul 4. Tabelul 4. Func ii Is...(). Func ie IsDate (<arg>)

Descriere D# valoarea True dac# argumentul poate fi convertit ntr-o dat# de tip Date. Se poate utiliza &i pentru controale. IsEmpty (<arg>) D# valoarea True dac# argumentul a fost vreodat# ini ializat dup# declararea sa. Se utilizeaz# numai pentru variabile. IsNull (<arg>) D# valoarea True dac# argumentul are valoarea Null. Se poate utiliza &i pentru controale. IsNumeric (<arg>) D# valoarea True dac# argumentul poate fi convertit ntr-o valoare numeric#. Se poate utiliza &i pentru controale. Nu exist# o func ie IsString (). Pentru a testa dac# o variabil# este de tip String, se utilizeaz# func ia VarType (<variabil#>). Aceasta are ca argument variabila testat#, iar rezultatul indic# tipul variabilei, sub forma unui num#r ntreg (vezi tabelul 5). Astfel, dac# rezultatul este 8, nseamn# c# variabila testat# este &ir de caractere. Func ia TypeName (<variabil#>) este asem#n#toare, dar returneaz# un &ir de caractere reprezentnd numele tipului de dat#: Long, Integer, Ob j ect etc. Tabelul 5. Valorile returnate de func ia VarType () Valoare Literal Descriere 0 vbEmpty Argument neini ializat 1 vbNull 1ir nul sau dat# incorect# 2 vblnteger Argument de tip Integer 3 vbLong Argument de tip Long 4 vbSingle Argument de tip Single 5 vbDouble Argument de tip Double 6 vbCurrency Argument de tip Currency 7 vbDate Argument de tip Date 8 vbString Argument de tip St ring 9 vbObject Argument de tip Ob j ect 10 vbError Argument Error 11 vbBoolean Argument de tip Boolean 12 vbVariant Argument de tip Variant 13 vbDataObject Argument de tip Data Access Ob j ect (DAO) (spre exemplu, un cmp sau o nregistrare dintro baz# de date) 14 vbDecimal Argument de tip Decimal 17 vbByte Argument de tip Byte

85

PDF created with pdfFactory trial version www.pdffactory.com

8192+int vbArray

Argument Array, de tipul indicat de valoarea ce dep#&e&te 8192 (de exemplu, 8194 indic# un tablou de tip ntreg).

Func ii de conversie Se utilizeaz# pentru a converti argumentul ntr-o dat# de tipul specificat de func ia utilizat# (vezi tabelul 6). Tabelul 6. Func ii de conversie Func ie Descriere Asc (<&ir>) Converte&te &irul de caractere specificat n codul ASCII corespunz#tor primului caracter din &ir. CCur (<arg>) Converte&te argumentul ntr-o dat# de tip Currency. CDbl (<arg>) Converte&te argumentul ntr-o dat# de tip Double. CInt (<arg>) Rotunje&te argumentul specificat la urm#toarea valoare ntreag#. CLng(<arg>) Converte&te argumentul ntr-o dat# de tip Long. CSng (<arg>) Converte&te argumentul ntr-o dat# de tip Single. CStr (<arg>) Converte&te argumentul ntr-o dat# de tip String. CVar (<arg>) Converte&te argumentul ntr-o dat# de tip Variant. Fix (<arg>) Extrage doar partea ntreag# a unui num#r (f#r# rotunjire). Int (<arg>) Rotunje&te argumentul specificat la valoarea ntreag# mai mic# sau egal# cu argumentul. Hex (<arg>) Converte&te argumentul numeric n valoarea corespunz#toare n hexazecimal. Oct (<arg>) Converte&te argumentul n valoarea corespunz#toare n sistemul de numera ie octal. Func ia Format () Se utilizeaz# pentru a specifica modul de afi&are a numerelor, a &irurilor, a datei calendaristice ori a timpului. Returneaz# o dat# de tip Variant, care este formatat# dup# specifica iile utilizatorului. A nu se n elege c# func ia Format () transform# expresia specificat# n Variant - se modific# doar modul de afi&are a expresiei specificate. Formatarea are loc de regul# dup# ce s-au efectuat toate calculele sau prelucr#rile, n vederea afi&#rii ntr-o form# final#. Formatul de utilizare este: Format (<expresie>, <strFormat>) <expresie> poate fi o variabil#, o constant#, un control sau o expresie format# din acestea. <strFormat> este una dintre valorile predefinite prezentate n tabelul 7 sau un format de afi&are definit de utilizator sub forma unui &ir de caractere. Tabelul 7. Moduri de formatare predefinite pentru func ia Format() <strFormat> Descriere "Currency" Afi&eaz# expresia numeric# n format monetar: seninul $ (utilizat implicit, dac# nu se modific# aceast# setare), separarea grupurilor de 3 cifre, afi&area cu 2 zecimale.

86

PDF created with pdfFactory trial version www.pdffactory.com

Valorile negative sunt afi&ate ntre paranteze. "Fixed" "Mediem Time" "On/Off" Afi&eaz# expresia numeric# cu 2 zecimale. Afi&eaz# ora n format 12-ore (cu specifica ia a.m. sau p.m.)

Afi&eaz# On dac# expresia este diferit# de zero sau are valoarea True &i Of f dac# expresia este zero sau False. "Percent" Afi&eaz# expresia numeric# n format procentual (valoarea nmul it# cu 100, afi&at# cu semnul %). "Scientific" Afi&eaz# expresia numeric# n nota ia &tiin ific#. "Short Time" Afi&eaz# ora n format 24-ore. "True/False" Afi&eaz# True dac# expresia este diferit# de zero sau are valoarea f rue &i False dac# expresia este zero sau False. "Yes/No" Afi&eaz# Yes dac# expresia este diferit# de zero sau are valoarea True &i No dac# expresia este zero sau False. De multe ori utilizatorul dore&te (pentru valorile numerice n special) propriul format de afi&are, care nu se reg#se&te ntre cele definite pentru <strFormat>. Pentru numere, utilizatorul &i poate defini propriile formate de afi&are utiliznd caracterele # &i 0, mpreun# cu cele pentru delimitarea grupurilor de 3 cifre &i indicarea m#rcii zecimale (. &i ,). Fiecare caracter # indic# o cifr#, iar O precizeaz# dac# apar n completare zerouri la nceput sau la sfr&it. Orice alt text specificat n format se va afi&a ca atare (vezi exemplul al doilea). Pentru data calendaristic# se poate defini format propriu utiliznd d pentru zi, m pentru lun#, y pentru an. Exemple: > afi&area cu 2 zecimale a mediei anuale ob inute de un student: lblMediaAnuala = Format(sngMedieAn, "##.00") (dac# scriam ##.##", 9.7 s-ar fi afi&at 9.7; ##.00" afi&eaz# 9.70) > afi&area salariului calculat f#r# zecimale, cu separarea grupurilor de 3 cifre: lblSalariu = Format(sngSal, "###,### lei") (valoarea 2343211.22 se va afi&a 2,343,211 lei) > afi&area n format procentual a num#rului l (adic# 100.00%): lblTotal = Format (l, "Percent") > afi&area textului Yes" n locul valorii l: lblR = Format(l, "Yes/No") > afi&area datei curente n format zz-11-aaaa: IblDataCurenta = Format(Date, "dd-mm-yyyy") Not#. 1abloanele func iei Format () se pot utiliza &i pentru proprietatea DataFormat a controalelor de tip caset# de text, list# ori etichet# (n cod sau direct n fereastra Properties)

87

PDF created with pdfFactory trial version www.pdffactory.com

S-ar putea să vă placă și