dom - Programy antywirusowe
Ułamkowe typy danych w paskalach. Proste typy danych

Typy porządkowe obejmują (patrz rysunek 4.1) typy całkowite, logiczne, znakowe, wyliczeniowe i zakresowe. 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. Parametr opcjonalny jest wskazany w nawiasach kwadratowych.

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 kodeks wymiany informacji- Amerykański Standardowy Kodeks 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 różnych typach komputerów PC (Załącznik 2 przedstawia niektóre typowe opcje 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ą wyprowadzane począwszy od tej samej pozycji, ale w następnej linii
VT Zakładka pionowa; wyświetlany na ekranie jest zastępowany znakiem specjalnym
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; w przypadku wyprowadzenia oznacza polecenie „Kontynuuj wyprowadzanie od początku bieżącej linii”)
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; zwraca wielką literę, jeśli CH jest małą literą łacińską, 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 pojemność typu wyliczeniowego wynosi 65536 wartości, więc tak naprawdę typ wyliczeniowy definiuje pewien 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ść zakresu typu;

<макс.знач.>- 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.

Standardowa biblioteka Turbo Pascal zawiera dwie funkcje obsługują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 reprezentujących dowolną liczbę całkowitą powstającą podczas rozwiązywania konkretnego problemu. 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 to jeden z możliwych sposobów przedstawiania liczb rzeczywistych, co stanowi kompromis między precyzją 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 i rzadziej 10. Do dalszej prezentacji zawsze będziemy zakładać 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 w systemie binarnym będzie równa 101 2. Najbardziej znaczący bit odpowiada 2 2 =4, środkowy bit (równy zero) to 2 1 =2, a najmniej znaczący bit to 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 tzw. „naukowej” formie standardowej, np. „1.01e+2”. Od razu widać, że mantysa składa się z trzech znaków, a kolejność wynosi dwa.

Powiedzmy, że chcemy uzyskać liczbę ułamkową, 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. Jednak w znormalizowanej reprezentacji liczb pojawia się nowy problem - w tej formie nie można przedstawić zera.

  • 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 wypisują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 zewnętrznych urządzeniach pamięci (na przykład dysku twardym).

    Koncepcja takiego typu danych jak wskaźnik związane z dynamicznym przechowywaniem danych w pamięci komputera. Często używanie dynamicznych typów danych jest bardziej efektywne w programowaniu niż używanie statycznych typów danych.

    WYKŁAD 2

    Podstawy programowania.

    Wprowadzenie do Pascala. Typy danych. Operacje.

    Alfabet językaPascal

    Każdy język naturalny składa się z elementów takich jak symbole, słowa, frazy i zdania. Język programowania również ma podobne elementy: symbole, słowa, wyrażenia (frazy), operatory (zdania).

    Słowa powstają ze zbioru symboli. Wyrażenia - są to grupy słów i operatory - Są to kombinacje słów i wyrażeń. Symbole językowe to podstawowe znaki (litery), które służą do tworzenia niektórych tekstów. Zatem zbiór tych symboli tworzy alfabet języka.

    Alfabet Pascala składa się z:

    1. wielkie i małe litery alfabetu łacińskiego, w tym następujące znaki:

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - wielkie litery;

    A b c d e f g h i j k l m n o p q r s t u v w x y z - małe litery;

    2. dziesiętne cyfry arabskie: 0 1 2 3 4 5 6 7 8 9;

    3. cyfry szesnastkowe (zbudowane z cyfr dziesiętnych i liter od A do F);

    4. 32 wielkie i małe litery alfabetu rosyjskiego;

    5. znaki specjalne:

    Kombinacje znaków specjalnych mogą tworzyć znaki złożone:

    : = przydział;

    < >nie równe;

    >= większy lub równy;

    <= меньше или равно;

    Zakres wartości;

    (* *) lub ( ) - komentarz.

    Struktura programu w Pascalu

    Aby kompilator Passala poprawnie zrozumiał dokładnie, jakich działań się od niego oczekuje, Twój program musi być sformatowany w pełnej zgodności ze składnią (zasadami konstrukcji programu) tego języka.

    Dowolny program w Pascalu może składać się z następujących bloków (części opcjonalne są poniżej oznaczone nawiasami kwadratowymi):

    program<имя_программы>;

    [używa<имена_подключаемых_модулей>;]

    [ etykieta<список_меток>;]

    [konst<имя_константы> = <значение_константы>;]

    [ typ<имя_типа> = <определение_типа>;]

    [odm<имя_переменной> : <тип_переменной>;]

    [procedura<имя_процедуры> <описание_процедуры>;]

    [funkcja<имя_функции> <описание_функции>;]

    rozpocząć (początek głównej części programu)

    <операторы>

    koniec. (* koniec głównej części programu *)

    Późniejsze wersje kompilatorów języka Pascal nie wymagają już podawania nazwy programu, czyli linii programu<имя_программы>; można pominąć. Jest to jednak możliwe tylko wtedy, gdy cały program jest zawarty w jednym pliku modułu. Jeśli program składa się z kilku niezależnych części - modułów, to każdy z nich musi mieć nagłówek (program lub jednostkę).

    Każda z wymienionych sekcji opcjonalnych może pojawić się w tekście programu więcej niż raz, ich ogólna kolejność również może ulec zmianie, jednak zawsze należy przestrzegać głównej zasady języka Pascal: zanim obiekt zostanie użyty, należy go zadeklarować i opisać.

    Kompilatory Pascala nie rozróżniają małych i wielkich liter oraz ignorują białe znaki, dlatego tekst programu można skonstruować w taki sposób, aby jego czytanie i debugowanie było najwygodniejsze.

    Dyrektywy kompilatora

    Linia rozpoczynająca się od symboli ($ nie jest komentarzem, ale dyrektywą kompilatora - specjalnym poleceniem, od którego zależy proces kompilacji i wykonania programu. Dyrektywy rozważymy w tych sekcjach, do których odnoszą się „w znaczeniu”.

    Na przykład linia ($I-,Q+) wyłącza sprawdzanie poprawności we/wy, ale umożliwia kontrolę przepełnienia obliczeń.

    Identyfikatory

    Nazwy nadawane obiektom programu (stałe, typy, zmienne, funkcje i procedury oraz cały program) nazywane są identyfikatorami. Mogą składać się wyłącznie z cyfr, liter łacińskich i znaku „_” (podkreślenia). Jednak liczba nie może zaczynać nazwy. Identyfikatory mogą mieć dowolną długość, ale jeśli dwie nazwy mają te same pierwsze 63 znaki, wówczas nazwy są uważane za identyczne.

    Obiektom programu możesz nadać dowolną nazwę, ale musisz upewnić się, że różni się ona od słów zastrzeżonych używanych przez Pascala, ponieważ kompilator w dalszym ciągu nie będzie akceptował zmiennych o „obcych” nazwach.

    Oto lista najczęściej używanych słów zastrzeżonych:

    implementacja tablicy shl

    ciąg interfejsu przypadku

    następnie etykieta const

    używa wskaźnika pliku

    daleko procedura var

    dla programu podczas

    zapis do przodu z

    funkcja powtórz xor

    Zmienne i typy danych

    Zmienna to obiekt programu, którego wartość może się zmieniać podczas działania programu.

    Typ danych to cecha zakresu wartości, jakie mogą przyjmować zmienne należące do tego typu danych.

    Wszystkie zmienne użyte w programie muszą być opisane w specjalnej sekcji var przy użyciu poniższego szablonu:

    odm<имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;

    <имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;

    Język Pascal posiada duży zbiór różnych typów danych, ale teraz wskażemy tylko kilka z nich. O wszystkich typach danych porozmawiamy dalej.

    Stałe

    Stała to obiekt, którego wartość jest znana przed uruchomieniem programu.

    Stałe są niezbędne do projektowania programów wizualnych, są niezbędne przy stosowaniu wielokrotnie powtarzających się wartości w tekście programu i są wygodne, jeśli konieczna jest jednoczesna zmiana tych wartości w całym programie.

    W Pascalu istnieją trzy typy stałych:

    Stałe nienazwane (cyfry i liczby, symbole i ciągi znaków, zestawy);

    Nazwane stałe bez typu;

    Nazwane stałe typu.

    Nienazwane stałe

    Stałe nienazwane nie mają nazw i dlatego nie muszą być deklarowane.

    Typ nienazwanej stałej jest domyślnie określany automatycznie:

    Dowolna sekwencja liczb (być może poprzedzona znakiem „-” lub „+” albo rozdzielona pojedynczą kropką) jest postrzegana przez kompilator jako nienazwana stała – liczba (całkowita lub rzeczywista);

    Dowolny ciąg znaków ujętych w apostrofy jest traktowany jako nienazwana stała - ciąg znaków;

    Dowolny ciąg liczb całkowitych lub symboli oddzielonych przecinkami i ujętych w nawiasy kwadratowe jest postrzegany jako nienazwana stała - zbiór.

    Ponadto istnieją dwie specjalne stałe true i false związane z typem danych Boolean.

    Przykłady użycia nienazwanych stałych obejmują następujące operatory:

    real2:= 12,075 + x;

    ciąg4:= "abc" + ciąg44;

    zestaw5:= * zestaw55;

    wartość logiczna6:= prawda;

    Stałe nietypowane

    Stałe nazwane, jak sama nazwa wskazuje, muszą mieć nazwę. Dlatego nazwy te muszą zostać zgłoszone kompilatorowi, czyli opisane w specjalnej sekcji const.

    Jeśli nie określisz typu stałej, to kompilator sam po jej wyglądzie określi, do jakiego typu (bazowego) ma zostać przypisana. Dowolna już opisana stała może zostać użyta przy deklarowaniu innych stałych, zmiennych i typów danych. Oto kilka przykładów opisywania nietypowanych nazwanych stałych:

    Wpisane stałe

    Wpisane nazwane stałe to zmienne (!) o wartości początkowej, która jest już znana w momencie uruchomienia programu. Dlatego po pierwsze, stałymi wpisanymi nie można używać do definiowania innych stałych, typów danych i zmiennych, a po drugie, ich wartości można zmieniać w trakcie działania programu.

    Wpisane stałe są opisywane przy użyciu następującego szablonu:

    konst<имя_константы> : <тип_константы> = <начальное_значение>;

    Poniższe przykłady pokazują, jak to zrobić:

    stała n: liczba całkowita = -10;

    b: wartość logiczna = prawda;

    Będziemy podawać przykłady typowanych stałych innych typów, badając odpowiednie typy danych.

    Pascalowe typy danych

    Kompilatory Pascala wymagają podania informacji o ilości pamięci wymaganej do uruchomienia programu przed jego uruchomieniem. Aby to zrobić, w sekcji opisu zmiennej (var) należy wypisać wszystkie zmienne użyte w programie. Ponadto musisz także poinformować kompilator, ile pamięci zajmie każda z tych zmiennych.

    Wszystko to można przekazać programowi, po prostu wskazując typ przyszłej zmiennej. Mając informację o typie zmiennej, kompilator „rozumie”, ile bajtów należy jej przeznaczyć, jakie akcje można z nią wykonać i w jakich konstrukcjach może uczestniczyć.

    Dla wygody programistów Pascal posiada wiele standardowych typów danych, a ponadto możliwość tworzenia nowych typów danych na podstawie istniejących (standardowych lub ponownie zdefiniowanych przez samego programistę), które nazywane są konstruowanymi.

    Podział na podstawowe i konstruowane typy danych w Pascalu przedstawia tabela:

    Porządkowe (dyskretne) typy danych

    Typy danych adresowych

    Ustrukturyzowane typy danych

    Arytmetyczne typy danych

    Podstawowe typy danych

    Logiczny

    Symboliczny

    Prawdziwy

    Netipizi

    indeksowany indeks

    Typy skonstruowane

    Możliwość wpisania

    tydzień = (su, mo, tu, my, cz, fr, sa);

    Wpisany wskaźnik

    Szyk

    Sznurek

    rekordowy rekord

    Proceduralny

    Obiekt

    Przedział (zakres)

    Konstruowane przez programistę typy danych

    Porządkowe typy danych

    Wśród podstawowych typów danych wyróżniają się typy porządkowe. Nazwę tę można uzasadnić dwojako:

    1. Każdy element typu porządkowego może być powiązany z unikalną (porządkową) liczbą. Numeracja wartości zaczyna się od zera. Wyjątkiem są typy danych shortint, integer i longint. Ich numeracja pokrywa się z wartościami elementów.

    2. Ponadto na elementach dowolnego typu porządkowego definiuje się porządek (w matematycznym znaczeniu tego słowa), który bezpośrednio zależy od numeracji. Zatem dla dowolnych dwóch elementów typu porządkowego można dokładnie określić, który z nich jest mniejszy, a który większy.

    Standardowe procedury obsługujące porządkowe typy danych

    Następujące funkcje i procedury są zdefiniowane tylko dla typów porządkowych:

    1. Funkcja ord(x) zwraca liczbę porządkową wartości zmiennej x (w odniesieniu do typu, do którego należy zmienna x).

    2. Funkcja pred(x) zwraca wartość poprzedzającą x (nie dotyczy pierwszego elementu typu).

    3. Funkcja succ(x) zwraca wartość znajdującą się po x (nie dotyczy ostatniego elementu typu).

    4.Procedura inc(x) zwraca wartość po x (dla arytmetycznych typów danych jest to równoznaczne z operatorem x:=x+1).

    5. Procedura inc(x,k) zwraca k-tą wartość po x (dla arytmetycznych typów danych jest to równoznaczne z operatorem x:=x+k).

    6. Procedura dec(x) zwraca wartość poprzedzającą x (dla arytmetycznych typów danych jest to odpowiednik operatora x:=x-1).

    7. Procedura dec(x,k) zwraca wartość k-e poprzedzającą x (dla arytmetycznych typów danych jest to równoznaczne z operatorem x:=x-k).

    Na pierwszy rzut oka wydaje się, że wynik użycia procedury inc(x) jest dokładnie taki sam, jak wynik użycia funkcji succ(x). Różnica między nimi pojawia się jednak na granicach dopuszczalnego zakresu. Funkcja succ(x) nie ma zastosowania do maksymalnego elementu typu, natomiast procedura inc(x) nie wygeneruje żadnego błędu, ale działając zgodnie z zasadami dodawania maszynowego, doda kolejny do numeru elementu . Liczba oczywiście wyjdzie poza zakres i w wyniku obcięcia zamieni się w liczbę minimalnej wartości zakresu. Okazuje się, że procedury inc() i dec() postrzegają każdy typ porządkowy tak, jakby był „zamknięty w pierścieniu”: zaraz po ostatniej wartości następuje ponownie wartość pierwsza.

    Wyjaśnijmy wszystko, co zostało powiedziane na przykładzie. Dla typu danych

    wpisz szesnaście = 0..15;

    próba dodania 1 do liczby 15 da następujący wynik:

    Jednostka początkowa zostanie odcięta i dlatego okaże się, że inc(15)=0.

    Podobną sytuację w dolnej granicy dopuszczalnego zakresu dowolnego porządkowego typu danych obserwujemy dla procedury dec(x) i funkcji pred(x):

    dec(min_element)= max_element

    Typy danych związane z liczbą porządkową

    1. Typ boolowski ma dwie wartości: false i true i obowiązują dla nich następujące równości:

    ord(false)=0, ord(true)=1, false

    pred(true)=false, succ(false)=true,

    inc(true)=false, inc(false)=true,

    dec(true)=fałsz, dec(false)=true.

    2. Typ znakowy char zawiera 256 rozszerzonych znaków ASCII (na przykład „a”, „b”, „i”, „7”, „#”). Numer znaku zwrócony przez funkcję or() jest taki sam, jak numer znaku w tabeli ASCII.

    3. Podsumujmy w tabeli typy danych całkowitych:

    Typ danych

    Liczba bajtów

    Zakres

    2147483648..2147483647

    4. Wyliczone typy danych są określone w sekcji typu poprzez jawne wyliczenie ich elementów. Na przykład:

    wpisz tydzień =(nie, pon., wt., śr., czw., pt., sob.)

    Przypomnijmy, że dla tego typu danych:

    inc(sat) = słońce, dec(sun) = sob.

    5. Przedziałowe typy danych są określone jedynie granicami ich zakresu. Na przykład:

    wpisz miesiąc = 1..12;

    budni = pon..pt;

    6. Typy danych konstruowane przez programistę opisane są w sekcji typów według następującego wzorca:

    typ<имя_типа> = <описание_типа>;

    Na przykład:

    wpisz lat_bukvy = "a".."z","A".."Z";

    Podstawowe typy danych są standardowe, więc nie ma potrzeby ich opisywania w sekcji typów. Jednak w razie potrzeby można to również zrobić, na przykład nadając długim definicjom krótkie nazwy. Powiedzmy, wprowadzając nowy typ danych

    wpisz int = liczba całkowita;

    Możesz nieco skrócić tekst programu.

    Prawdziwe typy danych

    Przypomnijmy, że te typy danych są arytmetyczne, a nie porządkowe.

    Typ danych

    Liczba bajtów

    Zakres (wartość bezwzględna)

    1.5*10-45..3.4*1038

    2.9*10-39..1.7*1038

    5.0*10-324..1.7*10308

    3.4*10-4932..1.1*104932

    Konstruowane typy danych

    Zajmiemy się tymi typami danych (wraz ze zdefiniowanymi dla nich operacjami) w trakcie kilku wykładów.

    Operacje i wyrażenia

    Działania arytmetyczne

    Porozmawiajmy o operacjach - standardowych akcjach dozwolonych dla zmiennych tego lub innego podstawowego typu danych. Podstawą będą działania arytmetyczne i logiczne.

    Uwaga: Wszystkie operatory wymienione poniżej (z wyjątkiem jednoargumentowego „-” i nie) wymagają dwóch operandów.

    1. Operacje logiczne (i - logiczne AND, lub - logiczne OR, nielogiczne NOT, xor - wyłączne OR) dotyczą tylko wartości typu boolean. Dają również w wyniku wartości logiczne. Oto tabele wartości dla tych operacji:

    prawda fałsz prawda

    fałszywe fałszywe fałszywe

    prawda fałsz fałsz

    2. Operacje porównania (=,<>, >, <, <=, >=) stosuje się do wszystkich typów podstawowych. Ich wyniki są również wartościami logicznymi.

    3. Działania arytmetyki na liczbach całkowitych mają zastosowanie tylko do typów całkowitych. Ich wynikiem jest liczba całkowita, której typ zależy od typu operandów.

    a div b - całkowite dzielenie a przez b (nie trzeba chyba przypominać, że dzielenie przez 0 jest zabronione, więc w takim przypadku operacja generuje błąd). Wynikiem będzie typ danych wspólny dla typów, do których należą operandy.

    Na przykład (krótki bajt div = liczba całkowita). Można to wyjaśnić w ten sposób: liczba całkowita jest typem minimalnym, którego podzbiorami są zarówno bajt, jak i shortint.

    a mod b - biorąc resztę z dzielenia a przez b. Typ wyniku, podobnie jak w poprzednim przypadku, zależy od typów operandów, a 0 jest niedozwoloną wartością dla b. W przeciwieństwie do modu działania matematycznego, którego wynikiem jest zawsze liczba nieujemna, znak wyniku modu działania „programisty” jest określony przez znak jego pierwszego operandu. Zatem jeśli w matematyce (-2 mod 5) = 3, to mamy (-2 mod 5) = -2.

    a shl k - przesuń wartość a o k bitów w lewo (jest to równoznaczne z pomnożeniem wartości zmiennej a przez 2k). Wynik operacji będzie tego samego typu, co jej pierwszy argument(y).

    a shr k - przesuwa wartość a o k bitów w prawo (jest to równoznaczne z całkowitym podzieleniem wartości zmiennej a przez 2k). Wynik operacji będzie tego samego typu, co jej pierwszy argument(y).

    i/lub nie xor - binarne operacje arytmetyczne, które działają na bitach binarnej reprezentacji liczb całkowitych, zgodnie z tymi samymi zasadami, co odpowiadające im operacje logiczne.

    4. Ogólne działania arytmetyczne (+, -, *, /) dotyczą wszystkich typów arytmetycznych. Ich wynik należy do typu danych wspólnego dla obu operandów (jedynym wyjątkiem jest operacja dzielenia ułamkowego /, której wynikiem jest zawsze rzeczywisty typ danych).

    Inne operacje

    Istnieją inne operacje specyficzne dla wartości niektórych standardowych typów danych Pascala. Rozważymy te operacje w odpowiednich sekcjach:

    #, in, +, *, : patrz wykład 5 „Symbole. Linie. Tłumy”

    @, ^: patrz wykład 7 „Adresy i wskaźniki”

    Standardowe funkcje arytmetyczne

    Operacje arytmetyczne obejmują także standardowe funkcje arytmetyczne. Podajemy ich listę wraz z krótkim opisem w tabeli.

    Funkcjonować

    Opis

    Typ argumentu

    Typ wyniku

    Wartość bezwzględna (moduł) liczby

    Arytmetyka

    Taki sam jak typ argumentu

    Arcus tangens (w radianach)

    Arytmetyka

    Prawdziwy

    Cosinus (w radianach)

    Arytmetyka

    Prawdziwy

    Wykładnik (były)

    Arytmetyka

    Prawdziwy

    Biorąc część ułamkową liczby

    Arytmetyka

    Prawdziwy

    Biorąc całą część liczby

    Arytmetyka

    Prawdziwy

    Logarytm naturalny (o podstawie e)

    Arytmetyka

    Prawdziwy

    Sprawdzanie, czy liczba jest nieparzysta

    Znaczenie liczby

    Prawdziwy

    Zaokrąglij do najbliższej liczby całkowitej

    Arytmetyka

    Zaokrąglij w dół – do najbliższej mniejszej liczby całkowitej

    Arytmetyka

    Sinus (w radianach)

    Arytmetyka

    Prawdziwy

    Kwadrat

    Arytmetyka

    Prawdziwy

    Pierwiastek kwadratowy

    Arytmetyka

    Prawdziwy

    Wyrażenia arytmetyczne

    Wszystkie operacje arytmetyczne można ze sobą łączyć – oczywiście z uwzględnieniem typów danych dozwolonych dla ich operandów.

    Operandy dowolnej operacji mogą być zmiennymi, stałymi, wywołaniami funkcji lub wyrażeniami zbudowanymi na podstawie innych operacji. Wszystko razem nazywa się wyrażeniem.

    Przykłady wyrażeń arytmetycznych:

    (X<0) and (y>0) - wyrażenie, którego wynik jest typu boolean;

    z shl abs(k) - drugi operand jest wywołaniem funkcji standardowej;

    (x mod k) + min(a,b) + trunc(z) - kombinacja operacji arytmetycznych i wywołań funkcji;

    odd(round(x/abs(x))) - wyrażenie „wielopiętrowe”.

    Kolejność obliczeń

    Jeżeli wyrażenie zawiera nawiasy, to obliczenia wykonuje się w następującej kolejności: im mniejsza głębokość zagnieżdżenia nawiasów, tym później obliczana jest zawarta w nich operacja. Jeśli nie ma nawiasów, to najpierw obliczane są wartości operacji o wyższym priorytecie, a następnie te o niższym priorytecie. Obliczanych jest kilka kolejnych operacji o tym samym priorytecie w kolejności od lewej do prawej.

    Tabela 2.1. Priorytety (dla wszystkich) operacji Pascala

    Pojęcie typu jest jednym z podstawowych pojęć każdego języka programowania. Obiekty (stałe, zmienne, funkcje, wyrażenia), na których operuje program, należą do określonego typu.

    Typ to zbiór wartości, jakie mogą przyjmować obiekty programu oraz zbiór operacji dozwolonych na tych wartościach.

    Na przykład, wartości 1 i 2 są typu całkowitego i można je dodawać, mnożyć i wykonywać inne operacje arytmetyczne. Znaczenia „monitor” i „Pascal” mają charakter językowy i mają swój własny zestaw prawidłowych operacji. W większości powszechnie używanych języków można używać tylko ściśle określonych, wcześniej znanych typów. Pascal, wraz ze standardowymi typami spotykanymi w innych językach wysokiego poziomu, umożliwia programiście tworzenie własnych typów.

    Wszystkie typy dozwolone w języku Pascal są podzielone na dwie duże grupy: proste i złożone (ustrukturyzowane).

    Typ Zakres Mantysa, znaki Wymagana pamięć (bajty)
    PRAWDZIWY 2,9*10E-39..1,7*10E38 11-12
    POJEDYNCZY 1,5*10E-45..3,4*10E38 7-8
    PODWÓJNIE 5,0*10E-324..1,7*10E308 15-16
    ROZSZERZONY 1,9*10E-4951..1,1*10E4932 19-20
    KOMP -2E+63+1..2E+63-1 10-20

    Efektywne wykorzystanie typów SINGLE, DOUBLE, EXTEND, COMP możliwe jest tylko wtedy, gdy włączona jest dyrektywa ($N+). Domyślnie jest wyłączony. Do rozwiązania problemów inżynierskich i ekonomicznych wystarczą wartości typu REAL.

    Przykład

    Var Res, Summa, Itog: prawdziwy;

    Wartość logiczna typ danych jest opisany identyfikatorem BOOLEAN. Zmienne i stałe tego typu mogą przyjmować tylko jedną z dwóch wartości: PRAWDA (prawda) lub FAŁSZ (fałsz).

    Przykład

    Var Sel1, Sel2: wartość logiczna;

    A, B, C, D: wartość logiczna;

    Wyrażenia logiczne zajmują 1 bajt pamięci i są używane w wyrażeniach logicznych i relacyjnych oraz do kontrolowania kolejności wykonywania instrukcji programu.

    Dosłowny (znak) typ jest opisany standardowym identyfikatorem CHAR. Stałe i zmienne tego typu mogą przyjmować jedną z wartości z tabeli kodów ASCII. Znaczenie stałej lub zmiennej tego typu jest ujęte w apostrofy.

    Na przykład, Var Bukva, Znak, Symbol: char;

    Bukwa:=’A’; Znak:=’+’; Symbol:=’!’

    Zmienne typu znakowego zajmują 1 bajt w pamięci. Używanie danych znakowych w wyrażeniach arytmetycznych jest zabronione. Operacje porównania można zastosować do wartości literału, a wynik zależy od liczby zmiennej literału lub stałej w tabeli kodów.

    Oprócz standardowych typów danych Pascal obsługuje typy skalarne, określony przez użytkownika. Obejmują one policzalne I interwał typy. Dane tego typu zajmują 1 bajt w pamięci, więc dowolny typ niestandardowy nie może zawierać więcej niż 255 elementów. Ich użycie znacznie poprawia widoczność programu, ułatwia wyszukiwanie błędów i oszczędza pamięć.

    Typ wyliczeniowy określa się bezpośrednio poprzez wypisanie wszystkich wartości, jakie może przyjmować zmienna danego typu. Poszczególne wartości oddzielone są przecinkami, a cała lista ujęta w nawiasy.

    Format

    Typ<имя типа>=(<значение1, значение2, ..., значениеN>);

    Var<идентификатор, ...>: < имя типа>;

    Przykład

    Wpisz Sezon =(Wiosna, Lato, Jesień, Zima);

    Var S1, S2: Sezon;

    Jesień: (wrzesień, październik, listopad);

    Ten przykład pokazuje jawnie zdefiniowany typ danych użytkownika Sezon. Określa się ich znaczenie - oznaczenia pór roku. Zmienne S1 i S2 mogą przyjmować tylko jedną z podanych wartości. Próba przypisania im innej wartości spowoduje przerwanie programu. Trzeci rodzaj wyliczenia jest anonimowy (nie ma nazwy) i określany jest poprzez wyliczenie wartości w sekcji Var. Jesień jest zmienną tego typu i może przyjmować wartości wrzesień, październik, listopad. Zatem można określić dowolny typ, ale nie zawsze jest to dopuszczalne. Pierwsza metoda jest z pewnością bardziej zrozumiała i bardziej zgodna z naturą języka Pascala.

    Typ interwału pozwala na określenie dwóch stałych, które definiują granice zakresu wartości dla danej zmiennej. Dla każdej operacji na zmiennej przedziałowej kompilator generuje procedury sprawdzające, aby określić, czy wartość zmiennej mieści się w określonym zakresie. Obie stałe muszą należeć do jednego ze standardowych typów innych niż real. Wartość pierwszej stałej musi koniecznie być mniejsza niż wartość drugiej.

    Format

    Typ<имя типа> = <константа1> .. <константа2>;

    Var<идентификатор>: < имя типа>;

    Przykład

    Wpisz Dni = 1.. 31;

    Var Work_d, Free_d: Dni;

    W tym przykładzie zmienne Praca_d, Wolna_d mieć typ Dni i może przyjmować dowolną wartość z zakresu 1. . 31.

    Wyjście z zakresu powoduje przerwanie programowe.

    Możesz zdefiniować typ przedziału, definiując granice zakresu nie według wartości stałych, ale ich nazw:

    Stała Min. = 1; Maks. = 31;

    Wpisz Dni = Min. Maks.;

    Var Work_d, Free_d: Dni;

    Typy strukturalne typy danych opierają się na typach skalarnych i mogą zawierać różne ich kombinacje. Definiują uporządkowany zbiór elementów skalarnych i charakteryzują się rodzajem ich składowych. Język Pascal udostępnia następujące strukturalne typy danych:

    linia - ciąg znaków ujętych w apostrofy;

    tablica - ustrukturyzowany typ danych składający się ze stałej liczby elementów tego samego typu, do których dostęp można uzyskać za pomocą indeksu ;

    pęczek - zbiór obiektów wybranych według jakiejś cechy lub grupy cech, które można rozpatrywać jako całość;

    nagrywać - zbiór ustalonej liczby komponentów różnych typów;

    plik- ciąg elementów tego samego typu i tej samej długości.

    Dwa kolejne typy strukturalne — proceduralny i obiektowy — są trudne do odwzorowania na danych w konwencjonalnej reprezentacji.

    Obrazek 1- Zbiór podstawowych typów języka Pascal

    Najprostszym typem danych liczbowych w Pascalu są typy całkowite, przeznaczone do przechowywania liczb całkowitych. Liczby całkowite w Pascalu są zwykle podzielone na dwa typy: ze znakiem i bez znaku. Liczby ze znakiem są liczbami całkowitymi, które obejmują zarówno liczby dodatnie, jak i ujemne, liczby bez znaku są tylko liczbami dodatnimi.

    Poniżej znajdują się dwie tabele z typami całkowitymi. Najpierw napiszemy typy całkowite ze znakiem:


    TypBajtZakres wartości
    skrót1 -128 ... 127
    małaint2 -32768 ... 32767
    liczba całkowita, longint4 -2147483648 ... 2147483647
    int648 -9223372036854775808 ... 9223372036854775807

    I to typy całkowite bez znaku:


    TypBajtZakres wartości
    bajt1 0 ... 255
    słowo2 0 ... 65535
    długie słowo, kardynał4 0 ... 4294967295
    uint648 0 ... 18446744073709551615

    Jak widać, pierwsza kolumna zawiera odpowiednio nazwę typu, druga - liczbę bajtów zajmowanych w pamięci przez liczby tego typu, a trzecia - zakres możliwych wartości. Istnieją dwa typy liczb ze znakiem - liczba całkowita i longint (dosłownie „liczba całkowita” i „długa liczba całkowita”), które są synonimami. Oznacza to, że w sekcji opisu możesz użyć tej lub innej nazwy.

    Podobnie w drugiej tabeli (nieujemne liczby całkowite w języku Pascal) znajdują się również dwa 4-bajtowe typy liczb całkowitych synonimów - longword i cardinal , więc użyj jednego lub drugiego.

    Można też zauważyć, że jeśli warunkowo przesuniemy liczby z pierwszej tabeli na prawą stronę względem zera (przesuniemy przedział w prawo tak, aby minimalna liczba wynosiła 0), to otrzymamy przedziały liczb całkowitych w drugiej tabeli leżącej w odpowiednich wierszach. Jeśli więc w typie shortint 1-bajtowym dodamy 128 do lewej i prawej granicy, otrzymamy typ bajtowy (0..255); jeśli w 2-bajtowym typie smallint dodamy do granic 32768, otrzymamy odpowiadające 2-bajtowe słowo typu bez znaku (0..65535) itd.

    Wszystko to dzieje się, ponieważ w typach całkowitych bez znaku liczby można podzielić dokładnie na dwie części: połowę liczb na część ujemną, połowę na część dodatnią. Dlaczego więc w liczbach ze znakiem lewa granica o wartości bezwzględnej 1 jest większa niż prawa granica? - ty pytasz. Na przykład w typie shortint minimum wynosi -128, natomiast maksimum to tylko 127 (1 modulo mniej). A to dlatego, że prawa strona zawiera również 0 i musisz o tym wiedzieć i pamiętać.

    Dlaczego więc liczby całkowite w języku Pascal muszą być podzielone na tak wiele typów? Dlaczego nie skorzystać na przykład z największego typu liczb całkowitych w PascalABC.Net i Free Pascal – int64 – który wynosi prawie 9 i pół tryliona (!) zarówno z minusem, jak i plusem? Tak, z prostego banalnego (?) powodu - oszczędzania pamięci. Jeśli chcesz dodać dwie małe jednobajtowe liczby dodatnie (0..255) i opisałeś te liczby jako int64 (8 bajtów), to zajęłoby to 8 razy więcej pamięci. A jeśli program jest duży i istnieje wiele zmiennych, wówczas oszczędność pamięci rośnie bardzo gwałtownie. Co więcej, nie ma sensu używać typów całkowitych ze znakiem, jeśli problem dotyczy takich wielkości, jak długość, masa, odległość, czas itp.

    W sekcji witryny Abrahamyan Problem Book (podsekcja Integer) przejrzyj użycie różnych typów liczb całkowitych w języku Pascal.



     


    Czytać:



    Po co laptopowi mały dysk SSD i czy warto instalować na nim Windowsa?

    Po co laptopowi mały dysk SSD i czy warto instalować na nim Windowsa?

    Jak ważny jest dysk SSD w grach, na co wpływa i jaka jest przydatność tej technologii – o tym porozmawiamy w naszym artykule. Stan stały...

    Naprawa dysku flash za pomocą programów Jak naprawić port USB w laptopie

    Naprawa dysku flash za pomocą programów Jak naprawić port USB w laptopie

    Jak naprawić port USB? Odpowiedź technika: Podczas korzystania z komputera porty USB często się psują. Przede wszystkim nie udaje im się...

    Struktura dysku jest uszkodzona, odczyt jest niemożliwy, co mam zrobić?

    Struktura dysku jest uszkodzona, odczyt jest niemożliwy, co mam zrobić?

    Komputery osobiste użytkowników często przechowują ważne informacje - dokumenty, zdjęcia, filmy, ale tworzenie kopii zapasowych danych jest zwykle...

    Z czego składa się komputer?

    Z czego składa się komputer?

    Opublikowano: 14.01.2017 Witajcie przyjaciele, dzisiaj szczegółowo rozważymy projekt jednostki systemowej komputera. Dowiedzmy się, co...

    obraz kanału RSS