15. Tablice

15. Tablice

 Daniel Celeda
Daniel Celeda
00:00
17.05.2006
28 komentarzy
205872 wyświetlenia

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();
    }


Spodobał Ci się ten artykuł? Podziel się z innymi!

Źródło:

Polecamy również w kategorii Kurs C#, cz. I

Komentarze

  • Marco 16:00 22.06.2006

    Pytam przy okazji. Jaka jest funkcja do sortowania liczb w sposob automatyczny? lub jak wyszukiwac lub sprawdzac czy istnieje interesujaca nas funkcja.

  • Trolek 03:01 28.06.2006

    a jak napisać taką tablice ? Wypełnij losowo tablicę 10 elementową liczbami z zakresu 0-10 i oblicz: Iloczyn liczb podzielnych przez 5. Tablicę oraz wynik (sumę) wydrukuj. ppwidmo@poczta.fm

  • xbeyond 09:44 18.05.2007

    Apropos komentarza Marco, to przydałoby się wykorzystanie funkcji sortującej artykuły z kursu C# w sposób naturalny ponieważ w tym momencie są one posortowane w sposób mało intuicyjny tzn.: 1, 10, 11 ..., 2, 20 itd.

  • rakuzan 19:25 25.06.2007

    ej Trolek: wiem, ze to dawno bylo, ale to miales zadanie z programowania, co??? lol

  • złośliwy 18:19 29.06.2007

    Swoją drogą obrzydliwie banalne zadanie.. studenci teraz jacyś leniwi.

  • ruby 23:58 02.07.2007

    to chyba nie student tylko jakis gimnazjalista... mam nadzieje .... :/

  • Sfinks 15:59 05.07.2007

    Ja raczej znam C++, i w wyniku z tego coś mi tutaj nie pasuje. nie mogę załapać 1 rzeczy. cytuje: System.Console.WriteLine("Podaj rozmiar tablicy."); string rozmiarTablicy = System.Console.ReadLine(); i jakiś tam instrukcje. w C++ to by było tak int rozmiarTablicy; cin>>rozmiarTablicy; i bez tych stringów. Więc pytanie: jak można w C# wpisać z klawiatury liczbę int? pytam się bo w całym kursu tego nie znalazłem. bo tutaj później widzę coś takiego int[] tablicaLiczb = new int[int.Parse(rozmiarTablicy)]; for (int i = 0; i < int.Parse(rozmiarTablicy); i++) dla czego nie pisze z skąd się wziął ten " Parse ".najgorzej jest to że w tych językach programistycznych wszystkie słowa kluczowe i funkcji z biblioteki są po angielsku, a i przykładowe zmienne tak samo autory piszą po angielsku , no i początkujący weź zrozum które jest słowa z biblioteki a które podał autor. ale to nie ważne. mnie raczej interesuje czy nie można wpisać od razu wartość int do programu? bez stringu?

  • Sfinks 17:45 10.07.2007

    Sam sobie odpowiem. int liczba = int.Parse(Console.ReadLine()); bardziej krótka i czytelniejsza ! jeszcze bym przy okazji dodał co robią metody ReadLine() i WritLine() byłoby bardziej jasne o co w tym wszystkim chodzi. Niestety nie mam bardzo czasu. No taka nauka gdzie nie pisze się co skąd się wzięło i jakie ma dobre i źle cechy , to nie nazywał bym nauką.

  • Trez 12:16 19.07.2007

    O czym ty gadasz? Wszystko jest wyjaśnione w poprzednich działach. Ja robie kurs od 6 czy 5 lekcji i nie mama problemu. PS Bardzo mi się te lekcje podobają. Gratuluję autorowi.

  • Luken 02:00 28.11.2007

    Bardzo fajny kurs, najważniejsze to przerobić cały, od początku do końca a nie tak jak Sfinks przeczytać jedna lekcje i czepiać się że czegoś nie ma, ja przerobiłem wszystkie lekcje od 1 do tej i nie mam problemu ze zrozumieniem. Autor jest super gościem bo w końcu ktoś pomyślał o ludziach którzy pierwszy raz mają styczność z programowaniem.

  • Student 12:20 27.12.2007

    PYTANIE: jak załadować do tablicy dane z wczytanego pliku w MS VS 2005 EE??

  • kivol 02:36 13.02.2008

    a co mam napisać jeśli chcę aby każde z pól mojej tablicy przechowywało inny obiekt ? jak to zdeklarować ?

  • graf 02:47 21.02.2008

    tablice zadeklarować można tak aby przyjmowała obiekty tylko tego typu dla jakiego została zadeklarowana dlatego tam wszędzie jest rzutowanie na int. Żeby tablica przechowywała różne obiekty potrzebna by Ci była tablica wielowymiarowa lub jednowymiarowa i będziesz rzutował na typ tablicy, ale chyba łatwiej zrobić jakąś klasę, która miała by składowe o potrzebnych Ci obiektach...

  • mikes 16:17 29.12.2008

    ja mam problem z tym sortowaniem, nie mogę tego za bardzo zrozumieć jak działa program który sortuje np 5 liczb. Czy jest jakaś funkcja do tego? (c#)

  • T 15:31 09.01.2009

    <p>Czy początkujący programista napisze sam dobrze działający algorytm sortujący? Wątpię. Najprostsza ze znanych metod to sortowanie bąbelkowe, czyli zamienianie ze sobą sąsiednich wartości z tablicy. Musi być użyta podwójna pętla "for". I raczej nie ma, zdefiniowanych w języku C#, systemowych funkcji sortujących tablice.</p>

  • sezam 12:26 23.01.2009

    <p>Algorytm sortujący okazuje się banalny...gdy się trochę pomyśli.... Ja nie lubię programować i robię to kiedy muszę.... ale jak juz to robię to zastanawiam się nad działaniem programu.... skracam sobie czas pisania każdej aplikacji srednio o połowę ;]</p>

  • pilsio 22:20 05.02.2009

    <p>Najprostszy algorytm sortujący to quicksort. Tworzysz drugą tablicę. Bierzesz pierwszy element z tablicy i poruwnujesz z nastepnymi (czy jest mniejszy) jesli tak to go wypisujesz w pierwsze miejsce drugiej tablicy, jeśli nie bierzesz następny elemet i postępujesz tak samo. Należy tylko pamiętać aby przy porównywaniu kolejnych elementów pomijać te które juz wypisalismy.</p>

  • cin i cout 14:37 05.03.2009

    W C++ cin i cout dzialaja identycznie, jak tu Console.Writeline(...). Cin i cout sa obiektami i jako takie tez wypisuja tylko w stringach. Tyle ze niejawnie na nasze potrzeby konwertuja dany string na float czy tam int. Dlatego mozna uzywac takiej konstrukcji: int x; cin >> x; // pobiera liczbe jako string, zamienia ja na int i juz cout << x ; // zamienia x na string i wysyla na ekran Nie wiem jeszcze jak mozna tez w C# zrobic cos podobnego, niekoniecznie z operatorami << i >>, ale przynajmniej skrocic zapis i przy okazji zeby dokonywalo automatycznej konwersji typu na string i odwrotnie. Poza tym, kurs fajny :0 Pozdarwiam

  • Sz x 15:14 04.04.2009

    <p>Sortować tablice można za pomocą Sort():</p> <p>Array.Sort(jakaśtamtablica);</p>

  • Sz x 15:19 04.04.2009

    <p>Jeśli chcesz sortować od elementu największego:</p> <p><span>Array.Sort(jakaśtamtablica);</span></p> <p>Array.Reverse(jakaśtamtablica);</p> <p> </p> <p>Array.Reverse(...) zapisuje tablice od tyłu.</p>

  • Asmes 18:27 29.05.2009

    <p>Ciekawie choc malo, a gdzie tablice wielowymiarowe???</p>

  • johnny 18:15 07.08.2009

    <p>no właśnie, gdzie tablice wielowymiarowe? podaj jakąś przykładową klasę i zrób tablicę wielowymiarową tej klasy? ciekawe czy se poradzisz ;/</p>

  • fifi 13:33 18.12.2010

    Czemu nie działają linki z rozwiązaniami ćwiczeń ?

  • Morales 09:02 09.01.2011

    Rozwiązania ćwiczeń nie wyświetlają się w Firefox"sie. Najlepiej otworzyć sobie ten kurs w IE albo Operze. BTW bardzo dobry kurs :)

  • Eldritch 21:20 24.10.2011

    Niestety, rozwiązania do ćwiczeń nie wyświetlają mi się i w IE9.

  • Kundi 13:41 25.10.2011

    Na Chrome śmiga

  • Mateusz 01:28 26.10.2011

    Niestety nie moge zrozumiec deklaracji : int[] tablicaLiczb = new int[3]; dlaczego new int[3] ?? i dlaczego nie mozna tego zapisac int[3] talblicaliczb ... Nie rozumiem na czym polega new int[3]

  • Piotr 13:01 29.10.2012

    Witam, Czy ktoś były skłonny wytłumaczyć mi działanie programu srotującego tablicę? piotrek.wo@gmail.com

Skomentuj

Autor