Koło informatyczne

Przyspieszony kurs języka C++

 

Tablice i struktury

Zmienna prosta (ang. simple variable) potrafi przechowywać pojedyncze dane: liczbę, znak, wartość logiczną. Przypomnijmy typy podstawowe:

int   32 bitowa liczba całkowita ze znakiem w kodzie U2
unsigned int   32 bitowa liczba całkowita bez znaku w kodzie NBS
double   64 bitowa liczba zmiennoprzecinkowa
char   8 bitowa liczba traktowana jako kod znaku ASCII
bool   8 bitowa liczba traktowana jako wartość logiczna

Często zachodzi potrzeba przetwarzania w programie ciągu danych, np. wyników pomiarów z jakiegoś czujnika. Stosowanie zmiennych prostych byłoby tutaj bardzo niewygodne. Dlatego wymyślono tablice (ang. arrays). Tablica jest zmienną złożoną, która potrafi przechowywać serię danych tego samego typu. Tablica zajmuje w pamięci jednolity obszar, a dane są ułozone kolejno obok siebie. Deklaracja tablicy wymaga podania dodatkowo liczby jej komórek. Każda komórka przechowuje jedną daną:

 

typ nazwa[liczba komórek];

 

Na przykład, poniższa deklaracja:

 

int a[5];

 

tworzy tablicę o nazwie a, która będzie zawierała pięć komórek. Dostęp do komórek uzyskuje się w programie za pomocą indeksów. Zatem tablica a będzie posiadała następujące komórki:

 

a[0]    a[1]    a[2]    a[3]    a[4]

 

Zwróć uwagę, że numeracja rozpoczyna się od 0, czyli pierwsza komórka tablicy posiada indeks 0, druga 1, itd. Ostatnia komórka tablicy ma indeks zawsze o jeden mniejszy niż liczba komórek. Jeśli zadeklarowaliśmy tablicę 5-cio komórkową, to ostatnią jej komórką jest a[4]. Zwracam na to uwagę, ponieważ niepamiętanie o tej własności tablic jest źródłem wielu frustrujących błędów.

Gdy zadeklarowaliśmy już tablicę, możemy umieszczać w niej dane. Ponieważ dostęp do komórek jest wyliczany na podstawie indeksu, to sam indeks nie musi być prostą liczbę, lecz może być wyrażeniem. Dzięki temu zapis danych w tablicy da się zautomatyzować w pętli. Poniższy program tworzy tablicę 20 elementową i wypełnia ją pierwiastkami kolejnych liczb naturalnych od 1 do 20.

Code::Blocks
// Tablice
// Koło informatyczne
// (C)2014 I LO w Tarnowie
//-------------------------

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main()
{
  double P[20];  // Tablica przyszłych pierwiastków
  int i;

  cout << fixed << setprecision(4);

  for(i = 0; i < 20; i++) // Tworzymy pętlę iteracyjną
    P[i] = sqrt(i+1);     // Pierwiastki umieszczamy w tablicy

  for(i = 0; i < 20; i++) // Wyświetlamy wyniki
    cout << "Pierwiastek z " << setw(2) << i + 1 << " = " << P[i] << endl;

  return 0;
}

 

W programie zastosowaliśmy formatowanie danych wyprowadzanych przez strumień konsoli za pomocą następujących manipulatorów:

fixed
tryb stałoprzecinkowy
setprecision(4)
dokładność czterech cyfr po przecinku (kropce)
setw(2)
następny element wyświetla w polu o szerokości dwóch znaków.

 

Tablice są bardzo użytecznym narzędziem do przetwarzania ciągu danych tego samego typu. Jednakże czasem musimy przetwarzać algorytmicznie dane różnego typu. Tutaj z pomocą przychodzą struktury. Struktura jest złożonym typem danych, który składa się z dowolnej liczby elementów o różnych typach. Podobnie jak tablica, struktura zapisywana jest w jednolitym bloku pamięci. Strukturę definiujemy dwuetapowo. Najpierw tworzymy typ struktury:

 

struct nazwa_struktury
{
   typ pole_1;
   typ pole_2;
   ...
   typ pole_n;
};

 

Gdy mamy typ, na jego podstawie tworzymy zmienną strukturalną:

 

nazwa_struktury nazwa_zmiennej;

 

Dostęp do poszczególnych elementów struktury odbywa się poprzez nazwę zmiennej strukturalnej, operator kropka oraz nazwę pola struktury. Na przykład, poniższy fragment programu:

 

struct point3D
{
    int x,y,z;
};
 
point3D a,b,c;

 

Tworzy 3 zmienne typu strukturalnego point3D. Każda z tych zmiennych zawiera 3 elementy: x, y i z:

 

a.x   a.y   a.z
b.x   b.y   b.z
c.x   c.y   c.z

 

W każdym z elementów zmiennych a, b i c da się umieścić daną typu int. Ponieważ struktura jest również typem danych, to możemy na jego podstawie stworzyć tablicę struktur. Tę cechę wykorzystuje poniższy program. Program wczytuje serię danych. Na początku danych znajduje się liczba, która określa ilość rekordów. Następnie pojawiają się kolejne rekordy. W każdym rekordzie są dwie dane: nazwisko zawodnika (do 20 znaków) oraz czas w biegu na 100 m. Program ma znaleźć zawodnika/zawodników o najkrótszym i o najdłuższym czasie. Dane są następujące:

 

20
Kowal 9.82
Janik 9.81
Kuczera 9.88
Lis 9.76
Zyznar 9.77
Solak 9.75
Huzar 9.88
Balik 9.79
Ostroga 9.82
Jachimek 9.73
Tulipan 9.83
Wolak 9.86
Komar 9.87
Darecki 9.74
Babik 9.73
Elmer 9.75
Frycz 9.88
Potok 9.73
Urban 9.84
Nowak 9.91

 

Code::Blocks
program napiszemy na kole

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe