+ All Categories

MNP

Date post: 09-Jul-2015
Category:
Upload: heruvim
View: 108 times
Download: 0 times
Share this document with a friend

of 87

Transcript

METODE NUMERICE SI PROGRAMARE Calcul si programare in inginerie utilizand Excel Pachetul de programe Microsoft Office este prezent aproape pe fiecare calculator din orice unitate de proiectare, exploatare, producie, comer sau orice alta societate comerciala. Utilitarul Excel din Microsoft Office este o unealt foarte puternica i oricnd la ndemn permind rezolvarea unor probleme inginereti complexe, inclusiv programare fr alte cheltuieli suplimentare pentru achiziionarea unor pachete de programe sau limbaje de programare costisitoare si dificil de utilizat. Posibilitile remarcabile ale acestui utilitar l recomand cu prisosin i n domeniul la care face referire prezentul curs. SECIUNEA I FORMULE, ECUATII, FUNCTII Lucrul cu formule Formulele sunt utilizate pentru a aduna, a scdea, a nmuli sau a mpri numerele pe foile de calcul. Ele sunt alctuite din dou pri: Celulele pe care se dorete s le includei n formul. Operatorii aritmetici, care i spun programului Excel ce calcul dorii s se efectueze. Formulele Excel ncep ntotdeauna cu un semn egal (=), ceea ce indic programului Excel c se dorete s creai o formul. Aa c o formul simpl va arta cam aa: =B3-B2 Pentru a vedea toate formulele din foaia de ca1cu1, se alege Options din meniul Tools, selectai pagina View din caseta de dialog Options, apoi n caseta de validare, Formulas. sau CTRL+` (single left quotation mark) Crearea formulelor S se alctuiasc o formul care va scdea numrul coninut n celula B3 din numrul coninut n celul si care s pun rezultatul n celula B4. (Aceast formul este artat n figura 1.) 1. Punei numerele n celulele B2 i B3. n celula B2 punei un numr mai mare dect cel din celula B3. 2. Mutai cursorul n celula B4 i tastai semnul egal (=). 3. Dai clic n bara de formule. 4. Dai clic pe celula B2. Celula B2 este nconjurat de un marcaj ce indicnd c este selectat. Adresa celulei apare n bara de formule. 5. Asigurai-v c nc mai avei cursorul n bara de formule si tastai la dreapta referinei B2, semnul minus (-), pentru ecuaia dumneavoastr. 6. Poziionai cursorul pe celula B3 i dai clic. Din nou, adresa celulei apare n bara de formule. 7. Apsai ENTER pentru a termina formula. Dac ai introdus valori n celulele B2 si B3. valoarea coninut n B3 este sczut din valoarea din B2, iar diferena apare n celula B4.

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 1 Crearea formulelor Formulele se refer la celule, nu la numere Cnd lucrai cu formule, inei minte c: O formul cu referine la celule (cum ar fi B6*B7) va efectua calculele indicate n formul indiferent de numerele aflate n acele celule. Putei schimba numerele din celule, dar formula va efectua aceeai sarcin pe care i-ai repartizat-o. Putei s creai i o formul care conine numere, nu referine la celule. Totui formulele, cu multe numere n ele, vor necesita s v rentoarcei de multe ori la ele, pentru a face ajustrile de rigoare; nu vei putea modifica pur i simplu, numrul din celul. Multe formule sunt un amestec de referine 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 numr. Ordinea operaiunilor n formule. Parantezele care conin operaiuni. Ridicarea la putere. nmulirea i mprirea Adunarea i scderea. Aplicarea de formule la noi celule Se pot copia formulele dintr-o celul n alta. De exemplu, dac creai o ecuaie pentru a aduna toate numerele din coloana D, se poate utiliza o formul similar pentru coloanele E i F. Fiecare dintre urmtoarele metode de copiere ale formulelor produce rezultate diferite: Pentru a aplica o formul pe care ai creat-o ntr-o coloan si pentru a o muta la alte coloane, selectai colul din dreapta al celulei-formul i tragei 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 numete o referin relativ ia celule (spre deosebire de o referin absolut). Pentru a muta o formul ntr-o nou celul, laolalt cu referinele sale, dai clic, pe celula-formul, cu sgeata mouse-ului (dai clic pe marginea celulei) i tragei-o ntr-un alt loc. Dac cursorul nu este exact peste marginea celulei, el nu va arta ca o sgeat. Dac se dorete ca s mutai formula dumneavoastr ntr-o nou celul (nu s o copiai) i ca formula s se refere la celulele din coloana de unde ai mutat-o, inei apsat tasta CTRL n timp ce tragei formula.

PDF created with pdfFactory trial version www.pdffactory.com

Fig. 2: Aplicarea de formule la noi celule Tragei formula pe care ai 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, inei apsat tasta SHIFT n timp ce selectai formulele, eliberai tasta SHIFT, iar apoi mutai-le. Cnd tragei formule grupate ntr-o nou locaie, formulele se vor referi la setul iniial de celule. Dac inei apsat 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 explicai mai uor, operatorii programului Excel pot fi mprii n patru categorii generale: aritmetici, de comparaie, de text i de referin. n majoritatea cazurilor vei utiliza operatori aritmetici. Ceilali sunt utili pentru proiecte mai complexe.

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

Efectueaz Adunare Scdere nmulire mprire Procentaj

PDF created with pdfFactory trial version www.pdffactory.com

^

Ridicare 1a putere

Exemple: =B5*10% calculeaz 10 la sut din coninutul celulei B5. =B5^2 calculeaz ptratul coninutului celulei B5.

Operatori de comparaie Operatorii de comparaie v permit s inspectai dou valori i s ajungei la o concluzie n privina valorilor lor relative. Ei sunt de obicei cuplai cu funciile logice din Excel Iat operatorii de comparaie: Operator Semnificaie = Egal cu > Mai mare dect >= Mai mare sau egal cu < Mai puin dect 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 convertete tacit ntr-o valoare numeric cu care se pot realiza calcule. La execuia secvenei de mai sus se verific dac valoarea introdus n caseta de text este mai mare de 100 de milioane. Cnd condiia este adevrat, se calculeaz sporul cuvenit i se adaug sporul calculat la total sporuri, n caz contrar, nu se execut nimic. Poate prea ciudat formula de calcul pentru total sporuri. Matematic, semnul =" arat egalitatea dintre cele dou pri, n Visual Basic i n multe alte limbaje, el are i semnificaia 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 obine o nou valoare a totalului sporurilor (sngSporuri din membrul stng). Observaie: nu este obligatorie prezena parantezelor n scrierea condiiei. Ele ajut doar la delimitarea acesteia de restul codului. Se recomand, cum am mai menionat, scrierea indentat a instruciunilor, pentru a urmri mai uor logica prelucrrilor. O instruciune If scurt se poate scrie pe o singur linie, fr a fi necesar terminatorul End If, astfel: If Then

67

PDF created with pdfFactory trial version www.pdffactory.com

Instruciunea If. . . Then. . .Else n forma simplificat de mai sus, If execut o secven de instruciuni doar atunci cnd condiia testat este adevrat. Pentru a defini o alt secven de instruciuni care s se execute atunci cnd condiia este fals, se utilizeaz formatul complet al lui If, astfel: If Then Else End If Spre exemplu, considerm c, n calculul valorii de plat corespunztoare 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 localitii. Dac utilizatorul a terminat dialogul prin butonul Cancel, atunci variabilei strLocalitate i s-a atribuit un ir nul (""). Dac utilizatorul a introdus numele localitii, acesta se va afia ntr-o caset de mesaj. Dim strLocalitate, As String ' I se cere utilizatorului sa specifice numele localitii ' Valoarea implicita este Iai strLocalitate = InputBox("Specificai localitatea", __ "Nume localitate", "Iai") ' Se verifica localitatea introdusa If (strLocalitate = "") Then ' Utilizatorul a selectat butonul Cancel MsgBox "Nu ai introdus nici o localitate" Else ' Utilizatorul a indicat localitatea. MsgBox "Ai introdus localitatea " & strLocalitate" End If Operatorii logici simplific modul de scriere a structurilor alternative. In exemplul de mai jos, considerm c o anumit tax este O pentru cei care au vrsta sub 25 de ani sau peste 60 de ani. Fr operatorul logic Or, secvena 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, secvena este mai concis: If (sngVarsta < 25) Or (sngVarsta >60) Then

68

PDF created with pdfFactory trial version www.pdffactory.com

sngTaxa = 0 End If Instruciunea 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 instruciuni If, dar cu ct numrul acestora este mai mare, cu att urmrirea lor devine mai dificil. Exemplul ce urmeaz vine n sprijinul acestei afirmaii. 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: Confereniar" 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 puin mai clar dac se folosete o variant special a instruciunii If, anume If...Then...ElseIf. Aceasta nu conine 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: Confereniar" Elseif (intCategorie = 5) Then IblTitlu.Caption = " Grad didactic: Profesor" Else IblTitlu.Caption = "Personal nedidactic" End If O alternativ elegant pentru astfel de situaii este instruciunea Select Case, ce permite selecia multipl. Formatul ei este: Select Case Case Case ...

69

PDF created with pdfFactory trial version www.pdffactory.com

[Case ] [Case Else ] 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 , care poate fi numeric sau ir de caractere. In funcie de valoarea efectiv a expresiei, se va executa un singur bloc de instruciuni. Dac expresia are o valoare ce nu se regsete ntre valorile prevzute se va executa - dac s-a specificat blocul de instruciuni de dup Case Else (altfel, nu se execut nimic). Exemplul privind stabilirea gradului didactic este rescris cu ajutorul instruciunii 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: Confereniar" 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 afia n textul etichetei lblTitlu Grad didactic: Lector", execuia continund cu urmtoarea instruciune de dup End Select (dac exist). Orice alt valoare n afara celor de la l la 5 ar genera textul Personal nedidactic". Observaie: se pot scrie dou sau mai multe instruciuni pe aceeai linie dac sunt separate prin caracterul :". Pentru a extinde posibilitile 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 Case is Case is [Case is ] [Case Else ] End Select Un al doilea format posibil are n vedere mai multe intervale de valori n care poate s se ncadreze . Select Case Case To Case To [Case To ] [Case Else ] End Select

70

PDF created with pdfFactory trial version www.pdffactory.com

Exist i un format care folosete 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 = "Cercettor tiinific" 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 combinaie, prin care se testeaz n diferite moduri valoarea variabilei sngMediaGen. Select Case sngMediaGen Case is < 5: lblFinal.Caption = "Situaie 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 (iteraia) Prin iteraie se nelege o secven de program a crei execuie se repet, n funcie de cerinele aplicaiei. Spre exemplu, o procedur care calculeaz numrul de puncte obinute la finele anului I de toi cei 1200 de studeni trebuie s se repete de 1200 de ori. Sau o procedur pentru actualizarea preurilor produselor, care preia datele despre produse dintr-un fiier de date, se va repeta pn cnd se ajunge la sfritul fiierului. Structura repetitiv Do While. . . Loop (execut-ct-timp) Este probabil cel mai frecvent utilizat n programele Visual Basic (instruciunile repetitive se mai numesc bucle). Formatul general al instruciunii Do este: Do While [] [Exit Do] [] Loop O varianta mai veche i mai simpl este: While [] Wend Instruciunile din cuprinsul buclei (una sau mai multe) se execut n mod repetat, ct timp condiia testat este adevrat (structur repetitiv condiionat anterior). Prin Loop se marcheaz sfritul iteraiei. Dac ntre timp condiia devine fals, programul continu cu instruciunea ce urmeaz dup Loop. Trebuie precizat aici c dac din start condiia este fals, blocul de instruciuni nu se va executa nici mcar o dat! Atenie! Exist riscul unei bucle infinite, dac nu se are n vedere o modalitate de actualizare a variabilei testate n .

71

PDF created with pdfFactory trial version www.pdffactory.com

Structura repetitiv Do Until. . . Loop (execut-pn-cand) Spre deosebire de Do While, Do Until execut un bloc de instruciuni ct timp condiie este fals. Altfel spus, pn cnd o condiie devine adevrat (structur repetitiv, condiionat posterior). Nu exista avantaje folosind Do While sau Do Until. Trebuie aleasa forma care se potrivete cel mai bine (n viziunea programatorului) unei situaii date. Formatul general al instruciunii Do Until este: Do Until [] [Exit Do] [] Loop Tot ceea ce s-a discutat la Do While rmne valabil (cu excepia faptului c bucla se execut ct timp condiia este fals). Exemplul anterior se poate rescrie astfel: Do Until ((intVarsta >= 18) And (intVarsta = 200000000 sngComis = sngComis + sngVanzari*sngCSl Case Is 100000000 To 200000000 sngComis = sngComis + sngVanzari*sngCS2 End Select Comision = sngComis ' Returneaza valoarea calculata End Function De reinut modalitatea n care unei funcii i este atribuit valoarea calculat: Comision = sngComis Nu exist nici o variabil cu numele Comision; se folosete numele funciei, care primete astfel valoarea variabilei sngComis.

78

PDF created with pdfFactory trial version www.pdffactory.com

Observaie: pentru a ncheia o procedur funcie nainte de finalul propriu-zis se folosete instruciunea Exit Function. De avut n vedere n acest caz c ntotdeauna funcia trebuie s returneze o valoare: atribuirea valorii de returnat trebuie s se fac nainte de Exit Function. Observaia este valabil i dac n funcie avem o structur de control alternativ - trebuie prevzut cte o ieire din funcie 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 seciunea general a modulului form-ului (General) sunt globale, fiind disponibile pentru toate procedurile din modul. Variabilele declarate cu Public (n loc de Dim) n seciunea general sunt globale pentru ntreaga aplicaie. De regul se lucreaz cu variabile locale (este chiar recomandat de practica programrii s se evite pe ct posibil variabilele publice - din cauza unor conflicte de nume ori de coninut pe care le pot genera), ceea ce ridic problema disponibilitii 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 instruciunea Call i o list de argumente. Printr-o list de argumente se transmit procedurii apelate variabilele locale necesare acesteia pentru prelucrrile de efectuat. Dup transmiterea datelor, acestea rmn variabile locale, dar vor putea fi utilizate n execuia procedurii apelate, n funcie de modalitatea de transmitere a variabilelor, sunt posibile i modificarea valorii acestor variabile de ctre 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 urmtor variabila Y de la nceputul procedurii este aceeai 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 restricie este ca numrul de argumente transmise, ordinea i tipul lor s fie aceleai ca n instruciunea 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, Opional ConditiiGrele() As Single, _ Altele () as Single) Cu ajutorul funciei UBourid () se determin cea mai mare valoare a indicelui unei variabile list, aflnd deci numrul de valori dintr-o list (pentru ci salariai se aplic acest calcul): intNrSal = Ubound(SalBaza) Am ntlnit aici cuvntul-cheie Opional, care permite declararea unui argument ce poate lipsi la apelul procedurii. Spre exemplu, dac folosim aceast procedur la calculul

79

PDF created with pdfFactory trial version www.pdffactory.com

sporurilor pentru salariaii din sectoarele calde ale unui combinat siderurgic, va trebui s transmitem sporurile de condiii grele; dac o folosim pentru salariaii care nu sunt direct productivi, nu va fi nevoie (probabil) de astfel de sporuri. Se poate apela o procedur i fr specificarea cuvntului-cheie Call (i fr 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 opional ConditiiGreleUzina () se va omite dac nu e cazul s prelum 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 srirea" argumentelor opionale, astfel: Calcul AniVechime():=AniVechimeUzina() , _ SalBaza():= SalBazaUzina () , _ Altele():=AlteleUzina() Observaie: din moment ce listele din tabloul de mai sus au toate acelai numr de elemente (fiind vorba de acelai numr n de salariai), s-ar fi putut lucra cu un singur masiv, cu n linii i 4 coloane, declarate de tip Single (ordin de mrime 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 convenionale". Transmiterea argumentelor prin adres (referin) i prin valoare Exist dou variante de transmitere a argumentelor, n funcie de care se indic dac procedura care le primete le poate modifica i transmite napoi modificrile sau nu. Dac se transmit prin adres (modul implicit n Visual Basic), procedura apelat poate modifica valorile variabilelor transmise, modificri care sunt apoi transmise procedurii apelante. Dac se transmit prin valoare, procedura apelat ar putea modifica valorile, dar aceste modificri nu se pot transmite procedurii apelante. Transmiterea prin adres permite funciei sau subrutinei s actualizeze variabilele, modificrile fiind percepute de variabile i n procedura apelant. Dup ce acesta redobndete controlul, variabilele transmise i modificate vor rmne cu noile valori. Transmiterea prin valoare protejeaz variabilele transmise, valorile lor neputnd fi modificate n procedura apelant (procedura apelat primete copii ale variabilelor din procedura apelant). Se recomand transmiterea datelor prin valoare, atunci cnd modificarea lor nu e necesar sau e riscant. S-a specificat c modul implicit de transmitere este prin adres - deci cu posibilitate de modificare (exist pentru acest mod cuvntul-cheie ByRef, care de obicei se omite).

80

PDF created with pdfFactory trial version www.pdffactory.com

Pentru a indica transmiterea prin valoare trebuie specificat cuvntul-cheie ByVal naintea fiecrei variabile de transmis prin valoare. n exemplele urmtoare sunt redate dou proceduri: procedura Modifica primete datele prin adres i actualizeaz valorile variabilelor, iar procedura NuModifica primete datele prin valoare, astfel c, dei le modific valoarea, ele vor rmne 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 redobndete 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 redobndete controlul ' cele doua variabile locale vor avea aceleai valori ' ca atunci cnd au fost transmise (nu se modifica) End Sub FUNCII PREDEFINITE Visual Basic ofer utilizatorului mai multe funcii, grupate n categorii (numerice, ir, pentru dat i timp, de formatare) pentru a realiza diferite operaiuni pentru care altfel ar trebui scrise secvene de iod. Unei funcii i se indic 0, l sau mai multe argumente, cu ajutorul creia funcia execut calcule sau prelucrri i furnizeaz un rezultat. Principalele funcii Visual Basic, pe categorii: Funcii numerice Cuprind funcii matematice i trigonometrice, avnd ca argumente i ca rezultate valori numerice. Cteva funcii reprezentative sunt cuprinse n tabelul 1. Sunt utilizate n calcule matematice i inginereti. Tabelul 1. Cteva funcii numerice Funcie 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 rdcina ptrat dintr-un numr pozitiv. Tan() Calculeaz tangenta. La funciile numerice fundamentale se adaug o list suplimentar de funcii derivate (Derived Math Functions). Funcii de tip ir

81

PDF created with pdfFactory trial version www.pdffactory.com

Aceste funcii realizeaz prelucrri simbolice asupra unor iruri de caractere. Cele mai frecvent utilizate funcii sunt prezentate n tabelul 2. S-au specificat i argumentele funciilor. Tabelul 2. Principalele funcii de tip ir Funcie Descriere Chr () D caracterul care are codul ASCII specificat ca argument. Lcase () Convertete toate literele din irul specificat ca argument n litere mici. Left(, ) Extrage primele caractere din irul . Len() Calculeaz numrul de caractere din irul specificat. Ltrim() Elimin spaiile de la nceputul unui ir de caractere. Mid(, Extrage int caractere din interiorul irului , [, ]) ncepnd cu caracterul din poziia . Dac nu se precizeaz , se extrag toate caracterele, pn la sfrit. Right(, ) Extrage ultimele int caractere din irul . Rtrim() Elimin spatiile de la sfritul unui ir de caractere. Str() Convertete valoarea numeric care este argument ntr-un ir de caractere. Trim() Elimin spaiile de la nceputul i de la sfritul unui ir. Ucase() Convertete toate literele din irul specificat n litere mari. Exemple de utilizare: > Pentru a stabili dac la stabilirea unei parole utilizatorul a specificat cel puin 5 caractere se poate utiliza funcia Len () astfel: If Len(strParola) Pentru a vedea dac utilizatorul a rspuns afirmativ la o ntrebare, trebuie s se in cont c acesta putea rspunde Da", da" sau DA". Pentru a nu testa toate variantele, se va folosi funcia Ucase (), care face conversia n majuscule: If Ucase(strRasp) = "DA" Then Compararea se face, firete, tot cu majuscule... O alt variant de lucru este conversia n litere mici, prin LCase (). > Dac se dorete afiarea ntr-o caset de mesaj a notei obinute la un examen de fiecare student, va trebui s se converteasc valoarea numeric n ir de caractere prin funcia St r (): MsgBox strNumeStud & " a obinut nota " & _ str(sngNota) > Dac ntr-o prelucrare se utilizeaz primele 5 caractere din numele studenilor (s zicem, drept criteriu de repartizare a studenilor pe grupe), se va scrie: strCriteriul = Left(txtNumeStudent, 5)

82

PDF created with pdfFactory trial version www.pdffactory.com

> Dac un ir de caractere utilizat ntr-o prelucrare poate avea spaii la nceput sau la sfrit, acestea se pot elimina prin funciile LTrim (), RTrim () sau Trim (), ca n exemplul de mai jos: strSirulMeu= " " strSirScurtatSt. = LTrim (strSirulMeu) 'sirul va fi " " strSirScurtatDr = RTrim (strSirulMeu) 'irul va fi " " strSirScurtatDeTot = Trm(strSirulMeu) 'irul va fi "" Funcii pentru dat calendaristic i timp Sunt utilizate frecvent n aplicaii: de la afiarea datei i/sau orei curente, la transformarea din ani n zile sau din ore n minute. Principalele funcii sunt incluse n tabelul 3. Tabelul 3. Funcii pentru dat i timp Funcie Descriere Date Red data curent. DateSerial (, Red data specificat prin cele trei argumente. , ) DateAdd (, Adun numrul de intN la data specificat prin , ) dteData, corespunztor intervalului de timp dorit (strlnterval). DateDiff (, Calculeaz numrul de intervale de timp , ) (specificat prin strlnterval) dintre dou date DatePart (, Determin intervalul specificat dintr-o dat ) calendaristic. Now Red data i ora curent. Time Red ora curent. Timer Determin numrul de secunde care au trecut de la miezul nopii. TimeSerial (, , Red ora specificat prin cele trei argumente. ) Observaie: ntruct nu au argumente, funciile Date, Now, Timer i Time nu folosesc parantezele. Funciile din aceast categorie returneaz de obicei valori de tip dat calendaristic i timp, care se pstreaz n variabile de tip Date. Pentru a pstra data naterii ntr-o variabil se va scrie: dteDataNastere = DateSerial(1981,5, 29) La funcia DateSerial (), ordinea argumentelor trebuie s fie cea indicat de formatul funciei. Anul (dac este n secolul XX) se poate specifica doar prin ultimele 2 cifre: 81 n loc de 1981. Afiarea respectivei date se va face n funcie de setrile stabilite de sistem sau de formatul indicat, n mod similar se utilizeaz TimeSerial (). Cu ajutorul funciei DateSerial () se poate afia o dat specificat printr-o expresie. Dac dorim s afim data la care trebuie returnat o carte mprumutat, adic peste 15 zile de la data de 18 octombrie 2000, putem scrie: dteDataReturn = DateSerial(2000,10,18+15)

83

PDF created with pdfFactory trial version www.pdffactory.com

Funciile 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 sptmn ww sptmn yyyy an Spre exemplu, lucrm cu o variabil pentru data emiterii unei facturi: dteDataFact. tiind 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) Observaie: 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, numrul 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 funcia Date. Putem afla n care zi a sptmnii a fost dat n folosin mijlocul fix, dac scriem: intCareZi = datePart("w", dteDatInFolosinta) Rezultatul este un numr ntreg cu valori de la l (duminic) la 7 (smbt). Dac vrem s aflm cte zile mai sunt pn la sfritul anului, scriem: intCateRamase = 365 - datePart("y", Date) Pe lng funciile prezentate, exist trei funcii 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 informaia dorit, ca n exemplul urmtor: intAnCurent = Year(Now) Funcia Timer se poate dovedi util dac se dorete msurarea intervalului de timp scurs ntre dou momente. Se utilizeaz dou variabile: prima pstreaz numrul de secunde scurse de la miezul nopii Ia momentul to, iar a doua numrul de secunde scurse de la miezul nopii 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 confundai funcia Timer cu evenimentul Timer al controlului cu acelai nume!

84

PDF created with pdfFactory trial version www.pdffactory.com

Funcii pentru testarea tipurilor de date Funciile Is... () sunt denumite i funcii pentru inspectarea datelor, stabilind dac o variabil este sau nu de un anume tip. Rezultatul acestor funcii poate fi True (adevrat) sau False (fals). Aceste funcii sunt prezentate n tabelul 4. Tabelul 4. Funcii Is...(). Funcie IsDate ()

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

85

PDF created with pdfFactory trial version www.pdffactory.com

8192+int vbArray

Argument Array, de tipul indicat de valoarea ce depete 8192 (de exemplu, 8194 indic un tablou de tip ntreg).

Funcii de conversie Se utilizeaz pentru a converti argumentul ntr-o dat de tipul specificat de funcia utilizat (vezi tabelul 6). Tabelul 6. Funcii de conversie Funcie Descriere Asc () Convertete irul de caractere specificat n codul ASCII corespunztor primului caracter din ir. CCur () Convertete argumentul ntr-o dat de tip Currency. CDbl () Convertete argumentul ntr-o dat de tip Double. CInt () Rotunjete argumentul specificat la urmtoarea valoare ntreag. CLng() Convertete argumentul ntr-o dat de tip Long. CSng () Convertete argumentul ntr-o dat de tip Single. CStr () Convertete argumentul ntr-o dat de tip String. CVar () Convertete argumentul ntr-o dat de tip Variant. Fix () Extrage doar partea ntreag a unui numr (fr rotunjire). Int () Rotunjete argumentul specificat la valoarea ntreag mai mic sau egal cu argumentul. Hex () Convertete argumentul numeric n valoarea corespunztoare n hexazecimal. Oct () Convertete argumentul n valoarea corespunztoare n sistemul de numeraie octal. Funcia Format () Se utilizeaz pentru a specifica modul de afiare a numerelor, a irurilor, a datei calendaristice ori a timpului. Returneaz o dat de tip Variant, care este formatat dup specificaiile utilizatorului. A nu se nelege c funcia Format () transform expresia specificat n Variant - se modific doar modul de afiare a expresiei specificate. Formatarea are loc de regul dup ce s-au efectuat toate calculele sau prelucrrile, n vederea afirii ntr-o form final. Formatul de utilizare este: Format (, ) poate fi o variabil, o constant, un control sau o expresie format din acestea. este una dintre valorile predefinite prezentate n tabelul 7 sau un format de afiare definit de utilizator sub forma unui ir de caractere. Tabelul 7. Moduri de formatare predefinite pentru funcia Format() Descriere "Currency" Afieaz expresia numeric n format monetar: seninul $ (utilizat implicit, dac nu se modific aceast setare), separarea grupurilor de 3 cifre, afiarea cu 2 zecimale.

86

PDF created with pdfFactory trial version www.pdffactory.com

Valorile negative sunt afiate ntre paranteze. "Fixed" "Mediem Time" "On/Off" Afieaz expresia numeric cu 2 zecimale. Afieaz ora n format 12-ore (cu specificaia a.m. sau p.m.)

Afieaz On dac expresia este diferit de zero sau are valoarea True i Of f dac expresia este zero sau False. "Percent" Afieaz expresia numeric n format procentual (valoarea nmulit cu 100, afiat cu semnul %). "Scientific" Afieaz expresia numeric n notaia tiinific. "Short Time" Afieaz ora n format 24-ore. "True/False" Afieaz True dac expresia este diferit de zero sau are valoarea f rue i False dac expresia este zero sau False. "Yes/No" Afieaz Yes dac expresia este diferit de zero sau are valoarea True i No dac expresia este zero sau False. De multe ori utilizatorul dorete (pentru valorile numerice n special) propriul format de afiare, care nu se regsete ntre cele definite pentru . Pentru numere, utilizatorul i poate defini propriile formate de afiare utiliznd caracterele # i 0, mpreun cu cele pentru delimitarea grupurilor de 3 cifre i indicarea mrcii zecimale (. i ,). Fiecare caracter # indic o cifr, iar O precizeaz dac apar n completare zerouri la nceput sau la sfrit. Orice alt text specificat n format se va afia 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: > afiarea cu 2 zecimale a mediei anuale obinute de un student: lblMediaAnuala = Format(sngMedieAn, "##.00") (dac scriam ##.##", 9.7 s-ar fi afiat 9.7; ##.00" afieaz 9.70) > afiarea salariului calculat fr zecimale, cu separarea grupurilor de 3 cifre: lblSalariu = Format(sngSal, "###,### lei") (valoarea 2343211.22 se va afia 2,343,211 lei) > afiarea n format procentual a numrului l (adic 100.00%): lblTotal = Format (l, "Percent") > afiarea textului Yes" n locul valorii l: lblR = Format(l, "Yes/No") > afiarea datei curente n format zz-11-aaaa: IblDataCurenta = Format(Date, "dd-mm-yyyy") Not. abloanele funciei Format () se pot utiliza i pentru proprietatea DataFormat a controalelor de tip caset de text, list ori etichet (n cod sau direct n fereastra Properties)

87

PDF created with pdfFactory trial version www.pdffactory.com


Recommended