Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » scoala » informatica
Instructiunile limbajului Visual Basic

Instructiunile limbajului Visual Basic


Instructiunile limbajului Visual Basic

Instructiunea de atribuire

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 constanta, o expresie matematica sau o alta variabila.

Exemple

Dim strNume As String, intVarsta As Integer

strNume = "Ionescu Vasile"

intVarsta = 45

Operatorii limbajului Visual Basic

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.

Operatori aritmetici

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 ^

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 *

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 /

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

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

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 +

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 -

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.

Operatori relationali

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

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

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.

Operatori de concatenare

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.

Operatori logici

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

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

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

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

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

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

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

Precedenta operatorilor

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.

Structuri de control

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).

Structuri de ramificare

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

Instructiunea conditionala If . End If

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>

ELSE

<secventaB>

END IF
Variante ale instructiunii 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>

END IF

Daca <conditie> este adevarata, se executa <secventaA>; in caz contrar, se executa prima instructiune de dupa END IF.

End Sub

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

ELSE

<secventaB>

END IF
c) Avand numai ramura "fals"

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

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

Instructiunea de selectie multipla Select Case . End Select

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

Este o structura care permite selectia din mai multe alternative posibile. Principiul de functionare este urmatorul: se determina valoarea expresiei <expr_selector> si se executa secventa de instructiuni indicata de <expr_caz_i> a carei valoare este egala cu valorea expresiei selectoare.

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

  • <expr_selector> poate fi o expresie numerica sau sir de caractere.
  • <lista_expr_caz> poate fi o lista de expresii numerice sau sir de caractere (<expr_caz>) separate prin caracterul "," (virgula). De asemenea, intr-o <expr_caz> se pot utiliza operatorii IS si TO in urmatoarea sintaxa:
    • <expr1> TO <expr2> - se testeaza daca valoarea <expr_selector> se afla intre <expr1> si <expr2>.
    • IS <operator_comparare> <expr> - se testeaza daca <expr_selector> satisface conditia impusa de <operatorul_comparare>.

< 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

Structuri repetitive

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

a. Instructiunea WHILE . WEND

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

b. Instructiunea Do . Loop

Instructiunea Do . Loop are doua variante:

DO WJILE UNTIL <conditie>

<secventa_instructiuni>

EXIT DO

<secventa_instructiuni>

LOOP

Observatii

  • <conditie>

    Secventa instructiuni

    Nu

    Da

    In varianta Do While . Loop se repeta secventa de instructiuni atata timp cat valoarea expresiei <conditei> este True. Daca valoarea ei este False se trece la executarea primei instructiuni ce urmeaza dupa Wend. Aceasta varianta functioneaza la fel ca si While . Wend, cu deosebirea ca permite folosirea clauzei Exit Do pentru a forta iesirea din structura repetitiva.
  • <conditie>

    Secventa instructiuni

    Da

    Nu

    In varianta Do Until . Loop secventa de instructiuni se repeta pana cand valoarea expresiei <conditie> devine True. Deci secventa de instructiuni se executa atata timp cat valoarea expresiei <conditie> este False.
  • In ambele variante este posibil ca secventa de instructiuni sa nu se executa niciodata.
  • Ambele variante sunt structuri repetitive conditionate anterior.

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

    In varianta Do . Loop While secventa de instructiuni se repeta atata timp cat valoarea expresiei <conditie> este True.
  • In varianta Do . Loop Until secventa de instructiuni se repeta pana cand valoarea expresiei <conditie> devine adevarata. Deci secventa de instructiuni se executa atata timp cat valoarea expresiei <conditie> este False.
  • In ambele variante, secventa de instructiuni se executa cel putin o data.
  • Ambele variante sunt structuri repetitive conditionate posterior.

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

c. Instructiunea For . Next

Sintaxa instructiunii este:

FOR <contor>=<val_initiala> TO <val_finala> [STEP <val_pas>]

<secventa instructiuni>

EXIT FOR

<secventa instructiuni>

NEXT [<contor>]

Unde:

  • <val_initiala>, <val_finala> reprezinta valoarea initiala, respectiv valoarea finala pentru <contor>.
  • <val_pas> reprezinta valoarea pasului de incrementare/decrementare pentru variabila <contor>, implicit pasul este +1.
  • <val_initiala>, <val_finala>, <val_pas> pot fi si rezultatul evaluarii unor expresii.
  • Comanda Exit For forteaza iesirea din structura.

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


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.