Języki programowania – 30 marca 2011
Typy zmiennej określa się w deklaracji zmiennej.
Typy proste:
Typy porządkowe: typ wyliczeniowy, typy całkowite, typy logiczne, typ znakowy, typy okrojone
Typy rzeczywiste
Typy łańcuchowe
Typy strukturalne:
Typy tablicowe
Typ rekordowy
Typ zbiorowy
Typ plikowy
Typy wskaźnikowe
Typy proceduralne
Typ obiektowy
Typy proste są podstawowymi typami języka TP i BP, za ich pomocą określa się bardziej złożony struktury danych.
Wszystkie typy proste składają się ze skończonego i uporządkowanego zbioru wartości. Dzięki temu na wartościach tych typów możemy m. in. Wykonywać operacje porównań.
Typy proste dzielimy na porządkowe i rzeczywiste.
Typami porządkowymi są typy, dla których można określić wartości poprzednie i następne (z wyjątkiem wartości krańcowych). Do typów porządkowych zaliczamy: typ wyliczeniowy, typy całkowite, logiczne, typ znakowy i typy okrojone.
Typ wyliczeniowy stosuje się zwykle dla zbiorów o niewielkiej liczbie elementów, na których nie wykonuje się operacji arytmetycznych.
TYPE identyfikator_typu=(lista_identyfikatorów);
Elementy typu wyliczeniowego są uporządkowane zgodnie z kolejnością ich wyliczenia w definicji typu i mają liczby porządkowe odpowiednio 0,1,2 idt.
TYPE Uczniowie=(Antek, Franek, Zenek); {Antek ma lp. 0, Franek 1, Zenek 2}
Typy całkowite są w języku BP prefediniowane i nie wymagają opisu w programie. Wszystkie typy całkowite są podzbiorami zbioru liczb całkowitych. Wśród typów całkowitych wyróżniamy:
ShortInt (-128 do 127)
Byte (0-255)
Integer (-32768 do 32767)
Word (0 do 65535)
LongInt (…)
TYPE
Xx=integer;
Var
I,j:x,y;
Typy logiczne (standardowe typy logiczne to Boolean, ByteBool – 1 bajt, WordBool – 2 bajty, LongBool – 4 bajty).
Wartości typów logicznych są oznaczone za pomocą predefiniowanych literałów: True i False.
Typ znakowy: Char. Elementami typu znakowego są znaki ASCII, z których każdy jest pamiętany w jednym bajcie pamięci. (Rysowanie ramek, okienek)
Typ okrojony służy do ograniczania zakresów wartości dowolnego z dotychczas opisanych typów porządkowych. Definicja jednego typu okrojonego ma postać:
TYPE identyfikator_typu=stała1 .. stała2;
TYPE
Litery=’A’ .. ‘Z’;
Typ rzeczywisty – każdy z dostępnych typów rzeczywistych jest dyskretnym i skończonym podzbiorem zbioru liczb rzeczywistych.
Dostępnych jest pięć standardowych typów rzeczywistych o następujących predefiniwanych identyfikatorach.
Typy łańcuchowe służą do reprezentowania ciągu znaków, w tym niewidocznego znaku spacji.
Elementami typu łańcuchowego sąłańcuchy o długości od 0 do długości podanejw definicji typu łańcuchowego. Typ ten definiuje się następująco:
TYPE indentyfikator_typu=String[rozmiar];
Gdzie rozmiar jest liczbą typu Byte. Brak wyspecyfikowania rozmiaru powoduje doyślnie przyjęcie długości 255 znaków.
Typy strukturalne stosuje się do opisu obietków złożonych, przy czym dany obiekt możemy opisać na kilka różnych sposobów.
Każdy z typów strukturalnych zdefiniowany jest poprzez podanie typów składowych.
W ogólności definicja pojedynczego typu strukturalnego ma postać:
TYPE indentyfikator_typu=opis_typu_strukturalnego;
Typ tablicowy, a konkretnie tablica, składa się z ustalonej liczby elementów tego samego typu, zwanego typem składowym. Typ składowy może być typem prostym łańcuchowym lub typem strukturalnym.
Za pomocą tablic są reprezentowane regularne układy danych, np. wektory i macierze.
Dostęp do poszczególnych elementów tablic uzyskuje się za pomocą indeksów.
Dopuszczalny zakres indeksów jest podany w definicji typu tablicowego. Definicja pojedynczego typu tablicowego ma postać:
TYPE indentyfikator_typu=array[typy_indeksowe] of typ_składowy;
TYPE
V=array[1..5] of integer;
VV=array[1..10] of V;
Macierz=array[1..20,1..30] of real;
Dzien=(po,wt,sr,cz,pi,so,ni); {typ wyliczeniowy}
Tablica=array[1..7] of Dzien;
Typ rekordowy, a dokładniej rekord, to złożona struktura danych, której składowe, zwane polami, mogą być różnego typu.
Poszczególne pola mogą być strukturami złożonymi, przy czym liczba pól rekordu jest ustalona. Definicja typu rekordowego określa typ i identyfikator dla każdego pola.
TYPE indentyfikator_typu=record
Lista_deklaracji_pól
end;
TYPE Data=record
rok :integer;
miesiac:1..12;
dzien:1..31;
end;
TYPE punkt=record
x:real;
y:real;
end;
Typ zbiorowy jest zbiorem potęgowym danego typu porządkowego, tzn. jest zbiorem wszystkich podzbiorów tego typu, w tym zbioru pustego.
Liczba elementów typu zbiorowego nie może przekraczać 256 (od 0 do 255). Definicja pojedynczego typu zbiorowego ma postać:
TYPE indentyfikator_typu=set of typ_porządkowy;
TYPE Klasy=set of (LO_1d, LO_d2, LO_3d, LO_4d);
Typ plikowy jest ściśle powiązany z plikami. Plik jest ciągiem elementów tego samego typu, tyle że liczba tych elementów jest zmienna. Liczba elementów jest uzależniona od przebiegu wykonywania programu i skojarzenia pliku z fizycznym zbiorem danych.
Od tablicy plik różni się ponadto metodą dostępu do poszczególnych elementów. Definicja pojedynczego typu plikowego ma postać:
TYPE indentyfikator_typu=file of opis_typu_elementów_pliku;
TYPE indentyfikator_typu=file; {tzw. plik niezdefiniowany)
Pliki niezdefiniowane są stosowane głównie w celu dostępu do fizycznych zbirów dyskowych zgodnie z ich wewnętrznym formatem. W Pascalu istnieje predefiniany plik tekstowy o nazwie Text.
TYPE
Dane=file of Integer;
Zbior=file;
Wyniki=Text;
F=file of record
rok :integer;
miesiac:1..12;
dzien:1..31;
end;
Typ wskaźnikowy
Zmienne typów prostych i strukturalnych charakteryzują się tym, że istnieją przez cały czas wykonywania tej części programu, w której są zadeklarowane. Są to tzw. zmienne statyczne. W języku BP występują też zmienne dynamiczne, dla których pamięć jest przydzielana i zwalniana na określone żądanie.
Zmienne te nie posiadają identyfikatorów, a odwołanie do nich następują za pomocą wskaźnika
TYPE indentyfikator_typu=^Identyfikator_typu_bazowego;
TYPE a=^real;
TYPE www=^bbbb;
bbbb=record
…
end;
Definicja ta wiąże typ www ze zbiorem wskazań na dane typu bbbb. Jeśli wprowadzimy teraz deklarację VAR aaa:www; to zmiennej wskaźnikowej aaa będą mogły być w programie przypisywane adresy w pamięci (danych typu bbbb).
W Pascalu występują dwa predefiniowane typy wskaźnikowe. Są to: typ Pointer (zmienne tego typu są zgodne z dowolnym innym typem wskaźnikowym) i typ PChar (Reprezentuje on wskaźnik do łańcuchów skończonych….)
Typ proceduralny
Procedury i funkcje mogą być traktowane jako:
części programu wykonywane na skutek wywołania
elementy, które mogą być przypisywane do zmiennych i przekazywanie do innych funkcji lub procedur jako parametry.
Zmienne tego drugiego rodzaju powinny być typu proceduralnego. Definicja typu proceduralnego może mieć jedną z dwóch postaci:
TYPE Nazwa=procedure;
TYPE Nazwa=procedure(lista_parametrów);
TYPE Nazwa=function: typ_wartosci_funkcji;
TYPE Nazwa=Function(lista_parametrów): typ_wartosci_funkcji;
TYPE
YY=procedurę(x,y: Byte…….
Typ obietkowy
Obiektem w Pascalu nazywa się złożoną strukturę o ustalonej liczbie elementów składowych. Każdy z tych elementów może być polem (daną) lub metodą (m.in. procedurą lub funkcją) – elementem opisującym operację wykowywaną na danych obiektu.
W definicji typu obiektowego, podobnie jak w definicji typu rekordowego, dla każdego pola specyfikuje się jego typ i identyfikator.
Opis metody składa się z nagłówka procedury, (funkcji), konstruktora lub destruktora.
Przy czym definicja pojedynczego typu obietkowego może zawierać opisy wielu metod i wielu pól.
TYPE identyfikator_typu=object (dziedzictwo)
Lista_deklaracji_pól
Lista_deklaracji_metod
end;
dziecictwo – jest to identyfikator innego, zdefiniowanego wcześniej typu obietkowwego. Jeśli element ten wystąpi, to definiowany typ zawiera (dziedziczy) wszystkie elementy podane w definicji typu obietkowego o nazwie dziecictwo.
Każda z deklaracji pól ma postać:
Lista_nazw_pól
Inna postać typu obiektowego
TYPE identyfikator_typu=object (dziedzictwo)
Lista_deklaracji_pól
Lista_deklaracji_metod
Sekcje_list
end;
sekcje mogą mieć postać:
private
Lista_deklaracji_pól
Lista_deklaracji_metod
public
Lista_deklaracji_pól
Lista_deklaracji_metod
Przykłady deklaracji typów obiektowych
TYPE punkt=object
X,Y:Integer;
end;
TYPE piksel=object(punkt)
kolor:Byte;
end;
Pierwszy obiekt (punkt) ma tylko 2 pola typu Integer. Drugi obiekt (piksel) ma jedno pole Kolor i dodatkowo dziedziczy elementy zdefiniowanego wcześniej obiektu punkt.
Zmienne
W języku BP wszystkie zmienne muszą być zadeklarowane. Listę deklarowanych w programie zmiennych wyszczególnia się po słowie kluczowym Var. Zmiennej można przypisywać różne wartości w ramach typu określonego dla tej zmiennej.
Zmienne zadeklarowane na zewnątrz procedur (funkcji) nazywamy globalnymi.
Zmienne zadeklarowane wewnątrz procedur i funkcji nazywamy lokalnymi.
Przykłady deklaracji zmiennych:
Type
p=^real; {def. typu wskaźnikowego}
punkt=record {def. typu rekordowego}
x:real;
y:real;
end;
W=array[1..10, 1..20] of real; {def. typu tablicowego}
Var
x,y,z:real;
a,b:W;
aa:string[10];
Podstawy Turbo Pascala c.d.
Wyrażenia skłądajś się z argumentów i operatorów. Dzięki operatorom możemy wykonywać różne operacje na argumentach. Przykłady wyrażeń:
-a
a*b
-z+y
x/(z-8)
(x+y) div w
z mod 2
b and x
DIV: dzielenie całkowite, MOD: reszta z dzielenia. XOR: różnica symetryczna (zwaraca jedynkę jeśli porówywane zmienne mają inne wartości) IN: zawiera się w
Operatory dzielimy na arytmetyczne, logiczne i operatory relacji.