Informatica
Elementele limbajului de programare Visual BasicElementele limbajului de programare Visual Basic 1 Unele reguli de scriere O proprietate esentiala a unui obiect in Visual Basic este numele (Name). Numele este folosit pentru a referi un obiect particular in cadrul codului. Numele obiectului trebuie sa fie sugestiv si sa arate, in cazul controalelor, grupul de controale caruia ii apartine. Ca urmare, s-a adoptat conventia conform careia un nume trebuie sa fie format dintr-un prefix din trei litere (dat de notatia ungara) si numele propriu-zis cu semnificatie pentru utilizarea obiectului. Prefixul numelui (Tabelul 1) indica, in mod unic, grupul de controale din care face parte. Tabelul 1 Stabilirea numelor unor obiecte in Visual Basic
Numele obiectelor pot avea maxim 40 de caractere, trebuie sa inceapa cu o litera si pot contine numai litere, numere si underscore ( _ ). In cadrul mai larg al intregului limbaj Visual Basic, cu setul de caractere ASCII extins ce formeaza alfabetul acestui limbaj, se construiesc literalii si identificatorii. Literalii sunt compusi din siruri de caractere. Literalii pot fi de tipul literali siruri de caractere si sunt scrisi intre ghilimele, si de tipul literali numerici - zecimali (in baza 10), octali (in baza 8), hexazecimali (in baza 16). Identificatorii pot fi predefiniti (cuvinte rezervate si cuvinte-cheie ce desemneaza instructiuni, functii, operatori, metode) sau pot fi definiti de utilizator (ce desemneaza obiecte, variabile, tipuri de date, constante, etichete, proceduri). Instructiunile specifice limbajului Visual Basic se obtin prin combinarea literalilor, identificatorilor si cuvintelor rezervate. Pentru lizibilitatea codului, fiecare instructiune se scrie pe o linie separata. Daca o instructiune nu incape pe o linie, se poate continua pe linia urmatoare prin caracterul underscore (_). Se pot folosi 20 astfel de linii de continuare a unei instructiuni. Numele sunt folosite la setarea proprietatilor la momentul executiei si in stabilirea numelor procedurilor pentru evenimentele obiectelor. Setarea proprietatilor la momentul executiei se obtine prin scrierea unui cod. Formatul acestui cod se scrie prin notarea cu punct si este: Nume obiect. proprietate = noua valoare (Object Name. Property = New value). In Visual Basic, numele obiectelor sunt utilizate in setarea unui cadru de lucru (framework) corespunzator procedurilor eveniment, pentru scrierea codului. Formatul fiecarei subrutine (in Visual Basic nu exista program principal; toate procedurile obiectelor sunt subrutine) este: Private Sub Object Name_Event (Optional Arguments) . End Sub. Formularului i se ataseaza un obiect. Visual Basic construieste automat un cadru de lucru (framework) pentru fiecare dintre procedurile eveniment. Utilizatorul care construieste aplicatia trebuie sa scrie codul procedurilor eveniment la care corespunde aplicatia. 2 Tipuri de date Tipurile de date reprezinta natura datelor in cadrul unui limbaj de programare. In limbajul Visual Basic, tipurile de date sunt predefinite (standard) sau definite de utilizator. In tabelul 2 sunt prezentate tipurile de date predefinite cele mai utilizate. Tipurile de date definte de utilizator se obtin prin combinarea mai multor tipuri de date existente in structuri de date. Declararea tipurilor de date definite de utilizator se efectueaza in sectiunea Declaration (din modulul standard) cu Type.End Type care are sintaxa generala: [Private/Public] Type nume_tip_data_utilizator Nume_1 As tip_data_1 Nume_2 As tip_data_2. Nume_n As tip_data_n End Type Tipurile de date definite de utilizator se declara la nivelul modulelor standard, de clasa sau formular (numai Private). Aceste tipuri de date nu pot fi declarate la nivelul unei proceduri. Tabelul 2 Tipurile de date predefinite in Visual Basic
De exemplu, tipul de date definite de utilizator Client are urmatoarea structura: Type Client Nume_client As String *20 Prenume_client As String *20 Adresa_client As Adresa CNP_client As String *13 End Type unde tipul de date definit de utilizator Adresa are structura: Type Adresa Localitate As String *20 Strada As String *20 Numar As Integer Judet As String *20 End Type 3 Variabile si constante Variabilele care se folosesc intr-un program desemneaza locatii de memorie in care se stocheaza valori ce se modifica pe timpul executiei programului. O variabila in limbajul Visual Basic are un nume (identificator) format astfel: maxim 40 de caractere; numele include: litere, numere, underscore (-): primul caracter trebuie sa fie o litera; nu se pot folosi ca nume de variabile, cuvintele rezervate, care fac parte din setul de cuvinte cheie al limbajului. Corespunzator variabilei care se doreste a fi creata si utilizata, utilizatorul poate sa stabileasca tipul de data asociat prin folosirea unui sufix de natura tip de data care va putea fi stocat sau prelucrat prin intermediul respectivei variabile. In tabelul 3.4 s-au prezentat tipurile de date, sufixul asociat si intervalul de valori. Exista trei moduri de declarare a unei variabile: a) Prin lipsa (din oficiu). Daca variabila nu este definita in nici un mod, ea este presupusa Variant, adica un tip de data Visual Basic care poate contine: valori numerice, siruri de caractere sau data calendaristica. b) Implicit. Declararea implicita este data prin folosirea sufixului corespunzator. De exemplu, o variabila de tip String (sir de caractere) poate fi declarata implicit astfel: Material$ = "Cherestea" iar o variabila de tip Integer se poate declara implicit astfel: Cantitatea% = 273 c) Explicit. Acest mod de declarare a unei variabile prezinta mai multe avantaje: asigura efectuarea unui calcul corect prin intermediul instructiunilor care utilizeaza variabilele respective si permite identificarea, gestionarea corecta a aparitiei literelor mari sau a literelor mici in numele variabilelor. Datorita acestor avantaje, se prefera lucrul cu tipurile de variabile explicite. Pentru a putea lucra cu variabile declarate explicit trebuie sa fie cunoscut domeniul de valabilitate si anume:
1 - domeniul procedurilor; 2 - domeniul procedurilor in care variabilele se declara static; 3 - domeniul formularelor si modulelor; 4 - domeniul nivelului global. De exemplu, pentru domeniul procedurilor, variabilele sunt declarate folosind cuvantul cheie Dim: Dim Denumire_material As String Dim Cantitate As Integer Dim Pret_unitar As Single. Variabilele declarate la nivelul procedurilor isi vor pastra valorile numai pe timpul rularii procedurilor respective. Din acest motiv se mai numesc si variabile locale. Pentru ca variabilele sa-si pastreze valorile si dupa terminarea procedurii, se foloseste domeniul procedurilor in care variabilele se declara static, cuvantul-cheie Dim fiind inlocuit cu Static. De exemplu: Static Denumire_material As String Static Cantitate As Integer Static Pret_unitar As Single. Pentru domeniul domeniul formularelor si modulelor, variabilele isi mentin valorile la nivelul formularului (modulului), relativ la toate procedurile prin declararea variabilelor cu Dim, dar in partea de declaratii a obiectului general, in fereastra de cod a formularului. Pentru domeniul domeniul nivelului global, o variabila este disponibila tuturor procedurilor prezentate in aplicatie, prin declararea in partea de declaratii a obiectului general din fereastra de cod a unui modul cu ajutorul cuvantului cheie Global. De exemplu: Global Nr_factura As Long Global Data_factura As Date. In cazul mai multor variabile cu acelasi nume, variabilele locale au valabilitate numai in cadrul procedurilor. La parasirea acestor proceduri se folosesc variabilele cu acelasi nume, dar definite la nivel superior. Procedura de introducere a acestor variabile globale este urmatoarea: se executa dublu-click oriunde in fereastra formularului pentru a deschide fereastra de editare a codului (sau se selecteaza optiunea View Code din fereastra Project); se declara variabilele din formular astfel: Option Explicit (forteaza declararea variabilelor) Global Nr_factura As Long Global Data_factura As Date. Constante simbolice utilizate in Visual Basic In cele mai multe situatii, functiile si obiectele limbajului Visual Basic necesita argumente pentru efectuarea operatiilor specifice, argumente care reprezinta constante numerice. Acestea sunt greu de interpretat din punct de vedere al utilizatorului. Pentru a le face inteligibile, limbajul Visual Basic asigura nume celor mai utilizate valori si acestea se numesc constante simbolice. De exemplu, pentru setarea fondului formularului frmMat pe culoarea albastra se poate scrie: frmMat. Back Color = 0XFF0000 sau, folosind constanta simbolica pentru albastru: frmMat. Back Color = VBBlue Utilizatorul isi poate defini propriile constante ca de exemplu: const TVA = 0.19. Constantele de utilizator se scriu cu litere mari, pentru a le distinge de variabile. Domeniul de valabilitate al unei constante este similar cu cel al variabilelor. 4 Instructiuni Visual Basic 4.1 Construirea expresiilor Cea mai simpla instructiune este cea de atribuire, formatul ei este: Let variabila = expresie. De exemplu: Let Vmftva = Cant *Pu Let Vfftva =Vfftva + Vmftva Let Nume_client = "Georgescu Constantin" Utilizatorul poate tasta sau nu cuvantul Let dar este obligat sa exprime numele variabilei si expresia pe baza careia se deduce continutul. Vmftva = Cant *Pu Vfftva =Vfftva + Vmftva Nume_client = "Georgescu Constantin" Instructiunile se scriu de obicei pe o singura linie fara delimitator. Pentru a putea scrie mai multe instructiuni pe o linie se foloseste separatorul ":". Observatie: se recomanda folosirea atenta a acestui delimitator cand este folosita structura If .End If. Daca o instructiune este foarte lunga, ea poate continua pe urmatoarea linie, folosind caracterul de continuare underscore "_". De exemplu: Print Tab(2); 'COD_MATERIAL'; Tab(20); 'DEN_MATERIAL'; Tab(41); 'CANT'; _ Tab(48); 'PRET_UNITAR'; Tab(70); 'VAL_M_FARA_TVA'; Tab(100); _ 'VAL_M_CU_TVA' Comentariile incep cu cuvantul cheie Rem sau "' ". De exemplu: Rem Acesta reprezinta un comentariu ' Acesta reprezinta un exemplu de comentariu. 4.2 Operatori Visual Basic Operatorii Visual Basic, in ordinea claselor de precedenta, sunt prezentatti in tabelul 3. Precedenta operatorilor (clasele de precedenta) se refera la ordinea in care se executa operatiile intr-o expresie care contine mai multe tipuri de operatori. Primii sunt executati operatorii de concatenare, dupa care urmeaza operatorii arithmetic, operatorii de comparare si, la sfarsit, operatorii logici. Operatorii pot fi unari (se aplica unui singur operand, de exemplu, Not) sau binari (prezinta doi operatori, de exemplu, +. -, *, /, And, Or etc.). 4.3 Functii Visual Basic Functia (Function) reprezinta o multime ordonata de instructiuni creata in scopul indeplinirii unei sarcini (task) bine precizata si repetabila. Functia returneaza un singur rezultat. Functiile Visual Basic sunt predefinite sau definite de utilizator. Visual Basic asigura o biblioteca variata de functii predefinite. In tabelul 4 sunt prezentate principalele functii predefinite specifice limbajului Visual Basic. Tabelul 3 Clasele de precedenta ale operatorilor in Visual Basic
Tabelul 4 Principalele functii predefinite ale limbajului Visual Basic
4.4 Implementarea structurilor de control al executiei unui program S-au prezentat cele trei structuri de control fundamentale: structura de control secventiala (liniara), structurile de control alternative (cu ramificatii) si structurile de control repetitive (de ciclare). Tuturor acestor structuri de control fundamentale le sunt asociate instructiuni specifice in limbajul de programare Visual Basic, cu ajutorul carora poate fi controlata logica de executie a oricarei secvente de program in Visual Basic. Acestor instructiuni li se alatura comenzile asociate operatiunilor de intrare/iesire specifice introducerii datelor de intrare, respectiv extragerii rezultatelor prelucrarilor, precum si instructiunile de transfer. Instructiuni alternative (sau cu structura alternativa) Instructiunea If - cea mai simpla forma a acestei instructiuni este: If conditie Then instructiune De exemplu: If TVA=0.19 Then Vmctva=Vmftva + TVA * Vmftva Cand in instructiunea If, dupa cuvantul cheie Then urmeaza mai multe instructiuni, sintaxa generala a instructiunii este: If conditie Then Secventa de instructiuni End If De exemplu: If TVA=0.19 Then Vmctva=Vmftva + TVA * Vmftva Vfctva = Vfctva + Vmctva Print Tab(70); Vmctva; Tab(100); Vfctva End If O alta forma a instructiunii If este: If .Then . Else .End If. De exemplu: If TVA = 0.19 Then Vmctva=Vmftva + TVA * Vmftva Vfctva = Vfctva + Vmctva Print Tab(70); Vmctva; Tab(100); Vfctva Else Print "TVA diferit de 19%" End If Instructiunea Select Case Instructiunea Select Case se foloseste in cazul cand sunt precizate mai multe selectii. Sintaxa generala a instructiunii este urmatoarea: Select Case variabila Case Is variabila sau expresie instructiuni . Case Is variabila sau expresie instructiune Case Else instructiune End Select De exemplu, pentru selectia persoanelor dupa categoria de varsta (Categoria_varsta) se procedeaza astfel: Select Case Varsta Case Is 5 Categoria_varsta = "Copii sub 12 ani" Case Is 13 TO 19 Categoria_varsta = "Adolescenti" Case Is 20 TO 35, 50, 60 TO 65 Categoria_varsta = "Adulti" Case Is > 65 Categoria_varsta = "Batrani" Case Else Categoria_varsta = "Alte categorii" End Select Instructiuni repetitive Ciclarea este asigurata prin formatul general Do . Loop. Ciclarile implementeaza operatiile care se repeta de un anumit numar de ori, ciclarea repetandu-se pana cand se indeplineste o conditie specificata, intalnita la inceputul sau sfarsitul ciclarii. Instructiuni care implementeaza structuri de control repetitive conditionate anterior Din aceasta categorie fac parte instructiunile Do .Loop si While .Wend care au urmatoarele sintaxe generale: Do [ conditie] Secventa_instructiuni_1 [Exit Do] Secventa_instructiuni_2 Loop, respectiv: While conditie Secventa_instructiuni Wend Cand conditie este adevarata (True), se executa secventa imediata de instructiuni. Instructiunea While .Wend nu permite iesirea fortata din ciclare. Instructiuni care implementeaza structuri de control repetitive conditionate posterior Din aceasta categorie fac parte instructiunile Do .Loop care au urmatoarea sintaxa generala: Do [Secventa_instructiuni_1] [Exit Do] [Secventa_instructiuni_2] Loop conditie Un exemplu de utilizare a instructiunii Do .Loop Until este urmatorul: Do Cant = InputBox('Introduceti cantitatea materialului: ') Pu = InputBox('Introduceti pretul unitar al materialului: ') Vmftva = Cant * Pu Vmctva = Vmftva + tva * Vmftva Print Cant; Tab(48); Pu; Tab(70); Vmftva; Tab(100); Vmctva Loop Until MsgBox('CONTINUATI?', vbYesNo) = vbNo Ciclarea se repeta pana cand raspunsul la intrebarea "CONTINUATI?" va fi No (Nu). Instructiuni care implementeaza structuri de control repetitive cu contor In acest caz, numarul de iteratii este cunoscut. Din aceasta categorie face parte instructiunea For . Next care are urmatoarea sintaxa generala: For contor=valoare_initiala To valoare_finala [Step pas] [Secventa_instructiuni_1] [Exit For] [Secventa_instructiuni_2] Next [contor]. Un exemplu de folosire a acestei instructiuni este urmatorul: For i = 1 To Nrm Cant = InputBox('Introduceti cantitatea materialului nr: ' & i) Pu = InputBox('Introduceti pretul unitar al materialului nr: ' & i) Vmftva = Cant * Pu Vmctva = Vmftva + tva * Vmftva txtVmftva = Format(Vmftva, '######0.00') txtVmctva = Format(Vmctva, '######0.00') Next i. 5 Crearea fisierelor in limbajul Visual BasicLimbajul Visual Basic ofera posibilitatea lucrului cu fisiere (definite in capitolul 1). Fisierele pot stoca date de tipuri diferite (date numerice, text, imagini). Accesul la datele unui fisier poate fi: binar; secvential; aleator. Pentru accesul binar trebuie localizat in fisier numarul de caractere care urmeaza a fi citite sau scrise. Pentru accesul secvential trebuie parcurse toate inregistrarile care preced inregistrarea dorita. Accesul aleator este un acces direct la inregistrarile de marime fixa, fara a necesita citirea inregistrarilor precedente. Operatiile care se pot executa asupra fisierelor sunt: 1. deschiderea fisierelor; 2. inchiderea fisierelor; 3. exploatarea fisierelor in acces secvential; 4. exploatarea fisierelor in acces aleator. 1. Pentru deschiderea unui fisier se foloseste comanda OPEN. Orice fisier, inainte de a se lucra cu el, trebuie sa fie deschis. Comanda OPEN aloca zone de memorie tampon pentru operatiile de intrare/iesire si specifica modul de acces asociat zonei tampon. Formatul general al acestei comenzi este: OPEN nume-fisier FOR mod deschidere AS numar-fisier LEN = expresie in care: nume-fisier - este un sir de caractere care desemneaza numele de fisier dar poate cuprinde si un director si o unitate de disc. Daca fisierul nu exista in momentul deschiderii lui, el va fi creat cand se executa comanda OPEN. mod de deschidere - specifica modul in care se deschide acel fisier. Pentru accesul secvential se poate specifica: APPEND pentru adaugare de noi inregistrari la sfarsitul fisierului deja existent; INPUT - pentru citirea inregistrarilor din fisier; OUTPUT - pentru crearea unui nou fisier. Pentru accesul binar se specifica BINARY, iar pentru accesul aleator, RANDOM. numar-fisier - este un numar cuprins intre 1-511. In
modurile Binary, Input sau Random se poate deschide un fisier
utilizand un numar nou, fara a inchide in prealabil copia
deschisa anterior; in modurile Append
sau Output trebuie sa se
inchida in prealabil fisierul pentru a-l putea deschide cu un alt
numar; pentru lucrul simultan cu mai multe fisiere in expresia expresie - este un numar mai mic sau egal cu 32767. In cazul utilizarii fisierelor deschise RANDOM, acest numar corespunde lungimii unei inregistrari. 2. Inchiderea fisierelor se executa prin intermediul comenzii CLOSE care are urmatoarea sintaxa generala: CLOSE lista-numere-fisiere in care: lista-numere-fisiere specifica unul sau mai multe numere separate prin virgula. Cand acest argument este absent, se inchid toate fisierele. Cand se inchid fisierele care au fost deschise in mod Append sau Output toate datele care sunt in zona tampon acordata fisierului vor fi scrise in fisier inainte de a fi inchis. La executia instructiunii CLOSE, asocierea dintre fisier si numarul lui este dezactivata. 3. Exploatarea fisierelor in acces secvential. Tipul de acces secvential este utilizat pentru a citi sau scrie o inregistrare de aceeasi lungime sau pentru fisiere compuse din inregistrari de lungimi diferite. Comanda PRINT scrie datele linie cu linie intr-un fisier secvential deschis in mod Output sau Append. Sintaxa generala a acestei comenzi este: Print numar-fisier, lista-expresii unde: numar-fisier este numele fisierului. lista-expresii este o expresie sir sau numerica sau o lista de expresii care se scrie in fisier. Pentru a scrie o linie goala dupa numar-fisier se pune virgula. Comanda LINE INPUT este folosita pentru a citi o linie dintr-un fisier secvential. Linia citita este atribuita unei variabile sir. Sintaxa comenzii este: LINE INPUT numar-fisier, nume-variabila in care: numar-fisier este numarul fisierului; nume-variabila este o variabila sir. LINE INPUT citeste din fisier caracter cu caracter pana intalneste retur de car, chr (13) sau retur de car si salt la linie noua chr (13) + chr (10). 4. Exploatarea fisierelor in acces aleator. La deschiderea fisierului in acces RANDOM se precizeaza lungimea inregistrarii. Scrierea unei inregistrari in fisier se face cu comanda PUT care scrie dintr-o variabila intr-un fisier. Sintaxa comenzii este: PUT [ ] numar-fisier, numar inregistrare, nume-variabila in care: numar-fisier este numarul fisierului; numar inregistrare reprezinta lungimea inregistrarii determinand pozitia scrierii; nume-variabila este numele variabilei care contine datele care urmeaza a fi scrise. Citirea unei inregistrari din fisier se face citind intr-o variabila data din fisier. Comanda este GET de forma: GET [ ] numar-fisier, numar-inregistrare, nume-variabila in care:numar-fisier este numarul alocat in prealabil fisierului; numar-inregistrare este numarul inregistrarii care inmultit cu lungimea inregistrarii stabileste pozitia citirii nume-variabila este numele variabilei care contine datele care urmeaza a fi citite. 6 Exemplu de aplicatie informatica in limbajul Visual Basic Sa se realizeze un program in limbajul Visual Basic care sa calculeze valoarea totala (fara TVA si cu TVA) a unei facturi de materiale. Factura contine un numar precizat de materiale. Datele de intrare sunt: numarul de materiale de pe factura (Nrm), numar factura (Nrf), data facturii (Df), codul materialului (Codmat), denumirea materialului (Denmat), cantitate (Cant) si pretul unitar al materialului (Pu). TVA este de 19%. Datele de intrare vor fi introduse cu ajutorul casetelor de introducere a datelor prin dialog cu utilizatorul (InputBox). Datele de intrare (Nrm, Nrf, Df, Codmat, Denmat, Cant, Pu), datele intermediare (Vmftva si Vmctva) si datele de iesire sau rezultatele rularii programului (Vfftva si Vfctva) se vor afisa in casetele text (TextBox) separate din formular. Lucrul cu casete text in formular reprezinta o prima varianta de rezolvare a problemei cu calculul si afisarea valorii facturii de materiale cu un numar precizat de materiale. Varianta a doua de rezolvare a problemei consta in afisarea, sub forma de tabel, pe formular, a datelor de intrare, a datelor intermediare si a rezultatelor rularii aplicatiei. In aceasta varianta de rezolvare a problemei, nu se mai folosesc casete text (TextBox). In ambele variante de rezolvare a problemei, se prevad butoane de comanda (Command Button) pentru calculul si afisarea unui material (fara TVA si cu TVA) - butonul CALCULEAZA, pentru calculul valorii facturii (fara TVA si cu TVA) - butonul AFISEAZA (pentru afisarea valorii facturii - fara TVA si cu TVA) si pentru iesirea din program - butonul IESIRE.
Fig.3.14. Schema logica pentru varianta 1 de rezolvare a problemei Dim Data_factura As Date Dim Vmftva As Double Dim Vmctva As Double Dim Vfftva As Double Dim Vfctva As Double Dim Nrm As Byte Const tva = 0.19 Private Sub cmdCalcul_Click() Dim Cod_mat As Long Dim Den_mat As String Dim Cant As Integer Dim Pu As Single Dim i As Byte Nr_factura = InputBox('Introduceti numarul facturii: ') txtNrf = Format(Nr_factura, '######0') Data_factura = InputBox('Introduceti data facturii sub forma zz/ll/aaaa') txtDf = Format(Data_factura, 'Short Date') Nrm = InputBox('Introduceti numarul de materiale de pe factura: ') Vfftva = 0 Vfctva = 0 For i = 1 To Nrm Cod_mat = InputBox('Introduceti codul materialului nr: ' & i) txtCodmat = Format(Cod_mat, '######0') Den_mat = InputBox('Introduceti denumirea materialului nr: ' & i) txtDenmat = Format(Den_mat, '######0') Cant = InputBox('Introduceti cantitatea materialului nr: ' & i) txtCant = Format(Cant, '######0') Pu = InputBox('Introduceti pretul unitar al materialului nr: ' & i) txtPu = Format(Pu, '######0.00') Vmftva = Cant * Pu Vmctva = Vmftva + tva * Vmftva Vfftva = Vfftva + Vmftva Vfctva = Vfctva + Vmctva txtVmftva = Format(Vmftva, '######0.00') txtVmctva = Format(Vmctva, '######0.00') Next i End Sub Private Sub cmdAfisare_Click() txtVfftva = Format(Vfftva, '######0.00') txtVfctva = Format(Vfctva, '######0.00') End Sub Private Sub cmdExit_Click() End End Sub Rezultatele rularii programului in prima varianta de rezolvare a problemei sunt prezentat in fig.3.15.
Fig.3.15 Rezultatele rularii programului realizat in varianta 1 Varianta 2 de rezolvare a problemei Schema logica este prezentata in fig.3.16, Este utilizata o structura de control repetitiva fara contor conditionata posterior. Implementarea acestei structuri in program se va face cu instructiunea Do .Loop Until. Pe baza acestor considerente, nu mai sunt necesare variabilele i si Nrm folosite in varianta 1 de rezolvare a problemei. Codul programului in limbajul Visual Basic, pentru rezolvarea in varianta 2, este urmatorul:
Fig.3.16. Schema logica pentru varianta 2 de rezolvare a probleme Option Explicit Dim Nrf As Long Dim Df As Date Dim Vmftva As Double Dim Vmctva As Double Dim Vfftva As Double Dim Vfctva As Double Const tva = 0.19 Private Sub cmdCalcul_Click() Dim Cod_mat As Long Dim Den_mat As String Dim Cant As Integer Dim Pu As Single Nrf = InputBox('Introduceti numarul facturii: ') Df = InputBox('Introduceti data facturii sub forma zz/ll/aaaa') Cls Print Tab(10); 'FACTURA NR.'; Tab(28); Nrf; Tab(45); 'DIN DATA DE '; Tab(70); Df Print String(110, '=') Print Tab(2); 'COD_MATERIAL'; Tab(20); 'DEN_MATERIAL'; Tab(41); 'CANT'; _ Tab(48); 'PRET_UNITAR'; Tab(70); 'VAL_M_FARA_TVA'; Tab(100); _ 'VAL_M_CU_TVA' Print String(110, '=') Vfftva = 0 Vfctva = 0 Do Cod_mat = InputBox('Introduceti codul materialului: ') Den_mat = InputBox('Introduceti denumirea materialului: ') Cant = InputBox('Introduceti cantitatea materialului: ') Pu = InputBox('Introduceti pretul unitar al materialului: ') Vmftva = Cant * Pu Vmctva = Vmftva + tva * Vmftva Vfftva = Vfftva + Vmftva Vfctva = Vfctva + Vmctva Print Tab(2); Cod_mat; Tab(20); Den_mat; Tab(41); Cant; Tab(48); Pu; _ Tab(70); Vmftva; Tab(100); Vmctva Loop Until MsgBox('CONTINUATI?', vbYesNo) = vbNo Print String(110, '=') End Sub Private Sub cmdAfisare_Click() Print Tab(20); 'VALOARE FACTURA FARA TVA = '; Tab(60); Vfftva; Print Tab(20); 'VALOARE FACTURA CU TVA = '; Tab(60); Vfctva; End Sub Private Sub cmdExit_Click() End End Sub Rezultatele rularii programului in a doua varianta de rezolvare a problemei, sunt prezentate in fig.3.17.
Fig.3.17. Rezultatele rularii programului in a doua varianta de rezolvare a problemei Pentru acest capitol paginile din manula 44-74.
|