Sunteți pe pagina 1din 33

LIMBAJE DE PROGRAMARE I

Curs obligatoriu pentru studentii


Facultatii de Informatica Manageriala
Anul II

Titular curs:
conf. univ. dr. Crian Daniela Alexandra

ATENTIE

Scopul acestui document este de structura materia predata


in cadrul orelor de curs si seminar. Invatarea materiei,
exclusiv pe baza acestui document, reprezinta o abordare
superficiala!

Tematica:

Programarea aplicaiilor folosind limbajul c# i platforma .Net

Obiective:

Insuirea conceptelor fundamentale si de programare orientat obiect n limbajul C#.


Cunoasterea mecanismelor specifice limbajului C# si dezvoltarea aplicaiilor consola,
Windows si Web pe platforma .Net.

Bibliografie obligatorie:
1
2
3
4

Crian D.A., Programarea Aplicaiilor folosind Limbajul C# si Platforma .Net. Volumul


I. Limbajul C#, Ed. ProUniversitaria, Bucureti, 2015;
Crian D.A., Materiale didactice publicate pe site-ul universitii, 2015;
Introducere n .NET Framework, A. Nita si Co, suport de curs Microsoft, 2008;
Introducere n ASP.NET, Joe Martin Brett Tomson, Ed. Teora, 2009;

Bibliografie optionala:
5

Professional ASP.NET in C# and VB, Bill Evjen, Scott Hanselman , Devin Rader, 2008;

***, documentatii tehnice http://www.asp.net/

Evaluare
Tip
1 Criterii de evaluare
2 Metode de evaluare
activitate
A. Evaluare n timpul semestrului, pe baza criteriilor de
frecventa si competenta:
Corectitudinea i
Test scris semestrial
completitudinea
in cadrul cursului din
cunotinelor; Coerena
saptamana a 14-a
logic; Gradul de asimilare
Curs
a cunotinelor;
contiinciozitatea,
interesul pentru studiu
individual;
Participare activ la
aplicaiile practice de
la laboratoare
Capacitatea de aplicare n
practic a cunotinelor
dobndite;
contiinciozitatea,
interesul pentru studiu
individual;

3 Pondere din nota


final
100%
40%

15%

Realizarea si
sustinerea
proiectului, in cadrul
40%
Laborator
seminarului din
saptamana a 14-a
-Participare
la
cercetarea tiinific,
publicare articole in
5%
reviste
stiintifice
studentesti
B. Evaluare final n sesiunea de examene, prin proba scrisa si
100%
orala:
Standard minim de performan
realizarea unei aplicatii individuale care s ateste nsuirea cunotinelor i capacitatea
de a utiliza cabilitile dobndite n cadrul disciplinei

CAPITOLUL 1. . PRELIMINARII- 5

CAPITOLUL 1. PRELIMINARII
1.1 Prima aplicaie C#

1) Crearea aplicatiilor de tip Consola:


File/New Project/Visual C#/Windows/Clasic Desktop/Console Application
2) Structura unui program C#:
using System;
namespace ConsoleApplication1 //spatiu de nume
{
class Program //clasa
{
static void Main() //functia Main
{
}
}
}

1.2 Sintaxa limbajului


1.2.1 Sensitivitate
Limbajul C# este un limbaj case sensitive, cu alte cuvinte se face distincie
ntre literele mari i cele mici.
1.2.2 Comentarii
comentariul pe mai multe linii ncadrat de /*.*/
Exemplu:
/* comentariu
pe mai multe linii */

6 - Limbajul C#

comentariu pn la sfritul liniei ncepe cu secvena // i se poate


desfura nelimitat pe linia curent
Exemplu:
// comentariu pn la sfritul liniei

1.2.3 Cuvinte cheie


Sunt cuvinte care au o semnificaie predefinit pentru compilator.
1.2.4 Identificatorii
Identificatorii reprezint nume de variabile, funcii .a.m.d.
1.2.5 Delimitatori
Delimitatorii sunt simboluri ce separ diferite entiti ntr-un program.
1.2.6 Constante
const double PI = 3.14; //correct
const double PI;
//gresit, constanta nu a fost initializata

1.2.7 Operatori
Operatorii (+, -, *, /, &, |, ~, &&, || .a.m.d.) sunt simboluri formate dintrunul sau mai multe caractere, care specific anumite operaii.

1.3 Tipuri de date predefinite

CAPITOLUL 1. . PRELIMINARII- 7
sbyte (1)
byte (1)
short (2)
ushort (2)
ntregi

int (4)

Tipuri predefinite (built-in)

uint (4)
long (8)

bool (1)
de tip Valoare

simple

ulong (8)

tipuri numerice
object

char (2)

de tip Referinta
string

float (4)
cu virgul mobil
double (8)
decimal (16)

Fig.1. Tipurile de date predefinite (built-in)

1.4 Constante
1.4.1 Constante ntregi
Exemple: int a=10, b=4532, c=9999787;

1.4.2 Constante reale


Valoarea unei constante dat n format exponenial se calculeaz astfel:
<const_intreaga1>.<const_intreaga2>e/E+/-<exponent> =
= <const_intreaga1>.<const_intreaga2>*10+/-<exponent>.

1.4.3 Constante caracter


A 65 B 66 C 67
a-97 b-98

8 - Limbajul C#

0 48 1-49

Secvene escape:\a, \n, \, \\.

1.4.4 Constante sir de caractere


Un sir constant de caractere se numeste \literal\

Secvena:
string text = @"c:\docs\doc.txt
col1 col2 col3
rand1
rand2";
Console.WriteLine(text);

va afia:
c:\docs\doc.txt
col1 col2
rand1
rand2

col3

1.5 Declararea obiectelor


1.5.1 Durata de via i domeniul de vizibilitate
Declaraie:
<tip> <nume>

domeniul de vizibilitate este poriunea de program (cod surs) n care


variabila va putea fi utilizat;
durata de via se refer la timpul ct variabila este alocat n
memorie.

CAPITOLUL 1. . PRELIMINARII- 9

1.5.2 Variabile var (Tip de date implicit)


var i = 10; // tip int implicit
int i = 10; // tip int explicit

1.6 Conversii
1.6.1 Conversii numerice
int x = 5.0;
// Eroare (5.0 este implicit double)
int y = (int)5.0; // ok: cast.
float z = 5.0; // Eroare (5.0 este implicit double)
float u = (float)5.0;// ok: cast
float w = 5.0f;// ok

1.6.2 Conversii ntre un tip numeric i un string

string s = "1";
int n = int.Parse(s); //n=1
sau: int n = Convert.ToInt32(s); //n=1
string p = "1,2345";
double d = double.Parse(p);//d=1.2345
sau: double d = Convert.ToDouble(p); //d=1.2345
int n = 1;
string s = n.ToString(); //s="1"
double d = 1.23456;
string p = d.ToString("0.000"); //p="1.235"
string r = d.ToString("N"); //r="1.24"
string p = "" + d//p="1.23456"

10 - Limbajul C#

1.7 Funcii de in/out


1.7.1 Funcii de in/out pentru consol
Intrri:
Console.ReadKey(); - asteapta apasarea unei taste
Console.Read(); - returneaza codul ASCII al primului character (se opreste la
enter)
Console.ReadLine(); - returneaza un text (se opreste la enter)

Ieiri:
Console.Write();- afiseaza un text (formatat sau nu)
Console.WriteLine(); - afiseaza un text (formatat sau nu), apoi terminator linie;

Afisare neformatat:
Console.WriteLine("text");
Console.WriteLine(1>=2); //bool (False)
Console.WriteLine(2.5); //double
Console.WriteLine("text "+1+"\ntext "+2); //double

Afisare formatata :
int i = 10;
double d = 1234.56789;
Console.WriteLine("{0:G},{0:N},{0:X}\n{1:G},{1:N}",i,d);

afieaz:
10,10,00,A
1234,56789,1.234,57
apasa o tasta...

1.7.2 Funcii de in/out pentru fiiere text


File.ReadAllLines(path="fis.csv",string[]);
File.ReadAllText(path,string);
File.WriteAllLines(path,string[]);
File.WriteAllText(path,string);

CAPITOLUL 1. . PRELIMINARII- 11

File.AppendAllLines("fis.csv", string[]);
File.AppendAllText("fis.csv", string);

12 - Limbajul C#

CAPITOLUL 2. EXPRESII: OPERATORI i OPERANZI


2.1 Operatorii i prioritatea lor
Tabel 2-1. Tabela prioritii operatorilor
Nr.
Operatori
Clasa operatori
crt.
x.y f(x) a[x] x++ x-- new
1
operatori primari
typeof checked unchecked
2
operatorii unari
+ - ! ~ ++x --x (T)x
operatorii aritmetici
3
* / %
multiplicativi
operatorii aritmetici
4
+ - (binari)
aditivi
5
deplasrile pe bii
<< >>
operatorii relaionali i
6
< <= > >= is as
de testare tip
operatorii de testare a
7
== !=
egalitii
8
&
operatorii logici pe bii
9
^
binari
|
10
11
&&
operatorii logici binari
||
12
13 operatorul condiional
14 operatorii de atribuire

?:
= <<= >>= += -= *= /= %= &=
^= |=

2.2 Operatorul dimensiune sizeof


sizeof (double) // expresia are valoarea 8

Asociativitate

CAPITOLUL 2. . EXPRESII: OPERATORI i OPERANZI- 13

2.3 Operatorul de conversie explicit a tipului cast


int a=4, b=5, n=2;
double medie1=(a+b)/n;
double medie2=(double)(a+b)/n;

2.4 Operatorii aritmetici


expresia 3+3.5 are valoarea 6.5 i tipul double
double rez=1/2+1/2;//rez=0

2.5 Operatorii relaionali


3<7
bool t=3<7
bool t=3==7
bool t=3!=7

Expresia are valoarea true


Variabila t va avea valoarea true
Variabila t va avea valoarea false
Variabila t va avea valoarea true

2.6 Operatorii de testare tip


is:
int a = 3; double b = 3.5;
object x = b;
if (x is int)
Console.Write("int");
else
Console.Write("double");

as:
object y = null;
string t = y as string;

14 - Limbajul C#

if (t != null)
Console.WriteLine(t);
else
Console.WriteLine("null");
Output:
abcd
null

2.7 Operatori logici


!, &&,||
t=true&&false||!true==false// t este true.

2.8 Operatorii logici pe bii


~, &, |, ^, <<, >>
5&10 = 0
1&2=0
a&1//paritate a
int a=11; int t=a<<3;//t=88
int a=11;int t=a>>3;//t=1

2.9 Operatorul condiional ?:


int a=3, b=5, min=a<b?a:b;
int a=-5, abs_a = a>=0?a:-a;

2.10 Operatorii de atribuire


atribuirea multipl
int a, b, c; a=b=c=3;

CAPITOLUL 2. . EXPRESII: OPERATORI i OPERANZI- 15

atribuirea compus:
n=3; n+=5; // n devine 8

incrementarea (++) / decrementarea (--)


int a=3, b=5;
++a; // a va avea valoarea 4
--b; // b va avea valoarea 4

preincrementare:
int a=5, b;
b=++a; //a=6, b=6

postincrementare:
int a=5, b;
b=a++; //a=6, b=5

16 - Limbajul C#

CAPITOLUL 3. INSTRUCIUNI
3.1 Instruciunea vid
int suma=0;
for(i=1;i<=10;i++);
suma+=i;

3.2 Instruciunea expresie


int a; //declaratie
a=3; // instruciune expresie (de atribuire)
a++; // instruciune expresie (postincrementare)
Console.WriteLine(Apel de functie);

3.3 Instruciunea compus


{
declaraii i/sau instruciuni
}

3.4 Instruciunea if
if (a > b)
Console.WriteLine( a);
else
Console.WriteLine( b);
if(a%2==0)
Console.WriteLine("par");
else
Console.WriteLine("impar");

Instruciuni if imbricate:

CAPITOLUL 3. . INSTRUCIUNI- 17

if(a>=0)
{
if(a%2==0)
Console.WriteLine("pozitiv par");
}
else
Console.WriteLine("negativ");

3.5 Instruciunea switch


string student = "bogdan";
switch (student)
{
case "ana": Console.WriteLine(0); break;
case "bogdan": //nimic
case "ion": Console.WriteLine(1); break;
case "maria": Console.WriteLine(0); break;
}

3.6 Instruciunea while


while (b!=0) //alg.Euclid
{
r = a % b;
a = b;
b = r;
}

3.7 Instruciunea do-while


do
{
cifra = n % 10;
s += cifra;
if (cifra!=0)
p *= cifra;
c++;

18 - Limbajul C#

n /= 10;
} while (n!=0);

3.8 Instruciunea for


suma=0;
for(i=1;i<=10;i++)
suma+=i;
fact=1;
for(i=2;i<=n;i++)
fact*=i;

3.9 Instruciunea foreach


string[] culori = { "red", "green", "blue", "black", "white" };
foreach (string culoare in culori)
Console.WriteLine(culoare);

3.10 Instruciunea break


for(int i=1;i<=10;i++)
{
if(i==5) break;
Console.WriteLine(" " + i);
}

3.11 Instruciunea continue


for(int i=1;i<=10;i++)
{
if(i==5) continue;
Console.WriteLine(" " + i);
}

CAPITOLUL 3. . INSTRUCIUNI- 19

3.12 Instruciunea goto


goto eticheta;
eticheta:I

3.13 Instruciunile try-catch-finally i throw : Gestionarea erorilor


try
{
Console.Write("a="); a = int.Parse(Console.ReadLine());
Console.Write("b="); b = int.Parse(Console.ReadLine());
Console.WriteLine(a / b);
}
catch (Exception e)
{
Console.WriteLine("Eroare: " + e);
}
finally
{
Console.WriteLine("Program incheiat");
}

20 - Limbajul C#

CAPITOLUL 4. TIPURI DE DATE REFERIN

Tipuri de date Referinta

object
predefinite (built-in)

string
array
class

definite de utilizator
(user-defined)

delegate
interface

Fig. 4. Clasificarea tipurilor de date Referin

CAPITOLUL 4. . TIPURI DE DATE REFERIN- 21

4.1 iruri de caractere (String)


4.1.1 Generaliti
string sir = "abcd";
s[0]=X; //Eroare
Console.WriteLine("Sirul \"{0}\" are {1} caractere:",text,text.Length);
foreach (char c in text)
Console.Write (c+" ");

4.1.2 Clasa String


Atributul Length: text.Length
Operatorul = (atribuire)
string s1 = "Text initial";
string s2; s2 = s1;//se creeaza un nou obiect s2 in care este copiat
continutul lui s1

Operatorul + (concatenare)
string sir = sir1 + sir2;

Funcii de prelucrare a irurilor de caractere: Compare, Concat, Copy,


Equal, Format, IndexOf, IndexOfAny, LastIndexOf, Insert, Replace,
Remove, Trim, Split, ToLower, ToUpper.
4.1.3 Clasa StringBuilder
string text1 = "abc";
// text1[0] = 'A';//eroare
StringBuilder text2 = new StringBuilder("abc");
text2[0] = 'A';
Console.WriteLine(text2); //Abc

22 - Limbajul C#

4.2 Masive de date (Arrays)


4.2.1 Vectorii
Declaratia. Instantierea.Popularea
Tip [] nume;
nume = new Tip[NumarElemente];
double[] V=new double [12];

Parcurgerea i referirea elementelor


for (int i = 0; i < V.Length; i++)
Console.WriteLine(V[i]);

Copierea: shalow copy vs. Deep copy

Shalow copy :
int[] V2 = V1;
V2[0] = 999;
foreach (int el in V1)
Console.Write("{0} ", el);//999 2 3

Deep copy
int[] V2 = new int[V1.Length];
V1.CopyTo(V2, 0);
V2[0] = 9999;
foreach (int el in V1)
Console.Write("{0} ", el);//1 2 3

System.Array:
System.Array.Sort(v);
System.Array.Reverse(v);

CAPITOLUL 4. . TIPURI DE DATE REFERIN- 23

4.2.2 Tablouri multidimensionale


4.2.2.1 Tablouri regulate
Tip[,] nume;
nume = new Tip[Linii,Coloane];
ex: int[,] A=new int[3,3];//matrice regulata 3x3 intregi
A[0,0]=3; //primul element de pe primul rand
A[1,0]=3; //primul element de pe al doilea rand

4.2.2.2 Tablouri neregulate (jagged)


Tip[][] nume;
nume = new Tip[Linii],[];
nume[0]=new Tip[Coloane1]
...
nume[Linii-1]=new Tip[ColoaneLinii-1]

Ex:
int[][] B = new int[3][];//matrice neregulata (jagged) cu 3 randuri
B[0] = new int[2];//primul rand are 2 int
B[1] = new int[3];//al doilea rand are 3 int
B[2] = new int[4];//al treilea rand are 4 int
B[0][0]=3; //primul element de pe primul rand
B[1][0]=3; //primul element de pe al doilea rand

4.3 Obiecte (Object)


object[] objs = { true, 12.632, 17908, "abcd", 'a', new Student(Ion,10.0)};
foreach (object o in objs)
Console.WriteLine("{0}-{1}",o,o.GetType());

Boxing i unboxing
int i = 10;//stack

24 - Limbajul C#

object ob = i; //boxing
ob = 0;
Console.WriteLine("{0},{1}", i, ob);//10,0
i = (int)ob; //unboxing
Console.WriteLine("{0},{1}", i, ob);//0,0

4.4 Deep copy vs. Shallow copy


int a = 3;
int b = a; //deep copy
b=5;
Console.WriteLine("a={0}, b={1}", a, b);// a=3, b=5
int[] a = new int[] { 1, 2, 3 };
int[] b = a; //shallow copy
b[0] = 9;
Console.WriteLine("a[0]={0}", a[0]); // a[0]=9
int[] a = new int[] { 1, 2, 3 };
int[] b = (int[])a.Clone();//deep copy
b[0] = 9;
Console.WriteLine("a[0]={0}", a[0]); // a[0]=1

CAPITOLUL 5. . FUNCII- 25

CAPITOLUL 5. FUNCII
5.1 Generaliti
int min(int a, int b)
{
return a<b?a:b;
}

5.2 Transmiterea parametrilor ctre funcii (valoare, ref, out)

5.2.1 Transferul prin valoare (call by value)


static void swap(int x, int y)
{
int temp = x; x = y; y = temp;
Console.WriteLine("a={0},b={1}", x, y);//5,3
}
int a = 3, b = 5;
swap(a, b); //a=3, b=5;

5.2.2 Transferul prin referin (call by reference)


static void swap(ref int x, ref int y)
{
int temp = x; x = y; y = temp;
Console.WriteLine("a={0},b={1}", x, y);//5,3
}
int a = 3, b = 5;
swap(ref a, ref b); //a=5, b=3;

26 - Limbajul C#

Transfer parametru
- (implicit: transfer prin valoare)
ref
out

Rol
Intrare Ieire Referinta
X
X
X
X
X
X

5.2.3 Transmiterea obiectelor de tip referin


static void CitireVector(out int[] V)
{
Console.Write("nr. de elemente:");
int n = Convert.ToInt32(Console.ReadLine());
V = new int[n];
for (int i = 0; i < n; i++)
{
Console.Write("V[{0}]=", i);
V[i] = Convert.ToInt32(Console.ReadLine());
}
}
static void AfisareVector(int[] V)
{
Console.Write("Vector: ");
foreach (int el in V)
Console.Write("{0,5}", el);
Console.WriteLine();
}
}

static void swap(string x, string y)


{
string temp = x; x = y; y = temp;
Console.WriteLine("{0},{1}", x, y);//def,abc
}

CAPITOLUL 5. . FUNCII- 27

static void swap(ref string x, ref string y)


{
string temp = x; x = y; y = temp;
Console.WriteLine("{0},{1}", x, y);//def,abc
}

5.3 Suprancrcarea funciilor


int min(int a, int b)//varianta 1
{
return a < b ? a : b;
}
string min(string s1, string s2)//varianta 2
{
return string.Compare(s1, s2)<=0? s1 :s2;
}
int min(int[] V)//varianta 3
{
int m = V[0];
for (int i = 1; i < V.Length; i++)
if (m > V[i])
m = V[i];
return m;
}

5.4 Parametri cu valori implicite


int calc(int a, char op='+', int b=1)
{

5.5 Funcii cu numr variabil de parametri (param)


static int sum(params int[] V)//aduna numere intregi

28 - Limbajul C#

{
Console.Write("suma=");
int sum = 0;
foreach (int el in V)
sum += el;
return sum;
}

5.6 Argumentele funciei main i valoarea returnat


static void Main(string[] args)
{
Console.WriteLine("{0} argumente:", args.Length);
foreach (string arg in args)
{
Console.WriteLine("{0}", arg);
}
Console.ReadLine();
}

5.7 Funcii recursive


double factR(int n)//recursiv
{
if (n==0) return 1;
return n * factR(n - 1);
}
long FibI(int n)//iterativ
{
long Fib0, Fib1, Fib2;

CAPITOLUL 5. . FUNCII- 29

Fib0=1; Fib1=1; Fib2=1;


for(int i=2;i<=n;i++){
Fib2=Fib0+Fib1;
Fib0=Fib1;
Fib1=Fib2;
}
return Fib2;
}

30 - Limbajul C#

CAPITOLUL 6. TIPURI DE DATE DEFINITE DE


UTILIZATOR
6.1 Enumerri
enum Days { Luni, Marti, Miercuri, Joi, Vineri, Sambata, Duminica};
int x = (int)Days.Luni; // x=0
int y = (int)Days.Sambata; //y=5
Console.WriteLine("Luni = {0}", x);// Luni = 0
Console.WriteLine("Sambata = {0}", y);// Sambata = 5

6.2 Structuri
public struct Data
{
public int zi;
public string luna;
public int an;
}astazi;
astazi.zi = 19;
astazi.luna="dec";
astazi.an = 2016;

31

CAPITOLUL 7. COLECII DE DATE


7.1 Structuri dinamice de date
7.1.1 Liste
Array (System.Collections.Generics)- clasa generica (template)
List<int> list = new List<int>(3) { 1, 2, 3 };
list.Add(4); //lista: 1 2 3 4
list.Remove(2);//lista: 1 3 4

ArrayList (System.Collections) clas depreciat


ArrayList arrayList = new ArrayList(3) { 1, "abc", true };

7.1.2 Stive i cozi


Stack<T> (System.Collections.Generic) - clas generic (template)
LIFO (Last in, first out)
Operatii uzuale: Push, Pop, Count, Clear.
Stack (System.Collections) clas depreciat
System.Collections.Stack stiva = new Stack();
stiva.Push(1);
stiva.Push("abc");
stiva.Push(true);

Queue<T> (System.Collections.Generic)-clas generic (template)


FIFO (First in, first out)
operatii uzuale: Enqueue, Peek, Count, Clear.
Queue (System.Collections) clas depreciat
System.Collections.Queue coada = new Queue();
coada.Enqueue(1);
coada.Enqueue("abc");

32 - Limbajul C#

coada.Enqueue(true);

7.2 Dictionare
Dictionary (System.Collections.Generic) - Hash-table (keyvalue)
Atribute: Count, Key, Value;
Metode: Add, Remove, Clear, Select:
Dictionary<string, string> moneda = new Dictionary<string, string>();
moneda.Add("Romania", "RON");
moneda.Add("Franta", "EUR");
foreach (var o in moneda)
Console.WriteLine("{0}-{1}", o.Key, o.Value);
moneda.Remove("Romania");

7.3 Operaii comune pe colecii de date


int[] v = { 40, 2, 5, 2, 3 };
AfisVector(v);
Array.Reverse(v);// 3 2 5 2 40
Array.Sort(v); // 2 2 3 5 40
Array.Sort(v, Compara); // 40 5 3 2 2
Array.Sort(v, Compara2); // 40 2 2 3 5
Console.WriteLine("{0} pe pozitia {1}", 2, Array.IndexOf(v, 2)); //1
Console.WriteLine("{0} pe pozitia {1}", 2, Array.LastIndexOf(v, 2)); //2
Console.WriteLine("primul element par din vector: {0}", Array.Find(v,
EstePar));//40
Console.WriteLine("ultimul element par din vector: {0}", Array.FindLast(v,
EstePar));//2
int[] pare = Array.FindAll(v, EstePar);// 40 2 2
AfisVector(pare);
Array.ForEach(v, new Action<int>(AfisPatrat));// 1600 4 4 9 25

33

Console.WriteLine("toate elementele
Array.TrueForAll(v, EstePar));//false
Array.Clear(v, 3, 2); //// 40 2 2 0 0
Console.WriteLine("toate elementele
Array.TrueForAll(v, EstePar));//true

static int Compara(int x, int y)


{
return -x.CompareTo(y);
}
static int Compara2(int x, int y)
{
return (x % 10).CompareTo(y % 10);
}
static bool EstePar(int x)
//criteriu numar par
{
return x % 2 == 0;
}
static void AfisPatrat(int n)
{
Console.Write("{0}*{0}={1} ", n, n * n);
}
}

din

vector

sunt

pare:

{0}",

din

vector

sunt

pare:

{0}",

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