Sunteți pe pagina 1din 19

Unitatea de nvare 6 PROGRAMAREA N VB.

NET
________________________________________________________________________________________________________________
_

UNITATEA DE NVARE 7
TABLOURI I COLECII N VB NET
___________________________________________________________________________

Cuprins
Obiectivele unitii de nvare 7
7.1. Despre tablouri
Definiie
Descriere
ntrebri
7.2. Declararea i iniializarea tablourilor
Definirea
Iniializarea
ntrebri
7.3. Redimensionarea tablourilor
Redimensionarea
Sintaxa comenzii Redim
ntrebri
7.4. Clasa Array
Proprieti
Metode
ntrebri
7.5. Parcurgerea tablourilor
Parcurgerea vectorului
Parcurgerea tablourilor cu dou sau mai multe dimensiuni
Accesul la proprietile i metodele obiectelor
ntrebri
7.6. Colecii
Definire
Colecii versus tablouri
Operaii oferite de o colecie
ntrebri
7.7. Clasa ArrayList
Descriere
Proprieti
Metode
1
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

Parcurgerea unei colecii


ntrebri

Bibliografie Unitatea de nvare 7

2
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

OBIECTIVELE UNITII DE NVARE 7

nsuirea cunotinelor necesare pentru a nelege cum se definesc i cum se

utilizeaz tablourile.
Cunoaterea proprietilor i metodelor clasei Array.
nsuirea cunotinelor necesare pentru a nelege cum se definesc i cum se

utilizeaz coleciile.
Cunoaterea proprietilor i metodelor clasei ArrayList.

7.1. Despre tablouri

Definiie

Un tablou este o variabil de memorie ce conine o list (o mulime) de elemente de acelai


tip, stocate n zone contiguie de memorie;

Descrierea

Un tablou se caracterizeaz prin:


nume (numele variabilei)
rang/dimensiune (numrul de dimensiuni/ indeci): unidimensional (1 index),
bidimensional (2 indeci); tridimensional (3 indeci), etc. Pentru fiecare dimensiune
tabloul va avea alocat un index. Indexul pentru fiecare dimensiune are o valoare de
nceput/limita inferioar (n VB.NET 0) i o limit superioar (egal cu numrul de
valori ale unei dimensiuni - 1)
capacitate (numrul de elemente care pot fi memorate/nregistrate) n tablou), care
definete numrul maxim de elemente care pot fi memorate. Exemplu capacitatea
tabloului tridimensional VanzariJudetMagazinLuna(39,15,11) care va memora
vnzrile unei firme pentru 40 de judee, maxim 16 magazine n jude pe luni (12) va
fi: 40 x 16 x 12 = 7.680 celule (sau elemente)
tipul/natura elementului memorat (toate elementele sunt de acelai tip)
Accesarea unui element, n scopul citirii sau modificrii sale, se realizeaz n funcie de
numele tabloului i de indexul (poziia) elementului.
Dac elementele tabloului sunt obiecte, atunci referirea proprietilor sau a metodelor
acestora se face dup sintaxa:
numeTablou(index).numeProprietate
sau
3
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

numeTablou(index).numeMetod

ntrebri
1. Ce este un tablou?
2. Prin ce se caracterizeaz un tablou?
3. Cum poate fi accesat un element (o celul) a unui tablou?
4. Cum invocm o proprietate sau o metod a unui obiect memorat n celula unui tablou?
7.2. Declararea i iniializarea tablourilor

Definirea

Un tablou se definete astfel:


[Acces] numeTablou([listIndeci]) As tipData
Unde:
acces: definete nivelul de acces i poate fi Dim, Public, Protected, Friend, Private,
ProtectedFriend;
tipData: definete natura datelor memorate i poate fi dat de tip primitiv sau obiect
(toate datele sunt de acelai tip);
listIndeci: conine valorile maxime ale indecilori pentru fiecare dimensiune. La
definire lista poate lipsi dar este obligatorie nainte de utilizare. Dac la definire lista
lipsete, n VB se considera c tabloul este definit dinamic (adic) putea fi
redimensionat dup necesiti. In VB.NET toate tablourile sunt dinamice, pot fi
redimensionate.
Exemplu:

4
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

Iniializarea

Aa cu am precizat mai sus elementele unui tablou se acceseaz n general cu ajutorul


indecilor.
Astfel fiind dat tabloul Dim NumeStudenti (99) As String
pentru a ncrca (memora date) n celula 10 (care care indexul 9) o valoare (obiectul
unStudent de tip Student) vom avea:
NumeStudenti(9)=unStudent
(practic tabloul cu indexul adecvat apare n partea stng a unei operatii de atribuire)
pentru a citi (a valorifica) informaia din celula 15 (index 14) vom avea:
StudentCautat= NumeStudenti(14)
(practic tabloul cu indexul adecvat apare n partea dreapt a unei operatii de atribuire)
ntrebri
1. Cum se declar un tablou?
2. Ce reprezint valoarea unui index la definirea unui tablou?
3. Cum se ncarc un element n tablou?
4. Cum se citete valoarea unui element dintr-un tablou?
7.3. Redimensionarea tablourilor

Redimensionarea

Un tablou se redimensioneaz (se definete dinamic) cu ajutorul comenzii Redim. Practic se


creeaz un nou tablou cu un numr nou de elemente. n mod implicit prin redimensionare se
pierd datele coninute de tabloul iniial. Cu Redim putem fixa numrul iniial de dimensiuni
dac acestea nu au fost fixate la definirea iniial, dup care nu mai pot fi modificate. In mod
normal prin Redim se modific doar limitele superioare ale dimensiunilor.

Sintaxa comenzii Redim

Sintaxa comenzii Redim este:

Redim [Preserve] numeTablou(listIndeci)


Unde:
Preserve \pri-zrv\: este o clauz opional prin a crui prezen se asigur copierea
elementelor existente n noul tablou. Datele din vechiul tabel sunt pstrate;
5
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

listIndeci: conine noii indeci, limita superioar, pentru fiecare dimensiune, a


fiecrui nou index;
Exemplu:
- redimensionarea vectorului Examene cu pierderea datelor
Redim Examene (14)
- redimensionarea vectorului Examene cu pstrarea datelor
Redim Preserve Examene (20)
ntrebri
1. Ce modific comanda Redim?
2. Ce se ntmpl cu datele aflate n tablou cu ocazia redimensionrii?
3. Cum putem conserva (pstra) datele aflate n tablou la redimensionare?
7.4. Clasa Array
n VB.NET, orice tablou este un obiect de tip Array, care posed un set de proprieti i
metode.

Proprieti

Proprieti specifice clasei Array sunt:


Length: returneaz numrul total de elemente coninute de tablou (n cazul nostru,
pentru vectorul Examene, 10 elemente; n cazul VanzariJudetMagazinLuna(39,15,11),
40 x 16 x 12 = 7.680 elemente);
Rank: returneaz numrul de dimensiuni ale tabloului, minim 1 (n cazul nostru,
pentru vectorul Examene, 1; n cazul VanzariJudetMagazinLuna(39,15,11), 3);

Metode

Principalele metode de instan ale clasei Array sunt:


6
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

GetLength(dimensiune As Integer):returneaz numrul de elemente ale dimensiunii


precizate;
GetLowerBound(dimensiune As Integer): returneaz valoarea limitei inferioare a
indexului pentru dimensiunea precizat (pentru tablourile VB.NET 0);
GetUpperBound(dimensiune As Integer): returneaz valoarea limitei superioare a
indexului pentru dimensiunea precizat
Principalele metode tip clas (partajate) ale clasei Array sunt:

Array.Sort(numeTablou): sorteaz cresctor elementele tabloului precizat (tabloul


trebuie s aib doar o dimensiune - vector);
Array.Reverse(numeTablou): inverseaz elementele tabloului precizat (tabloul trebuie
s aib doar o dimensiune - vector);

ntrebri
1. Care sunt principalele proprieti ale clasei Array ?
2. La ce tip de tablou funcioneaz metoda Sort?
3. Care sunt principalele metode de instan ale clasei Array?

7
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

7.5. Parcurgerea tablourilor

Parcurgerea vectorului

Parcurgerea vectorului se face cu ajutorul structurii repetitive: For Next cu sintaxa:


For index As Integer = 0 To NumeTabblou.GetUpperBound(dimensiune)

Next index

Exemplu:
Dim Vector(3) As Integer

Dim Vector(3) As Integer

For i As Integer=0 To 3

For i As Integer=0 To Vector.GetUpperBound(0)

MsgBox(Vector(i))

sau

Next i

MsgBox(Vector(i))
Next i

Parcurgerea tabloului de rang mai mare ca 1

Parcurgerea tablourilor cu dou sau mai multe dimensiuni se face cu ajutorul structurii
repetitive: For Next imbricate cu sintaxa:
For
For
For
.
Next
Next
Next

Exemplu:
Pentru tabloul Matrice(2, 3) cu valorile de tip String:
Coloan

Coloan 1

Coloan 2

Coloan 3

Coloan 4

(index: j=0)

(index: j=1)

(index: j=2)

(index: j=3)

1,1

1,2

1,3

1,4

Linie
Linie 1 (index:

8
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

I=0)
Linie 2 (index:
I= 1)

2,1

2,2

2,3

2,4

Linie 3 (index:
I= 2)

3,1

3,2

3,3

3,4

Vom avea:
Private Sub Button3_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button3.Click
'Definire tablou
Dim Matrice(2, 3) As String ' o matrice cu 3 linii si 4 coloane
'a) incarcare date
'parcurg linia
For i As Integer = 0 To Matrice.GetUpperBound(0)
'parcurg coloana
For j As Integer = 0 To Matrice.GetUpperBound(1)
'definesc un element
Dim unElement As String
unElement = ""
'construiesc valoarea elementului de linie i+1 si coloana

j+1

unElement = CStr(i + 1) & "," & CStr(j + 1)


'adaug elementul in linia i si coloana j
Matrice(i, j) = unElement
Next j
Next i
'b) Vizualizare continut vector
'parcurg linia
For i As Integer = 0 To Matrice.GetUpperBound(0)
'parcurg coloana
For j As Integer = 0 To Matrice.GetUpperBound(1)
'afiseaza valoarea din linia i si coloana j
MsgBox(Matrice(i, j))
Next j
Next i
End Sub

Accesul la proprietile i metodele obiectelor

Accesul la proprietile i metodele unui obiect memorat ntr-un tablou se realizeaz


tot cu ajutorul indecilor, dar numele tabloului mpreun cu incii adecvai vor califica
numele proprietii sau metodei

Exemplu:
9
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

Fie clasa Examen cu urmtoarea structur:

Unde: m_Disciplina este de tip String; m_DataExamen este de tip Date;


m_Nota este de tip Integer. Iar pentru atributele: m_Disciplina ,
m_DataExamen, m_Nota vor fi implementate i proprietile
corespunztoare: disciplina , dataExamen, nota.
Pentru tabloul Examene care conine ca elemente obiecte instaniate din
clasa Examen ( tablou cu o dimensiune i care poate conine maxim 10
examene), vom avea:
a) Definirea clasei Examen:
Public Class Examen
Private m_Disciplina As String
Private m_DataExamen As Date
Private m_Nota As Integer
Public Property disciplina() As String
Get
Return m_Disciplina
End Get
Set(ByVal value As String)
m_Disciplina = value
End Set
End Property
Public Property dataExamen() As Date
Get
Return m_DataExamen
End Get
Set(ByVal value As Date)
m_DataExamen = value
End Set
End Property
Public Property nota() As Integer
Get
Return m_Nota
End Get
Set(ByVal value As Integer)
m_Nota = value
End Set
End Property
End Class

b) Definirea tabloului Examene


10
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

Public Class Form1


Dim Examene(9) As Examen
End Class

c) ncarc elementul 3 (index 2)


Private Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
'Definesc un obiect
Dim unExamen As New Examen
'Incarc obiectul in celula 2
Examene(2) = unExamen
'Incarc proprietatile obiectului
Examene(2).disciplina = InputBox("Tasatai disciplina")
Examene(2).dataExamen = InputBox("Tastati data")
Examene(2).nota = InputBox("Tasatati nota")
End Sub

Practic proprietatea care urmeaz s fie ncrcat n tablou, apare n


partea stng a unei operaii de atribuire, fiind calificat (precedat de
numele tabloului cu indexul 2 i punct: Examene(2). )
d) Listez elementul 3 (index 2)
Private Sub Button2_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button2.Click
'Definesc variabila pentru mesaj
Dim s As String
s = ""
'Verific daca in celula am memorat un obiect
If IsNothing(Examene(2)) Then
'daca nu am memorat un obiect
MsgBox("In celula ... nu avem nimic incarcat")
Else
'construiesc mesajul daca am memorat un obiect
s = Examene(2).disciplina & " " & Examene(2).dataExamen & " " &
Examene(2).nota
End If
'Afisez mesajul (continutul celulei 3 - index 2)
MsgBox(s)
End Sub

Practic proprietatea care urmeaz s fie citit (extras) din tablou,


apare n partea dreapt a unei operaii de atribuire, fiind calificat
(precedat de numele tabloului cu indexul 2 i punct: Examene(2). )
ntrebri
1. Cum se parcurge un vector?
2. Ce sunt structurile repetitive imbricate i ce reguli trebuie s ndeplineasc?
3. Cum se parcurge un tablou?
4. Cum avem acces la proprietile i metodele unui obiect memorat n tablou?
11
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

7.6. Colecii

Definire

Colecia constituie o alt variant de reprezentare i stocare, n memoria intern, a mulimilor


(listelor) de date.

Colecii versus tablouri

Avantajele coleciilor fa de tablouri:


Comportament dinamic: coleciile permit adugarea sau eliminarea elementelor,
redimensionarea fiind efectuat automat;
Structur eterogen: elementele unei colecii pot fi de tipuri diferite.
Dezavantajele coleciilor fa de tablouri:
Lente n utilizare: elementele sunt memorate n zona Heap, n spaii necontigue;
Structur eterogen: elementele unei colecii putnd fii de tipuri diferite ngreuneaz
procedurile de control, validare i valorificare.

Operaii oferite de o colecie

Operaiile elementare oferite de o colecie vizeaz:


Adugarea unui element;
Returnarea unui element;
Eliminrea unui element;
Golirea coleciei
7.8. Clasa ArrayList

Definire

Colecia ArrayList utilizeaz un tablou intern, a crei capacitate este modificat automat, pe
msur ce sunt adugate noi elemente. O colecie ArrayList se definete i se instaniaz
astfel:
Dim colectieAL As ArrayList=New ArrayList()
Sau
12
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

Dim colectieAL As ArrayList New ArrayList()

Proprieti

Principalele proprieti oferite de ArrayList sunt:


Capacity: seteaz sau returneaz numrul de elemente pe care colecia le poate stoca;
Count: red numrul de elemente ale coleciei;
Item (index As integer): returneaz elementul coleciei specificat prin index.

Metode

Principalele metode oferite de ArrayList sunt:


Add(valoare As Object): adaug n colecie elementul specificat prin parametrul
valoare i returneaz indexul alocat acestuia;
Clear(): golete colecia. Count devine 0, iar Capacity nu se modific;
Contains(valoare As Object): returneaz True dac elementul precizat prin valoare se
afl n colecie;
Remove(obiect as object): elimin din colecie elementul precizat prin valoarea sa;
RemoveAt(obiect as object): elimin din colecie elementul precizat prin index;
Sort(): ordoneaz cresctor elementele coleciei;
TrimToSize(): seteaz capacitatea coleciei la numrul de elemente ale acesteia.

Parcurgerea coleciei ArrayList

Parcurgerea coleciei ArrayList se face cu ajutorul structurii repetitive: For each


Next.

Etapele necesare definirii, ncrcrii i utilizrii (valorificrii) unei colecii


ArrayList de obiecte

Etapele lucrului cu ArrayList sunt:

a) se definesc clasele
b) se definete colecia
13
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

c) se ncarc obiectele n colecie


-se instaniaz un obiect al unei clase
-se preiau valorile proprietilor (uneori i ale atributelor neprotejate) ale
obiectelor i se adaug n colecie
d) se actualizeaz colecia
-se terg anumite obiecte din colecie
-se adaug noi obiecte n colecie
-se modific valorile unor proprieti ale unui obiect din colecie
e) se valorific (se utilizez) datele unei colecii
-se parcurge colecia i se fac prelucrrile solicitate pe baza datelor din
colecie
Exemplu:
Considerm urmtoarea ierarhie de clase n VB.NET

Unde:

14
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

-clasa Document este clas abstract iar clasa Cec este o clas
concret. Clasa Cec este clasa secundar/derivat/copil avnd clasa
Document clas de baz/superclasa/printe
-atributele:m_FelDoc, m_NrDoc, m_EmitentDoc, m_TipOperatie,
m_DenumireTert sunt de tip String; m_DataDoc este de tip Date i
m_SumaCec este de tip Integer;
-atributul m_TipOperatie poate lua doar valorile: I pentru cec de
ncasat; P pentru cec de plat i S pentru cec depus spre scontare
-pentru atributele Private: m_FelDoc, m_TipOperatie i m_Suma se vor
defini proprietile similare: felDoc, tipOperatie, sumaCec
Cerine:
i) s se defineasc clasele
ii) s defineasc la nivelul clasei Form1 colecia Cecuri
iii) la evenimentul click pe Button1 s se instanieze obiectul cec, s se
preia cu InputBox valorile proprietilor felDoc, tipOperatie, sumaCec i
s se adauge n colecie
iv) la evenimentul click pe Button2 s se afieze coninutul coleciei
element cu element
v) la evenimentul click pe Button3 s se parcurg colecia Cecuri i s
se afieze Suma de incasate este = , sum care se va obine prin
nsumarea sumelor nscrie n cecurile din colecie care au tipOperatie
egal cu I
Vom avea:
i) definirea claselor
- definirea clasei document
Public MustInherit Class Document
'definirea atributelor
Private m_FelDoc As String
Private m_NrDoc As String
Private m_DataDoc As Date
Private m_EmitentDoc As String
'definirea proprietatilor
Public Property felDoc() As String
Get
Return m_FelDoc

15
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

End Get
Set(ByVal value As String)
m_FelDoc = value
End Set
End Property
'definirea metodelor
End Class

-definirea clasei Cec


Public Class Cec
'definirea clasei parinte
Inherits Document
'definirea atributelor
Private m_TipOperatie As String
Private m_SumaCec As Integer
'definirea proprietatilor
Public Property tipOperatie() As String
Get
Return m_TipOperatie
End Get
Set(ByVal value As String)
'validarea datelor introduse
If value = "I" Or value = "P" Or value = "S" Then
m_TipOperatie = value
Else
m_TipOperatie = ""
MsgBox("Tip operatie diferit de I,P sau S")
End If
End Set
End Property
Public Property sumaCec() As Integer
Get
Return m_SumaCec
End Get
Set(ByVal value As Integer)
m_SumaCec = value
End Set
End Property
'definirea metodelor
End Class

ii) definirea coleciei


Public Class Form1
'definirea colectiei
Dim cecuri As New ArrayList
End Class

iii) instanierea unui obiect i adaugarea n colecie


Public Class Form1
'definirea colectiei

16
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

Dim cecuri As New ArrayList


Private Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
'Definesc un cec o instanta a clasei Cec
Dim unCec As New Cec
'Incarc proprietatile
unCec.felDoc = InputBox("Tastati fel document")
unCec.tipOperatie = InputBox("Tastati tip operatie")
unCec.sumaCec = InputBox("Tastati suma")
'Verific daca cecul este corect
If unCec.tipOperatie = "" Then
'Distrug cecul - nu este corect
MsgBox("Cec gresit")
unCec = Nothing
Else
'Incarc un cec in colectie - este corect
cecuri.Add(unCec)
MsgBox("Cec Ok")
End If
End Sub
End Class

iv) listarea coninutului coleciei


Private Sub Button2_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button2.Click
'Listez datele din colectie
For Each c As Cec In cecuri
MsgBox(c.felDoc & " " & c.tipOperatie & " " & c.sumaCec)
Next
End Sub

v) se afieaz Suma de ncasat


Private Sub Button3_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button3.Click
'definirea variabilei pentru suma cecurilor incarcate
Dim sumaI As Integer
'initializare
sumaI = 0
'Parcurg colectia
For Each c As Cec In cecuri
'Daca este Cec de incasat adun sumaCec
If c.tipOperatie = "I" Then
sumaI = sumaI + c.sumaCec
End If
Next
'Afisez suma de incasat
MsgBox("Suma de incasat este: " & sumaI)
End Sub

17
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

Bibliografie Unitatea de nvare 1

1. A. COZGAREA Programarea calculatoarelor, introducere n VB.NET, Editura


ASE Bucureti, 2008;
2. Gh. POPESCU Programarea calculatoarelor n limbajul Visual Basic, Editura
Gestiunea Bucureti, 2007;
3. Octavian DOSPINESCU Dezvoltarea aplicaiilor n VB.NET, Editura Polirom
Iai, 2004.

18
Copyright Catedra Informatic de Gestiune, 2010

Unitatea de nvare 6 PROGRAMAREA N VB.NET


________________________________________________________________________________________________________________
_

OBIECTIVELE UNITII DE NVARE 1............................................................2


1.1. Necesitatea programrii, programe informatice...............................2
1.2. Algoritmi.................................................................................................. 4
1.3. Limbaje de programare..........................................................................6
1.4. Metode de programare...........................................................................8

19
Copyright Catedra Informatic de Gestiune, 2010

S-ar putea să vă placă și