Typy danych całkowitych i rzeczywistych w języku Pascal. Pascalowe typy danych

DO typy porządkowe obejmują (patrz rys. 4.1) typ całkowity, logiczny, znakowy, wyliczeniowy i zakresowy. Do każdego z nich można zastosować funkcję ORD(X), która zwraca liczbę porządkową wartości wyrażenia X. Dla typów całkowitych funkcja ORD(X) zwraca samą wartość X, tj. ORD(X) = X dla X należących do dowolnego typu powłoki. Zastosowanie ORD(X) do typów boolowskich, znakowych i wyliczeniowych daje dodatnią liczbę całkowitą z zakresu od 0 do 1 (boolean), od 0 do 155 (znak), od 0 do 65535 (wyliczenie). Typ zakresowy zachowuje wszystkie właściwości bazowego typu porządkowego, więc wynik zastosowania do niego funkcji ORD(X) zależy od właściwości tego typu.

Możesz także zastosować funkcje do typów porządkowych:

PRED (X) - zwraca poprzednią wartość typu porządkowego (wartość, która odpowiada liczbie porządkowej ORD(X) - 1), tj.

ORD(PRED(X)) = ORD(X) - 1;

SUCC (X) - zwraca następną wartość porządkową odpowiadającą liczbie porządkowej ORD(X) +1, tj.

ORD(SUCC(X)) = ORD(X) + 1.

Na przykład, jeśli program definiuje zmienną

wówczas funkcja PRED(C) zwróci wartość „4”, a funkcja SUCC(C) zwróci wartość „6”.

Jeśli wyobrazimy sobie dowolny typ porządkowy jako uporządkowany zbiór wartości, rosnący od lewej do prawej i zajmujący pewien odcinek na osi liczbowej, to funkcja PRED(X) nie jest zdefiniowana dla lewej strony, a SUCC(X) dla prawej koniec tego segmentu.

Całe typy. Zakres możliwych wartości typów całkowitych zależy od ich wewnętrznej reprezentacji, która może wynosić jeden, dwa lub cztery bajty. W tabeli 4.1 pokazuje nazwę typów całkowitych, długość ich wewnętrznej reprezentacji w bajtach oraz zakres możliwych wartości.

Tabela 4.1

Stosując procedury i funkcje o parametrach całkowitych należy kierować się „zagnieżdżeniem” typów, tj. wszędzie tam, gdzie można użyć WORD, można użyć BYTE (ale nie odwrotnie), LONGINT „zawiera” INTEGER, która z kolei zawiera SHORTINT.

Listę procedur i funkcji mających zastosowanie do typów całkowitych podano w tabeli 4.2. Listy b, s, w, ja, l oznaczone są odpowiednio wyrażenia typu BYTE, SHORTINT, WORD, INTEGER i LONGINT, x jest wyrażeniem dowolnego z tych typów; listy vb, vs, vw, vi, vl, vx oznaczają zmienne odpowiednich typów. W nawiasy kwadratowe określono opcjonalny parametr.

Tabela 4.2

Standardowe procedury i funkcje mające zastosowanie do całych typów
Odwołanie Typ wyniku Działanie
mięśnie brzucha(x) X Zwraca moduł x
chr(b) Zwęglać Zwraca znak według jego kodu
dec(vx[, i]) - Zmniejsza wartość vx o i, a w przypadku braku i - o 1
inc(vx[, i]) - Zwiększa wartość vx o i, a w przypadku braku i - o 1
Cześć(i) Bajt Zwraca starszy bajt argumentu
Cześć (w) To samo To samo
Lo(i) " Zwraca młodszy bajt argumentu
Niski) " To samo
dziwne (l) Wartość logiczna Zwraca True, jeśli argument jest liczbą nieparzystą
Losowe (w) Taki sam jak parametr Zwraca liczbę pseudolosową o rozkładzie jednostajnym z zakresu 0...(w-l)
sgr(x) X Zwraca kwadrat argumentu
zamień(i) Liczba całkowita Zamienia bajty w słowie
zamiana (w) Słowo

Podczas pracy z liczbami całkowitymi typ wyniku będzie odpowiadał typowi operandów, a jeśli operandy są różnych typów całkowitych, typowi operandu, który ma maksymalną moc (maksymalny zakres wartości). Ewentualne przekroczenie wyniku nie jest w żaden sposób kontrolowane, co może prowadzić do nieporozumień, np.:

a:= 32767; (Maksymalna możliwa wartość INTEGER)

x:= a + 2; (Przepełnienie podczas oceniania tego wyrażenia !}

y:= LongInt(a)+2; (Brak przepełnienia po rzuceniu zmiennej na bardziej wydajny typ)

ZapisLn(x:10:0, y:10:0)

W wyniku uruchomienia programu otrzymamy

Typ logiczny. Wartości logiczne mogą być jedną z wcześniej zadeklarowanych stałych FAŁSZ lub PRAWDA. Obowiązują ich zasady:

FAŁSZ< True;

succ(False) = Prawda;

pred(True) = Fałsz.

Ponieważ typ Boolean jest typem porządkowym, można go użyć w operatorze typu policzalnego, na przykład:

dla 1:= Fałsz do Prawdy wykonaj ....

Typ postaci. Wartość typu znaku to zbiór wszystkich znaków PC. Każdemu znakowi przypisana jest liczba całkowita z zakresu 0...255. Liczba ta służy jako kod wewnętrznej reprezentacji symbolu, jest zwracana przez funkcję ORD.

Do kodowania używany jest kod ASCII ( amerykański Standardowy kod dla informacji Wymieniać- Amerykanin standardowy kod do wymiany informacji). Jest to kod 7-bitowy, tj. może zakodować jedynie 128 znaków z zakresu od 0 do 127. Jednocześnie w 8-bitowym bajcie przeznaczonym do przechowywania znaku w Turbo Pascalu można zakodować dwukrotnie więcej znaków z zakresu od 0 do 255. pierwsza połowa znaków PC o kodach 0...127 odpowiada standardowi ASCII (tabela 4.3). Druga połowa znaków o kodach 128...255 nie jest ograniczona sztywnymi ramami standardu i może być zmieniana na komputerze PC różne rodzaje(Dodatek 2 przedstawia kilka typowych opcji kodowania tych znaków).

Tabela 4.3

Kodowanie znaków zgodnie ze standardem ASCII
Kod Symbol Kod Symbol Kod Symbol Kod Symbol
NUL B.L. ® "
STREFA ! A A
STX " W B
ETX # Z Z
EOT $ D D
ENQ % mi mi
ZAPYTAĆ & F F
BEL " G G
B.S. ( H H
NT ) I I
LF * J J
VT + k k
FF , L I
CR - M M
WIĘC . N N
SI. / O
DEL P P
DC1 Q Q
DC2 R R
DC3 S S
DC4 T T
NAK U ty
SYN V V
ETB w w
MÓC X X
E.M. U U
POD : z z
WYJŚCIE / [ {
FS < \ l
G.S. = ] }
R.S. > ^ ~
NAS ? - N

Znaki z kodami 0...31 odnoszą się do kodów serwisowych. Jeśli te kody są użyte w tekście znakowym programu, są uważane za białe znaki. Używane w operacjach we/wy mogą mieć następujące niezależne znaczenie:

Symbol Kod Oznaczający
BEL Dzwonić; Wyświetleniu tego symbolu towarzyszy sygnał dźwiękowy
NT Tabele poziome; po wyświetleniu na ekranie przesuwa kursor do pozycji będącej wielokrotnością 8 plus 1 (9, 17, 25 itd.)
LF Tłumaczenie linii; podczas wyświetlania go na ekranie wszystkie kolejne znaki będą wyświetlane począwszy od tej samej pozycji, ale o godz następna linia
VT Zakładka pionowa; po wyświetleniu na ekranie zostaje zastąpiony specjalny znak
FF Uruchomienie strony; po wysłaniu na drukarkę tworzy stronę, po wyjściu na ekran zostaje zastąpiony znakiem specjalnym
CR Powrót przewozu; wprowadzane poprzez naciśnięcie klawisza Enter (w przypadku wprowadzenia za pomocą READ lub READLN oznacza to polecenie „Enter” i nie jest umieszczane w buforze wejściowym; przy wyprowadzaniu oznacza polecenie „Kontynuuj wyprowadzanie od początku” bieżąca linia»)
POD Koniec pliku; wprowadzać z klawiatury naciskając Ctrl-Z; na wyjściu jest zastępowany specjalnym znakiem
SSC Koniec pracy; wprowadzane z klawiatury poprzez naciśnięcie klawisza ESC; na wyjściu jest zastępowany specjalnym znakiem

Dla typu CHAR można zastosować operacje relacyjne oraz funkcje wbudowane: СНR(В) - funkcja typu CHAR; konwertuje wyrażenie B typu BYTE na znak i zwraca je wraz z wartością;

UPCASE(CH) - funkcja typu CHAR; zwroty Wielka litera, jeśli CH jest małą literą litera łacińska, w przeciwnym razie zwraca sam znak CH, na przykład:

cl:= UpCase("s");

c2:= UpCase („Ф”) ;

WriteLn(cl,” „,c2)

Ponieważ funkcja UPCASE nie przetwarza cyrylicy, wynik jej uruchomienia

programy zostaną wyświetlone na ekranie

Typ wyliczeniowy. Typ wyliczeniowy jest określony poprzez wyliczenie wartości, jakie może otrzymać. Każda wartość ma nazwę za pomocą jakiegoś identyfikatora i znajduje się na liście otoczonej nawiasami, na przykład:

kolory =(czerwony, biały, niebieski);

Użycie typów wyliczeniowych sprawia, że ​​programy są bardziej wizualne. Jeśli program wykorzystuje np. dane związane z miesiącami roku, to następujący fragment programu:

TypeMonth=(styczeń, luty, marzec, kwiecień, maj, czerwiec, lipiec, sierpień, wrzesień, październik, listopad, grudzień);

miesiąc: TypMiesiąc;

if miesiąc = sierpień, to WriteLn("Fajnie byłoby pojechać nad morze!");

Byłoby, widzisz, bardzo jasne. Niestety! W Turbo Pascalu nie można używać cyrylicy w identyfikatorach, dlatego zmuszeni jesteśmy pisać w ten sposób:

TypeMonth=(styczeń, luty, marzec, maj, czerwiec, lipiec, sierpień, wrzesień, październik, listopad, grudzień);

miesiąc: TypMiesiąc;

if miesiąc = sierpień to WriteLn("Fajnie byłoby pojechać nad morze!");

Zgodność między wartościami typu wyliczeniowego a liczbami porządkowymi tych wartości ustalana jest przez kolejność wyliczania: pierwsza wartość na liście otrzymuje liczbę porządkową 0, druga - 1 itd. Maksymalna moc typ wyliczeniowy ma 65536 wartości, więc tak naprawdę typ wyliczeniowy definiuje jakiś podzbiór całego typu WORD i można go uznać za zwartą deklarację grupy stałych całkowitych o wartościach 0, 1 itd.

Stosowanie typów wyliczeniowych zwiększa niezawodność programów, pozwalając kontrolować wartości, jakie otrzymują odpowiednie zmienne. Podajmy na przykład następujące wyliczone typy:

kolory = (czarny, czerwony, biały);

ordenal= (jeden, dwa, trzy);

dni = (poniedziałek, wtorek, środa);

Pod względem władzy i reprezentacji wewnętrznej wszystkie trzy typy są równoważne:

ord(czarny)=0, ..., ord(biały)=2,

ord(jeden)=0, ...ord(trzy)=2,

ord(poniedziałek)=0, ...ord(środa)=2.

Jeśli jednak zmienne są zdefiniowane

kol:kolory; liczba:porządkowa;

wtedy operatorzy są dopuszczeni

liczba:= succ(dwa);

dzień:= przed(wtorek);

ale nie do przyjęcia

Jak już wspomniano, istnieje zgodność jeden do jednego pomiędzy wartościami typu wyliczeniowego a zbiorem liczb całkowitych określonym przez funkcję ORD(X). Turbo Pascal umożliwia również konwersję odwrotną: dowolne wyrażenie typu WORD można przekonwertować na wartość typu wyliczeniowego, o ile wartość wyrażenia całkowitego nie przekracza potęgi1™ typu wyliczeniowego. Konwersję tę osiąga się poprzez użycie automatycznie zadeklarowanej funkcji o nazwie wyliczeniowego typu (patrz rozdział 4.4). Na przykład dla omówionej powyżej deklaracji typu równoważne są następujące przypisania:

col:= kolory(0);

Oczywiście zadanie

będzie nie do przyjęcia.

Zmienne dowolnego wyliczeniowego typu można deklarować bez wcześniejszej deklaracji tego typu, na przykład:

kol: (czarny, biały, zielony);

Zakres typu. Typ zakresu jest podzbiorem jego typu podstawowego, który może być dowolnym typem porządkowym z wyjątkiem typu zakresu. Typ zakresu definiowany jest przez granice jego wartości w obrębie typu podstawowego:

<мин.знач.>..<макс.знач.>

Tutaj<мин.знач. > - minimalna wartość zakres typów;

<макс.знач.>- jego maksymalna wartość.

Na przykład:

cyfra = „0”..”9”;

Typ zakresu nie musi być opisywany w sekcji TYPE, ale można go podać bezpośrednio przy deklarowaniu zmiennej, np.:

Ichr: "A".."Z";.

Określając typ zakresu, należy przestrzegać następujących zasad:

  • dwa znaki „..” są traktowane jako jeden znak, więc spacje między nimi nie są dozwolone;
  • lewa granica zakresu nie powinna przekraczać jego prawej granicy. Typ zakresowy dziedziczy wszystkie właściwości swojego typu podstawowego, ale z ograniczeniami wynikającymi z jego niższej mocy. W szczególności, jeśli zdefiniowano zmienną

dni = (mo,tu,we,th,fr,sa,su);

Koniec weekendu = sa .. su;

wówczas ORD(W) zwróci wartość 5, natomiast PRED(W) spowoduje błąd.

W biblioteka standardowa Turbo Pascal zawiera dwie funkcje wspierające pracę z typami zakresów:

HIGH(X) - zwraca maksymalną wartość typu zakresu, do którego należy zmienna X;

LOW(X) - zwraca minimalną wartość typu zakresu.

Poniższy krótki program wydrukuje linię

WriteLn(Niski(k),"..",Wysoki(k))

Zbiór liczb całkowitych jest nieskończony, ale zawsze możemy wybrać liczbę bitów, które będą reprezentować dowolną liczbę całkowitą powstającą podczas rozwiązywania Szczególnym zadaniem. Zbiór liczb rzeczywistych jest nie tylko nieskończony, ale także ciągły, więc niezależnie od tego, ile bitów weźmiemy, nieuchronnie napotkamy liczby, które nie mają dokładnej reprezentacji. Liczby zmiennoprzecinkowe są jedną z nich możliwe sposoby reprezentacja liczb rzeczywistych, będąca kompromisem między dokładnością a zakresem akceptowanych wartości.

Liczba zmiennoprzecinkowa składa się ze zbioru pojedynczych cyfr, tradycyjnie podzielonych na znak, wykładnik i mantysę. Wykładnik i mantysa są liczbami całkowitymi, które wraz ze znakiem dają następującą reprezentację liczby zmiennoprzecinkowej:

Matematycznie jest to zapisane w ten sposób:

(-1) s × M × B E, gdzie s jest znakiem, B jest podstawą, E jest wykładnikiem, a M jest mantysą.

Podstawa określa cyfrowy system liczbowy. Udowodniono matematycznie, że liczby zmiennoprzecinkowe o podstawie B=2 ( reprezentacja binarna) są najbardziej odporne na błędy zaokrągleń, dlatego w praktyce spotyka się tylko podstawy 2, rzadziej 10. Do dalszej prezentacji zawsze będziemy przyjmować B = 2, a wzór na liczbę zmiennoprzecinkową będzie wyglądał następująco:

(-1) s × M × 2 E

Co to jest mantysa i porządek? Mantysa jest liczbą całkowitą o stałej długości, która reprezentuje najbardziej znaczące bity liczby rzeczywistej. Powiedzmy, że nasza mantysa składa się z trzech bitów (|M|=3). Weźmy na przykład liczbę „5”, która system binarny będzie równe 101 2. Najbardziej znaczący bit odpowiada 2 2 =4, środkowy bit (który mamy równy zeru) 2 1 =2, a najmłodszy 2 0 =1. Zamówienie– jest to potęga podstawy (dwa) najwyższej cyfry. W naszym przypadku E=2. Wygodnie jest zapisywać takie liczby w tak zwanym „naukowym” forma standardowa, na przykład „1.01e+2”. Od razu widać, że mantysa składa się z trzech znaków, a kolejność wynosi dwa.

Powiedzmy, że chcemy uzyskać liczba ułamkowa, używając tych samych 3 bitów mantysy. Możemy to zrobić, jeśli przyjmiemy, powiedzmy, E=1. Wtedy nasza liczba będzie równa

1,01e+1 = 1×2 1 +0×2 0 +1×2 -1 =2+0,5=2,5

Oczywiście w ten sposób tę samą liczbę można przedstawić na różne sposoby. Rozważmy przykład z długością mantysy |M|=4. Liczbę „2” można przedstawić w następujący sposób:

2 = 10 (w systemie binarnym) = 1,000e+1 = 0,100e+2 = 0,010e+3.

Dlatego już w pierwszych maszynach liczby były reprezentowane w tzw znormalizowana forma, gdy zawsze zakładano, że pierwszy bit mantysy jest równy jeden.

Oszczędza to jeden bit (ponieważ bit ukryty nie musi być przechowywany w pamięci) i zapewnia jednoznaczną reprezentację liczby. W naszym przykładzie „2” ma pojedynczą reprezentację („1.000e+1”), a mantysa jest przechowywana w pamięci jako „000”, ponieważ jednostka wiodąca jest implikowana domyślnie. Ale w znormalizowanej reprezentacji liczb pojawia się nowy problem- nie da się przedstawić zera w tej postaci.

  • Analiza danych za pomocą poleceń Wybór parametrów i Wyszukiwanie rozwiązań
  • Analiza i interpretacja danych z eksperymentalnych badań psychologicznych.
  • Analiza danych źródłowych. Standardy techniczne dróg miejskich.
  • ANALIZA UZYSKANYCH DANYCH. PODJĘCIE DECYZJI O WYSTARCZAJĄCYM LUB NIEWYSTARCZAJĄCYM CHARAKTERYSTYCE ZASILANIA WODĄ DLA POTRZEB SYSTEMU NAWADNIAJĄCEGO.
  • Sprzęt linii komunikacyjnej: sprzęt do transmisji danych, sprzęt końcowy, sprzęt pośredni.

  • Każdy program napisany w dowolnym języku programowania jest zasadniczo przeznaczony do przetwarzania danych. Dane mogą być liczbami, tekstami, grafiką, dźwiękiem itp. Niektóre dane są danymi źródłowymi, inne stanowią wynik uzyskany w wyniku przetworzenia danych źródłowych przez program.

    Dane zapisywane są w pamięci komputera. Program uzyskuje do nich dostęp za pomocą nazw zmiennych powiązanych z miejscami pamięci, w których przechowywane są dane.

    Zmienne są opisane przed głównym kodem programu. Wskazane są tutaj nazwy zmiennych oraz rodzaj przechowywanych w nich danych.

    W języku programowania Pascal istnieje wiele typów danych. Ponadto użytkownik sam może zdefiniować własne typy.

    Typ zmiennej określa, jakie dane mogą być przechowywane w powiązanej z nią komórce pamięci.

    Wpisz zmienne liczba całkowita można powiązać tylko z wartościami całkowitymi, zazwyczaj z zakresu -32768 do 32767. Pascal ma inne typy liczb całkowitych (byte, longint).

    Wpisz zmienne prawdziwy przechowuj liczby rzeczywiste (ułamkowe).

    Zmienny Wartość logiczna Typ (Boolean) (boolean) może przyjmować tylko dwie wartości - PRAWDA(1, prawda) lub FAŁSZ(0, fałsz).

    Typ znaku (char) może przyjmować wartości z określonego uporządkowanego ciągu znaków.

    Typ interwału zdefiniowane przez użytkownika i utworzone wyłącznie z typów porządkowych. Reprezentuje podzbiór wartości w określonym zakresie.

    Możesz stworzyć własny typ danych, po prostu wymieniając wartości, jakie może przyjmować zmienna. tego typu. Jest to tzw wyliczony typ danych.

    Wszystkie powyższe są prostymi typami danych. Ale są też złożone, ustrukturyzowane, które opierają się na prostych typach.

    Szyk to struktura zajmująca pojedynczy obszar pamięci i składająca się z ustalonej liczby elementów tego samego typu.

    Smyczki jest ciągiem znaków. Ponadto liczba tych znaków nie może przekraczać 255 włącznie. To ograniczenie jest cechą charakterystyczną Pascala.

    Nagrywać to struktura składająca się z ustalonej liczby elementów zwanych polami. Dane w różnych polach rekordu mogą być różnych typów.

    Zestawy reprezentują zbiór dowolnej liczby elementów, ale tego samego wyliczeniowego typu.

    Akta w przypadku Pascala są to sekwencje danych tego samego typu, które są przechowywane na urządzeniach pamięć zewnętrzna(na przykład dysk twardy).

    Koncepcja takiego typu danych jak wskaźnik związane z dynamicznym przechowywaniem danych w pamięci komputera. Częste użycie typy dynamiczne dane są bardziej wydajne w programowaniu niż statyczne.

    Typ danych definiuje zbiór prawidłowych wartości i zbiór prawidłowych operacji.

    Proste typy.

    Typy proste dzielą się na ORDINAL i REAL.

    1. RODZAJE ZAMÓWIEŃ , z kolei są:

    cały

    Pascal definiuje 5 typów liczb całkowitych, które są definiowane w zależności od znaku i wartości, jaką przyjmie zmienna.

    Wpisz imię

    Długość (w bajtach)

    Zakres wartości

    32 768...+32 767

    2 147 483 648...+2 147 483 647

    b) logiczne

    Nazwa tego typu to BOOLEAN. Wartości logiczne mogą być jedną ze stałych boolowskich: PRAWDA (prawda) lub FAŁSZ (fałsz).

    c) symboliczne

    Nazwa tego typu to CHAR - zajmuje 1 bajt. Wartość typu znaku to zbiór wszystkich znaków PC. Każdemu znakowi przypisana jest liczba całkowita z zakresu 0…255. Liczba ta służy jako kod wewnętrznej reprezentacji symbolu.

    2. PRAWDZIWE TYPY .

    W przeciwieństwie do typów porządkowych, których wartości są zawsze odwzorowywane na serię liczb całkowitych i dlatego są reprezentowane absolutnie precyzyjnie na komputerze, wartości typów rzeczywistych definiują dowolna liczba tylko z pewną skończoną precyzją, zależną od wewnętrznego formatu liczby rzeczywistej.

    Długość liczbowego typu danych, w bajtach

    Numeryczna nazwa typu danych

    Liczba cyfr znaczących typu danych numerycznych

    Zakres porządku dziesiętnego liczbowego typu danych

    2*1063 +1..+2*1063 -1

    TYPY STRUKTURALNE

    Ustrukturyzowane typy danych definiują uporządkowany zbiór zmiennych skalarnych i charakteryzują się rodzajem ich składników.

    Ustrukturyzowane typy danych, w odróżnieniu od prostych, definiują zbiory złożone znaczenia z jedną wspólną nazwą. Można powiedzieć, że typy strukturalne wyznaczają pewien sposób tworzenia nowych typów z istniejących.

    Istnieje kilka metod strukturyzacji. Ze względu na sposób organizacji i typ komponentów w złożonych typach danych wyróżnia się następujące odmiany: typ regularny (tablice); typ łączony (rekord); typ pliku(pliki); wiele typów; typ ciągu(stringi); w języku Turbo Pascal w wersji 6.0 i starszych wprowadzono typ obiektowy (obiekty).

    w odróżnieniu proste typy dane, dane typu strukturalnego charakteryzują się wielością elementów tworzących ten typ, tj. zmienna lub stała typu strukturalnego zawsze ma wiele komponentów. Każdy komponent z kolei może należeć do typu strukturalnego, tj. możliwe jest zagnieżdżanie typów.

    1. Tablice

    Tablice w Turbo Pascalu są pod wieloma względami podobne do podobnych typów danych w innych językach programowania. Charakterystyczną cechą tablic jest to, że wszystkie ich elementy są danymi tego samego typu (prawdopodobnie ustrukturyzowanymi). Elementy te można łatwo uporządkować, a dostęp do każdego z nich można uzyskać po prostu podając numer seryjny.

    Opis tablicy jest określony w następujący sposób:

    <имя типа>= tablica [<сп.инд.типов>] z<тип>

    Tutaj<имя типа>- poprawny identyfikator;

    Array, of – słowa zastrzeżone (tablica, from);

    <сп.инд.типов>- lista jednego lub więcej typów indeksów oddzielonych przecinkami; nawiasy kwadratowe otaczające listę są wymogiem składniowym;

    <тип>- dowolny rodzaj Turbo Pascala.

    Jako typy indeksowe w Turbo Pascalu można używać dowolnych typów porządkowych, z wyjątkiem typów LongInt i typów zakresowych z typem podstawowym LongInt.

    Głębokość zagnieżdżenia typy strukturalne w ogólności, a co za tym idzie tablice, jest dowolna, dlatego liczba elementów na liście indeksów typów (rozmiar tablicy) nie jest ograniczona, jednakże całkowita długość wewnętrznej reprezentacji dowolnej tablicy nie może przekraczać 65520 bajtów.

    2. Zapisy

    Rekord to struktura danych składająca się ze stałej liczby elementów zwanych polami rekordów. W przeciwieństwie do tablicy, komponenty (pola) rekordu mogą być różne rodzaje. Aby umożliwić odwoływanie się do tego lub innego elementu rekordu, pola są nazywane.

    Struktura deklaracji typu post jest następująca:

    < Nazwatyp>=NAGRAJ< wspólne przedsięwzięcie. pola>KONIEC

    Tutaj<имя типа>- poprawny identyfikator;

    RECORD, END – słowa zastrzeżone (rekord, koniec);

    <сп.полей>- lista pól; jest sekwencją sekcji rekordu oddzielonych średnikiem.

    3 zestawy

    Zbiory to zbiór obiektów tego samego typu, które są ze sobą logicznie połączone. Charakter połączeń między obiektami jest jedynie sugerowany przez programistę i nie jest w żaden sposób kontrolowany przez Turbo Pascal. liczba elementów wchodzących w skład zbioru może wahać się od 0 do 256 (zbiór niezawierający elementów nazywany jest pustym) To właśnie niestałość liczby jego elementów odróżnia zbiory od tablic i rekordów.

    Dwa zbiory uważa się za równoważne wtedy i tylko wtedy, gdy wszystkie ich elementy są takie same, a kolejność elementów zbioru jest obojętna. Jeśli wszystkie elementy jednego zbioru znajdują się także w drugim, mówimy, że pierwszy zbiór należy do drugiego.

    Opis typu zestawu to:

    < Nazwatyp>=ZESTAW< podstawy. typ>

    Tutaj<имя типа>- poprawny identyfikator;

    SET, OF – słowa zastrzeżone (set, of);

    <баз.тип>- podstawowy typ elementów zestawu, który może być dowolnym typem porządkowym z wyjątkiem WORD, INTEGER i LONGINT.

    Do zdefiniowania zbioru stosuje się tzw. konstruktora zbiorów: listę specyfikacji elementów zbioru oddzielonych przecinkami; lista jest otoczona nawiasami kwadratowymi. Specyfikacje elementów mogą być stałymi lub wyrażeniami typu podstawowego, a także typem zakresu tego samego typu podstawowego.

    4. Pliki

    Przez plik rozumie się nazwany obszar pamięci zewnętrznej komputera PC lub urządzenie logiczne - potencjalne źródło lub odbiorca informacji.

    Każdy plik ma trzy charakterystyczne cechy

      ma nazwę, która pozwala programowi pracować z kilkoma plikami jednocześnie.

      zawiera komponenty tego samego typu. Typ komponentu może być dowolnym typem Turbo Pascala, z wyjątkiem plików. Innymi słowy, nie można utworzyć „pliku plików”.

      znowu długość utworzony plik nie jest w żaden sposób określony w chwili ogłoszenia i jest ograniczony jedynie pojemnością zewnętrznych urządzeń pamięci.

    Typ pliku lub zmienna Typ pliku można ustawić na jeden z trzech sposobów:

    < Nazwa>= PLIK< typ>;

    < Nazwa>=TEKST;

    <имя>= PLIK;

    Tutaj<имя>- nazwa typu pliku (poprawny identyfikator);

    FILE, OF – słowa zastrzeżone (plik, z);

    TEKST – nazwa standardowego typu pliku tekstowego;

    <тип>- dowolny typ Turbo Pascala, z wyjątkiem plików.

    W zależności od sposobu deklaracji można wyróżnić trzy typy plików:

    · pliki wpisane (ustawione przez klauzulę FILE OF...);

    · pliki tekstowe(zdefiniowane przez typ TEXT);

    · pliki bez typu (zdefiniowane przez typ PLIK).

    O konwersji typy numeryczne Dane Pascala

    W Pascalu niejawne (automatyczne) konwersje numerycznych typów danych są prawie niemożliwe. Wyjątek stanowi tylko typ całkowity, którego można używać w wyrażeniach typu real. Na przykład, jeśli zmienne są zadeklarowane w ten sposób:

    Var X: liczba całkowita; T: prawdziwy;

    potem operator

    będzie składniowo poprawne, chociaż po prawej stronie znaku przypisania znajduje się wyrażenie całkowite, a po lewej zmienna rzeczywista, kompilator automatycznie przekonwertuje numeryczne typy danych. Odwrotna konwersja automatycznie z typu rzeczywistego na typ całkowity jest niemożliwa w Pascalu. Przypomnijmy, ile bajtów przydzielono zmiennym typu integer i real: for typ całkowity Na dane całkowite przydzielane są 2 bajty pamięci, a na dane rzeczywiste 6 bajtów. Istnieją dwie wbudowane funkcje umożliwiające konwersję liczby rzeczywistej na liczbę całkowitą: round(x) zaokrągla liczbę rzeczywistą x do najbliższej liczby całkowitej, trunc(x) obcina liczbę rzeczywistą, odrzucając część ułamkową.

    W języku pascalowym zmienne charakteryzują się typ. Typ to właściwość zmiennej, dzięki której zmienna może przyjmować wiele wartości dozwolonych przez ten typ i uczestniczyć w wielu operacjach dozwolonych na tym typie.

    Typ definiuje zestaw dopuszczalne wartości, jaką przyjmuje zmienna tego typu. Definiuje także zbiór prawidłowych operacji na zmiennej danego typu oraz definiuje reprezentacje danych w pamięć o dostępie swobodnym komputer.

    Na przykład:

    n: liczba całkowita;

    Pascal - język statyczny wynika, że ​​typ zmiennej jest ustalany w trakcie jej opisu i nie można go zmienić. Język Pascal ma rozwinięty system typów - wszystkie dane muszą być wcześniej własnością znany typ dane (albo typ standardowy utworzony podczas tworzenia języka, albo typ niestandardowy zdefiniowany przez programistę). Programista może tworzyć własne typy o dowolnej strukturze złożoności w oparciu o typy standardowe lub już określony przez użytkownika typy. Liczba tworzonych typów jest nieograniczona. Typy niestandardowe w programie deklarowane są w sekcji TYPE w formacie:

    [nazwa] = [typ]

    System typów standardowych ma rozgałęzioną, hierarchiczną strukturę.

    Pierwszorzędne w hierarchii są proste typy. Typy takie występują w większości języków programowania i nazywane są prostymi, jednak w Pascalu mają bardziej złożoną strukturę.

    Typy strukturalne budowane są według pewnych zasad z prostych typów.

    Drogowskazy powstają z proste typy i są używane w programach do ustawiania adresów.

    Typy proceduralne są innowacją języka Turbo Pascala i umożliwiają dostęp do podprogramów tak, jakby były zmiennymi.

    Obiekty są również innowacją i mają na celu używanie języka jako języka obiektowego.

    W języku Pascal istnieje 5 typów typów całkowitych. Każdy z nich charakteryzuje zakres akceptowanych wartości oraz miejsce, jakie zajmują w pamięci.

    Za pomocą liczby całkowite należy kierować się zagnieżdżaniem typów, tj. typy o mniejszym zakresie można zagnieżdżać w typach with szeroki zakres. Typ Byte można zagnieżdżać we wszystkich typach zajmujących 2 i 4 bajty. Jednocześnie nie można w nim zagnieżdżać typu Short Int, który zajmuje 1 bajt Typ słowa, ponieważ nie ma wartości ujemnych.

    Istnieje 5 prawdziwych typów:

    Typy całkowite są reprezentowane w komputerze absolutnie precyzyjnie. W przeciwieństwie do typów całkowitych, wartość typów rzeczywistych definiuje dowolną liczbę tylko z pewną skończoną precyzją, w zależności od formatu liczby. Liczby rzeczywiste są reprezentowane w komputerze jako wartości stałe lub zmiennoprzecinkowe.

    2358.8395

    0.23588395*10 4

    0,23588395*E 4

    Typ Comp zajmuje w języku Pascal specjalne miejsce; w rzeczywistości jest to duża liczba całkowita ze znakiem. Ten typ jest kompatybilny ze wszystkimi typami rzeczywistymi i może być używany dla dużych liczb całkowitych. Podczas przedstawiania liczb rzeczywistych za pomocą zmiennoprzecinkowego przecinek dziesiętny jest zawsze stawiany przed lewą lub wiodącą mantysą, ale podczas operacji na liczbach jest on przesuwany w lewo lub w prawo.

    Typy porządkowe

    Typy porządkowe łączą kilka prostych typów. Obejmują one:

    • wszystkie typy całkowite;
    • typ znaku;
    • typ logiczny;
    • zakres typów;
    • wyliczony typ.

    Wspólnymi cechami typów porządkowych są: każdy typ ma ostateczny numer możliwa wartość; wartość tych typów można w określony sposób uporządkować i do każdego numeru można przypisać określoną liczbę, będącą numerem seryjnym; sąsiednie wartości typów porządkowych różnią się o jeden.

    Dla wartości typu porządkowego można zastosować funkcję ODD(x), która zwraca liczbę porządkową argumentu x.

    Funkcja PRED(x) - zwraca poprzednią wartość typu porządkowego. PRED(A) = 5.

    Funkcja SUCC(x) - zwraca następną wartość porządkową. SUCC(A) = 5.

    Typ postaci

    Wartości typu znakowego to 256 znaków ze zbioru prawidłowych tabela kodów komputera, którego używasz. Początkowy obszar tego zestawu, czyli zakres od 0 do 127, odpowiada zbiorowi kodów ASCII, do którego ładowane są znaki alfabetu, cyfry arabskie i znaki specjalne. Znaki obszaru początkowego są zawsze obecne na klawiaturze komputera. Strefa seniora nazywa się alternatywną, zawiera symbole alfabetów narodowych i różne Specjalne symbole i znaki pseudograficzne spoza zestawu ASCII.

    Wartość typu znakowego zajmuje jeden bajt w pamięci RAM. W programie znaczenia ujęto w apostrofy. Wartości można także podać w formie ich kodu ASCII. W takim przypadku należy umieścić znak # przed liczbą zawierającą kod symbolu.

    C:= 'A'

    Typ logiczny (Boolean).

    Istnieją dwie wartości logiczne: True i False. Zmienne tego typu są określone oficjalne słowo BOOLEAN. Wartości logiczne zajmują jeden bajt w pamięci RAM. Odpowiadają wartości Prawda i Fałsz wartości liczbowe 1 i 0.

    Zakres typu

    Istnieje podzbiór jego typu podstawowego, który może być dowolnym typem porządkowym. Typ zakresu jest definiowany przez granice w typie podstawowym.

    [wartość-minimalna]…[wartość-maksymalna]

    Typ zakresu można określić w sekcji Typ, jako konkretny typ lub bezpośrednio w sekcji Var.

    Określając zakres typów, należy kierować się:

    • lewa granica nie powinna przekraczać prawej granicy;
    • typ zakresowy dziedziczy wszystkie właściwości typu podstawowego, ale z ograniczeniami związanymi z jego mniejszą mocą.

    Typ wyliczeniowy

    Ten typ należy do typów porządkowych i jest określany poprzez wyliczenie wartości, które może wyliczyć. Każda wartość nazywana jest pewnym identyfikatorem i znajduje się na liście, ujęta w nawiasy. Wyliczeniowy typ jest określony w Type:

    Ludy = (mężczyźni, kobiety);

    Pierwsza wartość to 0, druga wartość to 1 itd.

    Maksymalna moc 65535 wartości.

    Typ ciągu

    Typ string należy do grupy typów strukturalnych i składa się z typu bazowego Char. Typ string nie jest typem porządkowym. Definiuje wiele ciągów znaków dowolna długość do 255 znaków.

    W programie typ stringu deklarowany jest za pomocą słowa String. Ponieważ String jest typem podstawowym, jest on zdefiniowany w języku i zadeklarowany typ zmienny String jest zaimplementowany w Var. Deklarując zmienną typu string jako String warto podać długość stringu w nawiasie kwadratowym. Do wskazania używana jest liczba całkowita od 0 do 255.

    Rodzina: Sznurek;

    Określenie długości ciągu umożliwia kompilatorowi przydzielenie określonej liczby bajtów w pamięci RAM dla tej zmiennej. Jeśli długość łańcucha nie zostanie określona, ​​kompilator przydzieli maksymalną możliwą liczbę bajtów (255) dla wartości tej zmiennej.

    Opisując zmienną, należy wskazać jej typ. Typ zmiennej opisuje zbiór wartości, jakie może ona przyjmować oraz akcje, jakie można na niej wykonać. Deklaracja typu określa identyfikator reprezentujący typ.

    Typy proste dzielą się na standardowe (porządkowe) i wyliczeniowe (ograniczone).

    Typy standardowe

    Turbo Pascal ma cztery wbudowane standardowy typ: liczba całkowita (liczba całkowita), wartość rzeczywista (rzeczywista), wartość logiczna (logiczna) i znak (znak).

    Typ całkowity (liczba całkowita)

    Turbo Pascal ma pięć wbudowanych typów całkowitych: shortint, integer, longint, byte i word. Każdy typ oznacza określony podzbiór liczb całkowitych, jak pokazano w poniższej tabeli.

    Wbudowane typy całkowite.

    Zakres

    Format

    8 podpisanych bitów

    16 podpisanych bitów

    2147483648 +2147483647

    Podpisany 32-bitowy

    8 bitów bez znaku

    16 bitów bez znaku

    Operacje arytmetyczne na argumentach typu całkowitego wykonuje się według następujących zasad:

    1. Typ stałej całkowitej jest wbudowanym typem całkowitym najmniejszy zakres, łącznie z wartością tej stałej całkowitej.
    2. W przypadku operacji binarnej (operacji wykorzystującej dwa operandy) oba operandy są konwertowane na ich wspólny typ przed wykonaniem na nich operacji. Powszechnym typem jest wbudowany typ całkowity, z najmniejszym zakresem obejmującym wszystkie możliwe wartości obu typów. Na przykład typowym typem liczby całkowitej i liczby całkowitej o długości bajtu jest liczba całkowita, a typowym typem liczby całkowitej i liczby całkowitej o długości słowa jest długa liczba całkowita. Akcja jest wykonywana zgodnie z precyzją typu ogólnego, a typem wyniku jest typ ogólny.
    3. Wyrażenie po prawej stronie operatora przypisania jest oceniane niezależnie od rozmiaru zmiennej po lewej stronie.

    Operacje wykonywane na liczbach całkowitych:

    „+” - dodatek

    „-” - odejmowanie

    „*” - mnożenie

    SQR - kwadratura

    DIV - odrzuca część ułamkową po dzieleniu

    MOD - otrzymanie reszty całkowitej z dzielenia

    ABS - moduł numeryczny

    Losowe(X)-odbiór Liczba losowa od 0 do X

    O:=100; b:=60; a wynik DIV b - 1 a wynik MOD b - 40

    Zmienne typu całkowitego opisano w następujący sposób:

    lista zmiennych var: typ;

    Na przykład: var а,р,n:integer;

    Prawdziwy typ (prawdziwy)

    Typ rzeczywisty to podzbiór liczb rzeczywistych, które można przedstawić w formacie zmiennoprzecinkowym ze stałą liczbą cyfr. Zapisanie wartości w formacie zmiennoprzecinkowym zazwyczaj obejmuje trzy wartości – m, b i e – takie jak m*b e, gdzie b wynosi zawsze 10, a m i e są wartościami całkowitymi z zakresu prawdziwy typ. Te wartości m i e dodatkowo określają zakres i precyzję typu rzeczywistego.

    Istnieje pięć rodzajów typów rzeczywistych: real, single, double, exnende, comp. Typy rzeczywiste różnią się zakresem i precyzją wartości z nimi związanych

    Zakres i cyfry dziesiętne dla typów rzeczywistych

    Zakres

    Liczby

    2,9x10E-39 do 1,7x10E 38

    1,5x10E-45 do 3,4x10E 38

    5,0x10E-324 do 1,7x10E 308

    3,4x10E-493 do 1,1x10E 403

    2E 63 do 2E 63

    Operacje wykonywane na liczbach rzeczywistych:

    • Wszystkie operacje obowiązują na liczbach całkowitych.
    • SQRT(x) to pierwiastek kwadratowy z x.
    • SIN(X), COS(X), ARCTAN(X).
    • LN(X) to logarytm naturalny.
    • EXP(X) jest wykładnikiem X (np. x).
    • EXP(X*LN(A)) - potęgowanie (A x).
    • Funkcje konwersji typu:
      • TRUNC(X) - odrzuca część ułamkową;
      • OKRĄG(X) - zaokrąglenie.
    • Niektóre zasady działań arytmetycznych:
      • Jeśli operacja arytmetyczna zawiera liczby typu rzeczywistego i całkowitego, to wynik będzie typu rzeczywistego.
      • Wszystkie składniki wyrażenia są zapisane w jednym wierszu.
      • Używane są tylko nawiasy.
      • Nie można umieścić dwóch znaków arytmetycznych w rzędzie.

    Zmienne typu rzeczywistego opisuje się następująco:

    lista zmiennych var: typ;

    Na przykład:

    var d,g,k:prawdziwy ;

    Typ znaku (char)

    K wpisz znak odnosi się do dowolnego znaku ujętego w apostrofy. Aby przedstawić apostrof jako zmienną znakową, należy ująć go w apostrof: „””.

    Każdy znak ma swój własny kod i numer. Numer seryjny Liczby 0,1..9 uporządkowane są w kolejności rosnącej. Numery seryjne liter są również uporządkowane rosnąco, ale niekoniecznie następują po sobie.

    Do danych znakowych mają zastosowanie następujące znaki porównania:

    > , < , >=, <=, <> .

    Na przykład: „A”< ‘W’

    Funkcje mające zastosowanie do zmiennych znakowych:

    1. ORD(X) - określa numer seryjny symbolu X. ord („a”) =97 ;
    2. CHR(X) - identyfikuje znak po numerze. chr(97) =’a’;
    3. PRED(X) - zwraca znak poprzedzający znak X. pred („B”) =’A’;
    4. SUCC(X) - zwraca znak następujący po znaku X. succ („A”) = „B”;

    Typ wyliczeniowy

    Wyliczeniowy typ danych nosi taką nazwę, ponieważ jest określony jako lista stałych w ściśle określonej kolejności i w ściśle określonej ilości. Typ wyliczeniowy składa się z listy stałych. Zmienne tego typu mogą przyjmować wartość dowolnej z tych stałych. Opis typu wyliczenia wygląda następująco:

    Typ<имя типа>=(lista stałych) ; Var<имя переменной>:<имя типа>;

    Gdzie<список констант>- jest to specjalny typ stałych, określonych oddzielonych przecinkami i posiadających własny numer seryjny, zaczynający się od 0.

    Na przykład:

    wpisz kierunek=(północ, południe, zachód, wschód) ; miesiąc=(czerwiec, lipiec, sierpień, styczeń) ; pojemność=(wiadro, beczka, kanister, zbiornik) ; var obrót:kierunek; wyjazd:miesiąc; objętość:pojemność; var turn:(północ, południe, zachód, wschód) ; wyjazd: (czerwiec, lipiec, sierpień, styczeń) ; objętość: (wiadro, beczka, kanister, zbiornik);

    Można wykonać następujące operatory przypisania:

    Obrót:=południe; wyjazd:=sierpień; objętość:=zbiornik;

    ale nie możesz wykonywać zadań mieszanych:

    Wyjazd:=południe; objętość:=sierpień;

    Do zmiennych typu wyliczeniowego mają zastosowanie następujące funkcje:

    1. ORD - numer seryjny

    2. PRED - poprzedni element

    3. SUCC – kolejny element.

    PRED (beczka) = wiadro; SUCC (południe) = zachód; ORD (lipiec) =1 ;

    Zmienne typu wyliczeniowego można porównywać, ponieważ są uporządkowane i ponumerowane. A więc wyrażenia: północ< юг, июнь < январь имеют значения TRUE, а юг>zachód i zbiornik<бочка значение FАLSE.

    Ograniczony typ

    Jeśli zmienna nie przyjmuje wszystkich wartości swojego typu, a jedynie w pewnym zakresie, wówczas można ją uznać za zmienną typu ograniczonego. Każdy ograniczony typ jest definiowany poprzez nałożenie ograniczenia na typy podstawowe.

    Jest to opisane w następujący sposób:

    TYP<имя типа>=stała1 ..stała2

    W takim przypadku należy przestrzegać następujących zasad:

    1. Obie ograniczone stałe muszą być tego samego typu.
    2. Jako typ podstawowy może zostać użyty dowolny typ prosty, z wyjątkiem typu real.
    3. Wartość początkowa przy definiowaniu typu ograniczonego nie może być większa niż wartość końcowa.
    wpisz indeks =0 ..63 ; litera=’a’..’z’; var char1, char2:litera; a,g:indeks ;

    Możesz to opisać od razu w sekcji opisu zmiennej:

    zmienna a,g:0 ..63 ; znak1, znak2:'a'..'z'.