Podstawy
programowania
Ćwiczenie laboratoryjne:
Tablice statyczne
autor: dr inż. Michał Łabowski
▪ michal.labowski@wat.edu.pl
▪ www.mlabowski.wel.wat.edu.pl
definicja Wyobraź sobie sytuację, w której musisz zapamiętać w programie dwa wyniki pomiarów napięcia. Możesz oczywiście utworzyć dwie zmienne float pomiar_1 oraz float pomiar_2. Nic trudnego. Jednak co jeśli tych zmiennych będzie 100? 1 000 000? Definiowanie każdej zmiennej może być wtedy dość czasochłonne. Aby rozwiązać m.in. ten problem stworzono tablice. Dzięki nim możliwe jest łatwe zarezerwowanie pamięci dla zbioru danych. Przyjmijmy, że mamy 1 000 pomiarów, wówczas definicja tablicy wygląda w sposób następujący:
float pomiary[1000];
lub w ogólności:
typ nazwa_tablicy[liczba_elem];
tablica ta rezerwuje w pamięci miejsce dla liczba_elem elementów typu typ oraz co ważne, elementy te sąsiadują ze sobą, więc można powiedzieć, że:
tablica to zbiór elementów tego samego typu, zajmujących ciągły obszar pamięci
Numeracja elementów tablicy rozpoczyna się od zera!
Definiując w programie zmienne: float pomiary[5], float obwod_2, float obwod_1 ich reprezentacja w pamięci komputera może wyglądać w sposób następujący:
obwod_1
pomiary[0] pomiary[1] pomiary[2] pomiary[3] pomiary[4]
obwod_2
definicja
3
W przypadku tablic statycznych rozmiar tablicy musi być liczbą całkowitą, dodatnią i znaną w momencie kompilacji (co oznacza, że nie można go określić dopiero w trakcie działania programu, rozmiar zadajemy z góry).
Przykłady definicji tablic:
char litery[10]; tablica 10 elementów typu char o nazwie litery int liczby[5]; tablica 5 elementów typu int o nazwie liczby
Numeracja elementów tablicy:
• zaczyna się od zera
• tablica N-elementowa ma elementy o indeksach od 0 do N – 1,
• próba wpisania czegoś do nieistniejącego elementu o indeksie N nie wygeneruje błędu, spowoduje zniszczenie w pamięci czegoś, co znajdowało się w pamięci bezpośrednio za tablicą
tab[0] tab[1] tab[2] tab[3] inna_zmienna
element tab[4] nie istnieje, zatem wpisanie czegoś do
tab[4] nadpiszę wartość zmiennej inna_zmienna
float tab[4];
inicjalizacja tablic Inicjalizacja zmiennej to nadanie jej początkowych wartości w momencie jej definiowania (tworzenia).
Tablica zdefiniowana jako zmienna globalna inicjowana jest zerami, tablica lokalna zawiera przypadkowe wartości.
Nr linii Opis
6 tablica 4 elementów typu int, o nazwie wyniki, w nawiasach klamrowych podane są wartości kolejnych elementów tablicy, zatem wyniki[0] = 2, wyniki[1] = 5 itd.
7 tablica 10 elementów typu int, w nawiasach klamrowych jest za mało
liczb, zatem żądane wartości początkowe zostaną nadane dwóm
pierwszym elementom tablicy, reszta zainicjowana zostanie zerami.
dostęp do elementów tablicy
5
Uzyskiwanie wartości przechowywanej w i-tym elemencie tablicy – w nawias kwadratowy wpisujemy numer elementu. Przypisanie tej wartości do zmiennej:
zmienna = tab[i];
Oczywiście wcześniej należy zdefiniować tę zmienną i tablicę, zmienna i elementy tablicy powinny być tego samego typu.
Przypisanie wartości do i-tego elementu tablicy – w nawias kwadratowy wpisujemy numer elementu:
tab[i] = wartosc;
Przykład 1. Napisz program, który utworzy statyczną tablicę o nazwie tab, 11
elementów typu int, za pomocą pętli for przypisze każdemu i-temu elementowi
wartość 10 * i, za pomocą kolejnej pętli for wyświetli wartość każdego i-tego
elementu tablicy (treść komunikatu: Element nr … ma wartość …). Numer elementu
wyświetl w polu o szerokości 2 znaków, zaś jego wartość w polu o szerokości 3
znaków.
dostęp do elementów tablicy
Nr linii Opis
3 dyrektywa preprocesora powodująca zastąpienie w kodzie tekstu
ROZMIAR przez wartość 11 – zyskujemy elastyczność zmiany tej wartości
dostęp do elementów tablicy
7
Nr linii Opis
11 początek pętli for, licznik pętli (iterator) zmienia się od 0 do ROZMIAR-1 (dla i równego ROZMIAR warunek i < ROZMIAR nie jest spełniony, zatem ostatnia poprawna wartość i to 99), po każdym obiegi zmienna i jest inkrementowana, co pozwala przejść do kolejnego elementu tablicy
13 przypisanie i-temu elementowi tablicy wartości 10 * i
16 pętla for wykorzystana do wyświetlenia wartości elementów tablicy
18-19 Wypisanie wartości elementu tab[i]
tablice dwuwymiarowe Tablica dwuwymiarowa to tablica jednowymiarowa, której elementami są tablice jednoelementowe. Przykładowa tablica o 4 wierszach i 3 kolumnach (jest to tablica 4-elementowa, której elementy są tablicami 3-elementowymi) – int tab[4][3]:
tab[0][0] tab[0][1] tab[0][2]
tab[1][0] tab[1][1] tab[1][2]
tab[2][0] tab[2][1] tab[2][2]
tab[3][0] tab[3][1] tab[3][2]
• składnia: typ nazwa_tablicy[liczba_wierszy][liczba_kolumn]
• inicjalizacja tablicy dwuwymiarowej:
wiersz nr 0 wiersz nr 1
wiersz nr 2 wiersz nr 3
kolumna nr 0 kolumna nr 1 kolumna nr 2
tablice dwuwymiarowe
9
Dostęp do elementu w i-tym wierszu oraz j-tej kolumnie tablicy dwuwymiarowej:
• zapis:
tab[i][j] = wartość; np. tab[0][4] = 5;
interpretacja: przypisanie wartości 5 elementowi w zerowym wierszu i czwartej kolumnie tablicy.
• odczyt:
zmienna = tab[i][j]; np. int wyn = tab[0][4];
interpretacja: odczyt wartości przechowywanej w elemencie tablicy znajdującym się w zerowym wierszu i czwartej kolumnie i przypisanie tej wartości zmiennej wyn.
Przykład 2. Utwórz tablicę 3x4 elementów typu int i przypisz kolejnym jej
elementom wartości będące wynikiem iloczynu numeru aktualnego wiersza i
aktualnej kolumny. Wyświetl rezultaty w formie:
tablice dwuwymiarowe
Nr linii Opis
7 definicja tablicy o nazwie tab, elementów typu int, posiadającej 4 wiersze i 3 kolumny.
9-17 Pętla for odpowiedzialna za przetwarzanie wierszy
tablice dwuwymiarowe
11
Nr linii Opis
11-15 pętla for odpowiedzialna za przetwarzanie kolumn dla danego wiersza.
Pęta ta wykonuje się dla każdego wiersza (i) od początku do końca (tzn.
przetwarza kolumny o numerach od j = 0, do j = 2).
14 Wyświetlanie wartości elementu zakończonej znakiem tabulacji poziomej.
16 Po zakończeniu przetwarzania wszystkich kolumn dla danego wiersza,
przejdź do nowej linii
Zadania Zadanie 1. Napisz program, który wczytuje 5 liczb całkowitych i zapamiętuje je w tablicy, a następnie wyświetla je w odwrotnej kolejności.
Zadanie 2. Napisz program, który tworzy tablicę zawierającą 10 liczb losowych z przedziału <4, 21> (do ich generacji wykorzystaj funkcję srand() i rand()). Program powinien znaleźć i wyświetlić wartość maksymalną.
Zadanie 3. Napisz program, który prosi o podanie 8 liczb całkowitych, zapamiętuje je w tablicy, po czym oblicza średnią elementów o parzystych indeksach i średnią elementów o nieparzystych indeksach.
Zadanie 4. Napisz program, który tworzy tablicę o wymiarach 6x3. Poproś użytkownika o wpisanie liczb zmiennoprzecinkowych do zerowej kolumny. Do pierwszej kolumny wpisz te wartości podniesione do kwadratu, zaś do kolejnej kolumny – ich sześcian. Wyświetl rezultaty.
Zadanie 5. Napisz program, który tworzy tablicę liczb całkowitych o wymiarze 100 wierzy na 50 kolumn i uzupełnia jej elementy liczbami losowymi z przedziału
<0,100>. Następnie program powinien prosić użytkownika o podanie numeru wiersza i numeru kolumny elementu, którego wartość ma być wyświetlona, po czym wyświetla tę wartość.
Zadanie 6. Zmodyfikuj program z zadania 7 tak, aby wykonywane było
sprawdzenie, czy numer wiersza i kolumny jest poprawny (całkowity i mieszczący
się wewnątrz rozmiarów tablicy).
Zadania
13