ziua1 iasi
DESCRIPTION
programming c#TRANSCRIPT
-
7/21/2019 Ziua1 Iasi
1/64
Limbajul C
-
7/21/2019 Ziua1 Iasi
2/64
.NET este un cadru (Framework) de dezvoltare software unitar carepermite realizarea, distribuirea irularea aplicaiilordesktop Windows i
aplicaiilorWEB.Tehnologia .NET pune laolaltmai multe tehnologii (ASP, XML, OOP,SOAP, WDSL, UDDI) i limbaje de programare (VB, C++, C#, J#)asigurnd, totodat, att portabilitatea codului compilat ntre diferitecalculatoare cu sistem Windows, ct ireutilizarea codului n programe,
indiferent de limbajul de programare utilizat.Pentru a dezvolta aplicaii pe platforma .NET avem trei componenteeseniale:un set de limbaje (C#, Visual Basic .NET, J#, Managed C++, Perl etc);
un set de medii de dezvoltare (Visual Studio .NET, Visio);
o bibliotecde clase pentru crearea serviciilor Web, aplicaiilorWeb iaplicaiilordesktop Windows.
-
7/21/2019 Ziua1 Iasi
3/64
Componenta .NET Framework st la baza tehnologiei .NET, este ultimainterfantre aplicaiile.NET isistemul de operare iactualmente conine:Limbajele C#, VB.NET, C++ iJ#. Pentru a fi integrate n platforma .NET, toateaceste limbaje respectnitespecificaiiOOP numite Common Type System(CTS). Ele au ca elemente de baz: clase, interfee,delegri, tipuri valoare ireferin,iar ca mecanisme:motenire,polimorfism itratarea excepiilor.
Platforma comun de executare a programelor numit Common LanguageRuntime(CLR), utilizatde toate cele 4 limbaje. CTS face parte din CLR.Ansamblul de biblioteci necesare n realizarea aplicaiilor desktop sau Web,numit Framework Class Library (FCL).
-
7/21/2019 Ziua1 Iasi
4/64
Etape:
1. Editarea codului surs
2. Compilareatransformarea n limbajul MSIL (Microsoft Intermediate LanguageCommon language runtime)
Un program scris ntr-unul dintre limbajele .NET conform Common Language Specification(CLS) este compilat n Microsoft Intermediate Language (MSIL sau IL). Codul astfel obinut
are extensia "exe", dar nu este direct executabil, ci respectformatul unic MSIL.3. Rularea transformarea n limbajul cod main corespunztor sistemului pe
care va rula aplicaia(JITJust In Time)CLR include o mainvirtualasemntoarecu o mainJava, ce execut instruciunile ILrezultate n urma compilrii. Mainafoloseteun compilator special JIT (Just In Time).Compilatorul JIT analizeaz codul IL corespunztor apelului unei metode i produce codul
mainadecvat ieficient. El recunoatesecvenelede cod pentru care s-a obinutdeja codulmain adecvat, permind reutilizarea acestuia fr recompilare, ceea ce face ca, peparcursul rulrii,aplicaiile.NET sfie din ce n ce mai rapide.Faptul c programul IL produs de diferitele limbaje este foarte asemntor are ca rezultatinteroperabilitatea ntre aceste limbaje. Astfel, clasele iobiectele create ntr-un limbaj specific.NET pot fi utilizate cu succes n altul.
-
7/21/2019 Ziua1 Iasi
5/64
C# este un limbaj simplu, cu circa 80 de cuvinte cheie, i 12tipuri de date predefinite. El permite programarea structurat,modular i orientat obiectual, conform perceptelor moderne aleprogramriiprofesioniste.
Limbajul C#
n primul rnd pentru cne oferinstrumente pe care le putem folosii 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 interfeeigrafice cuutilizatorul. Folosind aceste controale, puteiproiecta idezvolta rapidi interactiv, elementele interfeei grafice. Tot .NET v ofer clase
care efectueaz majoritatea sarcinilor uzuale cu care se confruntprogramele icare plictisesc ifur timpul programatorilor, reducndastfel timpul necesar dezvoltriiaplicaiilor.
-
7/21/2019 Ziua1 Iasi
6/64
Limbajul C# motenetesintaxa iprincipiile de programare dinC++. Utilizmo serie de tipuri noi de date sau funciunidiferite aledatelor din C++, iar n spiritul realizriiunor secvenede cod sigure
(safe), unele funciuni au fost adugate (de exemplu, interfee idelegri),diversificate (tipul struct), modificate (tipul string) sau chiareliminate (motenireamultiplipointerii ctrefuncii).
Unele funciuni (cum ar fi accesul direct la memorie folosindpointeri) au fost pstrate,dar secvenelede cod corespunztoarese
considernesigure.
-
7/21/2019 Ziua1 Iasi
7/64
-
7/21/2019 Ziua1 Iasi
8/64
O aplicaieC# este formatdin una sau
mai multe clase, grupate n spaii denume(namespace). Este obligatoriu cadoar una din aceste clase sconinunpunct de intrare (entry point), ianume metoda (funcia) Main.
Primele patru linii reprezint directivecare specific faptul c se vor folosiclase incluse n spaiul de numeSystem. n cexemplul nostru se vafolosi clasa Console folosit pentru
operaiilede
intrare/ieirei
seapeleaz
metoda WriteLine din aceast clas,pentru afiareamesajului dorit pe ecran.Orice program C# conine una sau maimulte clase.
Spaiul
nostru denume
-
7/21/2019 Ziua1 Iasi
9/64
Spaiu de
nume
Clas
Metod
Cod
n C#, un program poate fiprivit ca avnd mai multe straturi:avem cod n interiorul metodelor,care la rndul lor se afl ninteriorul claselor, aflate n interiorul
namespaces-urilor.O clas este format din date imetode (funcii).
Apelarea unei metode n cadrul clasei n care a fost definitaceasta presupune specificarea numelui metodei. Apelul unei metode
definite n interiorul unei clase poate fi invocat i din interiorul alteiclase, caz n care este necesarspecificarea clasei iapoi a metodeiseparate prin punct. Dacn plus, clasa aparineunui spaiude numeneinclus n fiierul curent, atunci este necesar precizarea tuturorcomponentelor numelui: spaiu.clas.metod
sau spaiu.spaiu.clas.metod etc.
-
7/21/2019 Ziua1 Iasi
10/64
Cnd creai o aplicaie consol se
genereaz un fiier cu extensia .cs.Redenumirea lui se poate realiza din fereastraSolution Explorer pe care o putei afia cuajutorul combinaiei de taste Ctrl+W sau dinmeniul View.
Clasa (class), n termeni simplificai, reprezint principalul elementstructural ide organizare n limbajele orientate spre obiecte, grupnd datect ifunciicare prelucreazrespectivele date.Spaiul de nume (Namespaces): din raiuni practice, programele mari, suntdivizate n module, dezvoltate separat. Din acest motiv, existposibilitatea de aaprea identificatori cu acelai nume. Pentru a evita erori furnizate din acest
motiv, fiecare mulimede definiiidintr-o librriesau program este grupat ntr-un spaiu de nume, existnd astfel posibilitatea de a avea ntr-un programdefiniiicu nume identic, dar situate n alte spaiide nume. n cazul n care, ntr-o aplicaie,unele clase sunt deja definite, ele se pot folosi importnd spaiiledenume care conindefiniiileacestora.
-
7/21/2019 Ziua1 Iasi
11/64
Prin numedat unei variabile, clase, metode etc. nelegemo succesiunede caractere care
ndeplineteurmtoarele
reguli:
numele trebuie snceapcu o litersau cu unul dintre caracterele _i@; primul caracter poate fi urmat numai de litere, cifre sau un caracter de
subliniere;
numele care reprezintcuvinte cheie nu poate fi folosit n alt scop dect acelapentru care a fost definit;
cuvintele cheie pot fi folosite n alt scop numai dacsunt precedate de @ dounume sunt distincte dacdiferprin cel puinun caracter.
n cazul numelor claselor, metodelor, a proprietilor, enumerrilor, interfeelor,spaiilorde nume, fiecare cuvnt care compune numele ncepe cu majuscul;
n cazul numelor variabilelor, dac numele este compus din mai multe cuvinte,primul ncepe cu minuscul,celelalte cu majuscul.
-
7/21/2019 Ziua1 Iasi
12/64
Cuvintele cheie sunt identificatoripredefinii
cusemnificaie
special pentru compilator. n general, aceste cuvinte nu pot fifolosite n programele pe care le scriem cu o alt semnificaie. ncazul n care, totui,dorim sle dmo altsemnificaieva trebui sle scriem cu simbolul @ca prefix.
abstract as base bool breakbyte case catch char checkedclass const continue decimal defaultdelegate do double else enumevent explicit extern false finallyfixed float for foreach gotoif implicit in int interfaceinternal is lock long namespacenew null object operator out
override params private protected publicreadonly ref return sbyte sealedshort sizeof stackalloc static stringstruct switch this throw truetry typeof uint ulong uncheckedunsafe ushort using virtual voidvolatile while
-
7/21/2019 Ziua1 Iasi
13/64
n C# exist dou modaliti de declarare a constantelor: folosind
const sau folosind modificatorul readonly. Constantele declarate cuconsttrebuie sfie iniializatela declararea lor.Exemple:const int pr_v1=3;
readonly int x;
Constantele declarate cu ajutorul lui readonly sunt doar variabilelemembre ale claselor, ele putnd fi iniializatedoar de ctreconstructoriiclaselor respective.
-
7/21/2019 Ziua1 Iasi
14/64
Prin expresie se nelege o secven format din operatori i
operanzi. Un operator este un simbol ce indic aciunea care seefectueaz, iar operandul este valoarea asupra creia se executoperaia.Tabelul de prioriti:
Prioritate Tip Operatori Asociativitate
0 Primar ( ) [ ] f() . x++ x-- new typeofsizeof checked unchecked ->
1 Unar + - ! ~ ++x --x (tip) true false &
sizeof
2 Multiplicativ * / % 3 Aditiv + - 4 De deplasare > 5 Relaional < > = is as 6 De egalitate == != 7 AND (SI) logic & 8 XOR (SAU
exclusiv) logic^
9 OR (SAU) logic | 10 AND (SI)
condiional&&
11 OR (SAU)condiional
||
12 Condiional(ternar)
?:
13 De atribuire = *= /= %= += -= ^= &= = |=
-
7/21/2019 Ziua1 Iasi
15/64
-
7/21/2019 Ziua1 Iasi
16/64
Pentru a avea control asupra modului de afiare a informaiei numerice sepoate folosi urmtoareaforma lui WriteLine():
WriteLine("sir",var1,var2,, varn);unde " sir" este format din douelemente: caracterele afiabileobinuiteconinuten mesaje; specificatorii de format ce au forma general{nr_var, width:fmt} unde nr_var
precizeaznumrulvariabilei (parametrului) care trebuie afiatncepnd cu
0,width stabiletelimeacmpului de afiare,iar fmtstabileteformatul.Exemple:
Exemplu de afiare a unui numr cu trei zecimale
-
7/21/2019 Ziua1 Iasi
17/64
n C# existdoutipuri de conversii numerice: implicite; explicite.
Conversia implicit se efectueaz (automat) doar dac nu esteafectatvaloarea convertit.
Exemplu de efectuare a unei conversii implicite:
static void Main(string[] args){
byte a = 13; // byte intreg fara semn pe 8 bitibyte b = 20;long c; //intreg cu semn pe 64 bitic = a + b;
Console.WriteLine(c);Console.ReadLine();
}
-
7/21/2019 Ziua1 Iasi
18/64
din n
sbyte short, int, long, float, double, decimal
byte short, ushort, int, uint, long, ulong, float, double, decimal
short int, long, float, double, decimal
ushort int, uint, long, ulong, float, double, decimal
int long, float, double, decimal
uint long, ulong, float, double, decimal
long float, double, decimal
char ushort, int, uint, long, ulong, float, double, decimal
float double
ulong float, double, decimal
-
7/21/2019 Ziua1 Iasi
19/64
din n
sbyte byte, ushort, uint, ulong, char
byte sbyte, char
short sbyte, byte, ushort, uint, ulong, char
ushort sbyte, byte, short, char
int sbyte, byte, short, ushort, uint, ulong, char
uint sbyte,byte, short, ushort, int, char
long sbyte, byte, short, ushort, int, uint, ulong, char
ulong sbyte, byte, short, ushort, int, uint, long, char
char sbyte, byte, short
float sbyte, byte, short, ushort, int, uint, long, ulong, char, decimal
double sbyte, byte, short, ushort, int, uint, long, ulong, char, float, decimal
decimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double
-
7/21/2019 Ziua1 Iasi
20/64
Conversia dintipul numeric n irde caractere serealizeaz cu metoda ToString aclasei Object
-
7/21/2019 Ziua1 Iasi
21/64
Datoritfaptului cn C# toate tipurile sunt derivate din clasa Object(System.Object), prin conversiile boxing (mpachetare) i unboxing(despachetare) este permistratarea tipurilor valoare drept obiecte ireciproc.Prin conversia boxing a unui tip valoare, care se pstreaz pe stiv, seproduce ambalarea n interiorul unei instanede tip referin,care se pstreazn memoria heap, la clasa Object.
Unboxingpermite conversia unui obiect n tipul valoare echivalent.
Exemplu: Prin boxing variabila ieste asignata unui obiect ob.Se poate determina tipul pentru care s-afcut mpachetarea folosind operatorul is:
-
7/21/2019 Ziua1 Iasi
22/64
Limbajul C# ofer posibilitatea efecturii de conversii ntre numere iiruri de caractere.Sintaxa pentru conversia numr n ir de caractere:numr ir + numr
Pentru conversia invers, adic din ir de caractere n numr, sintaxaeste:ir int int.Parse(ir) sau Int32.Parse(ir)ir long long.Parse(ir) sau Int64.Parse(ir)ir double double.Parse(ir) sau Double.Parse(ir)
ir float float.Parse(ir) sau Float.Parse(ir)
-
7/21/2019 Ziua1 Iasi
23/64
Sintaxa limbajuluiConversii ntre numere i iruri de
caractere
-
7/21/2019 Ziua1 Iasi
24/64
Sintaxa limbajuluiTipuri de date
n C# exist dou categorii de tipuri de date:
tipuri valoaretipul simple: byte, char, int, floatetc.tipul enumerare - enumtipul structur - struct
tipuri referintipul clas - classtipul interfa - interfacetipul delegat - delegate
tipul tablou - arrayPentru tipurile valoare, declararea unei variabile implic i alocarea de spaiu.
Pentru tipurile referin,declararea unei variabile nu implicautomat alocareade spaiu: iniial,referinele sunt null itrebuie alocatexplicit memorie pentruobiectele propriu-zise.
-
7/21/2019 Ziua1 Iasi
25/64
-
7/21/2019 Ziua1 Iasi
26/64
Toate tipurile de datesunt derivate din clasaSystem.Object.Toate tipurile
valoare sunt derivatedin clasaSystem.ValueType,derivat la rndul eidin clasa Object(alias pentruSystem.Object).Limbajul C# conine
un set de tipuri
predefinite (int, booletc.) i permitedefinirea unor tipuriproprii (enum, struct,class etc.).
Sintaxa limbajuluiTipuri de date
Tip Descriere Alias pentru tipul struct din
spaiul de nume Systemobject rdcinaoricruitipstring secvende caractere Unicode System.Stringsbyte tip ntreg cu semn, pe 8 bii System.Sbyteshort tip ntreg cu semn, pe 16 bii System.Int16int tip ntreg cu semn pe, 32 bii System.Int32long tip ntreg cu semn, pe 64 de bii System.Int64byte tip ntreg frsemn, pe 8 bii System.Byteushort tip ntreg frsemn, pe 16 bii System.Int16uint tip ntreg frsemn, pe 32 bii System.Uint32ulong tip ntreg frsemn, pe 64 bii System.Uint64float tip cu virgulmobil,simplprecizie,
pe 32 bii (8 pentru exponent, 24pentru mantis)
System.Single
double tip cu virgul mobil, dubl precizie,
pe 64 bii (11 pentru exponent, 53pentru mantis)
System.Double
bool tip boolean System.Booleanchar tip caracter din setul Unicode, pe 16
biiSystem.Char
decimal tip zecimal, pe 128 bii (96 pentrumantis),28 de cifre semnificative
System.Decimal
-
7/21/2019 Ziua1 Iasi
27/64
Domeniul de valori pentru tipurile numerice:
Sintaxa limbajuluiTipuri de date
Tip Domeniul de valori
sbyte -128; 127short -32768; 32767int -2147483648; 21447483647
long -9223372036854775808; 9223372036854775807byte 0; 255ushort 0; 65535uint 0; 4294967295ulong 0; 18446744073709551615float -3.402823E+38; 3.402823E+38double -1.79769313486232E+308; 1.79769313486232E+308
decimal -79228162514264337593543950335;79228162514264337593543950335
-
7/21/2019 Ziua1 Iasi
28/64
O valoare se asigneaz dup urmtoarele reguli:
Sintaxa limbajuluiTipuri de date
Sufix Tip
nu are int, uint, long, ulongu, U uint, ulongL, L long, ulongul, lu, Ul, lU, UL, LU, Lu ulong
Exemplu:float g = 1.234F;double h = 1.234;long b = 13L; double i = 1.234D;ulong c = 12; bool cond1 = true;
ulong d = 15U; bool cond2 = false;ulong e = 16L; decimal j = 1.234M;ulong f = 17UL;
-
7/21/2019 Ziua1 Iasi
29/64
Tipul enumerare asemntor cu cel din C++, se definete de ctre utilizator.Acest tip permite utilizarea numelor care, sunt asociate unor valori numerice. Orice
enum este derivat automat din clasa System.Enum, derivat dinSystem.ValueType.
n cazul n care nu se specific tipul enumerriiacesta este considerat implicitint.
[atribute][modificatori]enum NumeEnumerare [: Tip]
{lista
}
Folosirea tipului enumerare impune urmtoareleobservaii: n mod implicit valoarea primului membru al enumerrii este 0, iar fiecare
variabil care urmeaz are valoarea (implicit) mai mare cu o unitate dectprecedenta; valorile folosite pentru iniializritrebuie s facparte din domeniul de valori altipului enum;
nu se admit referinecirculare.
Sintaxa limbajuluiTipuri de date
-
7/21/2019 Ziua1 Iasi
30/64
Sintaxa limbajuluiTipuri de date
-
7/21/2019 Ziua1 Iasi
31/64
Instruciunea ifare sintaxa:
if (conditie) Instructiuni_A;else Instructiuni_B;
Exemplu:
Sintaxa limbajului
Instruciuni condiionale, de iteraie i de control
-
7/21/2019 Ziua1 Iasi
32/64
Aplicaie:
Sintaxa limbajuluiInstruciuni condiionale, de iteraie
i de control
-
7/21/2019 Ziua1 Iasi
33/64
-
7/21/2019 Ziua1 Iasi
34/64
n cazul instruciuniiswitchn C/C++, dacla finalul instruciunilordintr-o
ramurcasenu existbreak, se trece la urmtorulcase.n C# se semnaleazeroare. Existiaici posibilitatea de a face verificrimultiple (n sensul de a trece la verificarea urmtoarei condiii din case)doar daccase-ul nu conineinstruciuni.Instruciuneaswitchadmite n C# variabilde tip irde caractere care s
fie comparatcu irurilede caractere din case-uri.
Evaluare expresie
Sintaxa limbajului
Instruciuni condiionale, de iteraie i de control
-
7/21/2019 Ziua1 Iasi
35/64
Instruciunea whileare sintaxa:while (condiie) Instruciuni;
Sintaxa limbajului
Instruciuni condiionale, de iteraie i de control
Aplicaii:1. Determinai cte cifre pare are un numr natural introdus de la
consol?2. nlocuii cifrele pare ale unui numr natural introdus de la
consol cu cifra impar imediat urmtoare. Numrul astfel
obinutva fi afiattot la consol.
Instruciuneadowhilearesintaxa:
doInstruciuni;while(condiie);
-
7/21/2019 Ziua1 Iasi
36/64
Instruciuneaforare sintaxa:for(iniializareCiclu; condiieFinal; pas)
Instruciuni;
Sintaxa limbajului
Instruciuni condiionale, de iteraie i de control
Programul urmtor verific dac un numr citit de la tastatur este sau
nu prim.
-
7/21/2019 Ziua1 Iasi
37/64
Aplicaie: Programul urmtor afieaz ultima cifr a numrului 2n,
unde n este introdus de la consol.static void Main(string[] args)
{int n, k;
n = Convert.ToInt32(System.Console.ReadLine());
if (n == 0) System.Console.WriteLine("ultima cifra este 1");
else
{
k = n % 4;
switch (k)
{
case 1: System.Console.WriteLine("ultima cifra este 2"); break;
case 2: System.Console.WriteLine("ultima cifra este 4"); break;case 3: System.Console.WriteLine("ultima cifra este 8"); break;
case 0: System.Console.WriteLine("ultima cifra este 6"); break;
}}
}
Sintaxa limbajului
Instruciuni condiionale, de iteraie i de control
-
7/21/2019 Ziua1 Iasi
38/64
O instruciune nou, pe care o aduce limbajul C#, este
foreach. Aceast instruciune enumer elementele dintr-o colecie,executnd o instruciune pentru fiecare element. Elementul care seextrage este de tip read-only, nu poate fi transmis ca parametru inicinuipoate schimba valoarea.Exemple:
Sintaxa limbajului
Instruciuni condiionale, de iteraie i de control
-
7/21/2019 Ziua1 Iasi
39/64
Exemplu:
mprirea unui ir de caractere n cuvinte. Se va afia numrul decuvinte i fiecare cuvnt n parte.
Sintaxa limbajului
Instruciuni condiionale, de iteraie i de control
-
7/21/2019 Ziua1 Iasi
40/64
Instruciuneacontinuepermite reluarea iteraiei celei mai apropiateinstruciuni switch, while, dowhile, forsau foreach.
Exemplu:
Sintaxa limbajuluiInstruciuni condiionale, de iteraie
i de control
-
7/21/2019 Ziua1 Iasi
41/64
Instruciunile try-catch-finally i throwPrin excepiesenelegeun obiect carencapsuleazinformaiidespre situaiianormale. Ea se folosetepentru a semnala contextul n care apare o situaiespecial.Exemple: erori la deschiderea unor fiierea crornume este greit,mprirela0 etc. Aceste erori se pot manipula astfel nct programul s nu seprbueasc.
Cnd o metodntlnete o situaie dintre cele menionate mai sus, se vaaruncao excepiecare trebuie sesizatitratat.C# poate arunca ca excepiiobiecte de tip System.Excepionsau derivate aleacestuia. Aruncarea excepiilorse face cu instruciuneathrowthrow new System.Exception();
Prinderea itratarea excepiilorse face folosind un bloc catch. Pot exista mai
multe blocuri catch, fiecare dintre ele prinde itrateazo excepiePentru a garanta cun anumit cod se va executa indiferent dactotul decurgenormal sau apare o excepie,acest cod se va pune n blocul finallycare se vaexecuta n orice situaie.
Sintaxa limbajuluiInstruciuni condiionale, de iteraie
i de control
-
7/21/2019 Ziua1 Iasi
42/64
Sintaxa limbajului
Instruciuni condiionale, de iteraie i de control
-
7/21/2019 Ziua1 Iasi
43/64
Si t li b j l i T bl i
-
7/21/2019 Ziua1 Iasi
44/64
La declararea unui tablou, se creeazo instana clasei .NET,System.Array. Compilatorul va traduce operaiile asupra
tablourilor, apelnd metode ale clasei System.Array.Declararea unui tablou unidimensional se realizeazastfel:Tip[] nume;
Prin aceastdeclarare nu se alocispaiupentru memorare.Pentru aceasta tabloul trebuie instaniat:
nume = new Tip[NumarElemente];Se pot face n acelaitimp operaiilede declarare, instanierei
iniializare:int[] v = new int[] {1,2,3};
sauint[] v = {1,2,3};
Sintaxa limbajuluiTablouri
-
7/21/2019 Ziua1 Iasi
45/64
n cazul tablourilor cu mai multe dimensiuni facem distincie ntretablouri regulate itablouri neregulate (tablouri de tablouri)
Declararea n cazul tablourilor regulate se face astfel:Tip[,] nume;
iar instanierea:nume = new Tip[Linii,Coloane];
Declararea instaniereaiiniializareaint[,] mat = new int[,] {{1,2,3},{4,5,6},{7,8,9}};
sauint[,] mat = {{1,2,3},{4,5,6},{7,8,9}};
Sintaxa limbajuluiTablouri
-
7/21/2019 Ziua1 Iasi
46/64
n cazul tablourilor neregulate (jagged array)declararea se face:Tip [][] nume; //tablou neregulat cu doua dimensiuni
iar instaniereaiiniializarea:Tip [][] nume = new Tip[][]
{
new Tip[] {sir_0},
new Tip[] {sir_1},
...
new Tip[] {sir_n}
};
sauTip [][] nume = {
new Tip[] {sir_0},
new Tip[] {sir_1},
...
new Tip[] {sir_n}
};
Sintaxa limbajuluiTablouri
S
-
7/21/2019 Ziua1 Iasi
47/64
Sintaxa limbajuluiTablouri
Si t li b j l i T bl i
-
7/21/2019 Ziua1 Iasi
48/64
Sintaxa limbajuluiTablouri
n cazul tablourilor cu mai multe dimensiuni facem distincientre tablouri
regulateitablouri neregulate (tablouri de tablouri)Declarare n cazul tablourilor regulate bidimensionale:Tip[,] nume;
Instaniere:nume = new Tip[Linii,Coloane];
Acces:
nume[indice1,indice2]
Si t li b j l i T bl i
-
7/21/2019 Ziua1 Iasi
49/64
Declarare n cazul tablourilor neregulate bidimensionale:Tip[][] nume;
Instaniere:nume = new Tip[Linii],[];
nume[0]=new Tip[Coloane1]
...
nume[Linii-1]=new Tip[Coloane
Linii-1
]Acces:nume[indice1][indice2]
Exemple:int[][] mat = new int[][] {
new int[3] {1,2,3},
new int[2] {4,5},
new int[4] {7,8,9,1}};
sauint[][] mat={new int[3] {1,2,3},new int[2] {4,5},new int[4] {7,8,9,1}};
Sintaxa limbajuluiTablouri
Si t li b j l i T bl i
-
7/21/2019 Ziua1 Iasi
50/64
Vectorii 3-D sunt utilizai frecvent n aplicaiile grafice.Exemple:int[,,] vect=new int[2,3,5];
sauint [,,] vect=new int[6,2,4,8];
Sintaxa limbajuluiTablouri
Si t li b j l i i i d t
-
7/21/2019 Ziua1 Iasi
51/64
Se definesc dou tipuri de iruri:regulate;de tip verbatim.Tipul regulat conine ntre
ghilimele zero sau mai multe
caractere, inclusiv secveneescape.
Secvenele escape permitreprezentarea caracterelor carenu au reprezentare grafic
precum i reprezentarea unorcaractere speciale: backslash,caracterul apostrof, etc.
Sintaxa limbajuluiiruri de caractere
Secven
escape
Efect
\ apostrof\ ghilimele\\ backslash\0 null\a alarm\b backspace\f form feedpaginnou\n new linelinie nou\r carriage return nceput
de rnd\t horizontal tab tab
orizontal
\u caracter unicode\v vertical tabtab vertical\x caracter hexazecimal
Si t li b j l i i i d t
-
7/21/2019 Ziua1 Iasi
52/64
n cazul n care folosim multe secveneescape, putem utiliza irurileverbatim. Aceste iruri pot s conin orice fel de caractere, inclusivcaracterul EOLN. Ele se folosesc n special n cazul n care dorim sfacem referiri la fiiereila regitri. Un astfel de irncepe ntotdeaunacu simbolul@naintea ghilimelelor de nceput.
string a = "un sir de caractere";
string b = "linia unu \nlinia doi";string c = @"linia unu
linia doi";
string d = "c:\\exemple\\unu.cs";
string e = @"c:\exemple\unu.cs";
Console.WriteLine(a); Console.WriteLine(b);Console.WriteLine(c); Console.WriteLine(d);
Console.WriteLine(e); Console.ReadLine();
Sintaxa limbajuluiiruri de caractere
Si t li b j l i i i d t
-
7/21/2019 Ziua1 Iasi
53/64
Funcii importante pentru iruri
Sintaxa limbajuluiiruri de caractere
Numele funciei Descriere
CompareTo Compar valorile caracterelor individuale dindouiruri
Concat Copiazun irla sfrituliruluicurent
Equals Returneaz valoarea true dac dou iruriconinaceleaicaractere
Insert Insereazun irn irulcurentRemove tergecaracterele specificate dintr-un ir
Substring Returneazo parte din irulcurent
ToLower ntoarce o copie a irului,scriscu litere mici
ToUper ntoarce o copie a irului,scriscu litere mari
Sinta a limbaj l i ir ri de caractere
-
7/21/2019 Ziua1 Iasi
54/64
FunciaSubstring folosetedoi parametri, primul indicpoziiadin irde unde ncepe extragerea subirului, iar al doilea cte caractereextrage.string a, b = "Functii importante pentru siruri";
a = b.Substring(8, 10);System.Console.WriteLine("a={0}", a);
a = a.ToUpper();System.Console.WriteLine("a={0}", a);
De data aceasta a-i apelat funcia ToUpper i a-i observatschimbrileproduse asupra variabilei a.Completnd n continuare funcia main cu urmtoarea linie de
program, veiavea posibilitatea de a observa cum se apeleazicum
lucreazfunciaEquals.if (Equals(a, b)) System.Console.WriteLine("sunt egale");
else System.Console.WriteLine("nu sunt egale");
Sintaxa limbajuluiiruri de caractere
Sintaxa limbajului iruri de caractere
-
7/21/2019 Ziua1 Iasi
55/64
Un string este o clas n C# . Variabilele clase din C# sunt tratate ca tipuri simple.Astfel transmiterea valorii lor ca parametri nu difer cu nimic fa de ceea ce tiai de ladatele simple de pn acum.
Se observ din listingul de mai jos c o funcie poate returna un string la fel cumreturneaz orice tip de dat simpl.static void Main(string[] args)
{string a = "prima valoare";schimb1(a);a = schimb2();
System.Console.WriteLine(a);}static void schimb1(string b){
System.Console.Write("am preluat ");System.Console.WriteLine(b);
b = " a doua valoare";System.Console.WriteLine(b);}static string schimb2(){
return (" ultima valoare");}
Sintaxa limbajuluiiruri de caractere
Sintaxa limbajului iruri de caractere
-
7/21/2019 Ziua1 Iasi
56/64
Compararea irurilorde caracterePentru a compara douiruride caractere vom utiliza operatorii ==
i!=.Definiie:dou iruri se consideregale dac sunt amndou null,
sau dac amndou au aceeai lungime i pe fiecare poziie aucaractere respectiv identice. n caz contrar irurile se considerdiferite.Pentru a compara dou iruri, unul dintre ele trebuie convertit la
object.
Sintaxa limbajuluiiruri de caractere
Exemplu
string a = "Informatica", b = (string)a.Clone();Console.WriteLine("a==b: {0}", a == b);Console.WriteLine("(object)a==b:{0}",(object)a == b);
Sintaxa limbajului iruri de caractere
-
7/21/2019 Ziua1 Iasi
57/64
Concatenarea irurilorPentru a concatena irurile vom folosi operatorul +:
string a = "Invat" + " " + " informatica";Inserare subir n irs1= "programarea este usoara";s2= "in C#";
Console.WriteLine(s1.Insert(12, s2));Cutare nlocuire subirs1 = "programarea in C# este usoara"; s2 = s1.Replace("C#", "Pascal");
Console.WriteLine(s2);
Copiere irs1= "string; s2 = string.Copy(s1); Console.WriteLine(s2);Extragere subirs1 = "Stringurile din C# ofera facilitati puternice"; s2 = s1.Substring(16);Console.WriteLine(s2);Eliminare spaii nceput sfrit
s1= " fara spatii de inceput si sfarsit " ; s2= s1.Trim();Console.WriteLine(s2);tergere subirs1 = "Stringurile din C# ofera facilitati puternice"; s2= s1.Remove(12,7);Console.WriteLine(s2);
Sintaxa limbajuluiiruri de caractere
Sintaxa limbajului iruri de caractere
-
7/21/2019 Ziua1 Iasi
58/64
Alte funcii care permit prelucrarea irurilor de caractere
Sintaxa limbajuluiiruri de caractere
Funcia Descrierea
string ToUpper() convertete toate caracterele irului lamajuscule
string ToLower() convertete toate caracterele irului laminuscule
int IndexOf(int c) returneaz indicele primei apariii acaracterului c n irint IndexOf(string s) returneaz indicele primei apariii a
subiruluisstring Concat(string u,
string v)concateneazirurileu iv
string Substring(int index) returneazun nou ircare este un subiral iruluiinialncepnd cu indicele index
string (char[] c) mparte un irn funciede delimitatorii c
Sintaxa limbajului Stocarea informaiilor n fiiere
-
7/21/2019 Ziua1 Iasi
59/64
Administrarea fiierelor
Tehnica de citire iscriere a datelor n idin fiiere,utilizatpentru apstraaceste informaii,reprezintadministrarea fiierelor.Pentru accesarea unui fiierde pe disc se folosesc funciidin spaiul
de nume System.IO.
n acest spaiu exist mai multe clase: File, StreamWriter,
BinaryReader iBinaryWriter.Aceste clase sunt folosite pentru operaiilede intrare-ieirecu fiiere.Obiectul File este o reprezentare a unui fiierde pe disc, iar pentru a-l
utiliza trebuie sl conectmla un flux(stream).Pentru a scrie datele pe disc, se ataeaz unui flux un obiect File.
Astfel se face administrarea datelor.Limbajul C# oferdoutipuri de fiiere: fiiere text(stocheaztext) i
fiierebinare(stocheazdate n format binar valid).
Sintaxa limbajuluiStocarea informaiilor n fiiere
Sintaxa limbajului Stocarea informaiilor n fiiere
-
7/21/2019 Ziua1 Iasi
60/64
Scierea icitirea datelor din fiieretext
Fiierelede ieirenecesitutilizarea unui obiect StreamWriter.FunciaCreateText(), ce face parte din clasa File, deschide un fiieri
creeazobiectul StreamWriter.
Sintaxa limbajuluiStocarea informaiilor n fiiere
Sintaxa limbajului Stocarea informaiilor n fiiere
-
7/21/2019 Ziua1 Iasi
61/64
Exemplustring[] a = { "primul", " fisier", "creat", "de mine", };//deschiderea unui fisier si atasarea lui la un fluxStreamWriter outputFile = File.CreateText("dana1.txt");foreach (string b in a){
outputFile.WriteLine(b);//scrierea textului in fisier
}outputFile.Close();
//deschidem din nou fisierul de data aceasta pentru a citi din elStreamReader inputFile = File.OpenText("dana1.txt");//definim o variabila string care va parcurge fisierul pana la finalstring x;while ((x = inputFile.ReadLine()) != null)
{System.Console.WriteLine(x);
}inputFile.Close();
Sintaxa limbajuluiStocarea informaiilor n fiiere
Sintaxa limbajului Stocarea informaiilor n fiiere
-
7/21/2019 Ziua1 Iasi
62/64
Scrierea icitirea datelor din fiierebinare
Fiierelebinare pot conineorice numrbinar valid. Datele majoritiiprogramelor sunt stocate n acest format binar.
Dac la fiierele text tipul de flux folosit era StreamWriter, la celebinare, pentru scrierea datelor programul creeazun obiect FileStream,la care trebuie ataatiun obiect BinaryWriter.
Sintaxa limbajuluiStocarea informaiilor n fiiere
Sintaxa limbajului Stocarea informaiilor n fiiere
-
7/21/2019 Ziua1 Iasi
63/64
Exemplu:{int i, j, x;int[,] a = new int[10, 10];
//se creeaza un fisier si un fluxFileStream f = new FileStream("dana2.dat", FileMode.CreateNew);
// se creeaza un scriitor binar si il ataseaza la flux
//acesta traduce datele fluxului in format binar
BinaryWriter outputFile = new BinaryWriter(f);
for (i = 1; i
-
7/21/2019 Ziua1 Iasi
64/64
//incepe citirea datelor din fisierul creat anterior
//se creeaza un obiect FileStream
FileStream g = new FileStream("dana2.dat", FileMode.Open);//se creeaza un obiect BinaryReader
BinaryReader inputFile = new BinaryReader(g);
bool final;
for (final = false, i = 1; !final; i++)
{ for (final = false, j = 1; !final; j++)
{//se apeleaza functia PeekChar care face parte din clasa BinaryReader si examineazaurmatorul caracter din flux, daca acesta este diferit de -1 atunci se executa citireaurmatorului caracter din flux prin functia ReadInt32()
if (inputFile.PeekChar() != -1)
{
x = inputFile.ReadInt32();
System.Console.Write("{0} ", x);
}
}
System.Console.Write("\n");
}
inputFile.Close(); g.Close();}
Sintaxa limbajuluiStocarea informaiilor n fiiere