Sunteți pe pagina 1din 38

CAPITOLUL 1

Prezentarea mediului de programare C# i a platformei .NET

1.1 Prezentarea generala a mediului de programare


.NET este un cadru (Framework) de dezvoltare software unitar care permite realizarea,
distribuirea i rularea aplicaiilor desktop Windows i aplicaiilor WEB.
Platforma .NET pune laolalt mai multe tehnologii (ASP, XML, OOP, SOAP, WDSL, UDDI)
i limbaje de programare (VB, C++, C#, J#) asigurnd, totodat, att portabilitatea codului
compilat ntre diferite calculatoare cu sistem Windows, ct i reutilizarea codului n programe,
indiferent de limbajul de programare utilizat.
.NET Framework este o component livrat mpreun cu sistemul de operare Windows.
Prezentarea i exemplele din cadrul acestor cursuri se vor face cu Visual Studio 2010 i
ASP.NET 4.0. ASP, Active Server Pages reprezint o nou tehnologie pus la dispoziia
utilizatorilor pentru realizarea paginilor Web.
Componenta .NET Framework st la baza tehnologiei .NET, este ultima interfa ntre
aplicaiile .NET i sistemul de operare i actualmente conine:
Limbajele C#, VB.NET, C++ i J#. Pentru a fi integrate n platforma .NET, toate aceste
limbaje respect nite specificaii OOP numite Common Type System (CTS). Ele au ca
elemente de baz: clase, interfee, delegri, tipuri valoare i referin, iar ca mecanisme:
motenire, polimorfism i tratarea excepiilor.
Platforma comun de executare a programelor numit Common Language Runtime
(CLR), utilizat de toate cele 4 limbaje.
Ansamblul de biblioteci necesare n realizarea aplicaiilor desktop sau Web, se numete
Framework Class Library (FCL).

Platforma ofer instrumente pe care le putem folosi i n alte programe,


ofer acces uor la baze de date, permite realizarea desenelor sau a altor elemente grafice.
Spaiul de nume System.Windows.Forms conine instrumente (controale) ce permit
implementarea elementelor interfeei grafice cu utilizatorul. Folosind aceste controale, putei
proiecta i dezvolta rapid i interactiv, elementele interfeei grafice. Tot .NET v ofer clase care
efectueaz majoritatea sarcinilor uzuale cu care se confrunt programele i care plictisesc i fur
timpul programatorilor, reducnd astfel timpul necesar dezvoltrii aplicaiilor.

1.2 Limbajului C#, noiuni generale

Limbajul C# a fost dezvoltat de o echip restrns de ingineri de la Microsoft, echip din


care s-a evideniat Anders Hejlsberg (autorul limbajului Turbo Pascal i membru al echipei care
a proiectat Borland Delphi).
C# este un limbaj simplu, cu circa 80 de cuvinte cheie i 12 tipuri de date predefinite. El
permite programarea structurat, modular i orientat obiectual, conform perceptelor moderne
ale programrii profesioniste. Principiile de baz ale programrii orientate pe obiecte
(NCAPSULARE, MOTENIRE, POLIMORFISM) sunt elemente fundamentale ale
programrii C#.
n general, limbajul motenete sintaxa i principiile de programare din C++. Sunt o serie
de tipuri noi de date sau funciuni diferite ale datelor din C++, iar n spiritul realizrii unor
secvene de cod sigure (safe), unele funciuni au fost adugate (de exemplu, interfee i delegri),
diversificate (tipul struct), modificate (tipul string) sau chiar eliminate (motenirea multipl i
pointerii ctre funcii). Unele funciuni (cum ar fi accesul direct la memorie folosind pointeri) au
fost pstrate, dar secvenele de cod corespunztoare se consider nesigure datorit erorilor pe
care le pot face programatorii nceptori.
1.3 Utilizarea mediului de desvoltare Visual Studio 2010 i a limbajului C#
La pornirea mediului de dezvoltare Visual Studio 2010 apare pe ecran urmtoarea
fereastr, fig. 1.1. Dac se pornete pentru prima dat Vizual Studio va trebui s alegei din
opiuni limbajul C#, dup aceea dac nu se schimb opiune Vizual Studio va porni cu C#.

Fig. 1.1
Pentru a deschide spaiul de lucru se acceseaz meniul File New Project, fig.1.2.

Fig. 1.2
n urma acestei aciuni apare o form cu un meniu din care se alege Windows Forms
Application, fig. 1.3, pentru aplicaii cu interfa Windows sau se poate alege ASP.NET Web
Application pentru aplicaii cu interfa Web acestea din urm nu fac obiectul prezentei
lucrrii. La baza formei s gsete o rubric de editare n care se trece denumirea aplicaiei.

Fig. 1.3

n urma acestei alegeri se deschid ferestrele de lucru fig. 1.4

Fig. 1.4

Dac nu completam titlul si directorul n care se va salva Visual C# va da automat o denumire i


un director pentru programul la care lucram. Este foarte important s regsim aplicaia pe harddiskul calculatorului. Pentru acest va trebui cu atenie, n momentul cnd ncepem o nou
aplicaie s o salv urmnd 2 pai obligatorii:
1. Se denumete aplicaia folosind un nume sugestiv, fig. 1.3
2. Se salveaz toate fiierele aplicaiei prin acionarea butonului din bara de instrumente,
apare o form, fig. 1.5 cu care se poate selecta directorul n care se vor crea fiierele
aplicaiei acionnd butonul Browse

Fig. 1.5
Pe forma de pe ecran, pentru construirea interfeei se pot utiliza obiectele vizuale predefinite care
se gsesc pe bara din partea stng. Plasarea cursorului deasupra ei determin deschiderea unei
forme ce conine toate obiectele disponibile pentru versiunea cu care se lucreaz, fig. 1.6.
Obiectul dorit a fi utilizat se selecteaz cu mausul i se trage n forma de lucru, dac selectm

button, fig. 1.6, vomobine rezultatul din fig. 1.8 n care obiectul selectat, butonul este plasat n
forma de pe ecran.
preS vom

Fig. 1.7

Fig. 1.8
Proprietile obiectului apar n caseta cu proprieti din partea dreapta, jos a spaiului de lucru.
Acestea pot fi modificate n timpul construirii aplicaiei sau dinamic n timp ce ruleaz aplicaia.
Astfel se poate modifica textul ce apare pe buton prin scrierea textului dorit, de exemplu Red la
rubrica text din caseta cu proprieti a butonului, fig. 1.9. Dup scrierea textului se apas tasta
enter i textul apare scris pe buton.

Fig. 1.9
Dac n timpul rulrii programului se dorete s se execute o anumit secven de instruciuni la
acionarea butonului, pentru aceasta trebuie definit un eveniment asociat butonului.
Evenimentele ce pot fi asociate unui obiect se gsesc tot n caseta de proprieti i pot fi
vizualizate prin acionarea butonului cu simbolul unei sgei
, fig 1.10.

Fig. 1.10
Dac la rubrica Click facem dubluclic n partea dreapt a rubricii apare pe ecran codul
programului cu definiia funciei care se va executa la apsarea butonului, fig.1.11.

Fig. 1.11
Codul programului scris automat de ctre Vizual C# se compune din pachetul de funcii
utilizat de program care sunt introduse n cod cu instruciunea using. Namespace urmat de
denumirea aplicaiei reprezint segmentul aplicaiei. Namespace grupeaz un pachet de
instruciuni, este foarte util in cazul programelor mari cnd acestea pot fi alctuite din mai multe
secvene identificate prin nume diferite ale namespace-ului dezvoltate separat de diferii
programatori.
Fiecrui obiect, n cod i se asociaz o clas, pentru Form1definiia clasei este public
partial calss Form1: Form, este o clas public, adic poet fi accesat si din alte clase i deriv
din clasa de baz Form.
Public Form1() reprezint constructorul clasei funcia prin care se construiete obiectul
Form1, n interiorul ei este o funcie InitializeComponent() care se execut la construcia
obiectului i care iniializeaz componentele acestuia.
Funcia private void button1_Click(object sender, EventArgs e) a fost scris automat de
Vizual C# i este destinat codului care se va executa n momentul cnd se acioneaz butonul.
Scriem n interiorul acestei funcii urmtorul cod:
BackColor = Color.Red;

Cnd ncercm s scriem n instruciunea n codul programului observm c suntem ajutai de un


help on line IntelliSense, fig 1.12. Este suficient s tastm prima liter a instruciunii, funcie de

aceasta apare o list de denumiri care pot fi utilizate. Acest IntelliSense ajut la scrierea rapid i
corect a codului.

Fig. 1.11
Pentru a rula programul se acioneaz pe sgeta din bara de instrumente (Start
Debugging), fig.1.12 sau se apas tasta F5.

Fig. 1.12
n urma acestei aciuni apare pe ecran forma pe care am proiectat-o, fig, 1.13, iar dac acionm
butonul culoarea formai se schimb n rou, fig. 1.14.

Fig. 1.13

Fig. 1.14

1.4 Anatomia unei aplicaii cu interfa windows


O aplicaie se poate mpri formal n dou pri:
1. Interfaa cu ajutorul creia se introduc datele, prin diverse controale se realizeaz
dialogul cu programul, sunt afiate rezultatele eventual sub form grafic. Realizarea
interfeei se realizeaz cu obiectele grafice puse la dispoziie de ctre mediul de
dezvoltare. Pentru interfaa de tip windows componentele de baz sunt formele. O
aplicaie poate avea una sau mai multe forme pe care se aeaz componentele vizuale
necesare aplicaiei.
2. Blocul de calcul este locul n care se realizeaz calculele pentru obinerea rezultatelor
(aici este vorba de aplicaii inginereti pentru care rezultatele se obin n urma unor

calcule). Regula general este c partea de calcul este organizat n module separate de
interfaa grafic. Pentru realizarea calculelor se pot utiliza n C# Clasele. Acestea sunt
obiecte soft n care utilizatorul i poate organiza datele i metodele de calcul
Pentru a nelege modul de realizare a unei aplicaii cu interfa windows n C# vom prezenta un
exemplu comentat n care se realizeaz o aplicaie simpl, denumit Calcule. Pentru a urmrii
etapele realizrii i legturile ntre interfaa i blocul de calcul s-e vor utiliza calcule aritmetice
simple.
Tema programului: Se citesc 2 valori de pe ecran. Cu acestea s se calculeze i s se afieze
suma, produsul i ctul.
Se deschide o nou aplicaie care se va denumi Calcule. Pe forma programului se construiete o
interfa asemntoare cu cea din fig. 1.5:

Fig. 1.15
Aceasta cuprinde urmtoarele obiecte:
- 2 etichete, textele acestora se modific din tabelul cu propriti A = i respectiv B =;
- 2 textBox;
- 1 buton la care se modific textul afiat n Calculeaza;
- 1 textBox pentru afiarea rezultatelor. La acesta sebifeaz obiunea MultiLine, fig. 1.6;

Fig. 1.16
Pentru a construi modulul de calcul n Solution Explorer se face clic dreapta cu mausul pe
numele aplicaiei i din meniu se alega New Item, fig. 1.7

Fig. 1.17
n urma aciunii apare o form de dialog din care se alege Class, iar n partea de jos la rubrica
Name se completeaz numele CalculeSimple, fig. 1.8

fig. 1.18
Se creeaz o clas nou care apare att n Solution Explorer ct i sursa n taburile programului,
fig. 1.9

Fig. 1.19
Clasa CalculeSimple va conine elementele de calcul ale programului. Pentru definirea acestora
se completeaz urmtorul cod, fig. 1. 20

fig. 1.20

Pentru ca programul cu interfaa 1.15 s devin funcional trebuie asociat butonului un


eveniment n care vom construi codul care trebuie executat cnd acionm butonul. Vom utiliza
evenimentul click asociat butonului. Pentru acest lucru vom proceda astfel:
- n tabloul Properties evenimentele asociate obiectului se pot accesa prin intermediul
butonului Events, fig 1.21 A
- n dreptul rubricii Cick n partea dreapta se plaseaz mausul si se execut dubluclick. Ca
urmare a acestei manevre se va crea evenimentul button1_Click i funcia asociat
acestuia care va aprea scris n codul programului, fig. 1.22.

Fig. 1.21

Fig. 1.22
n cadrul acestei funcii se completeaz codul din fig. 1.22. Semnificaia liniilor de cod este
urmtoarea:

definete variabila CS asociat clasei CalculeSimple

se iniializeaz variabila prin apelarea constructorului clasei

se definesc 2 variabile locale A i B n


care se stocheaz valorile culese de pe ecran din textBox1 i respectiv textBox2. Toate
valorile scrise / citite de pe ecran sunt n format string (sir de caractere) din aceast cauz
trebuie convertite corespunztor. n acest caz se variabilele sunt de tipul float . Folosind
funcia Convert.ToSingle se realizeaz conversia variabilei citit de pe ecran sub forma
de string din obiectele textBox ntr-un numr real.

iniializeaz variabilele din obiectul CS (CalculeSimple) acest lucru este


posibil prin funciile definite n clasa respectiv. De exemplu pentru variabila local a s-a
definit o variabil de acelai tip float denumit A folosind directiva public

Variabila public A astfel definit poate fi modificat din alt parte a programului n care
s-a defint obiectul asociat clasei CalculeSimple. Prin intermediul funciei de mai sus
valoarea variabilei a poate fi citit funcia get sau scris funcia set. n cazul de fa
valoarea citit de pe ecran atribuit variabilei locale A este transmis variabilei A din
clasa CalculeSimple prin instruciunea CS.A = A, iar prin intermediul funciei set ajunge
la variabila local a.

rezultatele calculelor se obin prin apelarea funciilor


corespunztoare din obiectul CS i stocarea lor n variabile locale denumite semnificativ
suma, produsul i ctul.

pentru afiarea rezultatelor


n textBox3 la care s-a bifat opiunea multiLine se definete un string s (pe ecran toate
valorile trebuie sa fie sun forma unor iruri de caractere) n care se scriu comentarii
Suma A + B = i valori ale rezultatelor convertite la string suma.ToString(). Legtura
ntre dou subiruri de caractere se face cu +. Secvena \r\n reprezint Carrige
return i New line. Dup ce se ncarc stringul s cu toate liniile valoarea acestuia se
transmite obiectului care-l va afia pe ecran textBox3.txt = s

Execuia programului se face prin acionarea butonului Start Debugging, fig. 1.23. n urma
acestei aciuni apare pe ecran interfaa vizual a programului, funcional, figura 1.24. Se pot
introduce datele i prin acionarea butonului se efectueaz calculele i se afieaz rezultatele.

Fig. 1.24
n partea de calcul CalculeSimple, n exemplul prezentat mai sus transmiterea valorilor ntre
interfaa grafica Form1 i modulul de calcul s-a realizat prin intermediul variabilelor globale
(declarate cu directiva public). Pentru calcule s-a utilizat funcii de tip Suma() returnau rezultatul
i care operau pe variabilele locale a, b deja iniializate prin intermediul variabilelor A, B
declarate cu public.
O alt modalitate de a transmite valorile i rezultatele ntre modulul de calcul i interfaa grafic
este prin utilizarea parametrilor formali ai funciei de calcul. n fig. 1.20 s-a definit funcia
Suma1, figura 1.25.

Fig. 1.25
Funcia Suma1 este de tip void adic prin apelarea ei nu se returneaz nici o valoare. Are ca
parametrii de intrare dou variabile de tip float a i b care reprezint termenii sumei, iar
rezultatul este ntors prin variabila s declarat cu directiva out care semnific c valoarea acestui
parametru este returnat de funcie n urma unui calcul.
Dac se utilizeaz funcia Suma1codul corespunztor evenimentului Click se modific astfel
figura 1.26.

Fig. 1.26
n acest caz dup ce preluam de pe ecran valorile variabilelor A i B putem apela direct
procedura de calcul Sum1 punnd parametrii n ordinea corespunztoare. Pentru a extrage
valoarea rezultatului trebuie declarat n prealabil o variabil destinat acestui scop, sm.
Dac se dorete utilizarea variabilelor i metodelor din blocul de calcul CalculeSimple i pentru
alte interfee sau module trebuie s se aib n vedere faptul c declaraia:
CS = new CalculeSimple() apeleaz constructorul clasei i iniializeaz variabilele. De cte ori
se apeleaz practic se recreeaz acest obiect. Dac dorim utilizarea acestui i n alte interfee sau
module trebuie s o crem o singur dat apoi s o transmitem ca parametrii la clasele care o
utilizeaz.
1.5 Adugarea unei forme noi aplicaiei cu acces la modulul de calcul
Pentru programe complexe interfaa poate fi alctuit din mai multe forme. Este necesar ca toate
modulele interfeei s aib acces la modulul / modulele de calcul. Pentru a se conserva datele i
rezultatele din modulul de calcul acesta de regul se creeaz o dat prin apelarea constructorului
apoi se transmite ca parametru formal n toate modulele care apeleaz la acesta.
La aplicaia de mai sus se adaug o nou form. Se face click dreapta pe denumirea aplicaiei din
Solution Explorer i se alege din meniu Wwindows Form, figura 1.27 i 1.27

Fig. 1.27

Fig. 1.28
Pe noua form se adaug o etichet al crui text se completeaz ca n figura 1.29.

Fig. 1.29
Codul clasei asociat formei 2 se completeaz conform figurii 1.30.

Fig. 1.30

Se definete o variabil local CS2. n constructorul se introduce un parametru formal cs de tipul


CalculeSimple. Se iniializeaz variabila local CS2 cu valoarea parametrului cs transmis la
crearea formei. Pe evenimentul Form2_Load se afiseaz valoarea rezultatului sumei.
Pe forma 1 a programului se introduce un buton nou cu ajutorul cruia vom afia noua form,
figura 1.31.

Fig. 1.31
Codul pentru evenimentul Click asociat acestui buton este afiat n figura 1.32

Fig. 1.32
Se definete o variabil local F2 asociat celei de-a doua forme Form2. Cnd se apeleaz
constructorul se introduce parametrul formal CS asociat blocului de calcul CalculeSimle. n acest
fel toate valorile existente la acest moment (citite de pe ecran, rezultate, etc.) n clasa
CalculeSimple se transmit n Form2 i pot fi utilizate, figura 1.33.

Fig. 1.33
Pentru ca programul s funcioneze corect trebuie ca n momentul cnd se afieaz forma 2
trebuie deja s fie iniializat clasa CalculeSimple i s fie citite valorile de pe ecran. n acest caz
trebuie respectat succesiunea de utilizarea a butoanelor. Se apas prima dat butonul Calculeaz
i apoi butonul Afieaz forma 2.
1.6 Elemente de baz ale limbajului C#
n acest paragraf se vor prezenta cteva din elementele de baz ale limbajului C#. Alte elemente
care sunt necesare aplicaiilor din acest curs vor fi prezentate n capitolele urmtoare pe msur
ce vor fi utilizate.
1.6.1 Structura uni program C#X
Codul unui program scris n C# este format din linii pe care se gsesc una sau mai multe
instruciuni dar i caracterele de formatare: spaiul, tab, sfrit de linie, etc. Compilatorul C#
ignor toate caracterele de formatare, acest lucru permite programatorului s scrie un cod
formatat uor de citit.

n limbajul C# fiecare instruciune se termin cu caracterul punct i virgul ; .


Deoarece C# este un limbaj structurat pe blocuri, fiecare instruciune face parte dintr-un bloc de
program. Un bloc de program este delimitat de acoalade { } i poate conine mai multe
instruciuni. Acoladele nu trebuie urmate de punct i virgul.
Un bloc simplu n C# poate s aib urmtoarea structur:
{
< instruciunea 1>
< instruciunea 2>
< instruciunea 3>
}
Fiecare bloc are propriul nivel. Un segment de program care conine mai multe blocuri
este prezentat n exemplul urmtor:
{
< instruciunea 1>
{
< instruciunea 2>

Blocul 2

< instruciunea 3>

nivelul II

}
< instruciunea 4>

Blocul 1

nivelul II

< instruciunea 5>


{
< instruciunea 6>

Blocul 4

Blocul 3

nivelul III

nivelul II

}
< instruciunea 7>
}
}

Blocurile permit o mai bun structurare i claritate a programului. Un bloc poate de


asemenea s conin unul sau mai multe blocuri.

De regul un program n C# cuprinde cel puin un bloc. Acestea se ierarhizeaz funcie de


modul n care au fost definite, n exemplul anterior Blocul A. Blocurile 2 i 3 se gsesc n
interiorul Blocului 1 iar Blocul 4 se gsete n interiorul Blocului 3.
Toate variabilele declarate i utilizate n interiorul unui bloc sunt variabile locale i exist
i sunt vizibile n blocul respectiv.
Pentru ca o variabil s poat fi accesat de mai multe blocuri, aceasta trebuie definit n
blocul ierarhic superior. Spre exemplu variabilele definite la nivelul < instruciune 1> sunt
vizibile n Blocurile 2,Blocul 3 i Blocul 4. Pentru aceste blocuri variabila este considerat
global.
Acelai lucru se poate spune despre variabilele declarate n < instruciunea 5> , ele pot fi
utilizate n Blocul4, are caracter global dar fa de Blocul 3 este variabil local. Ea poate fi
accesat din Blocul 2.
Blocurile de program se ierarhizeaz funcie de nivelul de mbinare. Blocul care conine
toate celelalte blocuri are cel mai nalt nivel n ierarhie iar cel care este inclus n cele mai multe
blocuri are nivelul ierarhic cel mai sczut. n exemplul anterior Blocul 1 are nivelul ierarhic cel
mai ridicat deoarece conine toate celelalte blocuri iar Blocul 4 are nivelul ierarhic cel mai
sczut, nivelul III , deoarece este inclus n Blocurile 1 i 3.
Blocul cu nivelul ierarhic I n C# este definit prin denumirea namespace. Acesta
conine codul aplicaiei i poate fi identificat dup numele care urmeaz instruciunii namespace.
Exemplu namespace program1. Blocul de nivel I, sursa programului n acest caz se numete
program 1 i poate fi accesat prin invocarea acestui nume.
1.6. 2. Tipuri de variabilele i instruciunea de atribuire
Noiunea de variabil este legat de modul n care sunt stocate datele n computer.
Variabila poate fi privit ca un recipient n memoria computerului n care se pot pune diverse
date i se poate verifica coninutul acesteia dac este cazul.
Funcie de datele utilizate de variabile acestea pot fi de mai multe tipuri. Toate variabilele
care folosesc numai un anumit fel de date sunt asociate unui tip.
Pentru a putea utiliza o variabil aceasta trebuie mai nti declarat. Sintaxa pentru
declararea variabilelor este:
<type> <nume>;

type este unul din tipurile de date acceptate de C#,


nume denumirea variabilei dat de programator.
Exemplu :
int i; - variabila denumit i de tip ntreg;
string ss; - variabila denumit ss de tip string.
Tipurile simple de variabile din C# sunt prezentate n tabelele urmtoare:

Tabelul 1.1 tipul intreg


Tip
sbyte
byte
short
ushort
int
uint
long
ulong

.NET Framework type


System.Sbyte
System.Byte
System.Int16
System.UInt16
System.Int32
System.UInt32
System.Int64
System.UInt64

Valoare
Intreg ntre -128 i 127
Intreg ntre 0 i 225
Intreg ntre -128 i 127
Intreg ntre -32768 i 32768
Intreg ntre 0 i 65535
Intreg ntre 2147483648 i 2147483648
Intreg ntre 9223372036854775808 i 9223372036854775808
Intreg ntre 0 i 18446744073709551615

Tabelul 1.2 tipul zecimal


Tip

.NET Framework type Valoare

double

System.Double

real ntre 5.0 10

324

float
decimal

System.Float
System.Decimal

real ntre 1.5 10

45

real ntre 1.0 10

28

si 1.7 10
si 3.4 10

si 7.9 10

308

38

28

Tabelul 1.3 alte tipuri


Tip

.NET Framework type Valoare

char
bool
string

System.Char
System.Boolean
System.String

un caracter stocat ca un intreg intre 0 si 65535


valoarea buleana true sau false
sir de caractere

Pentru utilizarea unei variabile n program, aceasta trebuie declarat conform (nr.
paragrafului n care s-au dat definiii!). Funcie de poziia blocului n care se face declaraia,
variabila poate fi local sau global.
Atribuirea valorii unei variabile se face folosind operatorul de atribuire = .

De exemplu:
int n;
n = 30;
n exemplul de mai sus se definete variabila i apoi se iniializeaz. Orice variabil
trebuie iniializat, adic trebuie s i se atribuie o valoare nainte de utilizare. Se pot realiza
ambele lucruri simultan folosind iniializarea chiar n linia de definire.
Exemplul :
int x = 4, y = 7;

1.6.3 Expresii
Limbajul C# pune la dispoziia programatorului o serie de operatori care includ i
operatorul de atribuire = . Combinnd variabilele cu operatorii rezult expresiile care sunt
elementele de baz care alctuiesc blocurile de program.
Operatorii disponibili pot fi clasificai n trei categorii:

unar: acioneaz asupra unui singur operator;

binar: acioneaz asupra a doi operanzi;

ternar: acioneaz asupra a trei operanzi.

a) Operatorii matematici
n C# sunt cinci operatori matematici de tip binar, doar doi dintre acetia + i - pot fi
utilizai i ca operatori unari. n tabelul 1.5 sunt prezentai operatorii matematici i funciile
acestora.

Tabelul 1.5
Operator
+
*
/
%

Categorie
binar
binar
binar
binar
binar

Exemplu
v1 = v2 + v3;
v1 = v2 - v3;
v1 = v2 * v3;
v1 = v2 / v3;
v1 = v2 % v3;

Rezultat
lui v1 i se atribuie suma v2 plus v3
lui v1 i se atribuie diferenta dintre v2 si v3
lui v1 i se atribuie produsul dintre v2 si v3
lui v1 i se atribuie catul dintre v2 plus v3
lui v1 i se atribuie restul dintre v2 impartit la v3

Operatorii de incrementare i decrementare se obin prin alturarea a doi operatori. De exemplu


pentru incrementare se utilizeaz ++. Funcie de poziia fa de variabila asupra cruia
acioneaz apar urmtoarele situaii prezentate n tabelul 1.6.
Tabelul 1.6
Operator
++
-++
--

Categorie
unar
unar
unar
unar

Exemplu
v1 =++v2;
v1=--v2;
v1++;
v1--;

Rezultat
lui v1 i se atribuie valoarea v2+1
lui v1 i se atribuie valoarea v2-1
Echivalent v1=v1+1;
Echivalent v1 = v1-1;

O alt combinaie util de operatori este obinut prin utilizarea operatorului de atribuire
n combinaie cu operatorii matematici spre exemplu +=. Semnificaiile acestor combinaii
sunt prezentate n tabelul 1.7.
Tabelul 1.7
Operator
+=
-=
*=
/=
%=

Categorie
binar
binar
binar
binar
binar

Exemplu
v1 += v2;
v1 -=v2;
v1 *=v2;
v1 /=v2;
v1 %=v2

Rezultat
lui v1 i se atribuie valoarea v1+v2
lui v1 i se atribuie valoarea v1-v2
lui v1 i se atribuie valoarea v1*v2
lui v1 i se atribuie valoarea v1/v2
lui v1 i se atribuie valoarea restului v1/v2

Expresiile logice utilizeaz operatori buleeni. Acestea sunt utile pentru luarea deciziilor, Tabelul
1.8
Tabelul 1.8
Operator
==
!=
<
>

Categorie
binar
binar
binar
binar

Exemplu
v1 = v2==v3
v1 = v2!=v3
v1 = v2<v2
v1 = v2>v5

<=

binar

v1 = v2<=v3

>=

binar

v1 = v2>=v3

&&

binar

v1 = v2&&v3

||

binar

V1=v2||v3

Rezultat
lui v1 i se atribuie valoarea true daca v2 este egal cu v3
lui v1 i se atribuie valoarea true daca v2 nu este egal cu v3
lui v1 i se atribuie valoarea true daca v2 este mai mic ca v3
lui v1 i se atribuie valoarea true daca v2 este mai mare ca v3
lui v1 i se atribuie valoarea true daca v2 este mai mic sau
egal v3
lui v1 i se atribuie valoarea true daca v2 este mai mare sau
egal v3
lui v1 i se atribuie valoarea true daca v2 este adevarat si v3
este adevarat
lui v1 i se atribuie valoarea true daca v2 este adevarat sau v3
este adevarat

1.6.4 Exemplu comentat


n figura 1.35 este prezentat o funcie scris n C#. Funcia este declarat cu public deci poate fi
utilizat i n alte uniti ale programului returneaz o valoare de tip double i se numete Z. Are
doi parametrii de tip double notai cu p i t.

Fig. 1.35
n interiorul blocului principal al funciei sunt definite o serie de variabile cum sunt oma, omb i
z. Alte variabile sunt numai definite A2, B, Tr, z0 i zz urmnd s fie utilizate dup necesiti.
Pentru calculul anumitor mrimi se utilizeaz operatori aritmetici. Pentru ridicarea la putere xy se
folosete funcia Pow (power) din biblioteca matematic Math.
n interiorul blocului principal se gsete un bloc de calcul controlat de instruciunea do.
Calculele care se efectueaz n acest bloc sunt cuprinse n interiorul acoladelor ce marcheaz
blocul instruciunii do.
Instruciunea While este utilizat pentru a se decide cnd se oprete calculul din blocul
instruciunii do. Expresia de lng ea este o expresie boolean. Math.Abs(z-z0) reprezint
valoarea absolut a diferenei z-z0. Expresia boolean este fals n momentul cnd valoarea
absolut a diferenei z-z0 este mai mic dect cea impus 0.0001 n acel moment calculele sunt
oprite n blocul do i programul trece la executarea instruciunilor urmtoare.
n exemplu de mai sus se observ structura de blocuri a programului, modul de definire a
variabilelor i alctuirea instruciunilor din variabile i operatori aritmetici. Se mai observ faptul
c desfurarea calculelor poate fi controlat cu ajutorul expresiilor booleene.
1.6.5 Vectorii
Fiecare tip de variabil prezentat n paragrafele anterioare stocheaz o singur valoare. Dac se
dorete stocarea mai multor valori de acelai tip ar trebui s definim cte o variabil pentru
fiecare valoare, lucru ce necesit un efort deosebit.

Pentru acest din urm caz se lot utiliza vectorii. Vectorii reprezint liste de valori indexabile
stocate ntr-o singur variabil de tip vector.
Declararea unei variabile de tip vector se face cu urmtoarea sintax:
<tip de baz>[] <nume variabil>;
Tip de baz reprezint orice tip de variabil acceptat de C#, iar nume variabil reprezint numele
vectorului. n figura 1.36 sunt prezentate cteva moduri de definire a variabilelor de tip vector.

Fig. 1.36
n exemplu de mai sus sunt prezentate mai multe tipuri de vectori:
- vectori de tip string, monodimensionali ([]) denumireStm, dataStm, codLun;
- vector de tip int, monodimensional ([]) indexStm, zileLuna;
- vector de tip double, bidimensional ([,]) tStm;
nainte de a fi utilizat un vector trebuie s fie iniializat, adic s se precizeze cte valori se va
stoca n acest vector. Aceast iniializare se poate face direct n declaraia vectorului ca n
cazurile vectorilor zileLuna i codLun n care s-a precizat direct numrul de elemente al
vectorului dar i valorile acestuia, printr-o list de elemente desprite de virgul i plasate ntre
acolade.
Un alt tip de a iniializa vectorii este cel prezentat n figura 1.37:

Fig. 1.37

n exemplul de mai sus se observ un alt mod de a iniializa vectorul folosind directiva new
urmat de tipul de baz al vectorului, iar ntre paranteze drepte este precizat numrul de elemente
al vectorului, de exemplu, n cazul DD.IndexStm vectorul va conine nCol 1 elemente.
Pentru a accesa o anumit valoare a vectorului respectiv trebuie s precizm indexul din lista
vectorului la care se gsete acea valoare. n exemplu de mai sus pentru ai atribui o valoare
variabilei vectorului DD.DataStm care se gsete la poziia k se folosete sintaxa:
DD.DataStm[k] = <valoare>;
Aceeai sintax este valabil i pentru vectorii mutidimensionali, cazul vectorului DD.TStm din
exemplu de mai sus.
1.6.7 Instruciuni cu care se controleaz execuia programului
1.6.7.1 Instruciunea goto
Instruciunea goto se utilizeaz pentru a ntrerupe desfurarea normal a programului i
produce un salt de la linia pe care se gsete instruciunea pn la linia marcat cu eticheta din
instruciune.
Sintaxa aceste instruciuni este:
goto <Name Etichet>;
Eticheta reprezint un marcaj al liniei de la care va continua programul dup execuia
instruciunii goto.
Aceasta are sintaxa:
<Nume Etichet>:
Pentru a vedea modul cum funcioneaz aceast instruciune s analizm exemplul
urmtor:
.
int i = 5
goto eticheta1
i += 10;
eticheta1:
Console.WriteLine(Valoarea numrului = {0},i);
.
n exemplul de mai sus:
-

variabila i este declarat de tip ntreg i i se atribuie valoarea 5;

instruciunea goto ntrerupe execuia normal a programului i produce un salt la linia


marcat cu eticheta1, care scrie valoarea variabilei i la consol.
n aceast secven de program linia:
i += 10;

nu este executat niciodat, acest lucru este semnalat printr-o atenionare n lista de erori a
programului.
Folosirea excesiv a instruciunii goto poate conduce la un cod confuz, din aceast cauz
de regul se recomand evirarea acesti intruciuni

1.6.7.2. Controlul execuiei programelor ramificate


n cazul programelor complexe n anumite puncte trebuie s se decid pe ce ramur va
continua execuia programului. Actul de control prin care se decide care va fi urmtoarea linie
executat se numete branching.
Acest control se poate realiza prin trei tehnici disponibile n C#: operatori ternari,
instruciunea if i instruciunea switch.

1.6.7.3. Operator ternar


Acest tip de operator permite n urma unei comparaii s se decid continuarea execuiei
programului pe dou ramuri. Sintaxa programului este:
<test>?<instructiune pentru conditia true>:<instructiune pentru conditia false>
n cazul acestui operator n urma evalurii testului se obine o variabil boolean. Dac
valoarea acesteia este adevrat se execut prima instruciune iar dac este fals cea de-a doua
instruciune.
Exemplu:
String resultString = (myInteger<10)?Less than 10:Grearher then orequal to 10;
n exemplul de mai sus stringul resultString care conine irul Less than 10 se atribuie
variabilei resultString dac variabila myInteger este mai mic dect 10 n caz contrat variabilei
resultString i se atribuie irul Grearher then orequal to 10 .

1.6.7.4. Instrciunea if
Instruciunea if este de departe cea mai utilizat cale de a lua decizii n cadrul unui
program. Aceast instruciune nu produce un rezultat care poate fi atribuit, ea este utilizat
pentru a se decide cu ce instruciuni urmeaz s continuu programul. Sintaxa este urmtoarea:
if(<test>) < Codul care se execut dac testul este true>;
Dac testul produce valoarea false atunci programul continu cu execuia liniei
urmtoare:
Pentru a putea executa un cod n momentul cnd valoarea testului este false se folosete
combinaia if else cu urmtoarea sintaxa:
if(<test>)
<codul executat dac <test>este adevrat>;
else
<codul executat dac <test>este false>;
n figura 1.38 este prezentat un exemplu de utilizare a instruciunii if. Se observ c decizia este
luat funcie de o valoare fix 182. Dac variabila i este adevrat se execut instruciunile care
urmeaz dup if, n caz contrar se execut instruciunile care urmeaz dup else.

Fig. 1.38
Se poate utiliza mai multe instruciunii if succesive pentru decizii mai complexe. n figura
1.39 este prezentat un astfel de exemplu:

Fig. 1.39
Pentru decizii complexe care se iau funcie de mai multe valori ale variabilelor se pot utiliza
combinaii else if ca n exemplu de mai sus. Execuia programului va continua pe ramura else
pentru care este ndeplinit condiia ce urmeaz dup if.
1.6.7.5. Instruciunea Switch
Instruciunea Switch este similar cu instruciunea if, aceasta poate comuta execuia
diverselor ramuri din program funcie de valoarea variabilei care controleaz instruciunea.
Sintaxa este urmtoarea:
Switch(<testVar>)
{
Case <comparisonVal1>:
<cod care se execut dac <testVar> == <comparisonVal1>>
break;
Case <comparisonVal2>:
<cod care se execut dac <testVar> == <comparisonVal2>>
break;
Case <comparisonValN>:
<cod care se execut dac <testVar> == <comparisonValN>>
break;
default;
<cod care se execut dac nici o condiie de mai sus nu a fost ndeplinit>
break;
}
Variabila care controleaz instruciunea <testVar> este comparat pe rnd cu fiecare din
valorile specificate n ramurile notate cu case, n momentul cnd coincide valoarea variabilei de
control cu una din valorile din ramurile care se execut instruciunile scrise pe aceea ramur pn
la instruciunea break apoi se trece la executarea instruciunii plasat dup switch.

Una din opiunile instruciunii switch este default care poate fi utilizat, dac este cazul
sau nu. Aici se scriu instruciunile care se execut n cazul cnd nici o condiie nu a fost
ndeplinit.
n figura 1.40 este prezentat un exemplu de instruciune switch care permite salvarea selectiv a
unei imagini de pe ecran funcie de tabControl1.SelctedIndex

Fig. 1.40

1.6.7.6. Cilcuri
Cilclurile sunt instruiuni prin care se realizeaz execuia repetitiv a uneia sau mai
multor instruciuni. Utilizarea acestor tipiuri de instruciuni permite execuia aceluiai cod de
program de ami multe ori fr a rescrie istruciunile respective. Exist dou tipuri de cilcluri

unele n care trebie precizat de la nceput de cte ori se repert segvena respectiv, iar altele prin
care repetarea de face atta timp ct este ndeplinit o condiie.
1.6.7.6.1 Instruciunea do
Sintaxa acestei instruciuni este urmtoarea:
do
{
<codul care se va repeta>
} while (<Test>);
Aceast instruciune face posibil repetarea instruciunilor din corpul acesteia atta timp ct
testul logic (<Test>) are valoarea true, n momentul cnd valoarea testului devine false cilcul se
oprete.
n figura 1.41 este prezentat o secven dintr-o funcie care utilizeaz instruciunea do pentru
calculul coeficientului de pierdere hidraulic de sarcin pentru o conduct folosind metoda
aproximaiilor succesive. Secvena de calcul se repet pn cnd este ndeplinit condiia de
oprire controlat de directiva while. Dac condiia este adevrat adic diferena n valoare
absolut dintre variabilele L i L0 este mai mic dect 0.000001 programul continu cu
instruciunea return L

Fig. 1.41
1.6.7.6.2. Instruciunea while
Cilcul de tip while este similar cu ciclul do, cu deosebirea c testul care condiioneaz execuia
ciclului se face la inceputul ciclului, comparativ cu instruciunea do n care testul se face la
sfritul ciclului. n cazul instruciunii while instruciunile din corpul ciclului nu se execut dac
testul are valoarea false.
Sintaxa acestei instruciuni este:

While (<Test>)
{
<codul care se va repeta>
}
n figura 1.42 este prezentat un exemplu de utilizare a instruciunii while pentru citirea unui
fiier text n care datele sunt separate cu tab. Datele sunt adugate linie cu linie intr-un tabel
reprezentat de un dataGraid. Folosirea instruciunii while este util prin faptul c testul este
prevzut la nceputul ciclului, n cazul de fa condiia este dac nu este sfritul stream ului
(fisierului) . Atta timp ct aceast condiie este adevrat se execut intruciunile dintre
acolade. Dac condiia este fals, s-a ajuns la sfritul fierului, cilcul se oprete i porgramul
continu cu instruciunea de dup.

Fig. 1.42

1.6.7.6.3 Instrucunea for


Acest tip de instrucunea perimte reperarea unui cod de program de un numr finit de ori.
Controlul ciclului se realizeaz cu ajutorul unui contor. Pentru definirea unei instruciuni for sunt
necesare urmtoarele informaii:
-

valoarea de start care iniiaz variabila contorului

condiia de continuare a ciclului referitoare la variabila contorului

operia aritmetic care modific valoare variabile contor la sfritul fiecrui ciclu.

Sintaxa instruciunii este urmtoarea:


for (<inializare>; <condiie>; <operaie>)
{
<codul care se va repeta>

}
n figura 1.43 sunt prezentare dou exemple de utilizare a instruciunii for. n partea de jos
sunt dou ciclului unul controlat de variabila i i altul de variabila j, al doilea fiind plasat n
interiorul primului. n acest caz pentru fiecare valoare i se execut ciclul al doilea (controlat
de j) de DD.NrZileT ori.

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