Tablice w języku C#

Tablice w C# są strukturami danych, które pozwalają na przechowywanie wielu elementów tego samego typu w uporządkowany sposób. Umożliwiają one dostęp do danych za pomocą indeksów, co pozwala na efektywne przetwarzanie dużych zbiorów danych.

Deklaracja i inicjalizacja tablicy

Aby zadeklarować tablicę, należy określić jej typ oraz użyć nawiasów kwadratowych []:

typ[] nazwaTablicy;

Przykład:

int[] liczby; // Deklaracja tablicy liczb całkowitych

Inicjalizacja tablicy polega na przypisaniu jej rozmiaru lub wartości początkowych:

liczby = new int[5]; // Inicjalizacja tablicy o rozmiarze 5

Można również połączyć deklarację z inicjalizacją:

int[] liczby = new int[5];

Inicjalizacja z wartościami początkowymi

Tablicę można od razu wypełnić wartościami:

int[] liczby = new int[] {1, 2, 3, 4, 5};

Lub jeszcze prościej:

int[] liczby = {1, 2, 3, 4, 5};

Zapisywanie danych do tablicy

Elementy tablicy są indeksowane od 0 do n-1, gdzie n to rozmiar tablicy.

Przykład:

int[] liczby = new int[5];
liczby[0] = 10;
liczby[1] = 20;
liczby[2] = 30;
liczby[3] = 40;
liczby[4] = 50;

Użycie pętli do zapisu danych:

for (int i = 0; i < liczby.Length; i++)
{
    liczby[i] = (i + 1) * 10;
}

Właściwość Length w tablicach

Właściwość Length jest wbudowaną właściwością tablic w C#, która zwraca liczbę elementów w tablicy. Dzięki niej możemy łatwo dowiedzieć się, ile elementów zawiera tablica, bez konieczności ręcznego liczenia czy zapamiętywania jej rozmiaru.

Przykład:

int[] liczby = new int[5];
Console.WriteLine(liczby.Length); // Wyświetli 5

Użycie Length w pętlach

Właściwość Length jest często używana w pętlach, aby przejść przez wszystkie elementy tablicy, niezależnie od jej rozmiaru.

Przykład: Iterowanie przez tablicę za pomocą pętli for

for (int i = 0; i < liczby.Length; i++)
{
    Console.WriteLine($"Indeks {i}: {liczby[i]}");
}

Dlaczego używamy liczby.Length zamiast stałej liczby?

  • Elastyczność: Jeśli zmienimy rozmiar tablicy, nie musimy modyfikować warunku w pętli. Kod automatycznie dostosuje się do nowej długości tablicy.
  • Bezpieczeństwo: Unikamy błędów typu IndexOutOfRangeException, które mogą wystąpić, gdy próbujemy uzyskać dostęp do indeksu poza zakresem tablicy.
  • Czytelność: Użycie Length jasno wskazuje, że pętla ma iterować przez całą tablicę.

Odczyt danych z tablicy

Aby odczytać wartości z tablicy, używamy indeksów tak samo jak przy zapisie.

Przykład:

Console.WriteLine(liczby[0]); // Wyświetli 10
Console.WriteLine(liczby[1]); // Wyświetli 20

Odczyt wszystkich elementów przy użyciu pętli:

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

Odczyt kontrolowany przez instrukcję if

Możemy kontrolować odczyt danych z tablicy za pomocą instrukcji warunkowych.

Przykład: Wyświetlanie tylko liczb większych od 25

for (int i = 0; i < liczby.Length; i++)
{
    if (liczby[i] > 25)
    {
        Console.WriteLine(liczby[i]);
    }
}

Szukanie elementu w tablicy

Aby znaleźć konkretny element w tablicy, przeszukujemy ją, porównując każdy element z poszukiwaną wartością.

Przykład: Szukanie liczby 30 w tablicy

int szukana = 30;
bool znaleziono = false;

for (int i = 0; i < liczby.Length; i++)
{
    if (liczby[i] == szukana)
    {
        znaleziono = true;
        Console.WriteLine($"Znaleziono liczbę {szukana} na indeksie {i}.");
        break; // Opcjonalnie przerywamy pętlę po znalezieniu
    }
}

if (!znaleziono)
{
    Console.WriteLine($"Liczba {szukana} nie została znaleziona w tablicy.");
}

Praktyczny przykład

Poniżej znajduje się kompletny program demonstrujący wykorzystanie tablic w praktyce.

using System;

class Program
{
    static void Main()
    {
        // Deklaracja i inicjalizacja tablicy
        int[] liczby = new int[5];

        // Zapisywanie danych do tablicy (wprowadzanie przez użytkownika)
        for (int i = 0; i < liczby.Length; i++)
        {
            Console.Write($"Podaj liczbę dla indeksu {i}: ");
            liczby[i] = int.Parse(Console.ReadLine());
        }

        // Odczyt danych z tablicy (wyświetlanie wszystkich elementów)
        Console.WriteLine("\nZawartość tablicy:");
        for (int i = 0; i < liczby.Length; i++)
        {
            Console.WriteLine($"Indeks {i}: {liczby[i]}");
        }

        // Odczyt kontrolowany przez instrukcję if (wyświetlanie liczb parzystych)
        Console.WriteLine("\nLiczby parzyste w tablicy:");
        for (int i = 0; i < liczby.Length; i++)
        {
            if (liczby[i] % 2 == 0)
            {
                Console.WriteLine($"Indeks {i}: {liczby[i]}");
            }
        }

        // Szukanie elementu w tablicy
        Console.Write("\nPodaj liczbę do wyszukania: ");
        int szukana = int.Parse(Console.ReadLine());
        bool znaleziono = false;

        for (int i = 0; i < liczby.Length; i++)
        {
            if (liczby[i] == szukana)
            {
                znaleziono = true;
                Console.WriteLine($"Znaleziono liczbę {szukana} na indeksie {i}.");
                break;
            }
        }

        if (!znaleziono)
        {
            Console.WriteLine($"Liczba {szukana} nie została znaleziona w tablicy.");
        }
    }
}

Wyjaśnienie programu

  • Deklaracja tablicy: Tworzymy tablicę liczby o rozmiarze 5.
  • Zapisywanie danych: Użytkownik wprowadza 5 liczb, które są zapisywane do tablicy.
  • Odczyt danych: Wyświetlamy wszystkie wprowadzone liczby wraz z ich indeksami.
  • Odczyt kontrolowany: Wyświetlamy tylko liczby parzyste z tablicy.
  • Szukanie elementu: Użytkownik podaje liczbę do wyszukania, a program sprawdza, czy znajduje się ona w tablicy.

Dodatkowe informacje

  • Indeksowanie: Pamiętaj, że indeksy w tablicach zaczynają się od 0.
  • Dostęp poza zakresem: Próba dostępu do elementu poza zakresem tablicy spowoduje błąd IndexOutOfRangeException.
  • Tablice wielowymiarowe: C# obsługuje również tablice wielowymiarowe, np. tablice dwuwymiarowe (matryce).
  • Metody pomocnicze: Klasa Array oferuje wiele metod, takich jak Sort(), IndexOf(), czy Length, które ułatwiają pracę z tablicami.

Ćwiczenia

  1. Sumowanie elementów: Napisz program, który sumuje wszystkie elementy w tablicy liczb całkowitych.
  2. Średnia arytmetyczna: Oblicz średnią arytmetyczną wartości w tablicy.
  3. Maksimum i minimum: Znajdź największą i najmniejszą wartość w tablicy.
  4. Odwracanie tablicy: Napisz program, który odwraca kolejność elementów w tablicy.
  5. Tablica znaków: Stwórz tablicę typu char[] i wypisz jej zawartość w odwrotnej kolejności.