Documente Academic
Documente Profesional
Documente Cultură
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.
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.
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.
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%
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.
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.
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.
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
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).
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.
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.
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.
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
=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
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.
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.
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;
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.
=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#
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
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
=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
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
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
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
=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
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.
26
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
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
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
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
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
=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
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
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
[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
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
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
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
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
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
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)
39
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
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
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
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
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
44
Dx2=
X3=
Dx2=
X3=
45
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
[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
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
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
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
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
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
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
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
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
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
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
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
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
> 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
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
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
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
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