Probleme cu array-uri
Familiarizându-ne cu ciclurile, variabilele, construcțiile condiționale și array-urile, să analizăm câteva probleme pentru lucrul cu array-urile.
Numărul de numere pozitive
Să găsim numărul de numere pozitive într-un array:
int[] numbers = { -4, -3, -2, -1, 0, 1, 2, 3, 4 };
int result = 0;
foreach(int number in numbers)
{
if(number > 0)
{
result++;
}
}
Console.WriteLine($"Numărul de elemente mai mari decât zero: {result}");
Aici creăm o variabilă auxiliară result, care va conține numărul de numere pozitive. În ciclu parcurgem array-ul și, dacă elementul său este mai mare decât zero, adăugăm la variabila result o unitate.
Inversarea array-ului
A doua problemă - inversarea array-ului, adică răsturnarea lui în ordine inversă:
int[] numbers = { -4, -3, -2, -1, 0, 1, 2, 3, 4 };
int n = numbers.Length; // lungimea array-ului
int k = n / 2; // mijlocul array-ului
int temp; // element auxiliar pentru schimbarea valorilor
for(int i = 0; i < k; i++)
{
temp = numbers[i];
numbers[i] = numbers[n - i - 1];
numbers[n - i - 1] = temp;
}
foreach(int i in numbers)
{
Console.Write($"{i} \t");
}
Deoarece trebuie să modificăm elementele array-ului, folosim ciclul for. Algoritmul de rezolvare a problemei presupune parcurgerea elementelor până la mijlocul array-ului, care în program este reprezentat de variabila k, și schimbarea valorilor elementului cu index i și elementului cu index n - i - 1.
Program de sortare a array-ului
Acum să luăm o problemă mai complexă - sortarea simplă a array-ului:
int[] nums = { 54, 7, -41, 2, 4, 2, 89, 33, -5, 12 };
// sortare
int temp;
for (int i = 0; i < nums.Length - 1; i++)
{
for (int j = i + 1; j < nums.Length; j++)
{
if (nums[i] > nums[j])
{
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
// afișare
Console.WriteLine("Afișarea array-ului sortat");
for (int i = 0; i < nums.Length; i++)
{
Console.WriteLine(nums[i]);
}
Pentru sortarea array-ului, parcurgem array-ul și comparăm elementele. Deoarece trebuie să comparăm fiecare element al array-ului cu fiecare (cu excepția comparației cu el însuși), folosim un ciclu imbricat.
În ciclul exterior, luăm elementul pe care îl vom compara:
for (int i = 0; i < nums.Length - 1; i++)
Apoi lansăm ciclul imbricat, care începe de la următorul element, și din care extragem elementele cu care vom compara elementul luat din array în ciclul exterior:
for (int j = i + 1; j < nums.Length; j++)
Dacă elementul cu index mai mic este mai mare decât elementul cu index mai mare, schimbăm elementele între ele.
if (nums[i] > nums[j])
{
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
La final, afișăm toate elementele.