15. Tablice

15. Tablice

Autor: Daniel Celeda

Opublikowano: 5/17/2006, 12:00 AM

Liczba odsłon: 209499

Często w programowaniu spotyka się sytuację, w której korzysta się z dużej liczby zmiennych tego samego typu. Zamiast deklarować np. kilkanaście (czy kilka tysięcy) zmiennych, korzysta się z tablic lub kolekcji.

Czym są tablice?

To zbiory wielu zmiennych tego samego typu. Możemy zadeklarować zmienną typu tablicowego i przechowywać w niej np. sto liczb całkowitych. W tablicach i kolekcjach możemy przetrzymywać także klasy i struktury. Dokładniej rzecz ujmując tablica to obiekt zawierający zbiór referencji do innych zmiennych.
Jako prosty przykład napiszmy program, w którym zadeklarujemy tablicę o rozmiarze 3 (tyle elementów będzie mogła przechowywać), a następnie przypiszemy jej trzy liczby całkowite i wypiszemy je na ekranie w innej kolejności.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
class KlasaGlowna
{
    static void Main()
    {
        int[] tablicaLiczb = new int[3];
        tablicaLiczb[0] = 11;
        tablicaLiczb[1] = 22;
        tablicaLiczb[2] = 33;
        System.Console.WriteLine("Liczby znajdujące się w tablicy:");
        System.Console.WriteLine(tablicaLiczb[0] + " " + tablicaLiczb[1] + " " + tablicaLiczb[2]);
        System.Console.WriteLine("Te same liczby ale wypisane w innej kolejności:");
        System.Console.WriteLine(tablicaLiczb[1] + " " + tablicaLiczb[2] + " " + tablicaLiczb[0]);
        System.Console.Read();

Prześledźmy kod. Najpierw deklarujemy zmienną tablicową, określając typ przechowywanych elementów („int”) oraz rozmiar (maksymalna ilość przechowywanych elementów). Po słówku „int” występuje para nawiasów prostokątnych, która określa, że nie jest to zwykła zmienna typu całkowitoliczbowego lecz zmienna tablicowa. Następnie za pomocą słówka „new” tworzymy nowy obiekt (tablicę) i podajemy rozmiar w nawiasach prostokątnych (w tym wypadku „3”). Odwołać się do poszczególnych elementów w tablicy możemy także za pomocą nawiasów prostokątnych. Wystarczy tylko podać, do którego elementu chcemy się dostać. Liczby 0, 1, 2 umieszczone między nawiasami to indeksy tablicy. Im większy rozmiar tablicy tym większych indeksów możemy użyć ale zawsze muszą one być co najmniej o jeden mniejsze od rozmiaru tablicy. Indeksowanie rozpoczyna się zawsze od liczby „0”, więc pierwszy element znajduje się pod „tablica[0]”, a nie jakby się mogło wydawać pod „tablica[1]”.
W naszym programie najpierw przypisujemy wartości kolejnym zmiennym, a następnie wypisujemy je w różnej kolejności.
Wynik działania programu:

class KlasaGlowna
{
    static void Main()
    {
        int[] tablicaLiczb = { 11, 22, 33 };
        System.Console.WriteLine("Liczby znajdujące się w tablicy:");
        System.Console.WriteLine(tablicaLiczb[0] + " " + tablicaLiczb[1] + " " + tablicaLiczb[2]);
        System.Console.WriteLine("Te same liczby ale wypisane w innej kolejności:");
        System.Console.WriteLine(tablicaLiczb[1] + " " + tablicaLiczb[2] + " " + tablicaLiczb[0]);
        System.Console.Read();

Wynik działania jest identyczny jak w poprzednim programie.

Automatyczna inicjalizacja elementów

W C# podczas powoływania tablicy do życia (stworzenie obiektu typy tablicowego), wszystkie elementy są wypełniane wartościami domyślnymi, czyli dla „int” będzie to „0”, dla „string” łańcuch pusty „”, dla obiektów „null” itd.

class KlasaGlowna
{
    static void Main()
    {
        int[] tablicaInt = new int[3];
        string[] tablicaString = new string[3];
 
        System.Console.WriteLine("Liczby znajdujące się w tablicaInt:");
        for (int i = 0; i < 3; i++)
        {
            System.Console.WriteLine(tablicaInt[i] + " ");
        }
        System.Console.WriteLine("\nNapisy znajdujące się w tablicaString:");
        for (int i = 0; i < 3; i++)
        {
            System.Console.WriteLine(tablicaString[i] + " ");
        }
 
        System.Console.Read();
    }

Wynik

Praktyczne wykorzystanie tablic

Bardziej przydatnym programem jest aplikacja, która najpierw poprosi użytkownika o podanie rozmiaru tablicy, a następnie o wprowadzenie tylu liczb ile wynosi podany przez nas rozmiar. Liczby zostaną umieszczone w tablicy. W każdej chwili będziemy mogli wskazać, która liczbę chcemy wyświetlić.

class KlasaGlowna
{
    static void Main()
    {
        System.Console.WriteLine("Podaj rozmiar tablicy.");
        string rozmiarTablicy = System.Console.ReadLine();
        int[] tablicaLiczb = new int[int.Parse(rozmiarTablicy)];
        for (int i = 0; i < int.Parse(rozmiarTablicy); i++)
        {
            System.Console.WriteLine("Podaj liczbę o indeksie " + i + ".");
            tablicaLiczb[i] = int.Parse(System.Console.ReadLine());
        }
 
        System.Console.WriteLine("Liczby znajdujące się w tablicy:");
        for (int i = 0; i < int.Parse(rozmiarTablicy); i++)
        {
            System.Console.Write(tablicaLiczb[i] + " ");
        }
 
        string koniec = "n";
 
        do
        {
            System.Console.WriteLine("\nKtórą liczbę wyświetlić?");
            string indeks = System.Console.ReadLine();
            System.Console.WriteLine("Element tablicy o indeksie " + indeks +
                " ma wartość: " + tablicaLiczb[int.Parse(indeks)]);
            System.Console.WriteLine("Koniec? (t\\n)");
            koniec = System.Console.ReadLine();
        }
        while (koniec != "t");
    }

}

Wynik wykonania programu:

Ćwiczenie

Napisz program pobierający od użytkownika 5 liczb całkowitych i wypisujący je na ekranie od najmniejszej do największej.

class KlasaGlowna
{
    static void Main()
    {
        int[] tablicaLiczb = new int[5];
 
        for (int i = 0; i < 5; i++)
        {
            System.Console.WriteLine("Podaj liczbę o indeksie " + i + ".");
            tablicaLiczb[i] = int.Parse(System.Console.ReadLine());
        }
 
        for (int i = 4; i > 0; i--)
        {
            for (int j = 0; j < i; j++)
            {
                int pierwsza = tablicaLiczb[j];
                int druga = tablicaLiczb[j + 1];
                if (pierwsza > druga)
                {
                    tablicaLiczb[j] = druga;
                    tablicaLiczb[j + 1] = pierwsza;
                }
            }
        }
 
        System.Console.WriteLine("Posortowane liczby: ");
        for (int i = 0; i < 5; i++)
        {
            System.Console.Write(tablicaLiczb[i] + " ");
        }
        System.Console.Read();
    }

Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży
Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży

Wydarzenia