Turbo Pascal 7.0
Wstęp Źródła Kurs Programy Linki

Lekcje:     1   2   3   4   5   6   7

Typy

Opisałem tutaj kilkanaście typów zefiniowanych przez twórców Turbo Pascala, których znajomość przydaje się w praktyce przy pisaniu programów. Ich definicja jest zawarta w standartowym module SYSTEM, który jest zawsze dołączany do kompilowanego programu (bez względu na deklaracje uses).


Typy całkowite

  • ShortInt - liczby całkowite z przedziału -128 do 127 (zajmuje 1 bajt pamięci)
  • Byte - przedział od 0 do 255 (1 bajt).
  • Integer - przedział od -32768 do 32767 (2 bajty).
  • Word - przedział od 0 do 65535 (2 bajty).
  • Longint - przedział od -2147483648 do 2147483647 (4 bajty).

Typy rzeczywiste

  • Real - zajmuje 6 bajtów pamięci.
  • Single - 4 bajty.
  • Double - 8 bajtów.
  • Extended - 10 bajtów.
  • Comp - przedział -263+1 do 263-1
Cztery ostatnie tyly są dostępne jedynie w przypadku posiadania koprocesora arytmetycznego (8087, 80287, 80387, procesor 486 lub nowszy). Wszystkie powyższe typy są podzbiorami zbioru liczb rzeczywistych.

Typ znakowy

Elementami tego typu są znaki ASCII, zmienna tego typu zajmuje jeden bajt pamięci.


Typ łańcuchowy

To po prostu ciągi znaków, kilka "zlepionych" ze sobą zmiennych char. Taki typ można zadeklarować na 2 sposoby: string lub string [rozmiar]. Jeśli zadeklarowałeś zmienną pierwszym sposobem, to największa długość tego łańcucha to 255 znaków (tyle też bajtów pamięci będzie zajmował ten łańcuch bez względu na jego długość, gdyż pozostałe bajty są "rezerwowane"). Jeśli chcesz ją zadeklarować drugim, to różnica polega na tym, że maksymalna długość jest równa "rozmiarowi", zaś rozmiar nie może być większy niż 255 znaków.


Typ logiczny

Zmienna tego typu może mieć wartość prawdy (True, 1) lub fałszu(False). W Pascalu predefiniowano 4 typy logiczne, lecz w praktyce używa się tylko tego pierwszego:
  • Boolean - zajmuje 1 bajt pamięci.
  • ByteBool - 1 bajt.
  • WordBool - 2 bajty.
  • LongBool - 4 bajty.
Różnica między nimi polega tylko w ilości zajmowanej pamięci.


Typ tablicowy

Najlepiej będzie to wytłumaczyć na przykładzie.
var mojatablica : array [1..3] of byte;
Zadeklarowaliśmy tu tablicę jednowymiarową danych typu byte, w tym wypadku 3 zmienne byte. Do takich zmiennych będziemy się odwoływać przez odpowiednio: mojatablica[1], mojatablica[4], mojatablica[3]. Oczywiście, możesz deklarować tablice znaków, łańcuchów, czy jakichkolwiek innych typów zmiennych. Tablice mogą być też wielowymiarowe, które deklaruje się w ten sposób:
var mt : array [1..3] of array [1..3] of byte;
lub po prostu
var mt : array [1..3,1..3] of byte;
W obu przypadkach zadeklarowałem tą samą, dwumiarową tablicę, zawierającą 9 elementów, do których odpołujemy się odpowiednio: mt[1,1], mt[1,2], mt[1,3], mt[2,1], mt[2,2], mt[2,3], mt[3,1], mt[3,2], mt[3,3]. Uff :)


Typ rekordowy

Rekord to struktura danych złożona z tzw. pól rekordu. Pole może stanowić zmienna dowolnego typu. Zmienną, która ma być rekordem definiujemy w następujący sposób:
var mojrekord : record
                  deklaracje_kolejnych_pól
                end;
Deklaracje poszczególnych pól muszą być zakończone średnikiem (za wyjątkiem ostatniej). Do pola rekordu odwołujemy się w następujący sposób: nazwarekordu.nazwapola .


Typ plikowy

Ten typ jest przydatny przy jakichkolwiek operacjach na plikach. W Pascalu mamy możliwość zadeklarowania zmiennych plikowych na 3 sposoby:
var mojplik : file of typ_elementów_pliku;
- to deklaracja tzw. pliku zdefiniowanego, który składa się z elementów tego samego typu. Jeśli byłby to plik bajtów (file of byte), to z grubsza odpowiadałby pojęciu pliku, które już znasz.
var mojplik : file;
- to deklaracja pliku niezdefiniowanego - od poprzedniego różni się sposobem wymiany danych, co zobaczysz na przykładach.
var mojplik : text;
- to predefiniowany plik tekstowy - raczej nie polecam jego używania, można go bez większych problemów zastąpić dwoma poprzednimi typami.


Typ okrojony

Ten typ służy do ograniczenia zakresu innych typów. Zmienną takiego typu deklarujemy go w następujący sposób:
var nazwazmiennej : stala1 .. stala2;
Tak więc jeśli zadeklarujemy zmienną typu okrojonego "0..9", to po przypisaniu jej wartości 1 wszystko będzie w porządku, a przy przypisaniu 10 wystąpi błąd. Taka zmienna jest okrojonym typem całkowitym. Podobnie będzie, jeśli zadeklarujemy zmienną typu okrojonego "'a'..'z'". Po przypisaniu 'a', 'c', czy 'z' będzie wszystko w porządku, zaś po przypisaniu 'ą', czy 'A' wystąpi błąd (pamietaj że jest to typ okrojony typu char. Ani 'ą', ani 'A' nie należy do tego przedziału - odsyłam do tabeli znaków szesnastkowych ASCII).


Typ wskaźnikowy

Zmienna tego typu "wskazuje" na inną zmienną, przechowuje tylko jej adres w pamięci (przez co zajmuje 4 bajty). Ten typ należy stosować, gdy pozostałe zmienne zajmują już zbyt dużo pamięci (np. duże tablice). Do takiej zmiennej nie mamy od razu bezpośredniego dostępu, należy na początku przydzielić jej pamięć, a na końcu programu ją zwolnić (o tym potem). Do takiej zmiennej odwołujemy się pisząc ^nazwazmiennej. Schemat deklaracji takiej zmiennej wygląda następująco:
var mojwskaznik : ^nazwatypubazowego;
Nazwa typu bazowego to dowolny zadeklarowany lub predefiniowany typ. Jeśli zmienną na jaką wskaźnik będzie wskazywał chcesz określić później, wskaźnik możesz zadeklarować tak:
var mojwskaznik : ^nazwatypubazowego;


Oczywiście, język Pascal umożliwia Ci tworzenie własnych typów (korzystając z już istniejących). Przykładowo, deklaracja typu może wyglądać tak:
type mojtyp = byte;
zaś potem można zadeklarować zmienną tego typu:
var mojazmienna : mojtyp;
Bardzo ważną sprawą jest zgodność typów. Nie można przydzielić wartości znaku zmiennej typu liczbowego. Tak samo np. tablica nie może przyjąć wartości rekordu. Jeśli jednak tak byś napisał, to podczas kompilacji zakoczy Cię błąd nr 26 - Type mismatch. Jeszcze trudniejszą do opanowania trudnością jest to, że niezgodność typów występuje nawet wtedy, gdy zmienne są pozornie tego samego typu (jednak nie zdarza się to często):
var a : array [1..10] of byte;
    b : array [1..10] of byte;
W tym przypadku zmienne a i b nie mają zgodnych typów. Problem ten można zlikwidować tą konstrukcją:
type mojtyp = array [1..10] of byte;
var a : mojtyp;
    b : mojtyp;
lub
var a,b : array [1..10] of byte;
Drugi sposób jest prostszy, jednak czasem przy kilkudziesięciu zmiennych jest trudno się połapać.

W następnej lekcji omówię podstawowe instrukcje pascalowe oraz sposób ich użycia.

Lekcje:     1   2   3   4   5   6   7

Wstęp Źródła Kurs Programy Linki
Powrót