Datové typy Pascalu se dělí na: Pascal. Jednoduché datové typy. Alokace a uvolnění dynamické paměti
Data jsou obecný koncept za vše, s čím operuje počítač. Jakýkoli datový typ definuje sadu hodnot, které může konkrétní proměnná nabývat, a operace, které na ně lze použít. Každá proměnná, se kterou se program setká, musí být přidružen pouze k jednomu typu.
V Pascalu existují dva typy jednoduchých typů: ordinální typy a skutečné typy. Pořadový typ je buď definován programátorem (typ výčtu nebo typ rozsahu) nebo je označen názvem jednoho ze tří předdefinovaných pořadových typů: Boolean, Integer nebo Char. Skutečný typ se označuje normativním názvem typu Real.
Výčtový typ je charakterizován souborem prvků, které jsou v něm obsaženy. různé významy, mezi nimiž je definován lineární řád. Samotné hodnoty jsou v definici tohoto typu označeny názvy.
Typ rozsahu (omezený) je specifikován pomocí minimálních a maximálních hodnot souvisejících s dříve popsaným ordinálním typem. Takto se generuje nový ordinální typ.
Ordinální datové typy
Pořadový datový typ popisuje konečnou a uspořádanou množinu hodnot. Tyto hodnoty jsou mapovány na posloupnost pořadových čísel 0,1,2,...; výjimku tvoří pouze řadová celá čísla, která se mapují na sebe. Každý ordinální typ má minimální a maximální hodnota. Pro všechny hodnoty kromě minima existuje předchozí hodnota a pro všechny hodnoty kromě maxima je následující hodnota.
Předepsané funkce succ, pred, ord přijímají argumenty libovolného z ordinálních typů:
succ(X) - dává další řadovou hodnotu po X
pred(X) - udává pořadovou hodnotu předcházející X
ord(X) - udává pořadové číslo pro X
Pro všechny ordinální typy existují relační operátory = , = a > , za předpokladu, že oba operandy jsou stejného typu.
Booleovský typ
Booleovská hodnota je jedna ze dvou pravdivostních hodnot označených předdefinovanými názvy false a true .
Existují následující logické operace, která dává logickou hodnotu při použití na logické operandy:
a - logické AND
nebo - logické NEBO
ne - logické NE
Také jakákoli relační operace (= , = , > , in) vytváří logický výsledek.
Kromě booleovský typ definované tak, že nepravdivé
Tam jsou také předepsané logické funkce(tj. funkce, které vytvářejí logický výsledek):
odd(F) - true, pokud je celé číslo F-liché a výsledek je nepravdivý, pokud je F-sudá
eoln(F) - kontrola konce řádku
eof(F) - kontrola konce souboru
Celočíselný typ
Typ celé číslo zahrnuje celou řadu celých čísel.
Při práci s celočíselnými operandy platí následující aritmetické operace zadejte celočíselné hodnoty:
* - násobení
div - celočíselná část z dělení
mod - zbytek dělení
+ - sčítání
- - odčítání
Pascal má také předdefinovanou konstantu nazvanou MaxInt, která obsahuje maximální hodnotu celého čísla a rovná se 32767
Celý výsledek poskytují čtyři důležité předepsané funkce:
abs(I) - absolutní hodnota celočíselná hodnota I
sgr(I) - celočíselná hodnota I na druhou za předpokladu, že I trunc(R) - udává celočíselnou část reálného čísla R
round(R) - vrátí zaokrouhlené celé číslo. V tomto případě: pro R>0 znamená trunc(R+0,5) a pro R
Pokud je I celočíselná hodnota, pak:
succ(I) - dává další celočíselnou hodnotu (I+1)
pred(I) - dává předchozí celočíselnou hodnotu (I-1)
Typ postavy (Char)
Hodnoty znaků jsou prvky konečné a uspořádané sady znaků. Hodnoty tohoto typu jsou reprezentovány jedním znakem uzavřeným v jednoduchých uvozovkách (apostrofech). Pokud je potřeba samotný apostrof, píše se dvakrát.
Příklady: "*" "G" "3" """" "X"
- Pro typ Char platí následující minimální předpoklady:
- Desetinné číslice 0 až 9 jsou seřazeny podle číselných hodnot a následují za sebou (například succ("5") = "6").
- Může existovat velká písmena od "A" do "Z"; pokud ano, pak jsou objednány v abecední pořadí, ale nemusí nutně následovat za sebou (například "A"
- Mohou existovat malá písmena „a“ až „z“; pokud ano, pak jsou seřazeny abecedně, ale nemusí nutně následovat za sebou (např.
Chcete-li namapovat danou sadu znaků na sériová čísla a zpět, existují dvě předdefinované funkce:
ord(C) - udává pořadové číslo znaku C ve zmíněné uspořádané množině znaků
chr(I) - dává znak s sériové číslo já
Pro argumenty typu Char lze předdefinované funkce pred a succ definovat takto:
pred(C) = chr(ord(C)-I)
succ(C) = chr(ord(C)+I)
Komentář. Předchozí nebo následující symbol závisí na zadané sadě symbolů, takže oba tyto vztahy jsou platné pouze v případě, že předchozí nebo následující symbol existuje.
Skutečný typ
Hodnoty reálného typu jsou prvky podmnožiny definované implementací reálná čísla.
Všechny operace nad reálnými veličinami jsou přibližné, jejich přesnost je dána realizací (strojem), se kterou se zabýváte. Skutečný typ je jednoduchý typ, není to ordinální typ. Reálné hodnoty nemají pořadové číslo a pro žádnou z nich neexistuje žádná předchozí ani další hodnota.
Pokud je alespoň jeden z operandů reálného typu (druhý může být celé číslo), dávají následující operace skutečný výsledek:
* - násobení
/ - dělení (oba operandy mohou být celá čísla, ale výsledek je vždy skutečný)
+ - sčítání
- - odčítání
Existují předepsané funkce, které dávají skutečný výsledek se skutečným argumentem:
abs(R) - absolutní hodnota R
sqr(R) - R na druhou, pokud je výsledek v rozsahu reálných čísel
A tyto předepsané funkce poskytují skutečný výsledek s celým číslem nebo skutečným argumentem:
sin(X) - udává sinus X; X je vyjádřeno v radiánech
cos(X) - udává kosinus X; X je vyjádřeno v radiánech
arctan(X) - udává arkustangens X vyjádřený v radiánech
ln(X) - udává hodnotu přirozeného (základ e) logaritmu pro X, X>0
exp(X) - udává hodnotu exponenciální funkce(tj. na mocninu X)
sqrt(X) - udává hodnotu druhé odmocniny X, X>=0
Varování. Funkce pred, succ nelze použít pro skutečné argumenty Při indexování polí, pro řízení ve smyčce s parametrem, pro určování nelze použít hodnoty typu real základní typ sady, pro indexování v operátoru variant.
Koncept typu je jedním ze základních pojmů každého programovacího jazyka. Objekty (konstanty, proměnné, funkce, výrazy), se kterými program pracuje, patří ke specifickému typu.
Typ je sada hodnot, které mohou programové objekty nabývat, a sada operací povolených s těmito hodnotami.
Například, hodnoty 1 a 2 jsou celočíselného typu, lze je sčítat, násobit a další aritmetické operace. Významy „monitor“ a „Pascal“ jsou lingvistické povahy a mají vlastní sadu platných operací. Ve většině běžně používaných jazyků lze použít pouze přesně definované, předem známé typy. Pascal, spolu se standardními typy nalezenými v jiných jazycích vysoká úroveň, umožňuje programátorovi vytvářet vlastní typy.
Všechny typy povolené v jazyce Pascal jsou rozděleny do dvou: velké skupiny: jednoduché a složité (strukturované).
Typ | Rozsah | Mantisa, znamení | Požadovaná paměť (bajty) |
NEMOVITÝ | 2,9*10E-39..1,7*10E38 | 11-12 | |
SINGL | 1,5*10E-45...3,4*10E38 | 7-8 | |
DVOJNÁSOBEK | 5,0*10E-324..1,7*10E308 | 15-16 | |
ROZŠÍŘENÉ | 1,9*10E-4951..1,1*10E4932 | 19-20 | |
KOMP | -2E+63+1..2E+63-1 | 10-20 |
Efektivní použití typů SINGLE, DOUBLE, EXTEND, COMP je možné pouze tehdy, když je povolena direktiva ($N+). Ve výchozím nastavení je vypnuto. Pro řešení inženýrských a ekonomických problémů stačí hodnoty typu REAL.
Příklad
Var Res, Summa, Itog: skutečné;
Boolean datový typ je popsán identifikátorem BOOLEAN. Proměnné a konstanty tohoto typu mohou nabývat pouze jedné ze dvou hodnot: TRUE (true) nebo FALSE (false).
Příklad
Var Sel1, Sel2: booleovská hodnota;
A,B,C,D: logická hodnota;
Výrazy booleovský typ zabírají 1 bajt v paměti a používají se v logické výrazy a relační výrazy, stejně jako k řízení pořadí, ve kterém se programové příkazy provádějí.
Doslovný (znak) typ je popsán standardním identifikátorem CHAR. Konstanty a proměnné tohoto typu mohou nabývat jedné z hodnot kódu ASCII tabulky. Význam konstanty nebo proměnné tohoto typu je uzavřen v apostrofech.
Například, Var Bukva, Znak, Symbol: char;
Bukva:=’A’; Znak:=’+’; Symbol:='!'
Proměnné typu znaku zabírají 1 bajt v paměti. Použití datového typu char aritmetické výrazy zakázáno. Porovnávací operace lze aplikovat na hodnoty literálu, výsledek závisí na počtu proměnné nebo konstanty literálu v kódové tabulce.
Kromě standardní typy data, Pascal podporuje skalární typy, definované uživatelem. Mezi ně patří spočítatelný A interval typy . Tyto typy dat zabírají 1 bajt v paměti, takže jakákoliv vlastní typ nemůže obsahovat více než 255 prvků. Jejich použití výrazně zlepšuje viditelnost programu, činí jej více snadné vyhledávání chyby a šetří paměť.
Typ výčtu je specifikováno přímo výpisem všech hodnot, které může proměnná nabývat tohoto typu. Individuální hodnoty jsou označeny oddělenými čárkami a celý seznam je uzavřen v závorkách.
Formát
Typ<имя типа>=(<значение1, значение2, ..., значениеN>);
Var<идентификатор, ...>: < имя типа>;
Příklad
Typ Sezóna =(Jaro, Léto, Podzim, Zima);
Var S1, S2: Sezóna;
Podzim: (září, říjen, listopad);
V v tomto příkladu je zobrazen explicitně popsaný datový typ uživatele sezóny. Jsou určeny jejich významy – označení ročních období. Proměnné S1 a S2 mohou nabývat pouze jedné z uvedených hodnot. Pokus o přiřazení jakékoli jiné hodnoty způsobí softwarové přerušení. Třetí typ výčtu je anonymní (nemá název) a je určen výčtem hodnot v sekci Var. Podzim je proměnná tohoto typu a může nabývat hodnot září, říjen, teď. Lze tedy specifikovat jakýkoli typ, ale to není vždy přijatelné. První metoda je jistě srozumitelnější a více odpovídá povaze jazyka Pascal.
Typ intervalu umožňuje zadat dvě konstanty, které definují hranice rozsahu hodnot pro danou proměnnou. Pro každou operaci s intervalovou proměnnou kompilátor generuje kontrolní rutiny, aby zjistil, zda hodnota proměnné zůstává v určeném rozsahu. Obě konstanty musí patřit k jednomu ze standardních typů jiného než reálné. Musí být požadována hodnota první konstanty menší než hodnota druhý.
Formát
Typ<имя типа> = <константа1> .. <константа2>;
Var<идентификатор>: < имя типа>;
Příklad
Typ Dny = 1.. 31;
Var Work_d, Free_d: Dny;
V tomto příkladu proměnné Work_d, Free_d mít typ Dny a může nabývat libovolné hodnoty z rozsahu 1. . 31.
Příčinou je přechod mimo dosah softwarové přerušení.
Typ intervalu můžete definovat definováním hranic rozsahu nikoli hodnotami konstant, ale jejich názvy:
Const Min = 1; Max = 31;
Typ Dny = Min .. Max;
Var Work_d, Free_d: Dny;
Strukturované typy data jsou založena na skalárních typech a mohou je obsahovat různé kombinace. Definují uspořádanou kolekci skalárních prvků a jsou charakterizovány typem jejich komponent. Jazyk Pascal poskytuje následující strukturované datové typy:
řádek - posloupnost znaků uzavřená v apostrofech;
pole - strukturovaný datový typ sestávající z pevného počtu prvků stejného typu, ke kterým se přistupuje pomocí indexu ;
mnoho - soubor objektů vybraných podle nějaké charakteristiky nebo skupiny charakteristik, které lze považovat za celek;
záznam - soubor pevného počtu komponent různých typů;
soubor- sled součástí stejného typu a stejné délky.
Další dva strukturované typy- procedurální a objektový typ - je obtížné porovnat data v obvyklé reprezentaci.
Obrázek 1- Sada základních typů jazyka Pascal
Znalost a pochopení datových typů je nedílnou součástí programování.
V této lekci se seznámíme s datovými typy v programovacím jazyce Turbo Pascal.
V jazyce Pascal jsou libovolné objekty, tzn. konstanty, proměnné, funkční hodnoty nebo výrazy jsou charakterizovány svými typy. Typ definuje sadu přijatelné hodnoty toho či onoho objektu, stejně jako mnoho operací, které se na něj vztahují. Typ navíc určuje formát vnitřní reprezentace dat v paměti počítače. Pokud jde o typy objektů, Pascal je statický jazyk. To znamená, že typ objektu, například proměnné, je určen při jeho deklaraci a nelze jej později změnit.
Struktura datových typů v Pascalu:
Jednoduché typy jazyků
NA jednoduché typy zahrnují ordinální, reálný, řetězcový a adresový (ukazatel) typy. Všechny definují typ pouze jedné jediné hodnoty.
Řadové typy vyznačující se tím, že každý z nich má konečný počet možné hodnoty, mezi nimiž je stanoven lineární řád. Každá hodnota může být spojena s určitým celým číslem - jeho pořadovým číslem.
Celočíselné typy - označují množiny celých čísel v různých rozsazích. Existuje pět celočíselných typů, které se liší rozsahem platných hodnot a velikostí obsazeného prostoru. BERAN. Integer typy jsou určeny identifikátory: Byte, ShortInt, Word, Integer, LongInt; jejich charakteristiky jsou uvedeny v následující tabulce.
Hodnoty celočíselných typů se zapisují do programu obvyklým způsobem:
123 4 -3 +345 -699
Přítomnost desetinné čárky v zápisu celého čísla je nepřijatelná. Bylo by chybou napsat celé číslo takto:
123.0
Kromě obvyklého desítkového zápisu je možné zapsat celá čísla v hexadecimálním formátu pomocí předpony $, například:
$01AF $FF $1A $F0A1B
Rejstřík písmena A, B, ..., F nezáleží.
Platné operace:
- - zadání;
- - všechny aritmetiky: +, - ,*, /, div, mod (s obyčejným dělením [/] je výsledek skutečný!);
- - srovnání<, >, >=, <=, <>, =.
Platné operace:
- - zadání;
- - srovnání:<, >, >=, <=, <>, =;
- - logické operace: NOT, OR, AND, XOR
"w" "s" "." "*" " "-(mezera)
Pro znázornění samotného apostrofu je jeho obraz zdvojen: """".
Pokud znak nemá grafické znázornění, například znak tabulátoru nebo znak návratu vozíku, můžete použít ekvivalentní formu zápisu hodnoty znaku, která se skládá z předpony # a kódu ASCII znaku:
#9 #32 #13
Platné operace:
- - zadání;
- - srovnání:<, >, >=, <=, <>, =. Největší znak je ten, který má vyšší ASCII číslo.
"Toto je řetězec"
"1234" je také řetězec, nikoli číslo
"" - prázdný řetězec
Platné operace:
- - zadání;
- - sčítání (zřetězení, sloučení); například S:= "Zima"+" "+"přišla!";
- - srovnání:<, >, >=, <=, <>, =. Řetězce jsou považovány za rovnocenné, pokud mají stejnou délku a jsou ekvivalentní znak po znaku.
Typ komp ačkoli je klasifikován jako skutečný typ, je to ve skutečnosti celé číslo s velmi velkým rozsahem hodnot.
Hodnoty reálných typů lze v programu zapsat několika způsoby:
1.456 0.000134 -120.0 65432
+345 0 -45 127E+12
-1,5E-5 -1,6E+12 5E4 0,002E-6
Bylo by chybou napsat reálné číslo takto:
0,5 (správně 0,5)
12. (správně 12.0 nebo 12)
Reálné číslo ve formě s plovoucí desetinnou čárkou (vědecká forma) se zapisuje jako dvojice
<мантисса>E<порядок>
Toto označení je chápáno jako „mantisa vynásobená deseti na sílu rovnou řádu“. Například,
-1,6E+12 odpovídá -1,6 1012
Platné operace:
- zadání;
- všechny aritmetiky: +, - ,*, /;
- srovnání:<, >, >=, <=, <>, =.
Při porovnávání reálných čísel byste měli pamatovat na to, že kvůli nepřesnosti jejich znázornění v paměti počítače (kvůli nevyhnutelnosti zaokrouhlování) byste se měli vyhnout pokusům o stanovení striktní rovnosti dvou reálných hodnot. Existuje šance, že rovnost bude falešná, i když ve skutečnosti není.
Rozsah nebo (omezený typ) není předdefinovaným typem jazyka (jako je Integer nebo Char), a proto k němu není přidružen žádný identifikátor. Tento typ je uživatelským vstupem. Pomocí něj můžeme definovat nový typ, který bude obsahovat hodnoty pouze z omezeného podrozsahu nějakého základního typu. Základním typem může být pouze celočíselný typ, typ Char (znak) a jakýkoli typ výčtu zavedený programátorem.
Chcete-li zavést nový typ - rozsah - musíte v bloku popisu typu TYP označit název zadávaného typu a hranice rozsahu pomocí speciálního symbolu rozsahu ".." (dvě tečky za sebou):
TYP
Století = 1..21; (podrozsah celočíselného typu)
CapsLetters = "A"."Z"; (podrozsah typu Char)
Typy strukturovaných jazyků
Mezi strukturované typy patří: pole, záznam, sada, soubor atd. Všechny definují typ (nebo typy) nějaké datové struktury.
Pole- uspořádaná struktura dat stejného typu, která je ukládá sekvenčně. Pole musí mít rozměry, které určují, kolik prvků je ve struktuře uloženo. K jakémukoli prvku v poli lze dosáhnout jeho indexem.
Typ pole je určen konstrukcí:
Pole [rozsah] ElementType;
Rozsah v hranatých závorkách označuje hodnoty indexu prvního a posledního prvku ve struktuře. Příklady deklarací typů a proměnných:
TYPE Vector = pole Real; VAR V1: Vektor;
V2: pole Byte;
Zde je proměnná V1 definována pomocí výše popsaného typu Vector; typ proměnné V2 je konstruován přímo ve fázi jejího popisu.
Jako typ prvku pole můžete také zadat pole, čímž vytvoříte vícerozměrné struktury. Například popis dvourozměrné struktury (matice) bude vypadat takto:
VAR M1: pole pole Byte; Totéž lze napsat mnohem kompaktněji: VAR M2: pole Byte;
Zde mají pole M1 a M2 přesně stejnou strukturu - čtvercovou matici o velikosti 3x3.
K prvku pole se přistupuje zadáním jeho indexu, například:
Tím končí lekce o datových typech, text byl téměř kompletně zkopírován a vložen (odkaz bude níže), protože Nevidím smysl vyprávět tento materiál vlastními slovy. Pokud je rozdíl mezi datovými typy alespoň trochu jasný, je to již dobré.
PŘEDNÁŠKA 2
Základy programování.
Úvod do Pascalu. Datové typy. Operace.
Jazyková abecedaPascal
Jakýkoli přirozený jazyk se skládá z prvků, jako jsou symboly, slova, fráze a věty. Programovací jazyk má také podobné prvky: symboly, slova, výrazy (fráze), operátory (věty).
Slova jsou tvořena sbírkou symbolů. Výrazy - to jsou skupiny slov a operátory - Jsou to kombinace slov a výrazů. Jazykové symboly jsou elementární znaky (písmena), které se používají ke skládání některých textů. Sada těchto symbolů tedy tvoří abecedu jazyka.
Pascalova abeceda se skládá z:
1.velká a malá písmena latinské abecedy, která obsahuje následující znaky:
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 - velká písmena;
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 - malá písmena;
2. desetinná arabská čísla: 0 1 2 3 4 5 6 7 8 9;
3. hexadecimální číslice (sestavené z desítkových číslic a písmen od A do F);
4. 32 velkých a malých písmen ruské abecedy;
5. speciální znaky:
Kombinace speciálních znaků mohou tvořit složené znaky:
: = zadání;
< >nerovný;
>= větší nebo rovno;
<= меньше или равно;
Rozsah hodnot;
(* *) nebo ( ) - komentář.
Struktura programu Pascal
Aby kompilátor Passal správně přesně pochopil, jaké akce se od něj očekávají, musí být váš program naformátován v plném souladu se syntaxí (pravidly konstrukce programu) tohoto jazyka.
Jakýkoli program Pascal se může skládat z následujících bloků (volitelné části jsou dále označeny hranatými závorkami):
naprogramovat<имя_программы>;
[používá<имена_подключаемых_модулей>;]
[ štítek<список_меток>;]
[ konst<имя_константы> = <значение_константы>;]
[ typ<имя_типа> = <определение_типа>;]
[var<имя_переменной> : <тип_переменной>;]
[postup<имя_процедуры> <описание_процедуры>;]
[ funkce<имя_функции> <описание_функции>;]
začít (začátek hlavní části programu)
<операторы>
konec. (* konec hlavní části programu *)
Pozdější verze kompilátorů jazyka Pascal již nevyžadují specifikování názvu programu, tj. řádku programu<имя_программы>; lze vynechat. To je však možné pouze v případě, že je celý program obsažen v jednom souboru modulu. Pokud se program skládá z více nezávislých částí - modulů, pak každý z nich musí mít hlavičku (program nebo jednotku).
Kterákoli z uvedených volitelných sekcí se může v textu programu vyskytnout vícekrát, jejich obecná posloupnost se také může změnit, ale vždy je třeba dodržet hlavní pravidlo jazyka Pascal: před použitím objektu je nutné jej deklarovat a popsat.
Kompilátory Pascalu nerozlišují mezi malými a velkými písmeny a ignorují mezery, takže text programu může být strukturován tak, aby bylo co nejpohodlnější číst a ladit.
Direktivy kompilátoru
Řádek začínající symboly ($ není komentář, ale direktiva kompilátoru - speciální příkaz, na kterém závisí proces kompilace a provádění programu. Direktivy budeme uvažovat v těch částech, kterých se týkají „smyslem“.
Například řádek ($I-,Q+) zakáže ověření I/O, ale umožní řízení přetečení výpočtu.
Identifikátory
Jména daná objektům programu (konstanty, typy, proměnné, funkce a procedury a celý program) se nazývají identifikátory. Mohou se skládat pouze z čísel, latinských písmen a znaku "_" (podtržítko). Číslo však nemůže začínat jméno. Identifikátory mohou mít libovolnou délku, ale pokud mají dvě jména stejných prvních 63 znaků, pak jsou jména považována za identická.
Objektům svého programu můžete dát libovolné jméno, ale musíte se ujistit, že jsou odlišná od vyhrazených slov používaných v Pascalu, protože překladač stále nebude akceptovat proměnné s "cizími" názvy.
Zde je seznam nejběžnějších rezervovaných slov:
implementace pole shl
řetězec rozhraní případu
const label pak
používá ukazatel souboru
vzdálený postup var
na dobu programu
vpřed záznam s
opakování funkce xor
Proměnné a datové typy
Proměnná je objekt programu, jehož hodnota se může měnit za běhu programu.
Datový typ je charakteristika rozsahu hodnot, které mohou proměnné patřící k tomuto datovému typu nabývat.
Všechny proměnné použité v programu musí být popsány ve speciální sekci var pomocí následující šablony:
var<имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;
<имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;
Jazyk Pascal má velkou sadu různých datových typů, ale nyní si ukážeme jen několik z nich. O všech typech dat si povíme dále.
Konstanty
Konstanta je objekt, jehož hodnota je známa před spuštěním programu.
Konstanty jsou nezbytné pro návrh vizuálních programů, jsou nepostradatelné při použití opakovaně se opakujících hodnot v textu programu a jsou vhodné, pokud je potřeba tyto hodnoty měnit v celém programu najednou.
V Pascalu existují tři typy konstant:
Nepojmenované konstanty (číslice a čísla, symboly a řetězce, množiny);
Pojmenované netypové konstanty;
Pojmenované typové konstanty.
Nepojmenované konstanty
Nepojmenované konstanty nemají žádná jména, a proto je není třeba deklarovat.
Typ nepojmenované konstanty je ve výchozím nastavení určen automaticky:
Jakákoli posloupnost čísel (možná, že jim předchází znaménko "-" nebo "+" nebo rozdělená jednou tečkou) je kompilátorem vnímána jako nepojmenovaná konstanta - číslo (celé nebo reálné);
Jakákoli sekvence znaků uzavřená v apostrofech je považována za nepojmenovanou konstantu – řetězec;
Jakákoli posloupnost celých čísel nebo symbolů oddělených čárkami, orámovaná hranatými závorkami, je vnímána jako nepojmenovaná konstanta – množina.
Kromě toho existují dvě speciální konstanty true a false související s datovým typem Boolean.
Příklady použití nepojmenovaných konstant zahrnují následující operátory:
real2:= 12,075 + x;
string4:= "abc" + string44;
sada5:= * sada55;
boolean6:= true;
Netypové konstanty
Pojmenované konstanty, jak jejich název napovídá, musí mít jméno. Proto musí být tato jména nahlášena kompilátoru, tj. popsána ve speciální sekci const.
Pokud neuvedete typ konstanty, pak podle jejího vzhledu překladač sám určí, ke kterému (základnímu) typu má být přiřazena. Jakákoli již popsaná konstanta může být použita při deklaraci jiných konstant, proměnných a datových typů. Zde je několik příkladů popisu netypovaných pojmenovaných konstant:
Typované konstanty
Typované pojmenované konstanty jsou proměnné(!) s počáteční hodnotou, která je známa již při spuštění programu. Za prvé, typované konstanty nelze použít k definování jiných konstant, datových typů a proměnných a za druhé lze jejich hodnoty měnit za běhu programu.
Typované konstanty jsou popsány pomocí následující šablony:
konst<имя_константы> : <тип_константы> = <начальное_значение>;
Níže uvedené příklady ukazují, jak to provést:
const n: celé číslo = -10;
b: boolean = true;
Při studiu odpovídajících datových typů poskytneme příklady typovaných konstant jiných typů.
Datové typy Pascal
Kompilátory Pascalu vyžadují, aby byly před spuštěním programu poskytnuty informace o množství paměti potřebné ke spuštění programu. Chcete-li to provést, musíte v části popisu proměnných (var) vypsat všechny proměnné používané v programu. Kromě toho také musíte kompilátoru sdělit, kolik paměti bude každá z těchto proměnných zabírat.
To vše lze sdělit programu jednoduchým uvedením typu budoucí proměnné. Když má kompilátor informace o typu proměnné, „rozumí“, kolik bajtů je pro ni potřeba alokovat, jaké akce s ní lze provádět a na jakých konstrukcích se může podílet.
Pro pohodlí programátorů má Pascal mnoho standardních datových typů a navíc možnost vytvářet nové datové typy na základě stávajících (standardních nebo opět definovaných programátorem), kterým se říká constructed.
Rozdělení na základní a konstruované datové typy v Pascalu ukazuje tabulka:
Ordinální (diskrétní) datové typy |
Typy dat adresy |
Typy strukturovaných dat |
||||
Aritmetické datové typy |
||||||
Základní datové typy |
Logický |
Symbolický |
Nemovitý |
Netipizi indexovaný index | ||
Konstruované typy |
Listovatelné týden = (ne, po, út, my, čt, pá, so); |
Zadaný ukazatel |
Pole Řetězec rekordní záznam Procesní Objekt |
|||
Interval (rozsah) |
||||||
Datové typy vytvořené programátorem |
Ordinální datové typy
Mezi základními datovými typy vynikají ordinální typy. Tento název lze odůvodnit dvěma způsoby:
1. Každý prvek ordinálního typu může být spojen s jedinečným (ordinálním) číslem. Číslování hodnot začíná od nuly. Výjimkou jsou datové typy shortint, integer a longint. Jejich číslování se shoduje s hodnotami prvků.
2. Na prvcích libovolného ordinálního typu je navíc definováno pořadí (v matematickém smyslu slova), které přímo závisí na číslování. Pro libovolné dva prvky ordinálního typu lze tedy přesně říci, který z nich je menší a který větší.
Standardní rutiny, které zpracovávají ordinální datové typy
Následující funkce a procedury jsou definovány pouze pro ordinální typy:
1.Funkce ord(x) vrací pořadové číslo hodnoty proměnné x (vzhledem k typu, ke kterému proměnná x patří).
2.Funkce pred(x) vrací hodnotu předcházející x (neplatí pro první prvek typu).
3.Funkce succ(x) vrací hodnotu následující za x (neplatí pro poslední prvek typu).
4.Procedura inc(x) vrací hodnotu následující za x (pro aritmetické datové typy je to ekvivalentní operátoru x:=x+1).
5.Procedura inc(x,k) vrací k-tou hodnotu za x (pro aritmetické datové typy je to ekvivalentní operátoru x:=x+k).
6.Procedura dec(x) vrací hodnotu předcházející x (pro aritmetické datové typy je to ekvivalentní operátoru x:=x-1).
7.Procedura dec(x,k) vrací hodnotu k-e předcházející x (pro aritmetické datové typy je to ekvivalentní operátoru x:=x-k).
Na první pohled se zdá, že výsledek použití procedury inc(x) je úplně stejný jako výsledek použití funkce succ(x). Rozdíl mezi nimi se však objevuje na hranicích přípustného rozsahu. Funkce succ(x) není použitelná pro maximální prvek typu, ale procedura inc(x) nevyvolá žádnou chybu, ale podle pravidel strojového sčítání přidá k číslu prvku další jednotku. . Číslo samozřejmě půjde mimo rozsah a z důvodu zkrácení se změní na číslo minimální hodnoty rozsahu. Ukazuje se, že procedury inc() a dec() vnímají jakýkoli ordinální typ jako „uzavřený do kruhu“: ihned za poslední hodnotou přichází opět první hodnota.
Vysvětleme vše, co bylo řečeno, na příkladu. Pro datový typ
typ šestnáct = 0..15;
pokus o přičtení 1 k číslu 15 dá následující výsledek:
Počáteční jednotka bude oříznuta, a proto se ukáže, že inc(15)=0.
Podobná situace na spodní hranici přípustného rozsahu libovolného ordinálního datového typu je pozorována u procedury dec(x) a funkce pred(x):
dec(min_element)= max_element
Datové typy související s pořadovým číslem
1. Booleovský typ má dvě hodnoty: false a true a platí pro ně následující rovnosti:
ord(false)=0, ord(true)=1, false pred(true)=false, succ(false)=true, inc(true)=false, inc(false)=true, dec(true)=false, dec(false)=true. 2. Typ znaku char obsahuje 256 rozšířených znaků ASCII (například "a", "b", "i", "7", "#"). Číslo znaku vrácené funkcí ord() je stejné jako číslo znaku v tabulce ASCII. 3. Shrňme si celočíselné datové typy do tabulky: Typ dat Počet bajtů Rozsah 2147483648..2147483647 4. Vyjmenované datové typy jsou specifikovány v sekci typů explicitním výpisem jejich prvků. Například: typ týden =(ne,po,út,st,čt,pá,so) Připomeňme, že pro tento typ dat: inc(sat) = slunce, dec(sun) = so. 5. Intervalové datové typy jsou specifikovány pouze hranicemi jejich rozsahu. Například: typ měsíc = 1..12; budni = po..pá; 6. Datové typy vytvořené programátorem jsou popsány v sekci typů podle následujícího vzoru: typ<имя_типа> =
<описание_типа>; Například: zadejte lat_bukvy = "a".."z","A".."Z"; Základní datové typy jsou standardní, není tedy potřeba je popisovat v sekci typů. Je-li to však žádoucí, lze to také provést například dlouhými definicemi krátkými názvy. Řekněme zavedením nového datového typu typ int = integer; Text programu můžete trochu zkrátit. Reálné datové typy
Připomeňme, že tyto datové typy jsou aritmetické, nikoli pořadové. Typ dat Počet bajtů Rozsah (absolutní hodnota) 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 Konstruované datové typy
Těmito datovými typy (spolu s pro ně definovanými operacemi) se budeme dále zabývat v průběhu několika přednášek. Operace a výrazy Aritmetické operace
Pojďme se bavit o operacích – standardních akcích povolených pro proměnné toho či onoho základního datového typu. Základem budou aritmetické a logické operace. Poznámka: Všechny níže uvedené operátory (kromě unárního "-" a nikoli) vyžadují dva operandy. 1. Logické operace (a - logické AND, nebo - logické OR, ne - logické NOT, xor - exkluzivní OR) jsou použitelné pouze pro hodnoty typu boolean. Jejich výsledkem jsou také booleovské hodnoty. Zde jsou tabulky hodnot pro tyto operace: pravda nepravda pravda nepravda nepravda nepravda pravda nepravda nepravda 2. Porovnávací operace (=,<>, >, <, <=, >=) platí pro všechny základní typy. Jejich výsledky jsou také booleovské hodnoty. 3. Operace celočíselné aritmetiky jsou použitelné pouze pro celočíselné typy. Jejich výsledkem je celé číslo, jehož typ závisí na typech operandů. a div b - dělení a b úplně (asi není třeba připomínat, že dělení 0 je zakázáno, takže v takových případech operace generuje chybu). Výsledkem bude datový typ společný pro typy, ke kterým operandy patří. Například (krátký bajt div = celé číslo). To lze vysvětlit takto: celé číslo je minimální typ, jehož byte i shortint jsou podmnožiny. a mod b - zbytek při dělení a b. Typ výsledku, stejně jako v předchozím případě, je určen typy operandů a 0 je neplatná hodnota pro b. Na rozdíl od matematické operace mod, jejímž výsledkem je vždy nezáporné číslo, je znaménko výsledku operace "programátor" určeno znaménkem jejího prvního operandu. Pokud tedy v matematice (-2 mod 5) = 3, pak máme (-2 mod 5) = -2. a shl k - posun hodnoty a o k bitů doleva (to je ekvivalentní vynásobení hodnoty proměnné a 2k). Výsledek operace bude stejného typu jako její první operand(y). a shr k - posune hodnotu a o k bitů doprava (to je ekvivalentní úplnému dělení hodnoty proměnné a 2k). Výsledek operace bude stejného typu jako její první operand(y). a nebo ne, xor - binární aritmetické operace, které pracují s bity binární reprezentace celých čísel podle stejných pravidel jako odpovídající logické operace. 4. Obecné aritmetické operace (+, -, *, /) platí pro všechny aritmetické typy. Jejich výsledek náleží datovému typu společnému pro oba operandy (výjimkou je pouze operace zlomkového dělení /, jejímž výsledkem je vždy reálný datový typ). Jiné operace
Existují další operace specifické pro hodnoty některých standardních datových typů Pascalu. Tyto operace zvážíme v příslušných částech: #, in, +, *, : viz přednáška 5 „Symboly. Čáry. zástupy" @, ^: viz přednáška 7 „Adresy a ukazatele“ Standardní aritmetické funkce
Aritmetické operace také zahrnují standardní aritmetické funkce. Jejich seznam se stručným popisem uvádíme v tabulce. Funkce Popis Typ argumentu Typ výsledku Absolutní hodnota (modul) čísla Aritmetický Stejné jako typ argumentu Arktangens (v radiánech) Aritmetický Nemovitý Kosinus (v radiánech) Aritmetický Nemovitý Exponent (ex) Aritmetický Nemovitý Vezmeme-li zlomkovou část čísla Aritmetický Nemovitý Vezmeme celou část čísla Aritmetický Nemovitý Přirozený logaritmus (základ e) Aritmetický Nemovitý Kontrola, zda je číslo liché Význam čísla Nemovitý Zaokrouhlete na nejbližší celé číslo Aritmetický Zaokrouhlete dolů – na nejbližší menší celé číslo Aritmetický Sinus (v radiánech) Aritmetický Nemovitý Kvadratury Aritmetický Nemovitý Druhá odmocnina Aritmetický Nemovitý Aritmetické výrazy
Všechny aritmetické operace lze vzájemně kombinovat - samozřejmě s přihlédnutím k datovým typům povoleným pro jejich operandy. Operandy jakékoli operace mohou být proměnné, konstanty, volání funkcí nebo výrazy vytvořené na základě jiných operací. Vše dohromady se nazývá výraz. Příklady aritmetických výrazů: (x<0) and (y>0) - výraz, jehož výsledek je typu boolean; z shl abs(k) - druhý operand je volání standardní funkce; (x mod k) + min(a,b) + trunc(z) - kombinace aritmetických operací a volání funkcí; odd(round(x/abs(x))) - "vícepříběhový" výraz. Pořadí výpočtu
Pokud výraz obsahuje závorky, pak se výpočty provádějí v následujícím pořadí: čím menší je hloubka vnoření závorek, tím později se vypočítá operace v nich uzavřená. Pokud nejsou žádné závorky, pak se nejprve vypočítají hodnoty operací s vyšší prioritou a poté ty s nižší prioritou. Několik po sobě jdoucích operací se stejnou prioritou se vypočítá v pořadí zleva doprava. Tabulka 2.1. Priority (pro všechny) Operace Pascal ... Téměř všechny celočíselné datové typy jsou . Tyto datové typy představují celá čísla v určitém rozsahu. Přesné názvy celočíselných typů a rozsahů hodnot závisí na konkrétním programovacím jazyku, kompilátoru a režimu kompilace. Více se o tom můžete dozvědět v dokumentaci kompilátoru. Například datový typ Celé číslo Například datový typ v Delphi má rozsah -2147483648…2147483647, zatímco v Turbo Pascalu je datový typ Například datový typ představuje čísla v rozsahu -35768…32767. Ve Free Pascalu rozsah hodnot typu určeno zvoleným režimem. Protože Lazarus používá kompilátor Free Pascal, vše, co bylo řečeno o datových typech ve vztahu k Free Pascalu, platí také pro Lazarus. Takže celočíselné datové typy Free Pascalu jsou uvedeny v tabulce 13.1. QWord nejsou! To znamená, že je nemůžete použít například pro indexové proměnné v cyklech. Nicméně jsem je zde uvedl, abych je v budoucnu nepopisoval samostatně a shromáždil všechny typy Free Pascal integer na jednom místě. Pokud některým slovům nerozumíte, nezoufejte. V pravý čas vám o všem řeknu podrobněji. A teď pár vysvětlení ke stolu. Ve sloupci TYP A teď pár vysvětlení ke stolu. jsou uvedeny identifikátory datových typů (klíčová slova, která kompilátoru naznačují, do jakého typu konkrétní data patří). Jak tyto identifikátory používat, se naučíte v následujících lekcích. označuje velikost, kterou datový typ zabírá v paměti počítače. Například kladné celé číslo může být reprezentováno různými typy: Rozsah hodnot,
Smallint, Závisí na režimu kompilace atd. Nicméně číslo jako Závisí na režimu kompilace bude zabírat 4 bajty v paměti, zatímco číslo jako Rozsah hodnot– pouze 1 bajt. Pokud tedy s jistotou víte, že číslo, se kterým pracujete, nebude mít nikdy hodnotu větší než 255, pak je lepší jej definovat jako typ Rozsah hodnot, protože to ušetří místo v paměti vašeho počítače. I když zde není vše tak jednoduché (nuance distribuce paměti a dalších počítačových zdrojů jsou nad rámec). A teď pár vysvětlení ke stolu. ROZSAH určuje rozsah hodnot, se kterými datový typ pracuje. Například číslo jako Rozsah hodnot může nabývat hodnot od 0 do 255. Nyní k praxi. Pojďme napsat program, který zobrazí rozsahy hodnot všech celočíselných datových typů. Zdrojový kód tohoto programu je uveden níže: Výpis 13.1. Program pro zobrazení rozsahů celých čísel. program td; ($mode objfpc)($H+) používá ($IFDEF UNIX)($IFDEF UseCThreads) cthreads, ($ENDIF)($ENDIF) třídy (můžete přidat jednotky za tímto ); begin Writeln("Byte: ", Low(Byte), "..", High(Byte)); Writeln("Shortint: ", Low(Shortint), "..", High(Shortint)); Writeln("Smallint: ", Low(Smallint), "..", High(Smallint)); Writeln("Slovo: ", Nízké(Slovo), "..", Vysoké(Slovo)); Writeln("Celé číslo: ", Nízké(Celé číslo), "..", Vysoké(Celé číslo)); Writeln("Kardinál: ", Nízký (Kardinál), "..", Vysoký (Kardinál)); Writeln("Longint: ", Low(Longint), "..", High(Longint)); A Writeln("Dlouhé slovo: ", Nízké (Dlouhé slovo), "..", Vysoké (Dlouhé slovo)); Writeln("Int64: ", Nízká(Int64), "..", Vysoká(Int64)); Writeln("QWord: ", Low(QWord), "..", High(QWord)); 10 Readln; konec. Standardní funkce Domácí úkol: Vytvořte program, který zobrazuje rozsahy celočíselných hodnot (výpis 13.1). Zkompilujte program a spusťte jej. Ujistěte se, že tyto hodnoty odpovídají hodnotám uvedeným v tabulce 13.1. Ve zdrojovém kódu programu najděte řádek, který nastavuje režim kompilace: ($mode objfpc)($H+) V tomto řádku místo slova objfpc napsat slovo tp. To znamená, že poslední řádek by měl vypadat takto: ($mode tp)($H+) Spusťte program. Podívejte se na rozsah hodnot typu Například datový typ. Vyvodit závěry. Naučte se myslet jako programátor, tedy logicky. Nikdo za vás do důchodu nebude žvýkat všechno, jako teď já. Musíte si zvyknout myslet na sebe. Jinak sklouznete k „principu učení opice“ a vaše šance stát se skvělým programátorem se pak budou blížit nule. Abych vám pomohl nesklouznout do „nacpané“ úrovně, budu ve vašem učení pravidelně nechávat mezery, abyste se na některé věci pokusili přijít sami. Je mnohem lepší, když na to přijdete sami špatné rozhodnutí, chybu najdete sami a sami ji opravíte, místo abyste vždy používali správná řešení jiných lidí a hloupě je kopírovali.
Základy programování
Každý profesionál byl jednou čajník. Jistě znáte stav, kdy „nevíte, jak začít přemýšlet, abyste na něco takového přišli“. Určitě jste se již setkali se situací, kdy prostě nevíte, kde začít. Tato kniha je zaměřena právě na takové lidi, kteří by se chtěli stát programátorem, ale absolutně netuší, jak na tuto cestu začít.Typ
Tabulka 13.1. Volné datové typy Pascal Integer (Lazarus).
Velikost, bajty
Rozsah hodnot
1
0…255
Byte
1
-128…127
Shortint
2
-35768…32767
Smallint
2
0…65535
Například datový typ
Slovo
2 nebo 4
Závisí na režimu kompilace
4
0…4294967295
Kardinál
4
-2147483648…2147483647
Longint
4
0...4294967295
Dlouhé slovo
8
-9223372036854775808...9223372036854775807
Int64
8
0...18446744073709551615
POZNÁMKA Dlouhé slovo A Int64 Typy ve Free Pascalu
178
35278