PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE (IV)

Similar documents
Structura și Organizarea Calculatoarelor. Titular: BĂRBULESCU Lucian-Florentin

Lucrarea de laborator nr. 4

Metrici LPR interfatare cu Barix Barionet 50 -

6. Bucle. 6.1 Instrucţiunea while

2. Setări configurare acces la o cameră web conectată într-un router ZTE H218N sau H298N

CERERI SELECT PE O TABELA

Titlul lucrării propuse pentru participarea la concursul pe tema securității informatice

Dispozitive Electronice şi Electronică Analogică Suport curs 02 Metode de analiză a circuitelor electrice. Divizoare rezistive.

Modalitǎţi de clasificare a datelor cantitative

Reflexia şi refracţia luminii. Aplicaţii. Valerica Baban

Textul si imaginile din acest document sunt licentiate. Codul sursa din acest document este licentiat. Attribution-NonCommercial-NoDerivs CC BY-NC-ND

REVISTA NAŢIONALĂ DE INFORMATICĂ APLICATĂ INFO-PRACTIC

Subiecte Clasa a VI-a

ARBORI AVL. (denumiti dupa Adelson-Velskii si Landis, 1962)

Versionare - GIT ALIN ZAMFIROIU

INTEROGĂRI ÎN SQL SERVER

GHID DE TERMENI MEDIA

Procesarea Imaginilor

I. Instrucţiuni PRELEGERE IX PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE

D în această ordine a.î. AB 4 cm, AC 10 cm, BD 15cm

Semnale şi sisteme. Facultatea de Electronică şi Telecomunicaţii Departamentul de Comunicaţii (TC)

Ghid identificare versiune AWP, instalare AWP şi verificare importare certificat în Store-ul de Windows

Mecanismul de decontare a cererilor de plata

Capitolul 4 SUBCERERI. F. Radulescu. Curs: Baze de date - Limbajul SQL

Laborator 1. Programare declarativă. Programare logică. Prolog. SWI-Prolog

La fereastra de autentificare trebuie executati urmatorii pasi: 1. Introduceti urmatoarele date: Utilizator: - <numarul dvs de carnet> (ex: "9",

MS POWER POINT. s.l.dr.ing.ciprian-bogdan Chirila

Arbori. Figura 1. struct ANOD { int val; ANOD* st; ANOD* dr; }; #include <stdio.h> #include <conio.h> struct ANOD { int val; ANOD* st; ANOD* dr; }

X-Fit S Manual de utilizare

În continuare vom prezenta unele dintre problemele de calcul ale numerelor Fibonacci.

Auditul financiar la IMM-uri: de la limitare la oportunitate

Funcţii grup şi clauzele GROUP BY, HAVING. Operatorii ROLLUP şi CUBE.

CERERI SELECT PE MAI MULTE TABELE

Algoritmi si structuri de date ( ) Informatica Ramnicu Valcea, anul 1

Propuneri pentru teme de licență

Update firmware aparat foto

R O M Â N I A CURTEA CONSTITUŢIONALĂ

6. Excepţii şi aserţiuni. 6. Excepţii şi aserţiuni

ISBN-13:

Documentaţie Tehnică

Metoda BACKTRACKING. prof. Jiduc Gabriel

Macrocomenzi. Figura 1. Personalizarea barei de meniuri. Se va afișa fereastra din figura 2. Figura 2. Includerea tab ului Developer.

9. Memoria. Procesorul are o memorie cu o arhitectură pe două niveluri pentru memoria de program și de date.

INTERPRETOARE DE COMENZI

Aspecte controversate în Procedura Insolvenţei şi posibile soluţii

Reţele Neuronale Artificiale în MATLAB

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

Mods euro truck simulator 2 harta romaniei by elyxir. Mods euro truck simulator 2 harta romaniei by elyxir.zip

The First TST for the JBMO Satu Mare, April 6, 2018

Ierarhia memoriilor Tipuri de memorii Memorii semiconductoare Memoria cu unități multiple. Memoria cache Memoria virtuală

Mai bine. Pentru c putem.

INFORMAȚII DESPRE PRODUS. FLEXIMARK Stainless steel FCC. Informații Included in FLEXIMARK sample bag (article no. M )

Olimpiad«Estonia, 2003

CAIETUL DE SARCINI Organizare evenimente. VS/2014/0442 Euro network supporting innovation for green jobs GREENET

Candlesticks. 14 Martie Lector : Alexandru Preda, CFTe

CHAMPIONS LEAGUE 2017 SPONSOR:

2. Setări configurare acces la o cameră web conectată într-un echipament HG8121H cu funcție activă de router

Curs 5. Programare Delphi

Proceduri stocate. Crearea procedurilor stocate. Varianta 1 În Management Studio se dă clic pe New Query ca în imaginea de mai jos: Fig.

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

earning every day-ahead your trust stepping forward to the future opcom operatorul pie?ei de energie electricã și de gaze naturale din România Opcom

Updating the Nomographical Diagrams for Dimensioning the Concrete Slabs

Mulțumim anticipat tuturor acelora care vor transmite critici/observații/sugestii

Baze de date distribuite și mobile

2. SCHEME LOGICE ŞI PSEUDOCOD


3.2 Arhitectura setului de instrucţiuni ISA. Copyright Paul GASNER

1. Creaţi un nou proiect de tip Windows Forms Application, cu numele MdiExample.

Nume şi Apelativ prenume Adresa Număr telefon Tip cont Dobânda Monetar iniţial final

PROIECTAREA ALGORITMILOR

Itemi Sisteme de Operare

Preţul mediu de închidere a pieţei [RON/MWh] Cota pieţei [%]

MODELUL UNUI COMUTATOR STATIC DE SURSE DE ENERGIE ELECTRICĂ FĂRĂ ÎNTRERUPEREA ALIMENTĂRII SARCINII

HEAPSORT I. CONSIDERAŢII TEORETICE

Excel Advanced. Curriculum. Școala Informală de IT. Educație Informală S.A.

Programare în limbaj de asamblare 16. Formatul instrucţiunilor (codificare, moduri de adresare).

Tema 1 - Transferuri de date DMA intr-o arhitectura de tip Cell

Proiectarea bazelor de date. PL/SQL Înregistrări și Colecții # 13. Adrian Runceanu

Generarea şi validarea numerelor prime mari

Grafuri bipartite. Lecție de probă, informatică clasa a XI-a. Mihai Bărbulescu Facultatea de Automatică și Calculatoare, UPB

Interogarea (query), este operaţia prin care se obţin datele

5.3 OSCILATOARE SINUSOIDALE

Proiectarea bazelor de date # 11. PL/SQL Funcții în PL/SQL (partea a II-a) Adrian Runceanu

9. CURSOARE. Obiective. În acest Capitol, vom învăţa despre: Manipularea cursoarelor. Folosirea Cursor FOR Loops şi Nesting Cursors.

DECLARAȚIE DE PERFORMANȚĂ Nr. 101 conform Regulamentului produselor pentru construcții UE 305/2011/UE

Lucrarea Nr.1. Sisteme de operare. Generalitati

Prima. Evadare. Ac9vity Report. The biggest MTB marathon from Eastern Europe. 7th edi9on

Calculatoare Numerice II Interfaţarea unui dispozitiv de teleghidare radio cu portul paralel (MGSH Machine Guidance SHell) -proiect-

Proiectarea Sistemelor Software Complexe

:= 950; BEGIN DELETE FROM

EN teava vopsita cu capete canelate tip VICTAULIC

MANAGEMENTUL CALITĂȚII - MC. Proiect 5 Procedura documentată pentru procesul ales

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

USING SERIAL INDUSTRIAL ROBOTS IN CNC MILLING PROCESESS

SIMULAREA DESCRIERILOR VHDL

5.2 Interogări în SQL

Capitolul IV. Programarea în limbajul C

ANTICOLLISION ALGORITHM FOR V2V AUTONOMUOS AGRICULTURAL MACHINES ALGORITM ANTICOLIZIUNE PENTRU MASINI AGRICOLE AUTONOME TIP V2V (VEHICLE-TO-VEHICLE)

Prelucrarea numerică a semnalelor

Cap.5 Normalizarea relaţiilor

Transcription:

PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE (IV)

Instrucţiuni condiţionale Instrucţiunea reprezintă o formă de ramificare a ordinii de execuţie a instrucţiunilor programului. Ramificarea se face funcţie de o condiţie ce poate fi testată pe un set de date cu care se lucrează în aplicaţie. În funcţie de rezultatul evaluării ( adevărat sau fals ) se execută una dintre instrucţiuni. Forma generală este: Dacă test_logic adevărat execută instrucţiunea 1 altfel execută instrucţiunea 2 Dacă se execută instrucţiunea de pe o ramură, atunci instrucţiunea de pe cealaltă ramură nu se mai execută. După executarea uneia dintre aceste instrucţiuni, execuţia programului se continuă cu instrucţiunea următoare instrucţiunii condiţionale. Testul logic care hotărăşte ramura ce se va executa este de obicei un test de egalitate. Condiţiile se pot compune prin operatori logici de tipul şi, sau, nu, iar în final rezultă o condiţie de forma: dacă variabila... este mai mică decât... şi mai mare decât..., atunci... 18.12.2017 13:26 2

Există şi varianta de instrucţiune condiţională în care, în funcţie de o valoare întreagă se face alegerea dintr-un set de instrucţiuni, după care se execută instrucţiunea aleasă. Aceasta are forma: Dacă Variabila este egală cu Valoare1 atunci execută instrucţiunea1 altfel, dacă Variabila este egală cu Valoare2 atunci execută instrucţiunea2 altfel, dacă Variabila...... altfel execută instrucţiunea implicită 3 18.12.2017 13:26

Tabelul 2.8 Operatorii destinati comparării datelor în VBA Opera tor Exemplu Descriere > CInt(txtPrima.Text) > intval1 Operatorul mai mare ca returnează True sau 0 dacă valoarea Argument1 este mai mare decât valoarea Argument2. < sngval2 < 2000.05 Operatorul mai mic ca returnează True sau 0 dacă valoarea Argument1 este mai mică decât valoarea Argument2. = chrrasp = a Operatorul egal cu returnează Truesau0dacă valoarea Argument1 este egală cu valoarea Argument2. <= chrrasp <= B Operatorul mai mic sau egal returnează True sau0dacă valoarea Argument1 este mai mică sau egală decât valoarea Argument2. >= dblval3 >= sngval4 Operatorul mai mare sau egal returnează True sau0dacă valoarea Argument1 este mai mare sau egală decât valoarea Argument2. 18.12.2017 13:26 4

18.12.2017 13:26 NOTĂ: In cazul în care cele 2 argumente sunt şiruri de caractere, mărimea valorii fiecăruia este dată de codul ASCII al fiecărui caracter. Spre exemplu ABC < ADC deoarece codul ASCII al caracterului B este mai mic decât codul ASCII al caracterului D. Proiectantul de aplicaţii trebuie să acorde o mare importanţă tipurilor de argumente ce sunt comparate, altfel rezultatele comparării putând fii imprevizibile. O regulă general valabilă este ca ambele argumente să fie de acelaşi tip sau măcar de tipuri compatibile (deşi în acest ultim caz rezultatul comparării nu este întotdeauna cel corect). Dacă se compară egalitatea unui argument de tip întreg cu un argument de tip double, rezultatul poate fi False chiar dacă aparent valorile celor două argumente sunt egale, deoarece valoarea argumentului de tip double este aproximată la ultima zecimală poate avea tot atât de bine valoarea 0 cât şi1). Acelaşi rezultat False se poate obţine şi în cazul comparării egalităţii unui argument single şi unul double chiar dacă aparent au valoare egalăşi aceasta deoarece pot apare diferenţe în reprezentarea internă a celor două valori datorită rotunjirilor pe care sistemul le realizează. Spre exemplu dacă primul argument are valoarea 4.5362 în simplă precizie şi al doilea argument valoarea 4.5362 în dublă precizie, intern oricare din valori, fiind rotunjită, poate avea valoarea reală de 4.53620000000000001 în loc de 4.53620000000000000. 5

Fals (Nu) Test logic Adevărat (Da) Fig. 2.11. Reprezentarea grafică a testului logic 18.12.2017 13:26 6

Instrucţiunea IF Instrucţiunea IF stă la baza dezvoltării oricărui tip de aplicaţie şi aceasta deoarece cu ajutorul ei aplicaţia analizează datele, direcţionând fluxul informatic în funcţie de rezultatele analizei efectuate. In cazul în care această instrucţiune nu ar exista rularea aplicaţiei ar decurge secvenţial executând instrucţiune după instrucţiune până la terminarea codului. Prin IF fluxul execuţiei poate parcurge numai anumite secvenţe de program pe căi predefinite de proiectant în funcţie de condiţiile impuse şi de rezultatul manipulării datelor pe timpul rulării. 18.12.2017 13:26 7

In general o instrucţiunea If conţine una sau două secvenţe de cod, executând una dintre ele, funcţie de rezultatul unei operaţii de comparare a 1 sau 2 argumente. Instrucţiunea poate fi întâlnită în una din următoarele forme: If Then If Then Else... End If 18.12.2017 13:26 8

Structura de decizie IF THEN Structura are următorul format: Dacă verifică numai o condiție de adevăr și folosește o instrucțiune simplă If <TestComparare> Then <instrucţiune> Exemple: Sub FixData1() Data = #12/13/2017# If Data < Now Then Data = Now End Sub Sub FixData2() Dim Data As Date Data = CDate(InputBox("Introduceti data (mm/dd/yyyy):")) If Data < Now Then Data = Now MsgBox Data End Sub 9

sau Dacă verifică numai o condiție de adevăr și folosește o instrucțiune compusă If <TestComparare> Then <instrucţiune1> <instrucţiunen> End If 10

unde: <TestComparare> o expresie de comparare care poate lua valoarea True sau False <instrucţiune> o instrucţiune de atribuire, un apel de procedură, etc. Dacă expresia <TestComparare> are valoarea True atunci va fi executată instrucţiunea <instrucţiune> sau blocul de instrucţiuni <instrucţiune1> <instrucţiunen>. Dacă rezultatul evaluării este False atunci execuţia va face un salt automat la instrucţiunea ce urmează structurii decizionale. 11

Sub formula() Dim val As Integer, a As Integer, b As Integer, c As Integer Dim d As Single, e As Single, f As Single, g As Single a = InputBox("a=") b = InputBox("b=") c = InputBox("c=") val = InputBox("Introduceti o valoare (0-9): ") If val = 0 Then d = a + b + c e = a + b / 2 f = (a) ^ 2 + (b) ^ 2 + (c) ^ 2 g = (d + f) / e End If var = MsgBox("Ati apasat tasta " & val & Chr(13) & Chr(10) & "a=" & a & Chr(13) & _ Chr(10) & "b=" & b & Chr(13) & Chr(10) & "c=" & c & Chr(13) & Chr(10) & "d=" & _ d & Chr(13) & Chr(10) & "e=" & e & Chr(13) & Chr(10) & "f=" & f & Chr(13) & Chr(10) _ & "g=" & g) End Sub 18.12.2017 13:26 12

Să presupunem cazul în care un salariat este recompensat cu 5% din valoarea produselor realizate peste limita de 10 000 lei şi este penalizat în cazul în care producţia este sub limită cu 10% din valoarea ce trebuie adăugată pentru atingerea limitei. Să se scrie o aplicaţie care să ceară printr-o casetă de tip InputBox valoarea producţiei realizate; să calculeze dacă este cazul valoarea primei şi să o afişeze într-o casetă de tip MsgBox; să calculeze penalizarea în cazul în care nu se atinge limita de producţie. Conţinutul procedurii eveniment de calcul a primei sau penalizării este: Dim sngvallimit As Single, ValRealizat As Double, sngprima As Single, sngpenalizare As Single Dim sngdiferenta As Single, intbuton As Integer sngvallimit = 1E+4 Se initializeaza valoarea limita a productiei Se citeste valoarea produselor realizate de salariat ValRealizat = val(inputbox( Valoarea realizată a productiei, Valoare productie )) If ValRealizat > sngvallimit Then Daca valoarea realizată este mai mare decit valoarea limta atunci sngdiferenta = ValRealizat sngvallimit sngprima = sngdiferenta *.05 Se calculeaza prima de salarizare intbuton = MsgBox( Prima realizată este de & sngprima & lei, 64, Prima de salarizare ) End If If ValRealizat < sngvallimit Then Dacă valoarea realizată este mai mică decit valoarea limta atunci sngdiferenta = sngvallimit - ValRealizat sngpenalizare = sngdiferenta *.1 Se calculeaza penalizarea intbuton = MsgBox( Penalizarea este de & sngpenalizare & lei, 64, Penalizare ) End If 1

Structura de decizie IF THEN ELSE Exemplul anterior poate fi rezolvat într-un mod mai elegant prin utilizarea structurii de decizie If Then Else. Forma generală a acestei structuri este: If <TestComparare1> Then <instrucţiune1> <instrucţiunen> Else If <TestComparare2> <instrucţiune1> <instrucţiunen> Else If <TestComparareN> <instrucţiune1> <instrucţiunen> Else <instrucţiune1> <instrucţiunen> End If 14

In cazul în care expresia <TestComparare1> este adevărat atunci se execută primul bloc de instrucţiuni. In cazul în care expresia < TestComparare2> este adevărată atunci se execută al doilea bloc de instrucţiuni, şi aşa mai departe. In cazul în care toate expresiile < TestComparare1>, <TestComparare2>,, < TestComparareN> sunt false atunci este executat ultimul bloc de instrucţiuni. Utilizând structura If Then Else blocul decizional al aplicaţiei anterioare va avea următoarea formă If ValRealizat > sngvallimit Then Daca valoarea realizată este mai mare decit valoarea limta atunci sngdiferenta = ValRealizat sngvallimit sngprima = sngdiferenta *.05 Se calculeaza prima de salarizare intbuton = MsgBox( Prima realizată este de & sngprima & lei, 64, Prima de salarizare ) Else If ValRealizat < sngvallimit Then Daca valoarea realizată este mai mică decit valoarea limta atunci sngdiferenta = sngvallimit - ValRealizat sngpenalizare = sngdiferenta *.1 Se calculeaza penalizarea intbuton = MsgBox( Penalizarea este de & sngpenalizare & lei, 64, Penalizare ) Else Altfel intbuton = MsgBox ( Atit penalizarea cit şi prima sunt 0 lei, 64, Producţie la limită ) 15 End If

Expresii de comparare cu condiţii multiple Expresiile de comparare din cadrul structurii decizionale admit utilizarea unor operatori suplimentari: Or, And şi Not tab. 2.9. Aceşti operatori sunt utilizaţi pentru definirea unor condiţii compuse. Operatorii Or, And şi Not se mai numesc şi operatori logici. Tabelul 2.9 Operatorii pentru definirea condiţiilor compuse Op. Exemplu Descriere And If (intval < 10) And (intval > 5) Are valoarea True dacă intval mai mic ca 10 şi mai mare ca 5 (intval trebuie să aparţină domeniului 5 10) Or If (intval = 10) Or (intval = 5) Are valoarea True dacă intval este egal cu 5 sau 10 Not If Not (intval < 5) Are valoarea True dacă intval este mai mare ca 5. 16

Exemplu Să se scrie o structură decizională care: să adune două valori de tip single (sngval1, sngval2) dacă intopt este 1 sau 2 să scadă din prima valoare a doua dacă intopt este mai mare ca 2 şi mai mic sau egal cu 10 să dubleze suma celor 2 valori dacă intopt este mai mic ca 1 şi mai mare ca 10. If (intopt =1) Or (intopt = 2) Then sngtotal = sngval1 + sngval2 Else If (intopt >2) and (intopt <= 10) Then sngtotal = sngval1 sngval2 Else sngtotal = 2 * (sngval1 + sngval2) End If 17

18.12.2017 13:26 18

Structuri decizionale imbricate Structura decizională de tip If Then Else este indicată în cazul în care vor fi tratate cel mult trei expresii de comparare. In caz contrar codul devine confuz, fiind dificil de descifrat. Ca exemplu, se consideră o structură de decizie care să testeze la modul general acţionarea butoanelor ce pot apare într-o casetă de dialog de tip MsgBox. O astfel de casetă poate conţine 7 tipuri de butoane tab. 5.2. Considerând că valoarea returnată de casetă este memorată în variabila intbut, structura de decizie va determina tipul de buton acţionat şi va afişa o casetă de tip MsgBox care să conţină mesajul Butonul vb a fost acţionat (... reprezintă numele butonului). If (intbut =1) Then strmsg = OK Else If (intbut =2) Then strmsg = Cancel Else If (intbut =3) Then strmsg = Abort Else If (intbut =4) Then strmsg = Retry Else If (intbut =5) Then strmsg = Ignore Else If (intbut =6) Then strmsg = Yes Else strmsg = No End If intmsg = MsgBox( Butonul vb & strmsg & a fost actionat, 64, 19 Butoane caseta MsgBox )

Constantă Valoare Descriere vbok 1 A fost selectat butonul Ok vbcancel 2 A fost selectat butonul Cancel vbabort 3 A fost selectat butonul Abort vbretry 4 A fost selectat butonul Retry vbignore 5 A fost selectat butonul Ignore vbyes 6 A fost selectat butonul Yes vbno 7 A fost selectat butonul No 18.12.2017 13:26 20

Pentru simplificare, dacă vor fi compaeate mai mult de 3 expresii, se recomandă utilizarea structurii de tip Select Case care are următorul format: Select Case <Expresie> Case <valoare1>: <instrucţiune1> <instrucţiunen> Case <valoare2>: <instrucţiune1> <instrucţiunen> Case <valoaren>: <instrucţiune1> <instrucţiunen> Case Else <instrucţiune1> <instrucţiunen> End Select unde: <expresie> o expresie matematică (care să aibă o valoare întreagă) sau de manipulare a şirurilor de caractere <valoare> o valoare de acelaşi tip cu valoarea expresiei. 21

Deşi structura pare complicată modul în care funcţionează este relativ simplu. Astfel, în prima fază este evaluată <Expresie>, după care este executat blocul de instrucţiuni care corespunde instrucţiunii Case care are <valoare> egală cu valoarea <Expresie>. Utilizând noua structură aplicaţia anterioară devine: Select Case intbut Case 1: strmsg = OK Case 2: strmsg = Cancel Case 3: strmsg = Abort Case 4: strmsg = Retry Case 5: strmsg = Ignore Case 6: strmsg = Yes Case Else strmsg = No End Select NOTĂ: Caracterul : este opţional dar se recomandă utilizarea sa deoarece codul aplicaţiei este mai clar şi în cazul în care blocul de instrucţiuni conţine doar o singură instrucţiune, aceasta poate fi scrisă pe acelaşi rând cu Case. 22

Variante ale structurii SELECT CASE Structură Case... Else cu test de comparare Select Case <Expresie> Case Is <test1>: <instrucţiune1> <instrucţiunen> Case Is <test2>: <instrucţiune1> <instrucţiunen> Case <testn>: <instrucţiune1> <instrucţiunen> Case Else <instrucţiune1> <instrucţiunen> End Select Structură Case... Else cu testarea încadrării într-un domeniu Select Case <Expresie> Case <Expresie1> To <Expresie2>: <instrucţiune1> <instrucţiunen> Case <Expresie3> To <Expresie4>: <instrucţiune1> <instrucţiunen> Case <ExpresieM> To <ExpresieN>: <instrucţiune1> <instrucţiunen> Case Else <instrucţiune1> <instrucţiunen> End Select 23

unde: <Expresie> o expresie, constantă matematică sau de tip şir de caractere <test> secvenţa unui test de comparare formată din operator şi argument2 deoarece VBA-ul consideră ca argument1 valoarea conţinută în <Expresie> In cazul structurii cu test de comparare VBA-ul evaluează <Expresie> după care compară valoarea obţinută conform fiecărui <test>. In cazul în care valoarea testului este True atunci blocul de instrucţiuni ataşat instrucţiunii Case Is care conţine testul este executată. După execuţia blocului de instrucţiuni, execuţia codului continuă cu prima instrucţiune ce urmează după End Select. In cazul în care toate testele au valoarea False va fi executat blocul de instrucţiuni ataşat de Case Else. In cazul structurii cu testarea încadrării într-un domeniu de valori VBA-ul evaluează <Expresie> după care testează încadrarea valoarii obţinute în domeniul definit de valorile <Expresie1> <Expresie2>. In cazul în care domeniul conţine valoarea din <Expresie> atunci blocul de instrucţiuni ataşat instrucţiunii Case care conţine domeniul dat este executată. După execuţia blocului de instrucţiuni, execuţia codului continuă cu prima instrucţiune ce urmează după End Select. In cazul în care valoarea din <Expresie> nu se încadrează în nici un domeniu va fi executat blocul de instrucţiuni ataşat de Case Else. 24

Exemplu: Utilizarea unei structuri Select Case cu test de comparare pentru a determina dacă valoarea introdusă de utilizator printr-o casetă de tip InputBox se încadrează în domeniul [80 120]. Dim strrezadm As String, sngrezadm As Single, intbut As Integer strrezadm = InputBox("Introduceti o valoare in domeniul [ 80... 120 ][ N/mm^2 ]", _ "Rezistenta admisibila la torsiune a otelurilor laminate", "100") sngrezadm = CSng(strRezAdm) Select Case sngrezadm Case Is < 80: intbut = MsgBox("Valoarea rezistentei admisibile prea mica!", 64, "Eroare") Case Is > 120: intbut = MsgBox("Valoarea rezistentei admisibile prea mare!", 64, "Eroare") Case Else: intbut = MsgBox("Rezistentei admisibila este in domeniu!", 64, "Introducere corecta") End Select 25

In cazul utilizării unei structuri cu testarea încadrării într-un domeniu de valori exemplul anterior se simplifică semnificativ: Dim strrezadm As String, sngrezadm As Single, intbut As Integer strrezadm = InputBox("Introduceti o valoare in domeniul _ [80... 120 ][ N/mm^2 ]", "Rezistenta admisibila la torsiune a _ otelurilor laminate", "100") sngrezadm = CSng(strRezAdm) Select Case sngrezadm Case 80 To 120 intbut = MsgBox("Rezistenta admisibila este _ in domeniu!", 64, "Introducere corecta") Case Else: intbut = MsgBox("Rezistenta admisibila este _ in afara domeniu!", 64, "Eroare") End Select 26

Instrucţiuni de ciclare Sunt instrucţiuni elementare (instrucţiuni repetitive sau bucle). Prin aceste instrucţiuni se specifică faptul că o instrucţiune se va executa în mod repetat, controlul repetării instrucţiunilor făcându-se pe diverse criterii: o instrucţiune poate fi executată de un număr fix de ori o instrucţiune poate fi executată până la îndeplinirea unei condiţii. Condiţia de terminare a execuţiei buclei poate fi testată la începutul la sfârşitul buclei. 27

Structura de ciclare For Next Această structură mai este întâlnită în cărţile de specialitate sub numele de structură de ciclare For Next. Instrucţiunea de ciclare care se execută de un număr finit de ori se numeşte ciclul for (for= pentru ), iar funcţionarea este descrisă prin: Pentru Contor =Valoare_iniţială până la Valoare_finală Instrucţiune_1... Ieşire Instrucţiune_N Următoarea valoare a contorului unde Valoare_iniţială este o valoare de iniţializare a contorului, Valoare_finală este o valoare de terminare a instrucţiunii 28

Formatul structurii este: For <Contor> = <ValoareInitiala> To <ValoareFinala> [Step <PasIncrementare>] <instructiune1> [Exit For] <instructiunen> Next <Contor> unde: <Contor> variabilă de tip numeric sau variant care memorează numărul de ciclări ale blocului de instrucţiuni incluse în structură. <ValoareInitiala> expresie, variabilă sau valoare numerică iniţială a variabilei <Contor> <ValoareFinala> expresie, variabilă sau valoare numerică finală a variabilei <Contor> <PasIncrementare> valoare numerică, utilizată ca pas de incrementare a valorii memorate în variabila <Contor>. Argumentul este opţional şi în cazul în care este omis (caz în care trebuie omis şi cuvântul rezervat Step) este automat considerat de VBA ca având valoarea 1. <PasIncrementare> poate fi o valoare negativă, dar în acest caz argumentul <ValoareFinală> trebuie să fie mai mic decât argumentul <ValoareInitiala>. 29

Iniţial valoarea memorată în variabila <Contor> este <ValoareInitiala>. Această valoare este incrementată cu <PasIncrementare> la fiecare parcurgere a blocului de instructiuni, până când depăşeşte <ValoareFinala>. In momentul depăşirii execuţia aplicaţiei sare la instrucţiunea imediat următoare expresiei Next <Contor>. Din structura de ciclare For Next se pot face ieşiri forţate intercalând în corpul structurii instrucţiunea Exit For. Intercalarea se poate face în cadrul unei structuri de decizie (structură de tip If Then Else sau Select Case) şi anume atunci când este îndeplinită o anumită condiţie. Atunci când instrucţiunea Exit For este întâlnită, execuţia abandonează structura de ciclare, continuând cu prima linie ce urmează instrucţiunii Next <Contor>. NOTĂ: Valoarea variabilei <contor> poate fi modificată în interiorul corpului structurii de ciclare dar acest mod de lucru nu este recomandat deoarece se poate pierde controlul executării structurii. 30

Iniţializare Fals Test Adevărat Instrucţiune Reluare Schema de funcţionare a ciclului FOR...NEXT 31

Procedura ce urmează Private Sub cmdstart_click() adună toate numerele pare din intervalul [0 100]. Procedura este ataşată butonului de comandă Start, iar procedura Private Sub cmdstop_click() este ataşată butonului de comandă Stop. Private Sub cmdstart_click() 'Calculul sumei numerelor pare de la 0 la 100 Const intvalinitial As Integer = 0, intvalfinal As Integer = 100, intpas As Integer = 2 Dim intcontor As Integer, intsuma As Integer, strsuma As String For intcontor = intvalinitial To intvalfinal Step intpas intsuma = intsuma + intcontor Next intcontor strsuma = CStr(intSuma) intbuton = MsgBox("Suma numerelor pare de la 0 la 100 este " & strsuma, vbinformation + vbokonly, _ "Exemplu de utilizare a ciclului For... Next") End Sub Private Sub cmdstop_click() End End Sub 32

Structura de ciclare DO WHILE... LOOP Dacă se face verificarea condiţiei înainte de execuţia buclei, instrucţiunile de ciclare se numesc cicluri while (while= atât timp cât ) şi funcţionarea poate fi decrisă prin: Atât timp cât Condiţia este adevărată execută Instrucţiunea În cazul acestei instrucţiuni de ciclare, instrucţiunea din interiorul ciclului nu se va executa niciodată în cazul în care condiţia este falsă de la început. 18.12.2017 13:26 33

Formatul structurii este: Do While <condiţie> <instrucţiune1> <instrucţiunen> Loop unde: <condiţie> expresie de comparare <instrucţiune1> <instructiunen> corpul structurii Loop marchează sfârşitul structurii de ciclare NOTĂ:La utilizarea structurilor de ciclare proiectantul aplicaţiei trebuie să se asigure ca execuţia blocului de instrucţiuni să determine modificarea argumentelor expresiei de comparare (se recomandă ca un singur argument să fie modificat). In caz contrar se obţine un ciclu infinit (dacă iniţial condiţia este 0 sau True şi dacă executarea corpului structurii nu modifică argumentele expresiei de comparare, atunci valoarea condiţiei va rămâne neschimbată determinând executarea la nesfârşit a blocului de instrucţiuni). Singura metodă sigură de ieşire dintr-un ciclu infinit este apăsarea simultană a tastelor Ctrl şi Break. 34

Instrucţiune Adevărat Test Fals Schema de funcţionare a ciclului DO WHILE...LOOP 35

Structura de ciclare Do Until Loop Spre deosebire Do While Loop structura Do Until Loop execută blocul de instrucţiuni care formează corpul structurii atâta timp cât condiţia de ciclare are valoarea 1 sau False. Prin urmare ciclarea este terminată în momentul în care condiţia are valoarea 0 sau True. Formatul structurii este: Do Until <condiţie> <instrucţiune1> <instrucţiunen> Loop unde: <condiţie> expresie de comparare <instrucţiune1> <instructiunen> corpul structurii Loop marchează sfârşitul structurii de ciclare NOTĂ: Nu se poate da o recomandare privind avantajele utilizării structurii Do While Loop comparativ cu structura Do Until Loop deoarece din punct de vedere al execuţiei codului ambele sunt la fel de eficiente. Utilizarea unei structuri sau a celeilalte este funcţie de preferinţele proiectantului codului. 36

Structurile de ciclare Do While Loop şi Do Until Loop Cele 2 structuri sunt derivate din structurile de ciclare anterior prezentate. Deosebirea faţă de structurile anterioare constă în poziţionarea condiţiei de ciclare. In timp ce în cazul structurilor Do While Loop şi Do Until Loop condiţia este scrisă pe prima linie (imediat după Do While respectiv Do Until) la celelalte două condiţia este poziţionată pe ultima linie a structurii (imediat înaintea cuvântului rezervat Loop. Din punct de vedere al parcurgerii codului cele 2 structuri funcţionează similar cu structura din care au derivat (Do While Loop similar cu Do While Loop şi Do Until Loop similar cu Do Until Loop). NOTĂ: Cele 3 puncte ( ) simbolizează blocul de instrucţiuni conţinute în structura de ciclare. Avantajul oferit cele 2 noi structuri este acela că elimină necesitatea definirii argumentelor condiţiei de ciclare înaintea începerii structurii (vezi exemplele de la structurile de ciclare anterior prezentate). 37

În cazul în care condiţia este testată după execuţia instrucţiunii, instrucţiunile de ciclare se numesc cicluri dowhile (do-while= execută... atât timp cât ). În aces caz, instrucţiunea din interiorul ciclului se execută cel puţin o dată, chiar dacă rezultatul condiţiei de terminare este fals de la început. Forma generală a instrucţiunii este: Execută Instrucţiunea atât timp cât Condiţia este adevărată În ambele cazuri, dacă instrucţiunea din interiorul buclei nu afectează valoarea de adevăr a condiţiei de terminare, bucla va fi infinită ( nu se va întrerupe din execuţie). 38

Instrucţiune Test Adevărat Fals Schema de funcţionare a ciclului Do...While... Loop 39

Structura Do While... Loop Dim strrezadm As String, sngrezadm As Single, intbut As Integer Do inceputul structurii de ciclare intbut = MsgBox("Rezistenta admisibila trebuie sa apartina domeniului [80 120]!, _ 64, "Eroare") strrezadm = InputBox("Introduceti o valoare in domeniul [ 80... 120 ] N/mm^2 ", _ "Rezistenta admisibila la torsiune a otelurilor laminate", "100") If strrezadm = Then dacă butonul Cancel este selectat atunci End se iese din aplicatie Else sngrezadm = CSng(strRezAdm) End If While (sngrezmat < 80) Or (sngrezadm > 120) Loop Atit timp cit valoarea nu este in domeniu, repeta instructiunile intbut = MsgBox("Rezistenta admisibila este de & strrezadm & [N/mm^2], 64, "Introducere corecta") 40

Structura Do Until... Loop Dim strrezadm As String, sngrezadm As Single, intbut As Integer Do inceputul structurii de ciclare intbut = MsgBox("Rezistenta admisibila trebuie sa apartina domeniului [80 120]!, _ 64, "Eroare") strrezadm = InputBox("Introduceti o valoare in domeniul [ 80... 120 ] N/mm^2 ", _ "Rezistenta admisibila la torsiune a otelurilor laminate", "100") If strrezadm = Then dacă butonul Cancel este selectat atunci End se iese din aplicatie Else sngrezadm = CSng(strRezAdm) End If Until (sngrezmat > 80) And (sngrezadm < 120) Loop Repetă ciclul până când valoarea este în domeniu intbut = MsgBox("Rezistenta admisibila este de & strrezadm & [N/mm^2], 64, "Introducere corecta") 41

OBS.: După cum se poate observa în ambele exemple blocul iniţial de instrucţiuni nu mai apare, nemaifiind necesară definirea argumentelor condiţiei de ciclare înaintea începerii ciclului deoarece, condiţia de ciclare nu mai este pozţionată pe prima linie a ciclului ci pe ultima. Ciclurile Do While Loop şi Do Until Loop sunt indicate acolo unde blocul de instrucţiuni conţinute de ciclu trebuie executate măcar odată. 42

Ieşirea forţată din cicluri Sunt cazuri când este necesară ieşirea dintr-un ciclu fără a fi îndeplinită condiţia de sfârşit a ciclului. Spre exemplu se proiectează o procedură de preluare a unui număr dat (să zicem M) de valori. In acest caz preluarea o facem în interiorul unui ciclu ForLoop în care variabila de ciclare poate lua valori de la 1 la M. Ce se întâmplă dacă utilizatorul dispune de un număr mai mic de valori. Pentru această situaţie se se plasează în ciclu o instrucţiune If care pentru o anumită valoare face ieşirea forţată din ciclu. Ieşirea forţată dintr-un ciclu se realizează cu instrucţiunile Exit For pentru ciclurile ForLoop sau Exit Do pentru ciclurile DoWhile, DoUntil. Exemplu: Să presupunem că M =10 şi proiectăm ca ieşirea forţată dintr-un ciclu For să fie realizată atunci când variabila sngval are valoarea 0, atunci ciclul va va fi următorul: For intciclu = 1 to 10 If sngval=0 then Exit For ieşire forţată din ciclu End If corpul ciclului For Next intciclu 43

18.12.2017 44

18.12.2017 13:26 45