PP 3, Podstawy programowania


3. PRZECHOWYWANIE DANYCH PRZEZ PROGRAM

3.1. Zmienne i ich typy

Program w czasie swojego działania korzysta z danych wejściowych, wprowadzanych przez urządzenia wejściowe, lub pobieranych z pamięci dyskowej. Musi też czasowo przechowywać rezultaty pośrednich etapów obliczeń, by je wykorzystywać w kolejnych etapach. Powinien również zapamiętać końcowe rezultaty obliczeń, które w odpowiedniej formie wyprowadza na urządzenie wyjściowe lub przenosi do pliku dyskowego.

Miejsca w pamięci, przeznaczone do przechowania takich danych, których wartości mogą ulegać zmianie w czasie wykonania programu, noszą nazwę zmiennych. Każda zmienna ma nazwę, którą nadaje jej programista w czasie pisania tekstu programu źródłowego. Programista deklaruje również typ zmiennej, w zależności od tego, jaki rodzaj danych ma zmienna przechowywać: Mogą to być: liczby (całkowite lub rzeczywiste, ujemne lub dodatnie), znaki, napisy, wartości logiczne (True lub False) itp. Typ zmiennej wyznacza następujące właściwości zmiennej:

W tabeli 3.1 pokazano własności standardowych (tj. zdefiniowanych wewnętrznie w języku Turbo Pascal) prostych typów zmiennych. Zmienna typu prostego to taka, która przechowuje pojedynczą wartość. Oprócz typów prostych istnieją typy strukturalne, których zmienne mogą przechowywać pod wspólną nazwą wiele wartości, uporządkowanych według określonych reguł. Niektóre typy strukturalne - tablicowy, łańcuchowy, rekordowy - poznamy w dalszych rozdziałach tego podręcznika.

Tab. 3.1. Właściwości standardowych typów prostych Turbo Pascala

L.p.

Nazwa typu

Zakres wartości zmiennych

Rozmiar zmiennej

w bajtach

Rodzaj przechowywanych danych

1

Shortint

-128 . . 127

1

Liczby całkowite

2

Integer

-32768 .. 32767

2

Liczby całkowite

3

Longint

-2 31 .. 2 31 - 1

4

Liczby całkowite

4

Word

0 .. 65535

2

Liczby całkowite dodatnie

5

Byte

0 .. 255

1

Liczby całkowite dodatnie

6

Real

Dodatnie lub ujemne wartości z zakresu:

2.9E-39 do 1.7E38 *)

6

Liczby rzeczywiste

7

Char

#0 .. #255 **)

1

Znaki kodów ASCII

8

Boolean

false, true

1

Wartości logiczne

*) Zapis 2.9E-39 oznacza 2,9 ∙ 10 -39 .

**) Zapis #0 oznacza znak ASCII o numerze porządkowym 0

Pierwszych sześć typów z tablicy 3.1 to typy liczbowe - zmienne tych typów służą do przechowania liczb; z tego pięć pierwszych to typy całkowite, a szósty jest typem rzeczywistym. W Turbo Pascalu jest więcej typów rzeczywistych: Single, Double, Extended, Comp. Nie będą one jednak używane w tym podręczniku.

Wszystkie wymienione w tabeli typy, z wyjątkiem typu rzeczywistego Real, należą do grupy typów porządkowych (ang. ordinal types). Łączą je dwie cechy: Po pierwsze - skończona liczba wartości. Po drugie - ściśle określony rosnący porządek wartości danego typu, w którym każda z wartości zajmuje określoną pozycję.

Miejsce danej zmiennej w pamięci, czyli jej adres, jest wybierane przez kompilator w czasie kompilacji programu. Kolejne zmienne deklarowane w programie są umieszczane jedna za drugą w wolnych obszarach specjalnej strefy pamięci, zwanej obszarem zmiennych globalnych. Rozmiar tego obszaru to dla Turbo Pascala 64 kilobajty; dlatego suma rozmiarów wszystkich zmiennych danego programu nie może przekroczyć tej wartości. Rezerwacja obszarów dla zmiennych obowiązuje tylko w czasie wykonywania programu; po jego zakończeniu zmienne, a zatem również pamiętane w nich dane, przestają istnieć, a zajęte przez nie komórki pamięci są zwalniane.

3.2. Formaty zmiennych całkowitoliczbowych

3.2.1. Zapis pozycyjny.

W tym punkcie przypomnimy, w jaki sposób całkowite wartości liczbowe są kodowane binarnie (zerojedynkowo), by umożliwić ich przechowanie w pamięci komputera. Zarówno liczby dziesiętne, jak dwójkowe, zapisuje się za pomocą ciągu cyfr. Wartość liczby zależy od rodzajów cyfr i zajmowanych przez nie pozycji. Każdej pozycji cyfry w słowie liczbowym jest przypisana waga, będąca odpowiednią potęgą stałej, zwanej podstawą zapisu. Wyrażenia pokazane poniżej ilustrują na dwóch przykładach sposób obliczania wartości liczby dziesiętnej i binarnej.:

(1) Podstawa zapisu P =10: Zbiór cyfr: A10 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

(189)10 = 1 10 2 + 8 10 1 + 9 10 0 = 100 + 80 + 9 = 189

(2) Podstawa zapisu P = 2: Zbiór cyfr A2 = {0, 1}

(10111101)2 = 1 ∙ 27 + 0 ∙ 26 + 1 25 + 1 ∙ 24 + 1 ∙ 23 + 1 ∙ 22 + 021 + 1 ∙ 20 =

= 128 + 0 + 32 + 16 + 8 + 4 + 0 + 1 = 189

3.2.2. Formaty zmiennych typu Byte i Word

Zmienna typu Byte zajmuje jeden bajt (8 bitów) pamięci, a więc można w niej zapamiętywać liczby binarne ośmiopozycyjne. Zmienna typu Word zajmuje dwa bajty (16 bitów) pamięci, może zatem przechować liczbę binarną 16-pozycyjną. Na rysunku 3.1 pokazano tę samą wartość dziesiętną 189 zapisaną w formacie Byte na ośmiu bitach oraz w formacie Word na szesnastu bitach. W tabeli 3.2 pokazano początkowe i końcowe wartości typów Byte i Word wraz z ich odpowiednikami dziesiętnymi. Ten sposób dwójkowego zapisu liczb nazywamy naturalnym kodem binarnym.

27

26

25

24

23

22

21

20

1

0

1

1

1

1

0

1

215

214

213

212

211

210

29

28

0

0

0

0

0

0

0

0

1

0

1

1

1

1

0

1

27

26

25

24

23

22

21

20

Rys. 3.1. Wartość 189 zapamiętana binarnie w zmiennej typu Byte i w zmiennej typu Word

Tabela 3.2. Początkowe i końcowe wartości typów Byte i Word

Byte

(kod binarny i wartość)

Word

(kod binarny i wartość)

00000000

00000001

00000010

00000011

-----

11111100

11111101

11111110

11111111

0

1

2

3

----

252

253

254

255

00000000 00000000

00000000 00000001

00000000 00000010

00000000 00000011

----

11111111 11111100

11111111 11111101

11111111 11111110

11111111 11111111

0

1

2

3

----

65532

65533

65534

65535

3.2.3. Formaty zmiennych typu Shortint, Integer, Longint

W zakresach tych typów mieszczą się również wartości ujemne. Ponieważ wszystkie wartości w komputerze muszą być kodowane wyłącznie w postaci słów binarnych (zerojedynkowych), trzeba zastosować odpowiedni sposób reprezentacji znaku liczby. Tym sposobem w Turbo Pascalu jest kod U2 - uzupełnienie do 2.

Zasada reprezentacji liczby binarnej w tym kodzie polega na tym, że najstarsza pozycja słowa liczbowego ma wagę ujemną, a pozostałe - wagi dodatnie. Na przykład liczba (-109)10 może być zapisana na ośmiu pozycjach binarnych jako:

- 109 = - 128 + 19 = (1 0 0 1 0 0 1 1)U2 = ( - 128) + (16 + 2 + 1)

Na tej samej zasadzie można tę samą wartość zakodować w postaci słowa 16-bitowego lub 32-bitowego (tj. typu Integer lub Longint), w których najstarsze bity kodu będą miały odpowiednio wagi: - 215 lub - 231. Na rysunku 3.2 pokazano sposób zapisu liczby dziesiętnej -109 w kodzie U2, w postaci zmiennych typu Shortint oraz Integer. Pokazano także wartości wag kolejnych pozycji kodów.

-27

26

25

24

23

22

21

20

1

0

0

1

0

0

1

1

-215

214

213

212

211

210

29

28

1

1

1

1

1

1

1

1

1

0

0

1

0

0

1

1

27

26

25

24

23

22

21

20

Rys. 3.2. Liczba -109, zapamiętana w kodzie U2 jako zmienne typu Shortint i Integer

Tabela 3.3 pokazuje początkowe i końcowe elementy szeregu wartości zmiennych dla typów Shortint oraz Integer. Pokazano także kilka wartości sąsiadujących z wartością zero.

Tab. 3.3. Początkowe, środkowe i końcowe wartości typów Shortint oraz Integer

Shortint

(kod binarny i wartość)

Integer

(kod binarny i wartość)

10000000

10000001

10000010

10000011

-----

11111110

11111111

00000000

00000001

00000010

----

01111100

01111101

01111110

01111111

-128

-127

-126

-125

----

-2

-1

0

+1

+2

----

+124

+125

+126

+127

10000000 00000000

10000000 00000001

10000000 00000010

10000000 00000011

----

11111111 11111110

11111111 11111111

00000000 00000000

00000000 00000001

00000000 00000010

----

01111111 11111100

01111111 11111101

01111111 11111110

01111111 11111111

-32768

-32767

-32766

-32765

----

-2

-1

0

+1

+2

----

+32764

+32765

+32766

+32767

Zupełnie podobnie przedstawia się format zapisu wartości typu Longint. Użyte słowa zajmują tu jednak 4 bajty pamięci, więc słowo liczbowe ma 32 bity, co pozwala na znaczne poszerzenie zakresu wartości pamiętanych liczb (tabela 3.1).

3.3. Format zmiennej liczbowej rzeczywistej Real

Sposób pamiętania liczby rzeczywistych typu Real odpowiada notacji zmiennoprzecinkowej, w której wartość liczby jest określona przez wyrażenie:

Dla W= -129 L=0;

Dla W ≠ -129 L = (-1) Z × 2 W × (1+ M ) (3.1)

Jak widać, wartość liczby jest określona przez trzy wielkości: znak Z, mantysę M oraz wykładnik W. Te trzy wielkości są zapisane w formacie pokazanym na rysunku 3.3. Znak jest kodowany binarnie na najstarszej pozycji jako 0 lub 1. Następnych 39 pozycji zajmuje kod mantysy, traktowany domyślnie jako naturalny ułamek binarny, tj. ciąg pozycji dwójkowych o wagach 2-1, 2-2, 2-3 itd. Osiem ostatnich bitów służy do zapisu wartości wykładnika, zapisanej w binarnym kodzie symetrycznym (tab. 3.4) jako liczba z zakresu -129 do +126. Pozostałe elementy wzoru (3.1) są przyjmowane domyślnie jako stałe w czasie interpretowania przez komputer zapisu liczby Real.

Z

M

W

1

0101000

00000000

00000000

00000000

00000000

10100000

1 bit

39 bitów

8 bitów

Rys. 3.3. Format liczby rzeczywistej typu Real

Tab. 3.4. Kod symetryczny stosowany do zapisu wykładnika W

00000000

00000001

00000010

-----

10000000

10000001

10000010

----

11111101

11111110

11111111

-129

-128

-127

----

-1

0

+1

----

+124

+125

+126

Wartość liczby zapisanej w słowie liczbowym pokazanym na rysunku 3.3, zgodnie z wyrażeniem (3.1), wyniesie:

(-1)1 × 2 31 × (1 + 0,250 + 0,0625) = - 65536 × 1,3125 = - 86016,0

Wartość ta byłaby standardowo pokazana na ekranie jako: -8.6016000000E+04

3. 4. Format zmiennej typu Char

Zmienna typu znakowego Char służy do zapamiętania jednego spośród 255 znaków tzw. tablicy ASCII. Wśród nich występują małe litery, duże litery, cyfry, spacja, znaki specjalne, znaki semigraficzne, znaki sterowania kursorem. Każdemu znakowi jest przypisana jego pozycja, czyli numer. Ten numer, zapisany dwójkowo, jest kodem znaku.

Zauważmy, że zmienne typu Byte i typu Char, przechowując ten sam kod, reprezentują odmienne dane. O tym, jak kod będzie interpretowany, decyduje typ zmiennej, która przechowuje ten kod. Na przykład przechowany w jednym bajcie pamięci kod:

1

0

0

0

0

0

0

1

zadeklarowany jako zmienna typu Char będzie reprezentować znak o numerze 129, czyli literę alfabetu niemieckiego `ü'. Ten sam kod, zadeklarowany jako zmienna Shortint, reprezentuje wartość - 127, a jako zmienna Byte - wartość + 129.

3.5. Format zmiennej typu Boolean

Zmienna typu logicznego Boolean może przyjmować tylko dwie wartości, które nazwano w Turbo Pascalu True oraz False. Są one zakodowane dwójkowo na ośmiu pozycjach, jak pokazano na rysunku 3.4.

True

0

0

0

0

0

0

0

1

False

0

0

0

0

0

0

0

0

Rys. 3.4. Formaty wartości logicznych True i False

11



Wyszukiwarka

Podobne podstrony:
pp, Podstawy programowania
PP 4, Podstawy programowania
PP 0, Podstawy programowania
PP 7, Podstawy programowania
PP 1, Podstawy programowania
PP 2, Podstawy programowania
PP 6, Podstawy programowania
PP 9, Podstawy programowania
PP 5, Podstawy programowania
PP temat6, Podstawy programowania
zasady zaliczeń PP IG, Politechnika Białostocka, ZiIP (PB), Semestr 1, Podstawy programowania, Progr
PP 11, Podstawy programowania
pp projekty2004, wisisz, wydzial informatyki, studia zaoczne inzynierskie, podstawy programowania
pp program wykladu zaoczne 03, wisisz, wydzial informatyki, studia zaoczne inzynierskie, podstawy pr
PP W7, Podstawy programowania
PP W6, Podstawy programowania
PP temat3, Podstawy programowania
PP W1, Podstawy programowania

więcej podobnych podstron