→ Slide 1

Tablice, macierze, kolekcje

→ Slide 2

  • tablice jednowymiarowe, dwuwymiarowe, wielowymiarowe, postrzępione
  • przechowują elementy takiego samego typu
  • pozycja elementu określona przez indeks poczynając od 0
  • rozmiar tablicy jest stały, określony w momencie tworzenia tablicy
  • tablice to typ referencyjny
→ Slide 3

Składnia:

typ[] nazwa_tablicy;

Przykład:

double[] tablica;
→ Slide 4

Tablica jest typem referencyjnym, używamy słowa new

double[] tablica = new double[10];
  • stały rozmiar określony w momencie tworzenia
  • można zainicjować w momencie tworzenia
double[] tab2 = { 40.32, 3.13, 345.12};
var[] tab3 = new double[]{ 40.32, 3.13, 345.12};
string[] dni = new string[] { "Pon", "Wt", "Śr", "Czw", "Pią", "Sob", "Niedz" };
→ Slide 5
  • Operator dostępu [indeks]
  • Indeksy rozpoczynają się od 0
double[] tablica = { 40.32, 3.13, 345.12};
 
tablica[0] = 3.15;
Console.WriteLine(tablica[2]);
 
for(int i=0; i < tablica.Length; i++)
   Console.WriteLine(tablica[i]);
→ Slide 6

Typy wartościowe:

  • int, char, double, …
  • wartość jest przechowywana w obszarze pamięci zmiennej (na stosie)

Typy referencyjne:

  • tablice, łańcuchy (string), wszystkie klasy
  • tworzone za pomocą operatora new
  • zmienna przechowuje referencję (wskaźnik) do obszaru pamięci (na stercie)
  • domyślna wartość null - pusta referencja

Żródło: TutorialsTeacher

→ Slide 7
int a = 42;
int b;
 
b=a;    // kopiowanie wartości
b++;
 
Console.WriteLine("a={0}  b={1}", a, b);
 
int[] ta = { 42, 1, 2 };    
int[] tb;
 
tb = ta;    // kopiowanie referencji
tb[0]++;            
 
Console.WriteLine("ta[0]={0}  tb[0]={1}", ta[0], tb[0])

Wyjście

a=42  b=43
ta[0]=43  tb[0]=43
→ Slide 8

Pętla forach() pozwala wygodnie iterować po elementach kolekcji (tablice, listy, łańcuchy)

Składnia:

foreach (var element in tablica)
{
    // kolejne elementy podstawiane do zmiennej element
}

Przykład:

int i = 0;
foreach (var element in tablica)
{
   Console.WriteLine("Element [{0}] wynosi: {1}", i, element);
   i++;
}
string tekst = "Ala ma kota";
 
foreach(var znak in tekst)
    Console.WriteLine(znak);
→ Slide 9

Napisz program, który wczytuje liczby aż do podania pustej linii. Po zakończeniu wczytywania program wyświetla wprowadzone liczby w odwrotnej kolejności. Zakładamy, że liczb nie będzie więcej niż 1000.

Sprawdź, co się stanie, gdy przekroczymy zakres indeksów tablicy.

→ Slide 10

Tworzenie tablicy 2 wymiarowej

int[,] macierz = new int[3, 4];

Dostęp do elementów tablicy

int element = macierz[0, 5];

Przykład z inicjacją

int[,] macierz = new int[,] {{ 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 }};
 
int[,,] macierz = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } },
                                 { { 7, 8, 9 }, { 10, 11, 12 } } };
→ Slide 11

Tablice postrzępione (jagged) - to tablice, których elementami są tablice.
Rozmiar tablic może być różny (nie tworzą macierzy prostokątnej)

int[][] jaggedArray = new int[3][];
 
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];

Dostęp do elementów;

int x = jaggedArray[1][2];

Przykład z inicjacją

int[][] jaggedArray3 =
{
    new int[] { 1, 3, 5, 7, 9 },
    new int[] { 0, 2, 4, 6 },
    new int[] { 11, 22 }
};
→ Slide 12

Wybrane własności i metody tablic

Własność Opis
Length całkowita liczba elementów we wszystkich wymiarach tablicy
Rank ilość wymiarów
Metoda Opis
GetLength(i) ilość elementów w i-tym wymiarze
→ Slide 13

Klasa Array udostępnia funkcje operujące na tablicach

Metoda opis
Array.Clear(tab) zeruje elementy
Array.Reverse(tab) odwraca kolejność elementów w tablicy jednowymiarowej
Array.Sort(tab) sortuje elementy w tablicy jednowymiarowej
→ Slide 14

Napisz program, który wczyta macierz liczb rzeczywistych o wymiarach $N \times M$. Wartości $N$ oraz $M$ podaje użytkownik na początku programu następnie program pobiera kolejne elementy macierzy. Po wczytaniu wszystkich wartości wyświetl zawartość macierzy w postaci tabeli.

→ Slide 15

Napisz program, który zaszyfruje linię tekstu za pomocą szyfru macierzowego. Metoda szyfrowania polega na umieszczeniu znaków szyfrowanej wiadomości sekwencyjnie w kolejnych wierszach macierzy. Przykładowo tekst „TAJNA WIADOMOŚĆ” umieszczony w macierzy posiadającej 4 kolumny wypełnia macierz o wymiarach 4×4:

T A J N
A   W I  
A D O M  
O Ś Ć 	

Szyfr uzyskujemy ze znaków odczytanych w kolumnach. W powyższym przykładzie zaszyfrowana wiadomość to: „TAAOA DŚJWOĆNIM”. Sposób kodowania zależy od ilości kolumn macierzy - jest to klucz szyfrujący. Do odszyfrowania wiadomości wykorzystuje się ten sam algorytm, w którym kluczem będzie liczba wierszy macierzy wypełnionej tekstem.

Program wczytuje następujące dane:

  • liczbę kolumn macierzy
  • linię tekstu (komunikat do zaszyfrowania)

Wynikiem działania jest wyświetlenie zaszyfrowanego tekstu oraz liczby uzyskanych wierszy macierzy szyfrującej.

Przykład działania:

Podaj liczbę kolumn (klucz szyfrujący): 4
Wprowadź komunikat: 
Ala ma kota
Zaszyfrowany tekst:
Amolata a k
Liczba wierszy (klucz deszyfrujący): 3