Tablice dwuwymiarowe pozwalają na przechowywanie danych w formie tabeli (wiersze i kolumny). Są szczególnie przydatne do reprezentowania macierzy, tabel ocen, planów lekcji czy map.
Deklaracja i inicjalizacja tablic 2D
// Deklaracja pustej tablicy 2D
int[,] macierz = new int[3, 4]; // 3 wiersze, 4 kolumny
// Inicjalizacja z wartościami
int[,] oceny = {
{5, 4, 3, 5}, // Wiersz 0 (np. uczeń 1)
{3, 5, 4, 4}, // Wiersz 1 (np. uczeń 2)
{4, 3, 5, 5} // Wiersz 2 (np. uczeń 3)
};
// Można też zapisać w taki sposób:
int[,] macierz2 = new int[,] {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};Dostęp do elementów w tablicy 2D
int[,] oceny = {
{5, 4, 3, 5}, // Matematyka, Polski, Angielski, Historia
{3, 5, 4, 4},
{4, 3, 5, 5}
};
// Dostęp do elementu: [wiersz, kolumna]
Console.WriteLine($"Ocena ucznia 1 z polskiego: {oceny[0, 1]}"); // 4
Console.WriteLine($"Ocena ucznia 2 z historii: {oceny[1, 3]}"); // 4
// Zmiana oceny
oceny[0, 1] = 5; // Poprawa oceny ucznia 1 z polskiego na 5
Console.WriteLine($"Nowa ocena: {oceny[0, 1]}"); // 5Właściwości tablic 2D
int[,] macierz = new int[4, 3]; // 4 wiersze, 3 kolumny
Console.WriteLine($"Liczba wierszy: {macierz.GetLength(0)}"); // 4
Console.WriteLine($"Liczba kolumn: {macierz.GetLength(1)}"); // 3
Console.WriteLine($"Całkowita liczba elementów: {macierz.Length}"); // 12Iterowanie przez tablicę 2D
int[,] liczby = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Wyświetlanie wszystkich elementów
for (int wiersz = 0; wiersz < liczby.GetLength(0); wiersz++)
{
for (int kolumna = 0; kolumna < liczby.GetLength(1); kolumna++)
{
Console.Write(liczby[wiersz, kolumna] + " ");
}
Console.WriteLine(); // Nowa linia po każdym wierszu
}Praktyczny przykład – tabela ocen
// Dane uczniów i przedmiotów
string[] uczniowie = {"Anna", "Piotr", "Maria"};
string[] przedmioty = {"Matematyka", "Polski", "Angielski", "Historia"};
int[,] oceny = {
{5, 4, 3, 5}, // Anna
{3, 5, 4, 4}, // Piotr
{4, 3, 5, 5} // Maria
};
Console.WriteLine("Tabela ocen:");
Console.WriteLine("=============");
// Wyświetl nagłówki przedmiotów
Console.Write("Uczeń".PadRight(10));
for (int j = 0; j < przedmioty.Length; j++)
{
Console.Write(przedmioty[j].PadRight(12));
}
Console.WriteLine();
// Wyświetl oceny każdego ucznia
for (int i = 0; i < uczniowie.Length; i++)
{
Console.Write(uczniowie[i].PadRight(10));
for (int j = 0; j < przedmioty.Length; j++)
{
Console.Write(oceny[i, j].ToString().PadRight(12));
}
Console.WriteLine();
}Obliczenia na tablicach 2D
int[,] oceny = {
{5, 4, 3, 5}, // Anna
{3, 5, 4, 4}, // Piotr
{4, 3, 5, 5} // Maria
};
Console.WriteLine("Średnie uczniów:");
// Oblicz średnią dla każdego ucznia (wiersza)
for (int i = 0; i < oceny.GetLength(0); i++)
{
int suma = 0;
for (int j = 0; j < oceny.GetLength(1); j++)
{
suma += oceny[i, j];
}
double srednia = suma / (double)oceny.GetLength(1);
Console.WriteLine($"Uczeń {i + 1}: {srednia:F2}");
}
Console.WriteLine("\nŚrednie przedmiotów:");
// Oblicz średnią dla każdego przedmiotu (kolumny)
for (int j = 0; j < oceny.GetLength(1); j++)
{
int suma = 0;
for (int i = 0; i < oceny.GetLength(0); i++)
{
suma += oceny[i, j];
}
double srednia = suma / (double)oceny.GetLength(0);
Console.WriteLine($"Przedmiot {j + 1}: {srednia:F2}");
}Wyszukiwanie w tablicy 2D
int[,] macierz = {
{1, 5, 3},
{7, 2, 8},
{4, 9, 6}
};
int szukanaLiczba = 7;
bool znaleziono = false;
int znalezionyWiersz = -1, znalezionyKolumna = -1;
// Przeszukaj całą macierz
for (int i = 0; i < macierz.GetLength(0) && !znaleziono; i++)
{
for (int j = 0; j < macierz.GetLength(1) && !znaleziono; j++)
{
if (macierz[i, j] == szukanaLiczba)
{
znaleziono = true;
znalezionyWiersz = i;
znalezionyKolumna = j;
}
}
}
if (znaleziono)
{
Console.WriteLine($"Liczba {szukanaLiczba} znaleziona na pozycji [{znalezionyWiersz}, {znalezionyKolumna}]");
}
else
{
Console.WriteLine($"Liczba {szukanaLiczba} nie została znaleziona");
}