• Nie Znaleziono Wyników

L5 – Tablice statyczne

N/A
N/A
Protected

Academic year: 2021

Share "L5 – Tablice statyczne"

Copied!
14
0
0

Pełen tekst

(1)

Podstawy

programowania

Ćwiczenie laboratoryjne:

Tablice statyczne

autor: dr inż. Michał Łabowski

▪ michal.labowski@wat.edu.pl

▪ www.mlabowski.wel.wat.edu.pl

(2)

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

(3)

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];

(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.

(5)

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.

(6)

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

(7)

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]

(8)

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

(9)

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:

(10)

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

(11)

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

(12)

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).

(13)

Zadania

13

Zadanie 7. Napisz program, który wyznaczy średnią arytmetyczną elementów przechowywanych w kolumnie o numerze zadanym prze użytkownika. Tablica powinna mieć wymiary 11 x 10, elementy typu zmiennoprzecinkowego o wartościach losowych z przedziału <0, 1>.

Zadanie 8. Napisz program, który wygeneruje 15 małych liter alfabetu i zapisze

wyniki w tablicy char litery[15]. Program ma za zadanie wyznaczyć liczbę

samogłosek w tablicy litery.

(14)

Literatura:

[1] Grębosz J., Opus Magnum C++, Helion, Gliwice, 2018

[2] Prata S., Język C++ Szkoła programowania, Helion, Gliwice, 2013

[3] Prata S., Język C Szkoła programowania, Helion, Gliwice, 2012

Cytaty

Powiązane dokumenty

– Oznacza to, że po tym okresie ilość izotopu C 14 zmniejszy się dokładnie o połowę. – Jeżeli zatem w pewnym momencie ilość C 14 wyniosła 100%, to

Podaj i opisz poszczególne elementy połączenia z bazą danych za pomocą mechanizmu typu DSN-less z bazą danych Microsoft Access – napisz program, który łączy się z bazą

W obiektowych bibliotekach we/wy zdefiniowano róŜne klasy obiektów − strumieni (w zaleŜności od specyficznych cech danego „urządzenia”). Cechy strumienia moŜna

Zakłada się, że pakiety płytek można zastąpić takimi cząstkami, które posiadają ten sam stosunek długości do grubości L/t (gdzie L jest długością cząstki

[r]

Przy załoŜeniu równości faz początkowych wszystkich fal kulistych wytwarzanych przez siatkę dyfrakcyjną, róŜnica faz w dowolnym punkcie przestrzeni P zaleŜy

Na tej podstawie oszacuj czas działania pojedynczej pary tych instrukcji (po prostu zmierz czas wykonywania się powyższej pętli) i porównaj z czasem potrzebnym Twojemu procesorowi

Przy założeniu, że zmiana natężenia pola magnetycznego odbywa się dostatecznie wolno i ewolucja układu kubitów odbywa się adiabatycznie, układ kubitów pozostanie cały czas