4 elemente ale limbajului de programare visual basic


Sintaxa instrucţiunii Select Case este



Yüklə 0,58 Mb.
səhifə7/9
tarix03.11.2017
ölçüsü0,58 Mb.
#29147
1   2   3   4   5   6   7   8   9

Sintaxa instrucţiunii Select Case este:



Select Case testexpression

[Case expressionlist-n

[statements-n]] ...

[Case Else

[elsestatements]]

End Select

unde


  • testexpression este o expresie numerică sau şir.

  • expressionlist-n este lista, separată prin virgule, a uneia sau mai multe expresii de forma:

  • expression.

  • expression To expression. Cuvântul To introduce un interval de valori, valoarea minimă fiind prima specificată.

  • Is comparisonoperator expression. Se va utiliza Is cu operatori de comparare (exceptând Is şi Like) pentru a specifica un domeniu de valori.

  • statements-n reprezintă una sau mai multe instrucţiuni care se vor executa dacă testexpression este egală cu un element din expressionlist-n.

  • elsestatements reprezintă una sau mai multe instrucţiuni care se vor executa dacă testexpression nu este egală cu nici un element din listele liniilor Case.

Dacă testexpression se potriveşte cu un element dintr-o listă Case, se vor executa instrucţiunile care urmează această clauză Case până la următoarea clauză Case, sau până la End Select. Controlul execuţiei trece apoi la instrucţiunea care urmează liniei finale End Select. Rezultă că dacă testexpression se regăseşte în mai multe liste, doar prima potrivire este considerată.

Clauza Case Else are semnificaţia uzuală "altfel, în rest, în caz contrar etc.", adică introduce instrucţiunile care se execută atunci când expresia de test nu se potriveşte nici unui element din listele clauzelor Else. Dacă aceasta este situaţia şi nu este specificată o clauză Case Else, atunci execuţia urmează cu prima instrucţiune de după End Select.

Instrucţiunile Select Case pot fi incluse unele în altele, structurile interioare fiind complete (dacă fiecare structura are End Select propriu, includerea este completă).


Pe lângă structurile prezentate, se pot utiliza trei funcţii care realizează alegeri în mod liniarizat (pe o linie de cod): Choose(), Iif(), Switch().

4.10.3. Structuri repetitive

Atunci când dorim execuţia repetată a unei sevenţe de instrucţiuni în cadrul unui program, este posibil ca acest lucru să fie cerut fără a cunoaşte numărul de repetări, sau, dimpotrivă, cunoscând acest număr.

Visual Basic suportă astfel două tipuri de structuri repetitive:


  • structuri repetitive cu contor descrise de instrucţiunile For …Next şi For…Each…Next care execută acelaşi lucru de un număr stabilit de ori ;

  • structuri repetitive cu condiţie descrise de diferitele variante ale instrucţiunii Do…Loop ce îndeplinesc aceeaşi sarcină atâta timp cât o condiţie există sau până când nu mai există o condiţie.

În cazul unui număr nedefinit de repetiţii, condiţia de oprire poate fi testată la începutul sau la sfârşitul ciclului, prin alegerea structurii adecvate.

Limbajul Visual Basic ne pune la dispoziţie o varietate de comenzi şi forme ale acestora, prin care să putem solicita oricare dintre aceste cicluri:



  • cu număr nedefinit de reluări şi, în acest caz cu testarea condiţiei de reluare fie la începutul ciclului, fie la sfârşitul acestuia;

  • cu număr cunoscut de reluări, deci cu numărător.

Comenzile repetitive sau de tip buclă permit executarea în mod repetat a unei instrucţiuni sau a unei secvenţe de instrucţiuni atâta timp cât o condiţie este adevărată sau până când o condiţie este adevărată. Acestea sunt:

  • While.....Wend;

  • Do .....Loop;

  • For.....Next;

  • For Each....Next.

Diferitele variante posibile pentru Do…Loop diferă după momentul evaluării condiţiei şi decizia luată.

Comanda While...End While are sintaxa:



While condiţie

Instrucţiuni

End While

Această comandă execută repetat una sau mai multe instrucţiuni atâta timp cât o condiţia specificată este adevărată.

Comanda Do...Loop execută o secvenţă de instrucţiuni de un număr necunoscut de ori, atâta timp cât condiţia este adevărată.

Sintaxa comenzii este:



Do While condiţie

instrucţiuni

Loop

Do...Loop testează întâi condiţia: dacă aceasta are valoarea true (este adevărată) se execută secvenţa de instrucţiuni specificată până la Loop, altfel nu se execută nimic şi se trece la prima instrucţiune de după Loop.

Avem de a face deci cu o structură repetitivă condiţionată anterior.

Comanda Do...Loop mai are şi o altă variantă, care execută secvenţa de instrucţiuni cât timp condiţia este falsă (până când aceasta devine adevărată):

Do Until condiţie

instrucţiuni

Loop

O altă variantă a acestei comenzi este cea în care mai întâi se execută secvenţa de instrucţiuni şi apoi testează condiţia, deci este o structură repetitivă condiţionată posterior.

Sintaxa instrucţiunii în acest caz va fi:

Do

instrucţiuni

Loop While condiţie

Instrucţiunile se repetă atâta timp cât condiţia este adevărată.

Dacă se doreşte repetarea instrucţiunilor cât timp condiţia este falsă se va folosi sintaxa:

Do

instrucţiuni

Loop Until condiţie
Observaţie:

O condiţie care este Null se consideră False.

Se poate abandona ciclarea oriunde în corpul structurii prin utilizarea comenzii Exit Do. Dacă apare o comandă Exit Do se poate omite chiar şi condiţia din enunţ întrucât execuţia se va termina prin această decizie.

Structurile Do pot fi inserate (dar complet incluse) unele în altele. O terminare (prin orice metodă) a unei bucle transferă controlul la nivelul Do imediat superior.


Execuţia structurilor DO este explicată în tabelul următor:

Do While

Loop



Testează condiţia la începutul buclei, execută bucla numai dacă rezultatul este True şi continuă astfel până când o nouă evaluare produce False.

Do Until

Loop



Testează condiţia la începutul buclei, execută bucla numai dacă rezultatul este False şi continuă astfel până când o noua evaluare produce True.

Do

Loop While



Se execută întotdeauna bucla o dată, se testează condiţia la sfârşitul buclei şi se repetă bucla atât timp cât condiţia este True. Oprirea este pe condiţie falsă.

Do

Loop Until



Se execută întotdeauna bucla o dată, se testează condiţia la sfârşitul buclei şi se repeta bucla atât timp cât condiţia este False. Oprirea este pe condiţie adevărată.

Pentru realizarea unei structuri repetitive cu numărător se poate utiliza instrucţiunea For...Next . Aceasta execută o secvenţă de instrucţiuni de un număr de ori precizat. Pentru aceasta comanda For...Next foloseşte un contor.

Sintaxa generală a acestei comenzi este:

For contor=început To sfârşit [Step pas]

instrucţiuni

Next [contor]

unde:


contor - este variabila contor (care numără repetările), de tip numeric.Nu poate fi de tip Boolean sau element de tablou.

început - este valoarea iniţială a contorului.

sfârşit - este valoarea finală a contorului.

pas - este cantitatea care se adună la contor la fiecare reluare. În cazul în care nu se specifica este implicit 1. Poate fi şi negativă.

instrucţiuni - sunt instrucţiunile care se repetă. Dacă nu se specifică, atunci singura acţiune este cea de modificare a contorului de un număr specificat de ori.

Valorile început, sfârşit şi pas trebuie să fie numerice. Pas reprezintă valoarea care se adaugă la valoarea iniţială a variabilei contor sau care se scade din aceasta, după fiecare execuţie a ciclului, după cum pas este pozitiv sau negativ. Dacă Step lipseşte valoarea implicită a pasului de ciclare este 1.


Practic, instrucţiunea funcţionează astfel:

  • Se iniţializează contor cu valoarea inceput şi se verifică dacă aceasta este mai mică sau egală cu valoarea de sfârşit. Dacă nu este, atunci nu se execută nimic şi se trece la prima instrucţiune de după Next. Dacă este îndeplinită condiţia de mai sus, atunci se execută o dată setul de instrucţiuni scris până la Next.

  • Se incrementează (creşte) valoarea contorului de numărare contor cu pasul precizat prin pas sau, în lipsa acestuia cu 1.

  • Se trece din nou la For (la începutul ciclului) pentru a verifica din nou contorul. Dacă acesta a ajuns la valoarea de sfârşit se termină execuţia ciclului, altfel aceasta continuă în acelaşi mod.

Specificarea numelui contorului în linia Next poate clarifica textul sursă, mai ales în cazul când exista structuri For…Next îmbricate.


Observaţie:

Corpul unei bucle For…Next poate include (complet) o altă structură For…Next. În asemenea situaţii, structurile imbricate trebuie să aibă variabile contor diferite.

Instrucţiunile Exit For pot fi plasate oriunde în corpul unei bucle şi provoacă abandonarea ciclării. Controlul execuţiei se transferă la prima instrucţiune de după linia Next.


Comanda For Each...Next repetă o secvenţă de instrucţiuni pentru fiecare element dintr-o colecţie de obiecte sau din cadrul unui tablou (matrici). Sintaxa generală este:

For Each element In grup

instrucţiuni

Next element

unde:


- element - este variabila utilizată pentru parcurgerea elementelor. Dacă se parcurge o colecţie de obiecte, atunci element poate fi Variant, o variabilă generică de tip Object sau o variabilă obiect specifică pentru biblioteca de obiecte referită (un obiect enumerat în utilitarul Object Browser). Pentru parcurgerea unui tablou, element poate fi doar o variabilă de tip Variant.

- group - este numele colectiei de obiecte sau al tabloului

- instrucţiuni - este grupul de istrucţiuni executate pentru fiecare element Instrucţiunea este utilă atunci când nu se cunoaşte numărul de elemente sau dacă se modifică, în timpul execuţiei, conţinutul colecţiei.


Execuţia unei structuri For Each…Next :

  1. Se defineşte element ca numind primul element din grup (dacă nu există nici un element, se transferă controlul la prima instrucţiune de după Next – se părăseşte bucla fără executarea instrucţiunilor).

  2. Se execută instrucţiunile din corpul buclei For.

  3. Se testează dacă element este ultimul element din grup. Dacă răspunsul este afirmativ, se părăseşte bucla.

  4. Se defineşte element ca numind următorul element din grup.

  5. Se repetă paşii 2 până la 4.

Observaţie:

Pot fi utilizate instrucţiunile Exit For pentru ieşirea forţată din ciclu.

Buclele ForEach...Next pot fi imbricate cu condiţia ca elementele utilizate la iterare să fie diferite.

Pentru ştergerea tuturor obiectelor dintr-o colecţie se va utiliza For…Next şi nu For Each…Next. Se va utiliza ca număr de obiecte colectie.Count.


Programarea orientată pe obiecte produce, datorită calificărilor succesive, construcţii foarte complexe atunci când se numesc proprietăţile unui obiect. În cazul modificărilor succesive ale mai multor proprietăţi ale aceluiaşi obiect, repetarea zonei de calificare poate produce erori de scriere şi conduce la un text greu de citit.

În acest caz codul este simplificat prin utilizarea structurii With…End With.

O asemenea structură execută o serie de instrucţiuni pentru un obiect sau pentru o variabilă de tip utilizator.

Sintaxa este:



With object

[instrucţiuni]

End With

unde:


- object - este numele unui obiect sau a unui tip definit de utilizator;

- instrucţiuni - sunt instrucţiunile care se execută pentru entitatea precizată.

Permiţând omiterea calificărilor din referinţele la obiectul precizat, orice construcţie de tipul ".nume" este interpretată în instrucţiunile structurii drept "object.nume".


Observaţii:

Într-un bloc With nu se poate schimba obiectul procesat.

La plasarea unui bloc With în interiorul altui bloc With, obiectul extern este mascat complet, deci calificările eventuale la acest obiect vor fi efectuate.

Nu se recomandă saltul în şi dintr-un bloc With.



4.11. COMENZI PENTRU LUCRUL CU FIŞIERE
Fişierele conţin colecţii de date omogene ca natură şi criterii de prelucrare, memorate pe discul magnetic. Fişierele stochează pentru folosire ulterioară date numerice, texte, imagini, etc. Fişierele reprezintă principala formă de organizare a datelor pe disc. Atât programele scrise de noi, scrise într-un limbaj de programare dorit, cât şi colecţiile de date necesare funcţionării acestor programe sunt exemple de fişiere.

Accesul la datele unui fişier poate fi:



  • Binary - caz în care programatorul trebuie să localizeze în fişier numărul de caractere ce urmează a fi citite sau scrise – un mod de acces mai puţin utilizat.

  • Secvenţial - situaţie în care pentru a ajunge la o anumită înregistrare din fişier, trebuie parcurse una după alta toate înregistrările fişierului (până când se ajunge la cea dorită);

  • Aleator – când e permis un acces direct la înregistrarea căutată, fără a fi necesară citirea înregistrărilor precedente.


4.11.1. Deschiderea fişierului
Deschiderea fişierului – este o operaţie care trebuie executată înainte de orice prelucrare a acestuia. Pentru operaţii de intrare sau ieşire, orice fişier trebuie deschis cu comanda FileOpen. Sintaxa comenzii se prezintă astfel:
FileOpen ( numar_fişier As Integer, nume_fisier As String, mod_de_deschidere As OpenMode [, acces As OpenAccess, blocare AsOpenShare, lung_inreg As RecordLength ] )
unde:

  • nume fişier – este o expresie de tip şir de caractere (String) care specifică numele fişierului. Acesta poate include întreaga cale: unitate de disc, director etc;

  • mod de deschidere – specifică modul de deschidere a fişierului prin unul din următoarele cuvinte cheie: Append (adăugare), Binary (binar), Input (citire), Output (scriere) sau Random (aleator); Dacă lipseşte, instrucţiunea Open deschide fişierul în modul de acces Random.

  • acces – specifică operaţiile permise asupra fişierului prin unul dintre următoarele cuvinte cheie: Read (citire), Write (scriere) sau ReadWrite (citire-scriere);

  • blocare – specifică operaţiile permise la deschiderea fişierului de către un alt proces prin unul dintre următoarele cuvinte cheie: Shared (partajat), Lock Read (citire interzisă), Lock Write (scriere interzisă), lock Read Write.

  • numărFişier – un număr valid de fişier, cuprins între 1şi 511 inclusiv. Utilizând funcţia FreeFile se poate obţine următorul număr disponibil.

  • LungÎnreg- un număr mai mic sau egal cu 32767 (octeţi). Pentru fişierele deschise în acces aleator această valoare este mărimea înregistrării. Pentru fişierele text reprezintă numărul de caractere transferate în buffer.


Observaţie:

Instrucţiunea FileOpen alocă o memorie tampon pentru operaţiile de intrare/ieşire (I/O) asupra fişierului şi determină modul de accces pentru memoria tampon.

Dacă fişierul specificat cu nume fişier nu există, atunci acesta va fi creat, dacă la mod de deschidere s-a specificat Append, Binary, Output sau Random
În legătură cu aceste moduri de deschidere trebuie să reţinem următoarele:


  • Append – permite adăugarea de noi înregistrări în fişierul cu numele specificat sau crearea acestuia, dacă el nu există. Practic cursorul se plasează după ultimul caracter dacă este un fişier cu acces secvenţial sau după ultima înregistrare dacă e vorba de un fişier proiectat pentru acces aleator.

  • Binary – permite scrierea sau citirea în valori numerice. De exemplu, dacă se deschide în modul de acces Binary un fişier .bmp (imagine grafică), atunci ca efect se generează o reprezentare numerică a imaginii din fişierul respectiv.

  • Input – permite doar citirea fişierului, care se va face secvenţial, de la început spre sfârşit, câte un caracter sau câte o înregistrare.

  • Output – permite practic crearea fişierului, prin scrierea secvenţială în cadrul acestuia, pe rând, a câte unui caracter sau câte o înregistrare. Dacă fişierul exista şi a fost deschis Output, el va fi practic recreat, adică noul fişier se va suprascrie peste cel vechi. De aceea se recomandă multă atenţie la utilizarea acestui mod de deschidere. Pentru a scrie noi înregistrări într-un fişier existent vom deschide fişierul în modul Append.

  • Random – permite fie crearea, fie citirea unui fişier în acces aleator.



Observaţie:

Un fişier deschis în mod Append sau Output trebuie neapărat închis înainte de a fi deschis cu un alt număr. Fişierele deschise în mod Binary, Input sau Random pot fi deschise cu un alt număr, fără a fi necesară închiderea lor prealabilă.


Pentru accesul secvenţial se poate specifica:

APPEND – pentru a adăuga înregistrări noi la sfârşit;

INPUT – pentru a citi înregistrările din fişier;

OUTPUT – pentru crearea unui nou fişier.



Pentru accesul binary se specifică accesul BINARY, iar pentru cel random se specifică RANDOM. Dacă fişierul este deja deschis şi existent, la închidere şi salvare prin OUTPUT, acesta rescrie fişierele existente,.

Pentru a lucra cu mai multe fişiere simultan, se va utilize funcţia FreeFile, care returnează următorul număr de fişiere, care poate fi utilizat în instrucţiunea FileOpen.


4.11.2. Comenzi pentru fişiere aleatoare
Descrierea câmpurilor ce formează înregistrările unui fişier aleator se face utilizând o declaraţie de tip utilizator.

STRUCTURE numetip

NumeVariabila1 as ......

.......


NumeVariabilak as ......

END STRUCTURE
PUBLIC nume_înregistrare As numetip

Această declaraţie trebuie făcută pentru a fi acceptată într-un modul, cu o procedură SUB MAIN( ) (se adaugă la elementele proiectului un MODUL - Add Module din submeniul opţiunii Project – în care se declară tipul utilizator şi în mod public înregistrarea de tipul respectiv. Astfel declarată înregistrarea este accesibilă din toate componentele proiectului.

Reamintim că înregistrările dintr-un fişier pot fi uniform structurate prin intermediul unor zone ce partajează lungimea înregistrării şi care se numesc câmpuri. În acelaşi câmp din înregistrări diferite se înregistrază acelaşi tip de date, de aceeaşi lungime. Spre exemplu, într-un fişier în care sunt înregistrate date despre situaţia rezultatelor la examenele dintr-o sesiune, informaţiile din înregistrări pot avea următoarea formă:


1

Nume Prenume

An

Grupa

Matematică

Algoritmi

Arhitectură

Economie

2

Numpren

An

Gr

Mate

Algo

Arhi

Econ

3

Sir

Num

Sir

Num

Num

Num

Num

unde în rândul:



  1. s-au trecut informaţiile din înregistrare ce corespund câmpurilor;

  2. s-au trecut numele câmpurilor cum vor fi ele folosite în program;

  3. s-au trecut tipurile de date pentru fiecare câmp.

Descrierea acestei înregistrări printr-un tip utilizator poate fi făcută astfel:



STRUCTURE TIPSTUD

Numpren As string

An As integer

Gr As string



Mate As integer

Algo As integer

Arhi As integer

Econ As integer

END STRUCTURE

PUBLIC studenti AS tipstud
Scrierea unei înregistrări într-un fişier aleator se face cu instrucţiunea FilePut care are următoarea sintaxă:
FilePut(NumeFişier, NumeVariabilă , NumărÎnreg)

unde:
NumărÎnreg este numărul înregistrării pe care dorim să o scriem.



NumeVariabilă este numele variabilei ce defineşte înregistrarea (declarată de tipul utilizator).

Scrierea datelor în fişierele binare se asemănă cu cea în fişierele aleatoare, folosind instrucţiunea FilePut.


Poziţionarea pentru citire pe o înregistrare dintr-un fişier aleator se face cu instrucţiunea FileGet care are următoarea sintaxă:
FileGet( numărFişier, varCitire [, numărInreg]

unde numărfişier este numărul de identificare al fişierului dat în instrucţiunea FileOpen, varCitire este variabila în care se vor stoca datele citite din fișier, iar numărInreg este numărul de înregistrare ce se doreşte accesată.


Observaţie:

La fişierele aleatoare accesul la înregistrări se poate face doar prin intermediul numărului de înregistrare.

Yüklə 0,58 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin