Instructiunile limbajului Visual Basic
Prin declararea variabilelor nu sunt specificate si datele pe care le vor pastra acestea, Acest lucru este realizat prin intermediul instructiunilor de atribuire, care au urmatorul format general:
<variabila> <expresie>
unde:
<variabila> |
numele variabilei in care se va stoca rezulatul evaluarii expresiei. |
<expresie> |
poate
fi o |
Exemple
Dim strNume As String, intVarsta As Integer
strNume = "Ionescu Vasile"
intVarsta = 45
Pentru realizarea expresiilor, Visual Basic 6.0 dispune de 4 grupe de operatori si anume:
operatori aritmetici - pentru executarea operatiilor aritmetice;
operatori relationali - pentru executarea comparatiilor;
operatori de concatenare - pentru combinarea sirurilor de caractere;
operatori logici - pentru executarea operatiilor logice.
Visual Basic 6.0 dispune de 7 operatori aritmetici cu ajutorul carora se pot executa operatii de ridicare la putere, inmultire, impartirea reala si intreaga, restul impartirii intregi, adunare si scadere. In continuare sunt prezentati acesti operatori in ordinea prioritatii lor.
Operatorul ^ se foloseste pentru a ridica un numar la o putere. Sintaxa unei operatii de ridicare la putere este:
<rezultat> <numar> <exponent>
unde:
<rezultat> |
Orice variabila de tip numeric. |
<numar> |
Orice expresie cu rezultat numeric. |
<exponent> |
Orice expresie cu rezultat numeric. |
Observatii
<numar> poate fi negativ numai daca <exponent> este o valoare intreaga.
Cand intr-o expresie se executa mai multe ridicari la putere, operatorul ^ este evaluat de la stanga spre dreapta.
In mod normal, tipul de data al <rezultat> este un Double sau un Variant care contine un Double. Totusi, daca fie <numar> fie <exponent> este o expresie Null , <rezultat> este Null.
Operatorul * se foloseste pentru inmultirea a doua numere. Sintaxa unei operatii de inmultire este:
<rezultat> <numar1> <numar2>
unde:
<rezultat> |
Orice variabila de tip numeric. |
<numar1> |
Orice expresie cu rezultat numeric. |
<numar2> |
Orice expresie cu rezultat numeric. |
Observatii
Tipul de data al <rezultat> este in mod normal dat de operandul cu cea mai mare precizie. Ordinea de precizie, de la cea mai mica la cea mai mare este: Byte, Integer, Long, Single, Currency, Double si Decimal. Exceptiile de la aceasta regula sunt prezentate in urmatorul tabel :
Daca |
Atunci <rezultat> este |
Inmultirea implica un Single si un Long, |
convertit la un Double. |
Tipul de data pentru <rezultat> este un Long, Single sau variant Date care depaseste domeniul sau legal, |
convertit la un Variant care contine un Double. |
Tipul de date pentru <rezultat> este un variant Byte care depaseste domeniul legal al acestuia, |
convertit la un variant Integer. |
Tipul de data pentr <rezultat> este un variant Integer care depaseste domeniul sau legal, |
convertit la un variant Long. |
Daca una dintre cele doua sau ambele expresii sunt Null, <rezultat> este Null.
Daca una dintre expresii este Empty, aceasta este tratata ca 0.
Nota Ordine de precizie folosita de catre inmultire nu este aceeasi cu ordinea de precizie folosita de adunare si scadere.
Operatorul / se foloseste pentru a imparti doua numere si a returna un rezultat in virgula mobila. Aceasta operatie de impartire mai poarta si numele de impartire reala. Sintaxa unei operatii de impartire reala este:
<rezultat> <numar1> <numar2>
unde:
<rezultat> |
Orice variabila de tip numeric. |
<numar1> |
Orice expresie cu rezultat numeric. |
<numar2> |
Orice expresie cu rezultat numeric. |
Observatii
Tipul de date pentru <rezultat> este in mod normal un Double sau un variant Double. Exceptiile de la aceasta regula sunt urmatoarele:
Daca |
Atunci <rezultat> este |
Ambele expresii sunt Byte, Integer sau Single, |
un Single in afara cazului cand acesta depaseste domeniul sau legal de valori; in care caz se produce o eroare. |
Ambele expresii sunt variant Byte, Integer sau Single, |
un variant Single in afara cazului cand este depasit domeniul sau legal de valori, caz in care <rezultat> este un Variant care contine un Double. |
O expresie este Decimal iar cealalta este de orice alt tip, |
este un Variant de tip Decimal. |
Daca una sau ambele expresii sunt Null, <rezultat> este Null.
Daca oricare dintre expresii este Empty, ea este tratata ca 0.
Operatorul se foloseste pentru a imparti doua numere si a returna un rezultat intreg. Aceasta operatie de impartire mai poarta si numele de impartire Intreaga. Sintaxa unei operatii de impartire intreaga este:
<rezultat> <numar1> <numar2>
unde:
<rezultat> |
Orice variabila de tip numeric. |
<numar1> |
Orice expresie cu rezultat numeric. |
<numar2> |
Orice expresie cu rezultat numeric. |
Observatii
Inainte de executarea impartirii, expresiile numerice sunt rotunjite la expresii Byte, Integer sau Long.
In mod normal, tipul de data pentru <rezultat> este un Byte, variant Byte, Integer, variant Integer, Long sau variant Long, chiar daca <rezultat> este un numar intreg. Orice parte fractionala este trunchiata.
Daca oricare dintre expresii este Null, <rezultat> este Null.
Daca oricare dintre expresii este Empty, ea este tratata ca 0.
Operatorul Mod se foloseste pentru a imparti doua numere si a returna numai restul. Sintaxa operatiei este:
<rezultat> <numar1> Mod <numar2>
unde:
<rezultat> |
Orice variabila de tip numeric. |
<numar1> |
Orice expresie cu rezultat numeric. |
<numar2> |
Orice expresie cu rezultat numeric. |
Observatii
Operatorul modulo (Mod) imparte <numar1> la <numar2> (rotunjind numerele in virgula mobila la intregi) si returneaza numai restul ca <rezultat>. Spre exemplku, in urmatoarea expresie A (<rezultat>) este egal cu 5.
A = 19 Mod 6.7
In mod normal, tipul de data pentru <rezultat> este un Byte, variant Byte, Integer , variant Integer, Long sau Variant care contine un Long, indiferent daca <rezultat> este sau nu un numar intreg. Orice parte fractionara este trunchiata.
Daca oricare dintre expresii este Null, <rezultat> este Null.
Daca oricare dintre expresii este Empty, ea este tratata ca 0.
Operatorul + se foloseste pentru a aduna doua numere. Sintaxa operatiei de adunare este:
<rezultat> <expresie1> <expresie2>
unde:
<rezultat> |
Orice variabila de tip numeric. |
<expresie1> |
Orice expresie. |
<expresie2> |
Orice expresie. |
Observatii
Daca cel putin una dintre expresii nu este un Variant, se aplica urmatoarele reguli:
Daca |
Atunci |
Ambele expresii sunt tipuri numerice de date (Byte, Boolean, Integer, Long, Single, Double, Date, Currency sau Decimal) |
Se aduna |
Daca ambele expresii sunt String |
Se concateneaza. |
O expresie este de un tip numeric de date si cealalta este orice Variant exceptand Null |
Se aduna. |
O expresie este un String si cealalta este orice Variant exceptand Null |
Concatenate. |
Una dintre expresii este un Variant cu valoarea Empty |
Se returneaza expresia ramasa nemodificata ca <rezultat>. |
O expresie este de un tip numeric de date si cealalta este un String |
Se produce eroarea "Type mismatch". |
Oricare dintre expresii este Null |
<rezultat> este Null. |
Daca ambele expresii sunt de tip Variant, se aplica urmatoarele reguli:
Daca |
Atunci |
Ambele expresii Variant sunt numerice |
Adunare. |
Ambele expresii Variant sunt siruri |
Concatenare. |
Una din expresiile Variant este numerica iar cealata sir |
Adunare. |
Pentru adunarea aritmetica simpla cu expresii numai de tip numeric, tipul de data pentru <rezultat> este acelasi cu cel al celei mai precise dintre expresii. Ordinea de precizie. de la cel mai putin precis la cel cu prcizia cea mai mare este Byte, Integer, Long, Single, Double, Currency, and Decimal. Exceptiile de la aceasta regula sunt urmatoarele:
Daca |
Atunci <rezultat> este |
Se aduna un Single cu un Long, |
un Double. |
Tipul de data pentru <rezultat> este un Long, Single sau variant Date care depaseste domeniul valorilor legale, |
convertit la un variant Double variant. |
Tipul de data pentru <rezultat> este un variant Byte ce depasete domeniul valorilor legale, |
convertit la un variant Integer. |
Tipul de data pentru <rezultat> este un variant Integer ce depasete domeniul valorilor legale, |
convertit la un variant Long. |
O expresie Date este adunat cu orice alt tip de data, |
un Date. |
Daca una sau ambele expresii sunt Null, <rezultat> este Null.
Daca ambele expresii sunt Empty, <rezultat> este un Integer.
Daca numai un dintre expresii este Empty, cealalta expresie este returnata neschimbata ca <rezultat>.
Pentru a nu confunda operatia de adunare a doua numere cu cea de concatenare a doua siruri, mai ales in cazul folosirii variabileleor de tip Variant, este indicat ca pentru operatia de concatenare sa se foloseasca operatorul & si nu +.
Nota Ordinea de precizie folosita de catre adunare si scadere nu este aceeasi ca ordinea de precizie utilizata de inmultire.
Operatorul - se foloseste pentru a executa operatia de scadere intre doua numere sau pentru a indica valoarea negativa a unei expresii numerice. Sintaxa operatiei de scadere este:
<rezultat> <numar1> <numar2>
iar a operatiei de schimbarea semnului este:
<numar>
unde:
<rezultat> |
Orice variabila de tip numeric. |
<numar> |
Orice expresie numerica. |
<numar1> |
Orice expresie numerica. |
<numar2> |
Orice expresie numerica. |
Observatii
In prima forma, operatorul - este un operatorul scaderii aritmetice (operator binar) folosit pentru a gasi diferenta dintre doua numere.
In forma a doua, operatorul - este folosit ca operator al negatiei (operator unar) pentru a indica valoarea negativa a unei expresii.
Tipul de data pentru <rezultat> este acelasi cu cela al expresiei cu precizia cea mai mare. Ordinea de precizie, de la cel mai putin precis la cel mai precis este: Byte, Integer, Long, Single, Double, Currency si Decimal. Exceptiile de la aceasta ordine sunt urmatoarele:
Daca |
Atunci <rezultat> este |
Scaderea implica un Single si un Long, |
convertit la un Double. |
Tipul de data pentru <rezultat> este Long, Single sau variant Date ce depaseste limitele valorilor legale ale sale, |
convertit la un Variant care contine un Double. |
Tipul de date pentru <rezultat> este un variant Byte care depaseste limitele valorilor legale ale sale, |
convertit la un variant Integer. |
Tipul de date pentru <rezultat> este un variant Integer care depaseste limitele valorilor legale ale sale, |
convertit la un variant Long. |
Scaderea implica un Date si orice alt tip de date, |
un Date. |
Scaderea implica doua expresii Date, |
un Double. |
If an expression is Empty, it is treated as 0.
Daca una sau ambele expresii sunt Null, <rezultat> este Null.
Daca o expresie este Empty, aceasta este tratat ca 0.
Nota Ordinea de precizie folosita de catre adunare si scadere nu este aceeasi ca ordinea de precizie utilizata de inmultire.
Operatorii relationali se folosesc la compararea a doua expresii. Expresiile relationale ce se formeaza prin combinarea a doua expresii folosind un operator relational pot avea una din urmatoarele forme:
<rezultat> <expr1> <op_comparatie> <expr2>
<rezultat> <obiect1> Is <obiect2>
<rezultat> <expC> Like <sablon>
unde:
<rezultat> |
Orce variabila numerica. |
<expr1> si <expr2> |
Orice expresie. |
<op_comparatie> |
Orice operator de comparatie. |
<obiect1> si <obiect2> |
Orice nume de obiect. |
<expC> |
Orice expresie de tip sir de caractere. |
<sablon> |
Orice expresie sir de caractere sau un doemniu de caractere. |
Observatii
Tabelul urmator prezinta operatorii de comparatie si conditiile care determina daca <rezultat> este True, False sau Null :
Operator |
True daca |
False daca |
Null daca |
< (mai mic decat) |
expr1 < expr2 |
expr1 >= expr2 |
expr1 sau expr2 este Null |
<= (mai mic decat sau egal cu) |
expr1 <= expr2 |
expr1 > expr2 |
expr1 sau expr2 este Null |
> (mai mare decat) |
expr1 > expr2 |
expr1 <= expr2 |
expr1 sau expr2 este Null |
>= (mai mare decat sau egal cu) |
expr1 >= expr2 |
expr1 < expr2 |
expr1 sau expr2 este Null |
(egal cu) |
expr1 = expr2 |
expr1 <> expr2 |
expr1 sau expr2 este Null |
<> (diferit de) |
expr1 <> expr2 |
expr1 = expr2 |
expr1 sau expr2 este Null |
Cand se compara doua expresii este posibil sa nu puteti de termina usor daca expresiile sunt comparate ca numere sau siruri de caractere. Tabelul urmator indica cum sunt comparate expresiile cand oricare dintre ele nu este un Variant:
Daca |
Atunci |
Ambele expresii sunt numerice (Byte, Boolean, Integer, Long, Single, Double, Date, Currency sau Decimal), |
Se executa comparare numerica |
Ambele expresii sunt de tip String, |
Se executa comparare intre siruri. |
Una dintre expresii este de tip numeric si cealalta este un Variant care poate fi sau este un numar, |
Se executa comparare numerica. |
Una dintre expresii este de tip numeric si cealalta este un Variant ce contine un sir care nu poate fi convertit la un numar, |
Se produce eroarea "Type Mismatch". |
Una dintre expresii este de tip String si cealalta este orice Variant exceptand valoarea Null, |
Se executa comparare intre siruri. |
Una dintre expresii este Empty si celalalta este de tip numeric, |
Se executa comparare numerica, folosind 0 pentru expresia Empty. |
Una dintre expresii este empti si cealalta este de tip String, |
Se executa comparare de siruri, folosind sirul de lungime zero ('') pentru expresia Empty. |
Daca <expr1> si <expr2> sunt ambele expresii Variant, tipul lor de baza determina cum sunt ele comparate. Tabelul urmator precizeaza cum sunt comparate expresiile in functie de tipul de baza pentru Variant:
Daca |
Atunci |
Ambele expresii Variant sunt numerice, |
Se executa comparare numerica. |
Ambele expresii Variant sunt siruri de caractere, |
Se executa comparare de siruri. |
O expresia Variant este numerica iar cealalta ese un sir de caractere, |
Expresia numerica este mai mica decat expresia sir de caractere. |
O expresie Variant este Empty iar cealalta este numerica, |
Se executa comparare numerica, folosind 0 drept expresie Empty. |
O expresie Variant este Empty iar cealalta este un sir de caractere, |
Se executa comparare de siruri, folosind sirul de lungime zero ('') drept expresie Empty. |
Ambele expresii Variant sunt Empty |
Expresiile sunt egale. |
Cand un Single este comparat cu un Double, Double este rotunjit la precizia lui Single.
Daca un Currency este comparat cu un Single sau Double, Single sau Double este convertit la un Currency. In mod similar, daca un Decimal este comparat cu un Single sau Double, Single sau Double este convertit la un Decimal. Pentru Currency, orice valoare fractionara mai mica decat .0001 este posibil sa fie pierduta; pentru Decimal, orice valoare fractionara mai mica decat 1E-28 se poate pierde sau se poate produce o eroare de depasire. Valorile fractionare ce se pierd poate determina ca cele doua valori comparate sa fie egale cand in realitate ele sunt diferite.
Operatorul Like se foloseste la compararea a doua siruri de caractere. Sintaxa de utilizarea a acestui operator este:
<rezultat> <expC> Like <sablon>
unde:
<rezultat> |
Orice variabila numerica. |
<expC> |
Orice expresie sir de caractere. |
<sablon> |
Orice expresie sir de caractere care folosind conventiile prezentate in continuare specifica sablonul de concordanta. |
Observatii
Daca <expC> corespunde cu <sablon>, <rezultat> este True; daca nu exista corespondenta, <rezultat> este False. Daca fie <expC> fie <sablon> este Null, <rezultat> este Null.
Comportarea operatorului Like depinde de declaratia Option Compare. Metoda de comparare prestabilita a sirurilor de caractere pentru fiecare modul este Option Compare Binary.
Rezultate metodei Option Compare Binary in compararea sirurilor se bazeaza pe ordinea de sortare derivata din reprezentarea binara interna a caracterelor. Ordinea de sortare este determinata de codul de pagina. Exemplul urmator prezinta o ordine de sortare tipica:
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Rezultatele metodei Option Compare Text in compararea sirurilor se bazeaza ordinea de sortare textuala, care nu face diferenta dintre literele mari si mici, determinata de informatiile locale[1] ale sistemului. Daca setul de caractere anterior este sortat cu metoda Option Compare Text, rezultatul care se obtine este urmatorul:
(A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)
Sabloanele interne de corespondenta furnizeaza un instrument util pentru compararea sirurilor de caractere. In aceste sabloane puteti utiliza caracterele globale, liste de caractere sau intervale de caractere, in orice combinatie. Tabelul urmator tabel prezinta caracterele ce sunt permise in <sablon> si cum se folosesc ele:
Caracter |
Semnificatie |
Orice caracter singular. |
|
Zero sau mai multe caractere. |
|
Orice cifra (0-9) singulara. |
|
<lista_caractere>] |
Orice caracter singular din <lista_caractere>. |
<lista_caractere>] |
Orice caracter singular care nu este in <lista_caractere>. |
Un grup de unul sau mai multe caractere (<lista_caractere>) inclus intre paranteze drepte ([ ]) poate fi utilizat pentru a verifica corespondenta oricarui caracter singular din <expC> si poate include aproape taote codurile de caractere, inclusiv cifrele.
Nota Pentru a include in <lista_caractere> caracterele paranteza dreapta deschisa ([), semnul intrebarii (?), simbolul numarului (#) sau asteriscul (*), includeti-le intre pparanteze drepte. Paranteza dreapta inchisa (]) nu poate sa apara intr-o <lista_caractere>, dar ea poate fi folosita in afara grupului ca un caracter individual.
Specificarea unui domeniu de caractere se face folosind liniuta de unire (-) pentru a separa limita inferioara si cea superioara a unui interval in <lista_caractere>. Spre exemplu, [A-Z] va verifica daca in <expC> exista litere mari.
Operatorul Is se foloseste pentru a compara referintele a doua obiecte. Sintaxa de utilizare a operatorului este:
<rezultat> <obiect1> Is <obiect2>
unde:
<rezultat> |
Orice variabila numerica. |
<obiect1> |
Orice nume de obiect. |
<obiect2> |
Orice nume de obiect. |
Observatie
Daca <obiect1> si <obiect2> refera ambele acelasi obiect, <rezultat> este True; daca ele nu refera acelasi obiect, <obiect1> este False.
In Visual Basic 6.0 exista doi operatori de concatenare: + si &. Ei se folosesc pentru a uni doua siruri de caractere. Sintaxa unei expresii de concatenare este:
<rezultat> <expr1> & <expr2>
unde:
<rezultat> |
Orice variabila String sau Variant . |
<expr1> |
Orice expresie. |
<expr2> |
Orice expresie. |
Observatie
Daca o expresie (<expr1> sau <expr2>) nu este un sir de caractere, aceasta este convertita la un variant String.
Tipul de data pentru <rezultat> este String daca ambele expresii sunt expresii de tip sir de caractere; in caz contrar, <rezultat> este un variant String.
Daca ambele expresii sunt Null, <rezultat> este Null.
Daca numai una dintre expresii este Null, expresia respectiva este tratat ca fiind sir de lungime zero ('') cand se concateneaza cu cealalta expresie.
Orice expresie care este Empty este tratat ca un sir de lungime zero.
Operatorii logici se folosesc pentru a crea expresii logice. De regula, o expresie logica este formata din expresii relationale legate prin operatorii logici. Visual Basic 6.0 dispune de 6 operatori logici.
Operatorul And (SI logic) se foloseste pentru a executa conjunctia logica a doua expresii. Sintaxa folosita este:
<rezultat> <expr1> And <expr2>
unde:
<rezultat> |
Orice variabila numerica. |
<expr1> |
Orice expresie. |
<expr2> |
Orice expresie |
Observatii
Daca ambele expresii sunt evaluate la True, <rezultat> este True. Daca oricare dintre expresii este evaluata la False, <rezultat> este False. In urmatorul tabel se prezinta modul de determinare a valorii <rezultat>:
Daca <expr1> este |
Si <expr2> este |
<rezultat> este |
True |
True |
True |
True |
False |
False |
True |
Null |
Null |
False |
True |
False |
False |
False |
False |
False |
Null |
False |
Null |
True |
Null |
Null |
False |
False |
Null |
Null |
Null |
Operatorul And poate executa operatii de comparare asupra bitilor din pozitiile identice a doua expresii numerice si seteaza bitul corespunzator din <rezultat> astfel:
Daca bitul din <expr1> este |
Si bitul din <expr2> este |
Bitul din <rezultat> este |
Operatorul Eqv se foloseste pentru a executa o echivalenta logica intre doua expresii si are urmatoarea sintaxa:
<rezultat> = <expr1> Eqv <expr2>
unde:
<rezultat> |
Orice variabila numerica. |
<expr1> |
Orice expresie. |
<expr2> |
Orice expresie |
Observatii
Daca una dintre expresii este Null, <rezultat> este Null. Cand ambele expresii sunt diferite de Null, <rezultat> se determina astfe:
Daca <expr1> este |
Si <expr2> este |
<rezultat> este |
True |
True |
True |
True |
False |
False |
False |
True |
False |
False |
False |
True |
Operatorul Eqv executa o comparare pe bitii din pozitiile identice a doua expresii numerice si seteaza bitul corespunzator din <rezultat> astfel:
Daca bitul din <expr1> este |
Si bitul din <expr2> este |
Bitul din <rezultat> este |
Operatorul Imp se utilizeaza pentru a executa o implicatie logica cu doua expresii si are urmatoarea sintaxa:
<rezultat> <expr1> Imp <expr2>
unde:
<rezultat> |
Orice variabila numerica. |
<expr1> |
Orice expresie. |
<expr2> |
Orice expresie |
Obseravtii:
Modul de determinare al rezultatului operatieie este prezentat in tabelul urmator:
Daca <expr1> este |
Si <expr2> este |
<rezultat> este |
True |
True |
True |
True |
False |
False |
True |
Null |
Null |
False |
True |
True |
False |
False |
True |
False |
Null |
True |
Null |
True |
True |
Null |
False |
Null |
Null |
Null |
Null |
Operatia de implicare logica (Eqv) aplicata asupra bitilor din pozitiile identice a doua expresii numerice seteaza bitul corespunzator din <rezultat> astfel:
Daca bitul din <expr1> este |
Si bitul din <expr2> este |
Bitul din <rezultat> este |
Operatorul Not se foloseste pentru a nega logic o expresie si are sintaxa:
<rezultat> Not <expr>
unde:
<rezultat> |
Orice variabila numerica. |
<expr> |
Orice expresie. |
Remarks
Rezultatul unei negari logice se determina astfel:
Daca <expr1> este |
<rezultat> este |
True |
False |
False |
True |
Null |
Null |
In plus, operatorul Not inverseaza valorile bitilor oricarei vriabile si seteaza btii corespunzatori din <rezultat> astfel:
Daca bitul din <expr1> este |
Bitul din <rezultat> este |
Operatorul Or se foloseste pentru a executa o disjunctie logica asupara a doua expresii si are urmatoarea sintaxa:
<rezultata> <expr1> Or <expr2>
unde:
<rezultat> |
Orice variabila numerica. |
<expr1> |
Orice expresie. |
<expr2> |
Orice expresie |
Observatii
Rezultatele unei operatii de disjunctie logica sunt prezentate in urmatorul tabel:
Daca <expr1> este |
Si <expr2> este |
<rezultat> este |
True |
True |
True |
True |
False |
True |
True |
Null |
True |
False |
True |
True |
False |
False |
False |
False |
Null |
Null |
Null |
True |
True |
Null |
False |
Null |
Null |
Null |
Null |
Operatorul Or executa o comparare pe bitii din pozitiile identice a doua expresii numerice si seteaza bitul corespunzator din <rezultat> astfel:
Daca bitul din <expr1> este |
Si bitul din <expr2> este |
Bitul din <rezultat> este |
Operatorul Xor executa o operatie logica SAU exclusiv asupra a doua expresii si are urmatoarea sintaxa:
[<rezultat> ] <expr1> Xor <expr2>
unde:
<rezultat> |
Orice variabila numerica. |
<expr1> |
Orice expresie. |
<expr2> |
Orice expresie |
Observatii
Rezultatul unei operatii logice SAU exclusiv in functie de valorile celor doua expresii este prezentat in urmatorul tabel:
Daca <expr1> este |
Si <expr2> este |
<rezultat> este |
True |
True |
False |
True |
False |
True |
False |
True |
True |
False |
False |
False |
Operatorul Xor executa o comparare pe bitii din pozitiile identice a doua expresii numerice si seteaza bitul corespunzator din <rezultat> astfel:
Daca bitul din <expr1> este |
Si bitul din <expr2> este |
Bitul din <rezultat> este |
Daca intr-o expresie se intalnesc mai multe operatii, fiecare este evaluata si rezolvata intr-o ordine predeterminata, numita precedenta operatorilor.
Cand expresiile contin operatori din mai mult de o categorie, operatorii aritmetici sunt evaluati primii, apoi urmeaza operatorii relationali iar ultimii evaluati sunt operatorii logici. Operatorii relationali au toti aceeasi prioritate (precedenta); adica, ei sunt eavluati de la stanga spre dreapta, in ordinea in care apar. Operatorii aritmetici si logici sunt evaluati tinand cont de urmatoarea ordine de prioritate:
Aritmetic |
Relational |
Logic |
Exponentiere (^) |
Egalitate (=) |
Not |
Negatiie (-) |
Inegalitate (<>) |
And |
Inmultire si impartire reala (*, /) |
Mai mic decat (<) |
Or |
Impartire intreaga () |
Mai mare decat(>) |
Xor |
Modulul aritmetic (Mod) |
Mai mica decat sau egal cu (<=) |
Eqv |
Adunare si scadere (+, -) |
Mai mare decat sau egal cu (>=) |
Imp |
Concatenare siruri (&) |
Like | |
Is |
Daca intr-o expresie se gasesc doua sau mai multe operatii care au aceeasi prioritate (inmultire si impartire, adunare sau scadere etc.), ele sunt evaluate de la stanga spre dreapta, asa cum se intalnesc.
Pentru a schimba ordinea de evaluare a operatiilor intr-o expresie se folosesc parantezele rotunde. Operatiile din interiorul parantezelor sunt executate intotdeauna inaintea celorlalte. In interiorul parantezelor se tine cont de prioritatea operatorilor.
Operatorii de concatenare (& si +) nu sunt operatori aritmetici, dar ca prioritate, ei urmeaza dupa operatorii aritmetici si preced toti operatorii de comparatie.
Operatorul Like este egal ca prioritate cu toti operatorii relationali.
Operatorul Is este un operator de comparare a referintelor unui obiect. Acesta nu compara obiectele sau valorile acestora, ci doar verifica daca doua referinte de obiect refera acelasi obiect.
Scrierea unui program care sa nu-si modifice cursul sau fara a executa in mod repetat un grup de actiuni este practic imposibil. Prelucrarea informatiilor folosind un calculator se bazeaza in mara majoritate a cazurilor pe testarea unor conditii (luarea unor decizii) si repetarea unor actiuni (ciclarea).
Pentru a dirija executia programului in functie de indeplinirea anumitor conditii, Visual Basic pune la dispozitia programatorului doua instructiuni de ramificare: instructiunea conditionala If . End If, functia Iif() si instructiunea de selectie multipla Select Case . End Select
Sintaxa instructiunii IF este:
IF <conditie> THEN
<secventa instructiuni A>
ELSE
<secventa instructiuni B>]
END IF
unde <conditie> poate fi o expresie numerica sau sir de caractere, care poate fi evaluata la adevarat (True) sau fals (False).
Daca <conditie> este
adevarata, se executa <secventaA>; in caz
contrar, se executa <secventaB> conditie Secventa
B Secventa
A Nu Da IF <conditie> THEN <secventaA> <secventaB>
ELSE
END IF
a) Avand ambele ramuri
Procedura urmatoare calculeaza si afiseaza radacina unei ecuatii de gradul I.
Sub Ex_IF_1(a, b)
Dim Rad
If a <> 0 Then
Rad = -b / a
MsgBox "Rezultatul ecuatiei :" & Str(a) & "x + " & _
Str(b) & "=0" & "este: " & Str(Rad)
Else
MsgBox "Nu se poate calcula radacina ecuatiei"
End If
End Sub
b) Avand numai ramura "adevarat"
Procedura urmatoare calculeaza si afiseaza radacina unei ecuatii de gradul doi in cazul in care discriminantul este zero.
Sub Ex_IF_2(a, b, c)
Dim delta, x
Delta = b * b - 4 *a * c
MsgBox "Discriminantul este: " & Str(delta)
If Delta = 0 Then
x = - b / 2 / a
MsgBox "Radacina ecuatiei cand discriminantul " _
& "este zero este: " & Str(x)
End If
conditie Secventa A Nu Da IF <conditie> THEN <secventaA> Daca <conditie> este
adevarata, se executa <secventaA>; in caz
contrar, se executa prima instructiune de dupa END IF.
END IF
Daca <conditie> nu este adevarata, se
executa <secventaB> in caz
contrar, se executa prima instructiune de dupa END IF. conditie SecventaB Nu Da IF <conditie> THEN <secventaB>
ELSE
END IF
Procedura urmatoare calculeaza valoarea cu TVA, folosind o instructiune If cu o ramura Else.
Sub Ex_IF_3(valoare As Double, ScutitTVA As Boolean, CotaTVA As Single)
If ScutitTVA Then
Else
MsgBox "Valoarea TVA: " & Str(valoare * CotaTVA)
valoare = valoare * (1 + CotaTVA)
End If
End Sub
Este indicat ca intr-o asemenea situatie, pentru a nu complica inutil programul, sa se foloseasca urmatoarea varianta a instructiunii IF:
IF NOT <conditie> THEN
<secventa instructiuni A>
END IF
In acest caz procedura anterioara devine:
Sub Ex_IF_3(valoare As Double, ScutitTVA As Boolean, CotaTVA As Single)
If Not ScutitTVA Then
MsgBox "Valoarea TVA: " & Str(valoare * CotaTVA)
valoare = valoare * (1 + CotaTVA)
End If
End Sub
d) Instructiune IF imbricata
Sintaxa unei instructiuni IF imbricate este:
IF <conditie1> THEN
[<secventaA>]
ELSEIF <conditie2> THEN
[<secventaB>]]
ELSE
[sceventaN>]]
END IF
Sintaxa instructiunii IF imbricate prezentata in figura urmatoare este:
IF NOT <conditie1> THEN
<secventa instructiuni A>
ELSEIF <conditie2> THEN
<secventa instructiuni B>
ELSEIF <conditie3> THEN
<secventa instructiuni C>
ELSE
<secventa instructiuni D>
END IF
Functia urmatoare calculeaza impozitul pe retributie tinand cont de urmatoarele cote de impozitare:
Transa de salariu |
Cota impozit |
Peste 3000000 |
Function Impozit(salariu As Double, sporuri As Double) As Double
Dim total As double, suma As Double
suma = salariu + sporuri
If suma >= 0 And suma <= 1000000 Then
impozit = suma * 0.1
ElseIf suma >= 1000000 And suma <= 2000000 Then
impozit = 150000 + (suma - 1000001) * 0.15
ElseIf suma > 2000000 And suma <= 3000000 Then
impozit = 400000 + (suma - 2000001) * 0.2
Else
impozit = suma * 0.3
End If
End Sub
SecventaA conditie2 conditie1 Nu Da SecventaB Da Nu conditie2 SecventaC Secventa D Nu Da Daca <conditie1> este
adevarata, se executa <secventaA>, altfel se
trece la evaluarea <conditie2> Daca <conditie2> este
adevarata, se executa <secventaB>, altfel se
trece la evaluarea <conditie3> Daca <conditie3> este
adevarata, se executa <secventaC>, altfel se
executa <secventaD>
Functia IIF poate fi utilizata intr-o fraza SQL, in proprietatea Control Source a unui control de pe un formular/raport sau oriunde o variabila poate avea una din doua valori in functie de indeplinirea sau nu a unei conditii. Sintaxa apelului functiei este:
IIF(<expresie_test> <expresie_adevarat> <expresie_fals>
Functiile IIF pot fi imbricate, dar in acest caz se ingreuneaza interpretarea programului.
Sub Ex_IIF(salariu As Double, TipSalariat As String, _
vechime As Single)
Dim sporFidel As Double
Dim ajutCopil As Double
sporFidel = IIf(TipSalariat = "permanent" And vechime >= 10, _
0.01 * vechime, 0)
ajutCopil = IIf(TipSalariat = "permanent", 0.1 * salariu, 0)
End Sub
Daca evaluarea <expr_selector> este egala
cu una din evaluarile expresiilor din <lista_expri_caz_1>, se executa <secventaA>, altfel se trece la evaluarea listei de
expresii a cazului urmator. Daca evaluarea <expr_selector> este egala
cu una din evaluarile expresiilor din <lista_expr_caz_2>, se executa <secventaB>, altfel se trece la evaluarea listei de
expresii a cazului urmator. Daca nici o evaluare a <expr_selector> nu este
egala cu una din evaluarile expresiilor din <lista_expr_caz_i>, se executa <secventaN>, daca exista si se trece la prima
instructiune de dupa END SELECT
Sintaxa instructiunii este:
SELECT CASE <expr_selector>
CASE <lista_expi_caz_1>
<secventaA>
CASE <lista_expri_caz_2>
<secventaB>
CASE <lista_expri_caz_3>
<secventaC>
CASE ELSE
<secventaN>]
END SELECT
Observatii
< selector> SecventaA SecventaB SecventaX
=<caz_1> =<caz_2> =<nici un caz>
Urmatoarea functie calculeazaa impozitul pe retributie.
Function Impozit(salariu As Double, sporuri As Double) As Double
Dim suma As Double
suma = salariu + sporuri
Select Case suma
Case Is < 0
Impozit = -1
MsgBox "Retributia nu poate fi negativa"
Case 0 To 1000000 ' Salariu+sporuri mai mici ca 1000000
Impozit = suma * 0.1
Case 1000001 To 200000
Impozit = 150000 + (suma - 1000001) * 0.15
Case 2000001 To 300000
Impozit = 400000 + (suma - 2000001) * 0.2
Case Else
Impozit = suma * 0.3
End Select
End Function
In principiu, structura repetitiva presupune executarea de mai multe ori a unei secvente de instructiuni in functie de o conditie. in functie de locul unde se gaseste conditie (la inceputul sau la sfarsitul structurii) exista structuri repetitive conditionate anterior (numite si structuri repetitive cu test initial) si structuri repetitive conditionate posterior (numite si structuri repetitive cu test final).
In Visual Basic pentru realizarea structurilor repetitive exista urmatoarele instructiuni:
WHILE . WEND
DO . LOOP
FOR . NEXT
FOR EACH . NEXT
Este o structura conditionata anterior si are urmatoarea sintaxa:
WHILE <conditie>
<secventa_instructiuni>
WEND
unde <conditie> poate fi o expresie numerica sau sir, care este evaluata la adevarat sau fals.
Mod de executie: se evalueaza <conditie> si daca este adevarata se executa secventa de instructiuni, in caz contrar se trece la instructiunea ce urmeaza dupa Wend. Dupa ce s-a executat o data secventa de instructiuni se trece din nou la evaluarea expresiei <conditie> s.a.m.d.
<conditie> Secventa
instructiuni Nu Da
Urmatoarea procedura incarca un vector cu 51 de elemente si afiseaza patratul acestora in fereastra Immediate Window.
Sub Ex_While()
Dim vector(50) As Integer ' Tablou pentru stocarea a 51 intregi
Dim contor As Integer ' Variabila de control a ciclului
contor = 0
' Se incarca vecorul cu cele 51 de valori
While contor <= 50
vector(contor) = contor
contor = contor + 1
Wend
' Se citesc valorile, se inmultesc intre ele si se afiseaza
contor = 0
While contor <= 50
Debug.Print vector(contor) * vector(contor)
Wend
End Sub
Instructiunea Do . Loop are doua variante:
DO WJILE UNTIL <conditie>
<secventa_instructiuni>
EXIT DO
<secventa_instructiuni>
LOOP
Observatii
<conditie> |
Secventa instructiuni |
Nu |
Da |
<conditie> |
Secventa instructiuni |
Da |
Nu |
Sub Ex_Do_While_Until_Loop()
Dim vector (50) As Integer
Dim contor As Integer
contor = 0
Do While contor <= 50 ' Cat timp contor este mai mic sau egal cu
' 50 se executa instructiunile ciclului. Se iese
' din structura cand contor este mai mare ca 50
vector(contor) = contor
contor = contor + 1
Loop
Contor = 0
Do Until contor > 50
Debug.Print vector(contor)
contor = contor + 1
Loop
End Sub
DO
<secventa instructiuni>
[EXIT DO
<secventa instructiuni>
LOOP WHILE|UNTIL <conditie>
Observatii:
Secventa instructiuni |
conditie |
Nu |
Da |
Sub Ex_Do_Loop_While_Until()
Dim vector(50) As Integer
Dim contor As Integer
contor = 0
Do
vector(contor) = contor
contor = contor + 1
Loop While contor <= 50
contor = 0
Do
Debug.Print vector(contor)
contor = contor + 1
Loop Until contor > 50
End Sub
In exemplu urmator se incarca o matrice cu 5 linii si 5 coloane. Pe fiecare linie sunt notele (4) si mediile celor 5 studenti.
Sub Do_Note()
Dim stud(4,4) As Single, x As Integer, y As Integer, m As Single
' x studentul, y=0-3 notele, y=4 media
x = 0
Do While x <= 4
m = 0
y = 0
Do Until y > 3
Do ' Evitarea introducerii unor note incorecte
Stud(x, y) = InputBox("Tasteaza nota la disciplina" _
& ": " & Str(y) & " pentru studentul: " & Str(x))
Loop Until (stud(x, y) <= 10 And stud(x, y) > 0)
m = m + stud(x, y) ' Insumarea notelor
y = y + 1
Loop
Stud(x, 4) = m / 4 ' Calculul mediei
x = x + 1
Loop
x = 0
Do ' Citirea notelor si afisarea studentilor cu media mai mare de 8
y = 0
Do Until y <= 3
If stud (x, 4) < 8 Then
Exit Do
End If
If y = 0 Then
Debug.Print "Notele studentului ", x
End If
Debug.Print stud(x, y)
y = y + 1
Loop
x = x + 1
Loop Until x > 4
End Sub
Sintaxa instructiunii este:
FOR <contor>=<val_initiala> TO <val_finala> [STEP <val_pas>]
<secventa instructiuni>
EXIT FOR
<secventa instructiuni>
NEXT [<contor>]
Unde:
Secventa de instructiuni din aceasta structura se repeta de un numar de ori, plecand-se de la valoarea initiala a variabilei contor, pana la valoarea finala a acesteia, incrementandu-se automat variabila contor cu +1 dupa fiecare executie, daca nu este prezenta clauza Step, care sa precizeze valoarea pasului de incrementare/decrementare.
Exemple:
Sub Ex_For1()
' Valoare initiala, valoare finala > 0; pasul este implicit +1
Dim intContor As Integer
For intContor = 0 To 9
Debug.Print "Contorul are valoarea :" & intContor
Next intContor
End Sub
Sub Ex_For2()
' Valoarea initiala > 0, valoarea finala > 0, pasul este -1
Dim intContor As Integer
For intContor = 4 To -9 Step -1
Debug.Print "Contorul are valoarea :" & intContor
Next
End Sub
Sub Ex_For3()
' Valoarea initiala, valoarea finala < 0, pasul -1
Dim intContor As Integer
For intContor = -4 To -9 Step -1
Debug.Print "Contorul are valoarea :" & intContor
Next
End Sub
Sub Ex_For2()
' Calculeaza si afiseaza patratele numerelor de la 100 inspre 1,
' dar numai daca acestea sunt mai mari de 5000
Dim intContor As Integer
For intContor = 100 To 1 Step -1
If (intContor * intContor) < 5000 Then
Exit For
Else
Debug.Print "Patratul contorului " & intContor & _
" este : " & intContor * intContor
End If
Next
End Sub
Informatii locale - Setul de informatii ce corespunde unui limbaj si unei tari stabilite. Parametrii locali ai codului afecteaza cuvintele cheie, separatorii listei si zecimali, formatul datelor calendaristice si ordinea de sortare a caracterelor. Parametrii locali se stabilesc in caseta de dialog Regional Settings Properties.
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |