Strukturyzowane typy danych łańcuchowych. Proste typy. Typy danych: proste i ustrukturyzowane

Rozdział 6. STRUKTURYZOWANE
TYPY DANYCH Strukturalne typy danych definiują zestawy składników tego samego lub różnych typów. Typy komponentów wywodzą się z innych typów danych (prostych, ustrukturyzowanych, wskaźników itp.). W Pascalu występują następujące typy strukturalne: - typ tablicy; - typ rekordu; - zestaw znaków; - Typ pliku. W TurboPascal Istnieją jeszcze dwa typy strukturalne: - string typu string i - typ string PChar, które są odmianami tablicy. Poniżej obiekty typu strukturalnego będą, dla zwięzłości, wywoływane tymi samymi nazwami, co ich typy, bez określania słowa „typ”: tablica, rekord, zestaw, plik, łańcuch. W standardzie językowym istnieją spakowane i rozpakowane typy strukturalne. W Turbo Pascalu słowo „pakiet” dla typu „spakowanego” nie ma żadnego znaczenia; tam gdzie to możliwe, pakowanie danych odbywa się automatycznie. 6.1. Tablica Typ tablicy to stała liczba uporządkowanych komponentów tego samego typu, zaopatrzonych w indeksy. Może być jednowymiarowy i wielowymiarowy. Do określenia typu tablicy używa się słowa zastrzeżonego array, po którym należy określić typ indeksu (indeksów) składnika (w nawiasach kwadratowych), a następnie po słowie - typ samych składników: typ<имя типа>= tablica[<тип индекса(индексов)>] z<тип компонент> ; Przykład. wpisz Arr = tablica Real; (tablica typu 3 liczb rzeczywistych) Macierz = tablica liczb całkowitych; (typ to dwuwymiarowa tablica liczb całkowitych, składająca się z 3 wierszy i 2 kolumn) Wprowadzając typ tablicy, można następnie zdefiniować zmienne lub wpisywane stałe tego typu. Tablica może mieć dowolny wymiar, składniki tablicy mogą być dowolnego typu, także strukturalne, indeks (indeksy) może być dowolnego typu porządkowego, z wyjątkiem typu Longint. Przy przypisywaniu wartości do stałej tablicowej składniki są określone w nawiasach i oddzielone przecinkami, a jeśli tablica jest wielowymiarowa, nawiasy zewnętrzne odpowiadają indeksowi lewemu, nawiasy w nich zagnieżdżone odpowiadają kolejnemu indeksowi itd. Tak więc dla typów przedstawionych powyżej można ustawić np. następujące zmienne i stałe: var Ml, M2: Arr; Matryca: Matryca; const M3: Arr =(1, 2, 3); Mata: Macierz = ((1, 2), (3, 4), (5, 6); Ostatnia stała odpowiada następującej strukturze: 1 2 3 4 5 6 Uwaga. Typ tablicy można wprowadzić bezpośrednio oraz podczas definiowania odpowiednich zmiennych lub wpisanych stałych. Na przykład: var Ml, M2: tablica Real; Matr: tablica liczb całkowitych; W tym miejscu zdefiniowano te same tablice, co w poprzednim przykładzie. Deklarując tablice w ten sposób pamiętaj, że ich typy nie będą identyczne z żadnymi innymi typami, nawet jeśli mają taką samą strukturę. Dlatego nie mogą być przekazywane jako parametry do podprogramu (patrz rozdział 10.3), ani nie mogą być przypisane wartości innych tablic (i odwrotnie), nawet jeśli ich struktura jest taka sama. Dostęp do komponentów tablicy można uzyskać, podając nazwę tablicy, po której następuje wartość indeksu(ów) komponentu w nawiasach kwadratowych. Ogólnie rzecz biorąc, każdemu indeksowi składowemu można nadać wyrażenie odpowiedniego typu, na przykład: M1, Macierz, M2 itd. Jednej tablicy można przypisać wartość innej tablicy, ale tylko tego samego typu. Tak więc, jeśli podane są następujące tablice: var A, B: tablica liczb całkowitych; C: tablica liczb całkowitych; wtedy dopuszczalny jest następujący operator: A:= B; Z drugiej strony operator C:= A; nieprawidłowe, ponieważ tablice A i C nie są identycznymi typami. Istnieją pewne różnice w pracy z jednowymiarowymi tablicami znaków (nie mylić z wartościami łańcuchowymi - patrz rozdział 6.2). Tak więc, wpisywanym stałym tego rodzaju można przypisać wartość jak zwykłym stałym łańcuchowym, określając łańcuch znaków w apostrofach, na przykład const A: array of Char="ааааа"; B: tablica Char="bbb"; Dla takich tablic, jak dla łańcuchów, można użyć operacji porównania (nawet jeśli nie są tego samego typu i nawet jeśli mają inny rozmiar) i konkatenacji (unia) - patrz rozdział 6.2. Można ich używać w instrukcjach wyjściowych Write i WriteLn. Na przykład dla tablic wpisanych powyżej możesz napisać, jeśli A > B, a następnie WriteLn(A) else WriteLn(B); 6.2. Ciąg typu string W Turbo Pascalu type-string (standardowy typ string) to ciąg znaków o dowolnej długości (do 255 znaków). Łańcuch może być postrzegany jako tablica znaków, ale ze względu na szerokie zastosowanie łańcuchów i pewne osobliwości w porównaniu ze standardowymi tablicami, są one rozdzielane na osobny typ danych. Typ string może mieć swój rozmiar w nawiasach kwadratowych (od 1 do 255). Jeśli rozmiar łańcucha nie jest określony, przyjmuje się, że wynosi 255, na przykład: var Str: string; MaxStr:ciąg; (ciąg 255 znaków) const January: string = "Styczeń"; W przypadku ciągów mają zastosowanie operatory konkatenacji (+) i porównania. Operacja konkatenacji dodaje drugi ciąg do pierwszego ciągu. Przykład. Łączenie dwóch ciągów. Str, Strl, Str2:ciąg; początek Strl:= "Turbo"; Str2:= "Paskal"; Str:= Strl + Str2; (w zmiennej Str - "Turbo Pascal") koniec. Możesz porównywać struny o różnych długościach. Porównanie odbywa się od lewej do prawej zgodnie z kodami ASCII odpowiednich znaków. Uznaje się, że brakujące znaki w krótszym ciągu mają kod mniejszy niż jakikolwiek prawidłowy znak. Na przykład „XS” jest większe niż „X”. Przykład. Sprawdź, czy wprowadzony zestaw znaków to nazwa miesiąca w języku rosyjskim. program PRZYKŁAD 11; const Instance: array of string!10]= ("STYCZEŃ", "LUTY", "MARZEC", "KWIECIEŃ", "MAJ", "CZERWIEC", "LIPIEC", "SIERPIEŃ", "WRZESIEŃ", "PAŹDZIERNIK" , "LISTOPAD GRUDZIEŃ"); Miesiąc: Boolean = Fałsz; varstr:ciąg; i: liczba całkowita; begin Writeln("Wpisz wielkie litery: "); CzytajLn(Str); for i:= 1 do 12 wykonaj jeśli Str = Instance[i] to Month:=True; if Month then WriteLn("Nazwa miesiąca została wprowadzona") else WriteLn("Nazwa miesiąca nie została wprowadzona") end. W rzeczywistości ciąg N znaków jest tablicą N+1 znaków: ciąg[N] = tablica Char. Znak null ma na celu wskazanie liczby znaków użytego ciągu i może być różny od znaku o kodzie 0 do znaku o kodzie N. Można z nim pracować jak z innymi znakami ciągu (zapisywać i odczytywać jego wartość, itp.), ale nie zapominając o jego głównym celu. 6.3. Ciąg znaków ASCIIZ W wersji 7.0 dla kompatybilności z innymi językami programowania i Środowisko Windows wprowadzono inny rodzaj ciągów - ciągi zakończone bajtem null - znak o kodzie 0 (tzw. ciągi ASCIIZ). W przeciwieństwie do łańcuchów typu string, te łańcuchy nie mają limitu rozmiaru (w rzeczywistości rozmiar może wynosić do 65535 bajtów). Te ciągi mają standardowy typ PChar. W rzeczywistości ten typ jest wskaźnikiem do znaku (wskaźniki znajdują się w rozdziale 7): PChar = ^Char; Jednak użycie rozszerzonej składni (klucz (X+) - patrz 17.7.1) pozwala na użycie takiej zmiennej jako string, równoważnej tablicy typu pChar = array of Char, gdzie K to liczba znaków w ciągu, a nie liczenie znaku kończącego z kodem 0 W przeciwieństwie do typu string, znak o indeksie 0 jest tutaj pierwszym znakiem łańcucha, a ostatni znak z indeksem K - ostatni znak o kodzie 0. Podczas pracy z ciągami znaków ASCIIZ zaleca się ustawienie rozszerzonej składni; w tym przypadku nie ma trudności podczas korzystania z różnych standardowych podprogramów, które działają z łańcuchami. Przykład. Użycie łańcuchów typu PChar z rozszerzoną składnią. program PRZYKŁAD12; ($X+) (nie wymagane domyślnie) type T = tablica Char; (tablica dla ciągu 7 znaków) var Str: PChar; const A: T = "cześć!"#0; początek Str:= "WITAJ!"; ZapisLn(Str); (wyjście liniowe: HELLO Str:= @А; {допустимо также: Str:=A} WriteLn(Str); {вывод строки: привет!} WriteLn(Str);{вывод символа "р"} ReadLn end. Если используется ключ {$Х-}, переменная типа PChar в этом случае рассматривается как указатель на один единственный символ. В этом случае ни один из операторов предыдущего примера, за исключением операторов Str:!} [e-mail chroniony]; i ReadLn są nieprawidłowe, a instrukcja WriteLn(Str^) jest wykonywana po instrukcji Str: [e-mail chroniony]; wygeneruje pojedynczy znak „p”. Do pracy z ciągami znaków ASCIIZ w wersji 7.0 używane są specjalne standardowe moduły Strings (zob. rozdział 16.2) i WinDos (zob. rozdział 16.6). 6.4. Rekord Typ rekordu zawiera pewną liczbę składników, zwanych polami, które mogą być różnych typów. Określając typ rekordu po rekordzie słowa zastrzeżonego, wymień wszystkie pola typu rekordu z ich typami oddzielonymi dwukropkiem i zakończ specyfikację typu słowem end. Pola są oddzielone od siebie średnikiem. Liczba pól rekordu może być dowolna. Przykład. type Complex = rekord (Typ liczb zespolonych) Re: Real; Im: Prawdziwy koniec; Dane = rekord (Typ - data urodzenia) Rok: Liczba całkowita; Miesiąc: 1..12; Dzień: 1..31 Osoba = rekord (Typ - informacje o pracowniku) Nazwa: string; Płeć: (mężczyzna, kobieta); Wiek: liczba całkowita; Żonaty: koniec logiczny; Notatka. Jeśli wiele pól typu rekordu jest tego samego typu, możesz podać ich nazwy oddzielone przecinkami, a następnie określić ten wspólny typ. Czyli typ liczb zespolonych rozpatrywany w przykładzie można wprowadzić w inny sposób: typ Complex = rekord Re, Im: Real end; Po wprowadzeniu typu rekordu można następnie zdefiniować zmienne lub wpisane stałe tego typu rekordu. Podczas przypisywania wartości do stałej jej pola są zapisywane w okrągłych nawiasach oddzielonych średnikiem. Aby ustawić wartość każdego pola, najpierw określ nazwę pola, a następnie oddzieloną dwukropkiem jego wartość. Tak więc dla typów przedstawionych powyżej można ustawić na przykład następujące zmienne i stałe: var X, Y, Z: Complex; Data: dane; const Urodziny: Dane = (Rok: 1971; Miesiąc: 12; Dzień: 9); Iwanow: Osoba = (Nazwisko: „Iwanow”; Płeć: Mężczyzna; Wiek: 40; Żonaty: Prawda); Notatka. Typ rekordu można również wprowadzić bezpośrednio podczas definiowania zmiennych lub wpisanych stałych. Na przykład fragment var X, Y, Z: zapis Re, Im: Real end; definiuje te same zmienne złożone, co w poprzednim przykładzie. Dostęp do pól rekordów uzyskuje się poprzez podanie nazwy zmiennej (stała) oraz nazwy pola zapisanej kropką, na przykład: Ivanov.Age, X.Re, Dat.Day itp. Przykład. Wykorzystanie pól rekordów. X.Re:= 1,5; X.Im:=1,7; Y.Re:= -X.Re; Y.Im:= -X.Im; Iwanow Żonaty:= Fałsz; Aby nie wypisywać nazwy rekordu za każdym razem przy dostępie do jego pól, można użyć na rekordach operatora WITH. Jego struktura wygląda tak:<имя записи>robić<оператор> ; W takim przypadku w operatorze można określić tylko pole rekordu. Na przykład fragment: z X do begin Re:= 1,5; im:= 1,7; Y.Re:= -Re; Y.Im:= -Im koniec; z Iwanowem do Żonaty:= Fałsz; jest odpowiednikiem fragmentu kodu z poprzedniego przykładu. Typ rekordu może mieć część wariantową, która zmienia się wraz z różnymi implementacjami, na przykład w typie rekordu parametry kształtów geometrycznych określa się bok dla kwadratu, dwa boki i kąt między nimi dla trójkąta, promień okręgu itp. Część wariantu może być tylko jedna i należy ją umieścić na końcu wpisu. Przykład. Korzystanie z wariantu. wpisz Figure = (Kwadrat, Trójkąt, Okrąg); Param = zapis X, Y: Real; (współrzędne punktu zakotwiczenia) przypadek Rys: Figura (parametry figury) Kwadrat: (Bok: Real); Trójkąt: (bok, bok2, kąt: rzeczywisty); Okrąg: (promień: rzeczywisty) koniec; var Mój Kwadrat, Mój Okrąg: Param; Część dotycząca wariantu zaczyna się od wielkości liter, po której następuje zmienna wyboru wariantu (w przykładzie z rys.) z typem. Następnie określane są stałe, których wartości może przyjąć zmienna wyboru opcji (w przykładzie Kwadrat, Trójkąt, Koło). Za każdą stałą, po dwukropku w nawiasach, zapisywane są pola tego wariantu rekordu ze wskazaniem ich typów. Nawiasy są wymagane, nawet jeśli nie ma części wariantowej dla danego wariantu. Należy zauważyć, że część wariantu nie jest zakończona operatorem nawiasu końca, jak w normalnej konstrukcji CASE, ponieważ następuje końcowy operator nawiasu końca całego typu. W standardzie języka Pascal przed użyciem jednej z opcji notacji należy nadać zmiennej wyboru opcji odpowiednią wartość: Rys:= Kwadrat; MójKwadrat.Strona:=5.0; Rys:= Koło; MójOkrąg.Promień:=7,5; W Turbo Pascalu ta operacja jest opcjonalna, chociaż jeśli ustawiona jest zmienna wyboru, można ją następnie wyszukać w programie, aby określić, która opcja jest ustawiona. Ponadto ustawienie wartości zmiennej selekcji nie ma żadnego wpływu, a poniższy fragment kodu jest równoważny z powyższym: Rys:= Okrąg; MójKwadrat.Strona:= 5.0; Rys:= Kwadrat; MójOkrąg.Promień:-7,5; W typie rekordu dopuszczalne jest nie wprowadzanie zmiennej wyboru opcji, ale wymienienie tylko różnych opcji, na przykład: Transf = przypadek rekordu Liczba całkowita równa 1: (_Word: Słowo); 2: (_TwoSymb: tablica Char) koniec; 6.5. Zbiór W Pascalu zbiór typów jest potęgą zbioru początkowego zbioru obiektów typu porządkowego, to znaczy zbioru wszystkich możliwych kombinacji obiektów zbioru pierwotnego. Liczba elementów zestawu początkowego w Turbo Pascalu nie może być większa niż 256, a liczby porządkowe elementów (czyli wartość funkcji Ord) muszą zawierać się w zakresie od 0 do 255. Aby określić typ zestawu, użyj zarezerwowane słowa set i of, a następnie określ elementy tego zbioru, zwykle jako wyliczenie lub zakres, na przykład: typ Alfa = zbiór "A".."Z"; Count = zestaw (Plus, Minus, Mult, Divided); Dziesięć = zestaw 0..9; Liczba = zbiór "0".."9" ; Wprowadzając typ zestawu, możesz zdefiniować zmienne lub wpisane stałe tego typu zestawu. Podczas przypisywania wartości do zestawu stałych, jego elementy są wymienione oddzielone przecinkami (dopuszczalne są zakresy) i umieszczone w nawiasach kwadratowych. Na przykład dla typów przedstawionych powyżej można ustawić następujące zmienne i wpisywane stałe: var CharVal: Alfa; Operacja: Liczyć; const Indeks: Dziesięć = ; Cyfra: Numer = ["0".."9"]; Notatka. Podobnie jak w przypadku innych typów strukturalnych, typ zestawu można wprowadzić bezpośrednio podczas ustawiania zmiennych lub wpisanych stałych: var CharVal: zestaw "A".."Z"; Działanie: zestaw (Plus, Minus, Mult, Divided); const Indeks: zestaw 0..9 = ; Cyfra: zestaw "0".."9"=["0".."9"]; Zestawowi można przypisać w programie taką lub inną wartość. Zazwyczaj wartość jest ustawiana za pomocą konstruktora set. Konstruktor określa zbiór elementów poprzez wyliczenie w nawiasach kwadratowych wyrażeń, których wartości dają elementy tego zbioru. Możesz używać zakresów elementów. Przykład. Następujące struktury są konstruktorami zestawów: pusty zestaw nie zawierający żadnych elementów. Konstruktor zestawów może być również używany bezpośrednio w operacjach na zestawach. Dla zbiorów zdefiniowane są następujące operacje: + - suma zbiorów; - - różnica zestawów; * - przecięcie wielu; = - sprawdzenie równoważności dwóch zestawów;<>- sprawdzenie nierównoważności dwóch zestawów;<= - проверка, является ли левое множество подмножеством правого множества; >= - sprawdź, czy prawy zbiór jest podzbiorem lewego zbioru; in - sprawdza, czy element podany po lewej stronie należy do zestawu podanego po prawej stronie. Wynik operacji sumy, różnicy lub przecięcia jest odpowiednim zbiorem, pozostałe operacje dają wynik typu logicznego. Przykład. Wprowadź ciąg znaków składający się z litery łacińskie, cyfry i spacje. Sprawdź, czy wprowadzone znaki są poprawne. program PRZYKŁAD 13; varstr:ciąg; L: Bajt; Prawda: Boole'a; begin WriteLn("Wprowadź ciąg"); CzytajLn(Str); L:= Długość(str); (liczba wprowadzonych znaków) Tru:= L > 0; (prawda, jeśli nie pusty ciąg), podczas gdy Tru i (L > 0) robią (test od końca ciągu) zaczynają się Tru:=Str[L] w ["0".."9", "A".,"Z" , "a".."z", " "]; (walidacja znaków) Dec(L) (poprzedni znak) end; if Tru then WriteLn("Poprawna linia") else WriteLn("Nieprawidłowa linia") end. 6.6. Plik Plik typu to sekwencja elementów tego samego typu znajdujących się na urządzeniu zewnętrznym (w standardzie językowym za podstawę przyjmuje się układ danych na taśmach magnetycznych). Komponenty mogą być dowolnego typu z wyjątkiem typu plikowego (lub zawierającego komponenty typu plikowego) i typu obiektowego. Liczba komponentów w pliku nie jest deklarowana. Aby określić typ pliku, użyj słów zastrzeżonych file i of, po których następuje typ komponentów pliku. Przykład. typeNumber = plik Integer; (plik typu liczb całkowitych) Symb = plik "A".."Z"; (typ pliku składający się z wielkich liter alfabetu łacińskiego) Typ standardowy Text definiuje typ pliku zawierający znaki połączone w wiersze. Zauważ, że typ Text Turbo Pascala nie jest odpowiednikiem pliku Char. Wprowadzając typ pliku, możesz zdefiniować zmienne typu pliku: var Fl, F2: Liczba; F3: tekst; FF4: Symb; W Turbo Pascal można użyć pliku bez typu, który nie określa typu komponentu podczas jego definiowania. W takim przypadku praca z plikiem odbywa się na poziomie fizycznym zgodnie z wewnętrznym formatem jego danych. W takim przypadku rzeczywiste składniki pliku mogą mieć inny typ. Przykład. wpisz UnType = plik; Typ pliku można również zdefiniować bezpośrednio podczas deklarowania zmiennych plikowych: var Fl, F2: plik Integer; Zmienne plikowe mają określone zastosowania. Nie można na nich wykonywać żadnych operacji (przypisywać wartości, porównywać itp.). Można ich używać tylko do wykonywania operacji na plikach (odczyt, zapis, usunięcie pliku itp.). Praca z plikami zostanie omówiona w rozdziale 11. Dodatkowo poprzez zmienną plikową można uzyskać informacje o konkretnym pliku (typ, parametry, nazwa pliku itp.)

Jedną z systemowych metod tworzenia algorytmów jest metoda algorytmizacji strukturalnej. Opiera się na wizualnej reprezentacji algorytmów w postaci sekwencji kontrolnych fragmentów strukturalnych.

Każdy algorytm składa się z elementarnych kroków, które można łączyć w pewne konstrukcje algorytmiczne: liniowy (seryjny), rozgałęzienia , cykliczny .

Definicja 1

Liniowy to konstrukcja algorytmu zaimplementowana jako sekwencja działań (kroków), a każda akcja (krok) jest wykonywana tylko 1 raz, po każdym działaniu (kroku) akcja (krok) jest zwiększana o 1, aż wartość stanie się większa niż końcowy parametr algorytmu .

Za pomocą algorytmów liniowych reprezentowane są procesy liniowe. Algorytmy tego typu służą do opisu uogólnionego rozwiązania problemów w postaci sekwencji modułów.

Definicja 2

rozgałęzienie (rozgałęzienie) nazywana jest konstrukcją algorytmiczną, która zapewnia wybór pomiędzy 2 rozwiązaniami w zależności od wartości danych wejściowych.

Oddziały są dwojakiego rodzaju: niekompletny (Jeśli coś) I kompletny (jeśli-to-inaczej). Za pomocą pełnego rozgałęzienia możesz uporządkować 2 gałęzie w algorytmie ( następnie lub Inaczej), z których każdy prowadzi do wspólnego punktu ich zbiegu, algorytm zostanie wykonany niezależnie od tego, którą ścieżkę obrało rozwiązanie. W przypadku niepełnego rozgałęzienia niektóre działania algorytmu są zakładane tylko na jednym rozgałęzieniu ( następnie), ponieważ brakuje drugiego, nie ma potrzeby wykonywania akcji dla jednego z wyników testu, kontrola natychmiast przejdzie do punktu scalenia. Istnieją 4 podstawowe warianty budowy rozgałęzień:

  1. Niekompletne rozgałęzienie typu "Jeśli następnie ”, w którym zostaną wykonane wszystkie akcje, jeśli warunek jest spełniony.
  2. Rozgałęzienia typu pełnego „jeśli-to-inaczej” , przy której zostaną wykonane 2 akcje w zależności od prawdziwości warunku.
  3. Rozgałęzienie z wyborem typu "następnie" , w którym akcja 1 zostanie wykonana pod warunkiem 1, akcja 2 pod warunkiem 2 i tak dalej.
  4. Rozgałęzienie z wyborem typu "Inaczej" , pod którym pod warunkiem 1 zostanie wykonana czynność 1, pod warunkiem 2 czynność 2 itd., w przeciwnym razie zostaną wykonane wszystkie inne czynności.

Poniżej znajdują się schematy blokowe algorytmów rozgałęziania.

Definicja 3

Cykliczny (lub cykl) nazywa się konstrukcją algorytmu, w którym pewna grupa kolejnych czynności (kroków) jest wykonywana kilkakrotnie w zależności od stanu problemu i danych wejściowych.

Definicja 4

Taka grupa powtarzających się działań na każdym etapie cyklu nazywa się ciało pętli .

Każda konstrukcja cykliczna zawiera elementy konstrukcji rozgałęzionej algorytmu.

Istnieją 3 rodzaje algorytmów cyklicznych:

  • pętla z parametrem (pętla arytmetyczna);
  • pętla z warunkiem wstępnym;
  • cykl z warunkiem końcowym (dwa ostatnie nazywane są iteracyjnymi).

Cykl arytmetyczny

W cyklu tego typu liczba kroków jest jednoznacznie określona przez regułę zmiany parametru, który jest określany za pomocą jego wartości początkowej i końcowej, a także krok zmiany. Oznacza to, że na każdym kroku pętli wartość parametru zmienia się zgodnie z krokiem pętli, aż osiągnie wartość równą końcowej wartości parametru.

Pętla z warunkiem wstępnym

W tej pętli liczba kroków nie jest z góry określona, ​​zależy to od danych wejściowych. W tej cyklicznej strukturze najpierw sprawdzana jest wartość wyrażenia warunkowego (warunku) poprzedzającego wykonanie kolejnego kroku cyklu. Jeśli wyrażenie warunkowe zwróci wartość true, zostanie wykonana treść pętli. Następnie warunek zostanie ponownie sprawdzony. Czynności te będą powtarzane, aż wartość wyrażenia warunkowego stanie się fałszywa, wtedy pętla się zakończy.

Cechą tego typu pętli jest to, że jeśli wartość wyrażenia warunkowego jest początkowo fałszywa, ciało pętli w ogóle nie zostanie wykonane.

Pętla z warunkiem końcowym

W tej cyklicznej konstrukcji, podobnie jak w poprzedniej, liczba powtórzeń korpusu cyklu nie jest z góry określona, ​​będzie zależeć od parametrów wejściowych. Cechą charakterystyczną cyklu z warunkiem wstępnym jest to, że treść cyklu z warunkiem końcowym w każdym przypadku zostanie wykonana przynajmniej raz i dopiero po tym zostanie sprawdzony warunek. W tej konstrukcji treść pętli jest wykonywana, o ile wartość wyrażenia warunkowego jest fałszywa. Gdy tylko stanie się to prawdą, wykonywanie poleceń zostanie zatrzymane.

W rzeczywistych problemach z reguły jest dowolna liczba cykli.

Poniżej znajdują się schematy blokowe algorytmów cyklicznych.

Typy danych: proste i ustrukturyzowane

Dane rzeczywiste przetwarzane przez program obejmują liczby całkowite i rzeczywiste, wartości logiczne oraz symbole. Należą do prostych typów danych i nazywane są podstawowymi. Wszystkie dane przetwarzane przez komputer są przechowywane w jego komórkach pamięci, z których każda ma swój własny adres. W językach programowania istnieją zmienne, które pozwalają ignorować adresy komórek pamięci i odwoływać się do nich za pomocą nazwy (identyfikatora).

Definicja 5

Zmienny to nazwany obiekt (komórka pamięci), który zmienia swoją wartość.

Nazwa zmiennej wskazuje na wartość, ale adres i sposób jej przechowywania są ukryte przed programistą. Oprócz nazwy i wartości zmienne mają swój własny typ, co pomaga określić, jaki typ informacji znajduje się w pamięci.

Typ zmiennej określa:

  • metoda używana do zapisywania informacji do komórek pamięci;
  • wymagana ilość pamięci do jej przechowywania.

Dla każdego typu określana jest ilość pamięci tak, aby można było w niej umieścić dowolną wartość z dopuszczalnego zakresu wartości dla tego typu.

Definicja 6

Zmienne, które występują w programie przez cały okres jego funkcjonowania, nazywamy statyczny .

Definicja 7

Zmienne, które są tworzone i niszczone na różnych etapach wykonywania programu, nazywają się dynamiczny .Definicja 10

szyk nazwany uporządkowanym zbiorem podobnych wartości, które mają wspólną nazwę, liczbami porządkowymi dla elementów (indeksów).

Elementy tablicy są przechowywane w pamięci komputera w sąsiedztwie, w przeciwieństwie do pojedynczych elementów. Tablice są rozróżniane według liczby indeksów elementów.

Tablica jednowymiarowa charakteryzuje się obecnością tylko jednego indeksu dla każdego elementu. Przykładami tablic jednowymiarowych są ciągi geometryczne i arytmetyczne, które definiują skończone serie liczb.

Definicja 11

Liczba elementów tablicy nazywa się wymiar .

W przypadku tablicy jednowymiarowej jej wymiar jest zapisany obok nazwy w nawiasach.

Elementy tablicy jednowymiarowej są wprowadzane element po elemencie, w kolejności niezbędnej do rozwiązania konkretnego problemu. Jeśli konieczne jest wpisanie całej tablicy, elementy wprowadzane są w porządku rosnącym indeksów.

3.2.1 Proste i ustrukturyzowane typy danych. Struktury danych - rekordy, tablice, listy.

Zmienne

Podczas programowania zwykle konieczne jest zapamiętanie określonej ilości danych (wyników pośrednich, zaistniałych zdarzeń, danych wejściowych, danych wyjściowych itp.). Te wartości muszą być przechowywane w pamięci. W tym celu deklarowane jest miejsce w pamięci, które służy do przechowywania danych, a to zadeklarowane miejsce nazywa się zmienną. Ponieważ dane, które są przechowywane mogą być bardzo różne, podczas deklarowania zmiennej deklarowany jest również typ danych, które będą przechowywane w tej zmiennej (typ zmiennej).

Proste typy

Zmienna typu prostego ukrywa pojedynczą wartość (często odczytywaną jako liczbę) pod słowem kluczowym i można do niej uzyskać bezpośredni dostęp. Najbardziej znane typy podstawowe to: liczba całkowita ze znakiem, liczba całkowita bez znaku, liczba ułamkowa (z przecinkiem), znak, wartość logiczna. Mogą się nieznacznie różnić w różnych językach.

Typy strukturalne

W przypadku typów strukturalnych pod jednym słowem kluczowym grupuje się kilka wspólnych wartości, takich jak współrzędne punktu czy imię i nazwisko osoby. W tej formie zbiór danych jest łatwiejszy do natychmiastowego przeniesienia. Jednocześnie musisz pojedynczo wykorzystywać lub zmieniać dane w ramach struktury.

Tablice

Tablica to zbiór danych tego samego typu, które mają taką samą nazwę i są oddzielone od siebie indeksem. Tablice znacznie ułatwiają przetwarzanie danych tego samego typu. Łatwość przetwarzania wynika z faktu, że w trakcie wykonywania programu można po prostu zmienić indeks i dzięki temu łatwiej jest uzyskać dostęp do żądanej zmiennej. Pobranie wartości zmiennej z tablicy za pomocą numeru seryjnego jest dość szybkim zadaniem dla komputera.

Tablice mogą być jednowymiarowe (wiersz, wiersz), dwuwymiarowe (tabela, macierz), trójwymiarowe (kostka) itp.

Przykład (C#, Java)

int masa = nowość ; //utwórz tablicę do przechowywania dziesięciu liczb całkowitych

masa=1; //wartość 1 jest zapisana pod indeksem 0

Dodatkowa lektura: http://enos.itcollege.ee/~jpoial/java/i200loeng4.html

Wpisy

Rekordy służą do przechowywania danych różnych typów, które razem tworzą powiązany zestaw. Na przykład rekord osoby tworzony jest z następujących danych: imię(tekst), nazwisko(tekst), płeć(boolean, 0 - kobieta, 1 - mężczyzna), waga(liczba ułamkowa). Dane te przy opisie jednej osoby tworzą jedną całość, jednak same w sobie są bardzo różnymi typami.

Przykład (C#)

nazwa struktury {

ciąg publiczny eesnimi;

ciąg publiczny perenimi;

publiczne bzdury seks;

publiczny pływak waga;

Za pomocą tego wpisu możemy utworzyć zmienną kasutaja(user) i podać użytkownikowi wartości dla imienia, nazwiska, płci i wagi:

inimen kasutaja;

kasutaja.eesnimi =„Jan” ;

kasutaja.perenimi =„Met” ;

kasutaja.seks = 1;

kasutaja.waga = 80,0;

Listy i drzewa

Obecnie listy są często używane do przechowywania danych. Jeżeli każdy element listy wskazuje na element następujący po nim, to jest to lista połączona, koniec takiej listy jest oznaczony pustym elementem (null). Lista połączona, w której każdy element wskazuje tylko na następny, nazywana jest listą powiązaną pojedynczo. Połączona lista, w której każdy element wskazuje na następny i poprzedni element, nazywana jest listą dwukierunkową. Lista połączona, w której brakuje pierwszego i ostatniego elementu, a każdy element wskazuje na następny, nazywana jest listą cykliczną. Długość połączonej listy jest określona przez liczbę jej elementów. Pierwszym elementem listy jest głowa (English Head), a pozostałe elementy - ogon (English Tail).

Stos to połączona lista, w której element dodany jako ostatni jest odczytywany jako pierwszy (LIFO - Last In First Out).

Kolejka to połączona lista, w której element dodany jako pierwszy jest odczytywany jako pierwszy (FIFO - First In First Out).

Dodatkowa lektura: http://www.cs.tlu.ee/~inga/alg_andm/linked_list_C_2011.pdf

Drzewo to struktura danych, w której dane są umieszczone w formie drzewa, składa się z wierzchołków (ang. Node) i łuków (ang. Edges), które łączą wierzchołki (wskaźniki). Wierzchołki, które są połączone łukami z wierzchołkiem znajdującym się powyżej, nazywane są dziećmi (ang. Childs), a wierzchołek znajdujący się powyżej w tym przypadku jest rodzicem (ang. Parent). Najwyższym wierzchołkiem jest korzeń. Wierzchołek, który nie ma dzieci, nazywa się liściem.

Przejście od góry do rodzica, a stamtąd do następnego rodzica i tak dalej. docieramy do korzenia. Przodkowie to wszystkie wierzchołki znajdujące się na ścieżce od rozpatrywanego wierzchołka do korzenia. Wysokość drzewa określa najdłuższa droga od liścia do korzenia.

W przypadku drzewa uporządkowanego korzeń i wierzchołki bezpośrednio z nim połączone są zdefiniowane jako węzły pierwszego poziomu (dzieci korzenia), a wierzchołki połączone bezpośrednio z wierzchołkami pierwszego poziomu są wierzchołkami drugiego poziomu (dzieci wierzchołki pierwszego poziomu) itp.; Ważna jest również kolejność dzieci od lewej do prawej.

Dodatkowa lektura: http://www.cs.tlu.ee/~inga/alg_andm/tree_gen_2011.pdf

Drzewo binarne to takie, w którym każdy rodzic może mieć jedno dziecko, dwoje dzieci lub w ogóle nie mieć dzieci, a kolejność dzieci jest ważna.

Drzewo wyszukiwania binarnego to uporządkowane drzewo binarne. Na lewo od wierzchołka jest zawsze mniejsza liczba, a na prawo zawsze większa.

Podczas przeszukiwania takiego drzewa pożądana wartość jest porównywana z korzeniem, a jeśli żądana wartość jest równa korzeniowi, to istnieje i zostaje znaleziona. Jeśli żądana wartość nie jest równa pierwiastkowi, operacja porównania jest kontynuowana dalej, odpowiednio porównując żądaną wartość z zestawem wierzchołków znajdujących się po prawej lub lewej stronie, aż dotrą do liści. Jeżeli poszukiwana wartość jest równa wartości jednego z wierzchołków, to poszukiwany element zostaje znaleziony i istnieje, natomiast jeśli takiego wierzchołka nie ma, to poszukiwany element nie istnieje w tym drzewie. Ten sposób wyszukiwania jest wielokrotnie szybszy niż pełne przeszukiwanie tablicy lub połączonej listy.

B-drzewo (ang. B drzewo) to drzewo poszukiwań, w którym liczba dzieci w każdym wierzchołku mieści się w zakresie od (t-1) do (2t-1), gdzie t jest dowolną stałą.

Drzewo B* to drzewo B, w którym wierzchołki są wypełnione 2/3, najpierw wypełniając dwa wierzchołki podrzędne poprzez redystrybucję kluczy, a następnie dzieląc je na 3 wierzchołki.

Dzięki temu B-drzewo pozwala zachować głębokość drzewa mniejszą niż w przypadku drzewa binarnego. Dzięki ograniczeniu dopełnienia możliwe jest również na poziomach pośrednich utrzymanie ilości używanej pamięci w ściśle określonych granicach, a jednocześnie możesz natychmiast dodać dane w odpowiednim miejscu.

Nazwa parametru Oznaczający
Temat artykułu: Ustrukturyzowane typy danych
Rubryka (kategoria tematyczna) Programowanie

Dane typ strukturalny składają się z danych innego typu. Zmienne tego typu mogą mieć tylko jedną wartość na raz. Dane typu strukturalnego obejmują:

o smyczki;

o Tablice;

o Zestawy;

o Dokumentacja;

o Akta;

o Zajęcia.

Stringi (typy stringów): są reprezentowane przez trzy typy fizyczne i jeden rodzajowy.

Wpisz dane Krótki ciąg reprezentują ciąg, który w rzeczywistości jest tablicą 256 elementów - szyk. Bajt null tej tablicy wskazuje długość ciągu. Linia - ϶ᴛᴏ sekwencja symboli tablicy kodów.

Typy danych AnsiString I Szeroki sznurek to tablice dynamiczne, których maksymalna długość jest w rzeczywistości ograniczona przez rozmiar pamięci głównej komputera. Wpisz dane AnsiString m zakodowane w kodzie ANSI, ale typu Szeroki sznurek- W kodzie Unicode.

Wspólny jest typ Strunowy, który może pasować do typu Krótki ciąg lub AnsiString, który jest zdefiniowany przez dyrektywę kompilatora $H.

Ponieważ łańcuchy są w rzeczywistości tablicami, aby odwołać się do pojedynczego znaku w łańcuchu, możesz podać nazwę zmiennej łańcuchowej i numer (pozycję) tego znaku w nawiasach kwadratowych.

Format opisu typu ciągu:

rodzaj<имя типа> = strunowy[maksymalna długość ciągu];

Inne: var<имя переменной, ... >: strunowy[maksymalna długość ciągu];

Jeśli wartość maksymalnej dopuszczalnej długości ciągu nie zostanie określona, ​​domyślna długość to 255 znaków. W przypadku użycia w wyrażeniach ciąg jest ujęty w apostrofy. Dane ciągu mogą być używane jako stałe. Nie wolno używać zmiennych łańcuchowych jako selektora w operatorze walizka.

Przykład: const Adresy = 'ul. Korolenco, 5';

wpisz ciąg = ciąg;

zmienna str: ciąg; St1:ciąg; St2, St3: ciąg;

Tablice: szyk - ϶ᴛᴏ uporządkowana, indeksowana kolekcja elementów tego samego typu, które mają wspólną nazwę. Elementami tablicy mogą być dane dowolnego typu, w tym dane strukturalne. Każdy element tablicy jest jednoznacznie identyfikowany przez nazwę tablicy i indeks (numer tego elementu w tablicy) lub indeksy, jeśli tablica jest wielowymiarowa. Aby odwołać się do pojedynczego elementu tablicy, podaj nazwę tej tablicy i liczbę (liczby) elementu ujętą w nawiasy kwadratowe, na przykład arr1 lub arr2.

Liczba pozycji indeksu określa wymiar tablicy (jednowymiarowy, dwuwymiarowy itd.), natomiast wymiar tablicy nie jest ograniczony. W matematyce odpowiednikiem tablicy jednowymiarowej jest wektor, a tablica dwuwymiarowa to macierz. Indeksy elementów tablicy muszą być typu porządkowego.

Rozróżnij tablice statyczny i dynamiczny . tablica statyczna jest tablicą, której granice indeksów i odpowiednio wymiary są określone podczas deklarowania, ᴛ.ᴇ. są znane przed skompilowaniem programu. Format opisu typu tablicy statycznej:

rodzaj<имя типа> = Aggau [<тип индексов>] z<тип элементов >;

Inaczej: var<имя переменной, ...>: Aggau[<тип индексов>] z <тип элементов >;

Przykład.
Hostowane na ref.rf
typ Macierz = a rr liczby całkowitej;

znak = tablica znaków;

Dzień =(Pon, Wt, Śr, Czw, Pt, Sob, Nd);

var m1, m2: Macierz; znak;

Tydzień: tablica dni; r: tablica wartości rzeczywistych;

tablica dynamiczna jest tablicą, dla której podczas deklaracji określany jest tylko typ jej elementów, a wielkość tablicy jest określana podczas wykonywania programu. Format opisu typu tablicy dynamicznej:

rodzaj<имя типа> = Aggau z <тип элементов >;

Ustawienie rozmiaru tablicy dynamicznej podczas wykonywania programu wykonuje procedura SetLength (var S; NewLength:integer), co dla tablicy dynamicznej S ustawia nowy rozmiar na Nowa długość. Operacje na tablicy dynamicznej i jej elementach można wykonywać dopiero po ustawieniu rozmiaru tej tablicy.

Po ustaleniu rozmiaru tablicy dynamicznej, w celu określenia jej długości, minimalnej i maksymalnej liczby elementów wykorzystywane są funkcje długość(), niska() I Wysoka() odpowiednio. Numeracja elementów tablicy dynamicznej zaczyna się od zera, w związku z tym funkcja Niski() zawsze zwraca zero.

Przykład.
Hostowane na ref.rf
Warn: liczba całkowita;

m: tablica rzeczywistych;

Ustaw długość (m, 100);

dla n:=0 do 99 do m[n]:=n;

Ustaw długość (m , 200);

Po opisaniu dynamicznej tablicy składającej się z liczb rzeczywistych określa się wielkość tej tablicy, równą 100 elementom. Każdy element ma przypisaną wartość równą jego numerowi w tablicy. Ponieważ numeracja elementów tablicy zaczyna się od zera, liczba ostatnich z nich wynosi nie 100, ale 99. Po pętli rozmiar tablicy wzrasta do dwustu.

Aby opisać typ wielowymiarowa tablica dynamiczna (na przykład dwuwymiarowa) konstrukcja jest używana:

rodzaj<имя типа> = Aggau z Aggau z<тип элементов >;

Akcje na tablicy są zwykle wykonywane element po elemencie, m.in. operacje wejścia i wyjścia. Przetwarzanie tablic element po elemencie odbywa się z reguły za pomocą cykli. Tablica jako całość (jako pojedynczy obiekt) może brać udział tylko w operacjach relacyjnych i w operatorze przypisania, natomiast tablice muszą mieć całkowicie identyczną strukturę, czyli muszą mieć indeksy tego samego typu i elementy tego samego typu .

Zestawy: zestaw to zbiór elementów wybranych z predefiniowanego zestawu wartości. Wszystkie elementy zbioru są typu porządkowego; liczba elementów zestawu nie może przekraczać 256. Format, opisy typu zestawu:

rodzaj<имя типа> = Zestaw<тип элементов >;

Zmienna typu zestawu może zawierać od zera do maksymalny numer elementy swojego zestawu. Wiele wartości typu jest zawartych w nawiasach kwadratowych. Pusty zestaw jest oznaczony przez . Dozwolone operacje na zestawach podane są w tabeli.

Jest jednak operacja w(test członkostwa), który określa, czy wyrażenie typu porządkowego (pierwszy operand) należy do zestawu (drugi operand). Wynik operacji będzie podobny logiczne i zrób różnicę Prawdziwe w przypadku zgodności z przynależnością wartości do zestawu.

Wpisy: s apisi łączyć stałą liczbę elementów danych innych typów. Poszczególne elementy rekordu mają nazwy i są nazywane pola . Nazwa pola musi być unikalna w obrębie rekordu. Wyróżnić wpisy stałe i wariantowe . Naprawiono wpis składa się ze skończonej liczby pól, jej deklaracja ma następujący format:

rodzaj<имя типа> = nagrywać;

<имя поля­_1>: <Тип поля>;

<имя поля_ n >: <Тип поля>;

Notacja wariantowa, jak i stały, ma skończoną liczbę pól, jednak daje możliwość interpretacji obszarów pamięci zajmowanych przez pola na różne sposoby. Wszystkie opcje nagrywania znajdują się w jednym miejscu w pamięci i można do nich uzyskać dostęp pod różnymi nazwami. Zauważ, że termin „notacja wariantowa” nie ma nic wspólnego z terminem „typ wariantowy” ( wariant). Format deklaracji wprowadzenia wariantu:

rodzaj<имя типа> = nagrywać;

walizka<Признак>: <Тип признака> z;

<вариант_1>: (<описание варианта_1>)

<вариант_ n >: (<описание варианта_ n >);

Aby odwołać się do konkretnego pola, konieczne jest podanie nazwy rekordu i nazwy pola oddzielone kropką. Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, nazwa pola jest złożona. Możesz wykonać te same operacje na polu, co na zmiennej tego typu.

Przykład.
Hostowane na ref.rf
varMan:rekord;

Man.Name:='Magister Iwanow';

Mężczyzna .Wynagrodzenie:=5000;

Zmienna Man jest stałym rekordem, który zawiera pola nazwa (Nazwisko), wynagrodzenie (Wynagrodzenie) i uwagi (Notatka), przy czym każde pole ma swój własny typ.

Akta: Plik to nazwana sekwencja elementów tego samego typu znajdujących się na urządzeniu zewnętrznym, najczęściej na dysku. Plik ma wiele wspólnego z jednowymiarową tablicą dynamiczną, ale znajduje się nie w pamięci RAM, ale w pamięci zewnętrznej i nie wymaga wstępnego określania rozmiaru.

Do wykonywania operacji z określonym plikiem znajdującym się na dysku program zazwyczaj wykorzystuje tzw zmienna pliku (plik logiczny). Zmienna plikowa po zadeklarowaniu jest powiązana z pewnym plikiem, dzięki czemu wykonywane na nim operacje prowadzą do odpowiednich zmian w podany plik. Po zakończeniu wszystkich operacji połączenie między zmienną pliku a plikiem zostaje zerwane. Teraz zmienna file może być powiązana z innym plikiem tego samego typu.

Biorąc pod uwagę zależność od rodzaju pierwiastków, rozróżniają pliki tekstowe, wpisane i niewpisane . Plik tekstowy zawiera ciągi znaków o zmiennej długości, wpisany plik stanowią elementy określonego typu (z wyjątkiem pliku), w niewpisany plik istnieją elementy, których typ nie jest określony. Opis zmiennej plikowej przeznaczonej do pracy z plikiem musi odpowiadać typowi elementów pliku.

Przykład.
Hostowane na ref.rf
var f1: plik tekstowy;

f2: Plik liczby całkowitej;

f3: Plik rzeczywisty;

tutaj zmienna f1 jest przeznaczona do pracy z plikami tekstowymi, zmienne f2 i f3 są przeznaczone dla plików typowanych zawierających odpowiednio liczby całkowite i liczby rzeczywiste, a zmienna f4 jest przeznaczona dla plików bez typu.

Ustrukturyzowane typy danych - pojęcie i typy. Klasyfikacja i cechy kategorii „Typy danych strukturalnych” 2017, 2018.

Typy strukturalne charakteryzują się mnogością elementów składających się na ten typ, tj. mają kilka elementów. Każdy składnik z kolei może należeć do typu strukturalnego, tj. dozwolone jest zagnieżdżanie typów.

Tablice reprezentują formalną unię kilku obiektów tego samego typu (liczby, symbole, ciągi itp.), uważanych za pojedynczą jednostkę. Wszystkie składniki tablicy są danymi tego samego typu.

Ogólna postać definicji tablicy:

Typ A = array [typ indeksu tablicy] z [typ komponentu tablicy]

Na przykład M1=tablica wartości rzeczywistych;

Smyczki to tablica znaków, ale liczba znaków w ciągu może być różna. Ciąg jest traktowany jako ciąg znaków o dowolnej długości. Maksymalna liczba znaków to nie więcej niż 255. Każdy znak w ciągu ma swój własny indeks (liczbę).

Nagranie to struktura danych składająca się ze stałej liczby elementów zwanych polami rekordów. W przeciwieństwie do tablicy, składniki rekordu (pola) mogą być różne rodzaje. Rekordy pozwalają łączyć wartości różnych typów.

Miesiąc: (styczeń, luty, marzec, kwiecień, maj, czerwiec, lipiec, sierpień, wrzesień, październik, listopad, grudzień);

Rok: 2000..2050;

Zestawy to zbiory obiektów tego samego typu, logicznie ze sobą powiązanych. Liczba elementów zawartych w zbiorze może wahać się od 0 do 256. Zbiory różnią się od tablic i rekordów zmiennością swoich elementów.

Cyfry = Zestaw 1..5;

Plik– nazwany obszar pamięci zewnętrznej. Plik zawiera komponenty tego samego typu, z wyjątkiem plików (tzn. nie można utworzyć „pliku plików”). Długość pliku nie jest określona i jest ograniczona jedynie pojemnością zewnętrznych urządzeń pamięci.

F: plik liczby całkowitej;

Dowiedz się więcej o typach strukturalnych w Dalsze badanie język.

      1. Wskaźnik (typ referencyjny)

Zawiera adres bajtu pamięci, który zawiera wartość danych określonego typu. Ten typ jest również nazywany typem referencyjnym. Opis używa symbolu ^ i identyfikatora typu. Na przykład P=^liczba całkowita;

Wykorzystanie wskaźników jest elastycznym narzędziem do zarządzania pamięcią dynamiczną i daje możliwość przetwarzania dużych tablic danych.

    1. Stałe

stały to wielkość, której wartość nie zmienia się w trakcie wykonywania programu.

    Numeryczne stałe są używane do zapisywania liczb. Istnieją następujące typy:

cały liczby: pisane ze znakiem + lub - lub bez znaku, zgodnie ze zwykłymi zasadami arytmetycznymi: -10 +5 5

Prawdziwy liczby można zapisać w jednej z dwóch form:

notacja normalna : 2,5 -3,14 2. - zauważ, że część całkowita jest oddzielona od części ułamkowej kropką;

wykładniczy postać: w tym zapisie liczba rzeczywista jest reprezentowana jako m*10 p , gdzie m to mantysa lub podstawa liczby, 0,1≤|m|≤1, p – zamówienie liczb, jest to stała całkowita. Rzeczywiście, każdą liczbę rzeczywistą można przedstawić w formie wykładniczej:

153.5 -0.1535*10 3

99.005 0.99005*10 2

We wszystkich komputerach kompatybilnych z IBM liczby rzeczywiste są przechowywane jako kombinacja mantysy i wykładnika, co umożliwia uproszczenie operacji na nich za pomocą specjalnej arytmetyki, która oddzielnie przetwarza mantysę i wykładnik. Aby programowo zapisać liczbę w formie wykładniczej, zamiast „mnożyć przez 10 do potęgi”, stosuje się notację mi lub mi(Łacina):

153,5 -0,1535*10 3 -0,1535E3 lub -1,535E02

99,005 0,99005*10 2 0,99005E+2 lub 9,9005e+01

Bez podejmowania specjalnych środków, program Pascala wyświetli liczby rzeczywiste w tej formie na ekranie i drukarce. Ponadto ten formularz jest wygodny do pisania bardzo małych i bardzo dużych liczb:

Ponieważ wielkość pamięci przydzielonej dla mantysy i kolejności jest ograniczona, to liczby rzeczywiste są zawsze reprezentowane w pamięci komputera z pewnym błędem. Na przykład najprostszy ułamek rzeczywisty 2/3 daje 0,6666666 w reprezentacji dziesiętnej... i niezależnie od ilości pamięci przydzielonej do przechowywania liczby, nie można jej zapisać wszystko jego znaki znajdują się w części ułamkowej. Jednym z typowych problemów programistycznych jest uwzględnianie ewentualnych błędów podczas pracy z liczbami rzeczywistymi.

Liczby szesnastkowe składają się z cyfr szesnastkowych poprzedzonych znakiem $. Zakres liczb szesnastkowych to $00000000 do $FFFFFFFF.

Oprócz stałych liczbowych istnieją inne ich typy:

    łamigłówka stałe.

Służy do sprawdzania prawdziwości lub fałszu niektórych warunków w programie i może tylko zaakceptować jedna z dwóch wartości: słowo funkcyjne prawda oznacza prawdę i fałszywe- Fałszywe;

    Symboliczny stałe.

Może przyjmować wartość dowolnego drukowanego znaku i jest zapisywany jako znak ujęty w apostrofy("pojedyncze cytaty"):

W tym drugim przypadku wartość stałej znakowej jest równa znakowi spacji. Jeśli chcesz zapisać sam znak apostrofu jako stałą znakową, wewnątrz zewnętrznych apostrofów jest on podwajany: """"

Stałe znakowe obejmują również stałe postaci #X, gdzie X jest wartością liczbową od 0 do 255 włącznie, reprezentującą ułamek dziesiętny ASCII-kod symbol. Tabele kodów ASCII używanych przez systemy operacyjne DOS i Windows znajdują się w Załączniku 1. Na przykład wartość #65 odpowiadałaby kodowi znaku „A” w języku łacińskim.

    Strunowy stałe.

Są to dowolne sekwencje znaków ujęte w apostrofy. Z reguły stałe łańcuchowe służą do rejestrowania monitów o wprowadzenie danych wydawanych przez program, wyświetlania komunikatów diagnostycznych itp.:

"Wprowadź wartość X:"

Jeśli konieczne jest zapisanie samego znaku apostrofu w stałej łańcuchowej, robi się to w taki sam sposób, jak w przypadku stałych znakowych.

Stałe w Turbo Pascalu można nazwać. Anonimowy stałe są używane na przykład podczas wyświetlania tekstu komunikatu w poprzednim przykładzie. Nazwane stałe są opisane w sekcji opisu programu przez operatora w postaci:

const Nazwa1=Wartość1;

Nazwa2=Wartość2;

NazwaN=WartośćN;

Tutaj słowo kluczowe const wskazuje początek nazwanej sekcji deklaracji stałej. Jasne jest, że często wygodniej jest odwoływać się do stałej poprzez nazwę niż za każdym razem przepisywać jej wartość numeryczną lub łańcuchową. Przykład sekcji stałej:

const e=2,7182818285;

lang="Turbo Pascal 7.1";

Oto stała numeryczna e z wartością podstawy logarytmu naturalnego oraz stała łańcuchowa o nazwie lang zawierająca łańcuch „Turbo Pascal 7.1”.

Każde imię podane przez programistę musi być unikalny w ramach tego samego programu. Jeśli włączymy tę sekcję do naszego programu, nie będziemy już mogli tworzyć w niej innych obiektów o nazwach e i lang.