tablouri c# 2 - tuneam.files.wordpress.com · 1 tablouri tablouri unidimensionale limbajul c#...

of 5 /5
1 Tablouri Tablouri unidimensionale Limbajul C# tratează tablourile într-o manieră nouă faţă de alte limbaje (Pascal, C/C++). La declararea unui tablou, se creează o instanţă a clasei .NET, System.Array. Compilatorul va traduce operaţiile asupra tablourilor, apelând metode ale System.Array. Declararea unui tablou unidimensional se face astfel: Prin această declaraţie nu se alocă şi spaţiu pentru memorare. Pentru aceasta, tabloul trebuie instanţiat: Se pot face în acelaşi timp operaţiile de declarare, instanţiere şi iniţializare: sau Exemplu: Crearea, sortarea şi afişarea unui vector: namespace SortareTablou { class Program { static void Main(string[] args) { int[] v = new int[5] { 10, 8, 2, 4, 6 }; //instantiaza si initializeaza tabloul Array.Sort(v); //Metoda Sort din clasa predefinita Array sorteaza crescator tabloul v for (int i = 0; i < v.Length; i++) //Proprietatea Length returneaza numarul de elemente din tabloul v Console.Write("{0,3}", v[i]); Console.ReadLine(); } } } Afişarea se poate face şi cu ajutorul lui foreach: Exemplu: Ciurul lui Eratostene. Pentru un număr natural n dat se afişează toate numerele prime mai mici decât n. Selectarea numerelor prime se face folosind ciurul lui Eratostene Ciurul lui Eratostene presupune formarea unui şir din numerele 2, 3, 4, …, n-1, n. Pentru a obţine acest şir „tăiem” mai întâi toţi multiplii lui 2, apoi ai lui 3 ş.a.m.d. În final rămân numai numerele prime din intervalul [2,n]. Noţiunea de „tăiere” a unui element va însemna, în acest caz, atribuirea valorii zero pentru acel element.

Upload: others

Post on 16-Sep-2019

218 views

Category:

Documents


3 download

Embed Size (px)

TRANSCRIPT

Page 1: Tablouri C# 2 - tuneam.files.wordpress.com · 1 Tablouri Tablouri unidimensionale Limbajul C# tratează tablourile într-o manieră nouă faţă de alte limbaje (Pascal, C/C++). La

1

Tablouri

Tablouri unidimensionale Limbajul C# tratează tablourile într-o manieră nouă faţă de alte limbaje (Pascal, C/C++).

La declararea unui tablou, se creează o instanţă a clasei .NET, System.Array. Compilatorul va traduce operaţiile asupra tablourilor, apelând metode ale System.Array. Declararea unui tablou unidimensional se face astfel:

Prin această declaraţie nu se alocă şi spaţiu pentru memorare. Pentru aceasta, tabloul trebuie instanţiat:

Se pot face în acelaşi timp operaţiile de declarare, instanţiere şi iniţializare:

sau

Exemplu: Crearea, sortarea şi afişarea unui vector: namespace SortareTablou { class Program { static void Main(string[] args) { int[] v = new int[5] { 10, 8, 2, 4, 6 }; //instantiaza si initializeaza tabloul Array.Sort(v); //Metoda Sort din clasa predefinita Array sorteaza crescator tabloul v for (int i = 0; i < v.Length; i++) //Proprietatea Length returneaza numarul de elemente din tabloul v Console.Write("{0,3}", v[i]); Console.ReadLine(); } } }

Afişarea se poate face şi cu ajutorul lui foreach:

Exemplu: Ciurul lui Eratostene. Pentru un număr natural n dat se afişează toate numerele prime mai mici decât n. Selectarea numerelor prime se face folosind ciurul lui Eratostene Ciurul lui Eratostene presupune formarea unui şir din numerele 2, 3, 4, …, n-1, n. Pentru a obţine acest şir „tăiem” mai întâi toţi multiplii lui 2, apoi ai lui 3 ş.a.m.d. În final rămân numai numerele prime din intervalul [2,n]. Noţiunea de „tăiere” a unui element va însemna, în acest caz, atribuirea valorii zero pentru acel element.

Page 2: Tablouri C# 2 - tuneam.files.wordpress.com · 1 Tablouri Tablouri unidimensionale Limbajul C# tratează tablourile într-o manieră nouă faţă de alte limbaje (Pascal, C/C++). La

2

namespace CiurulLuiEratostene { class Program { static void Main(string[] args) { int n, i, j; int[] c; Console.Write("n="); n = Convert.ToInt32(Console.ReadLine()); c=new int[n+1]; Console.WriteLine("\nNumerele prime <={0} sunt:\n", n); for (i = 2; i <= n; i++) c[i] = i; i = 2; while (i <= n / 2) { if (c[i] != 0) { j = 2 * i; while (j <= n) { if (c[j] != 0) c[j] = 0; j += i; } } i++; } for (i = 2; i <= n; i++) if (c[i] != 0) Console.Write("{0,3}", c[i]); Console.ReadLine(); } } }

Exemplu: Ionel urcă în fiecare zi n trepte(n<40) până la apartamentul în care locuieşte. El poate urca păşind pe treapta următoare sau sărind peste o treaptă. În câte moduri poate urca Ionel cele n trepte? Dacă notăm cu f[i] numărul de moduri în care poate urca copilul i trepte, observăm că există 2 moduri prin care acesta poate ajunge la treapta i: de la treapta i-1 sau de la treapta i-2. Pentru a determina numărul de moduri, vom însuma în câte moduri poate ajunge pe treapta i-1 cu numărul de modalităţi de a ajunge pe treapta i-2, deci f[i]=f[i-1]+f[i-2]. (Sirul lui Fibonacci) namespace Trepte { class Program { static void Main(string[] args) { int n, i;

Page 3: Tablouri C# 2 - tuneam.files.wordpress.com · 1 Tablouri Tablouri unidimensionale Limbajul C# tratează tablourile într-o manieră nouă faţă de alte limbaje (Pascal, C/C++). La

3

int[] f; Console.Write("Numarul de trepte="); n = Convert.ToInt32(Console.ReadLine()); f = new int[n + 1]; f[1] = f[2] = 1; for (i = 3; i <= n; i++) f[i] = f[i - 1] + f[i - 2]; Console.WriteLine("Numarul de posibilitati este {0}", f[n].ToString()); Console.ReadLine(); } } }

Exemplu: Să se determine valoare elementului maxim dintr-un tablou unidimensional, precum şi frecvenţa sa de apariţie namespace ElementMaximSiFrecventa { class Program { static void Main(string[] args) { int n, i, max, f; int[] a; Console.Write("Dati dimensiunea tabloului: "); n = Convert.ToInt32(Console.ReadLine()); a= new int[n+1]; for (i = 0; i < n; i++) { Console.Write("a[{0}]=", i + 1); a[i] = Convert.ToInt32(Console.ReadLine()); } max = a[0]; f = 1; for (i = 1; i < n; i++) if (a[i] > max) { max = a[i]; f = 1; } else if(a[i]==max) f++; Console.WriteLine("Elementul maxim din tablou este {0} si are frecventa {1}", max, f); Console.ReadLine(); } } }

Page 4: Tablouri C# 2 - tuneam.files.wordpress.com · 1 Tablouri Tablouri unidimensionale Limbajul C# tratează tablourile într-o manieră nouă faţă de alte limbaje (Pascal, C/C++). La

4

Tablouri bidimensionale Declararea unei matrici se face astfel:

Instantierea:

Accesul:

Exemplu: Declararea instanţierea şi iniţializarea

sau

Exemplu: Pentru o matrice pătratică, ale cărei elemente întregi se citesc de la tastatură, să se determine:

maximul dintre valorile situate deasupra diagonalei principale numărul de numere prime (dacă acestea există) situate sub diagonala secundară

namespace PrelucrareMatrice { class Program { static void Main(string[] args) { int i, j, n; Console.Write("Dati dimensiunea matricei patratice : "); n = Convert.ToInt32(Console.ReadLine()); int[,] a= new int[n + 1, n + 1]; Console.WriteLine("Citire matrice : "); for (i = 0; i < n; i++) for (j = 0; j < n; j++) { Console.Write("a[{0}][{1}] = ", i + 1, j + 1); a[i, j] = Convert.ToInt32(Console.ReadLine()); } Console.WriteLine("Afisare matrice : "); for (i = 0; i < n; i++) {

Page 5: Tablouri C# 2 - tuneam.files.wordpress.com · 1 Tablouri Tablouri unidimensionale Limbajul C# tratează tablourile într-o manieră nouă faţă de alte limbaje (Pascal, C/C++). La

5

for (j = 0; j < n; j++) Console.Write("{0, 4}", a[i, j]); Console.WriteLine(); } int max = a[0, 1]; for (i = 0; i < n - 1; i++) for (j = i + 1; j < n; j++) if (a[i, j] > max) max = a[i, j]; Console.WriteLine("Maximul dintre valorile situate deasupra diagonalei principale : {0}", max); int k = 0; for (i = 1; i < n; i++) for (j = n - i; j < n; j++) if (prim(a[i, j]) == 1) k++; if (k == 0) Console.WriteLine("Sub diagonala secundara nu sunt numere prime!"); else Console.WriteLine("Sub diagonala secundara sunt {0} numere prime!", k); Console.ReadLine(); } static int prim(int x) { if (x == 1) return 0; if (x % 2 == 0 && x != 2) return 0; for (int d = 3; d * d <= x; d += 2) if (x % d == 0) return 0; return 1; } } }