I data mají svou strukturu
Kromě deklarací proměnných, konstant, procedur a funkcí můžeme v jazyce Pascal deklarovat i nový typ. Prozatím jsme používaly několik jednoduchých typů:
Integer (a příbuzné varianty byte, ..., int64)
Real (i ten má kratší variantu: single)
Boolean
Char
Dalším jednoduchým typem je char.
Konstanta tohoto typu se zapisuje jako
1. jeden znak mezi apostrofy, např. ' ' (mezera) nebo '*' nebo '''', což je jediný znak apostrof.
2. znak # následovaný číslem v rozsahu 0..255. Toto číslo
může být též psáno pomocí znaku $ v hexadecimálním
zápisu, např. #9 (znak tabulátor), #32 (mezera) je totéž
jako #$20 nebo samozřejmě ' '. Souvislost mezi číselným
zápisem a příslušným znakem je dána tabulou kódů, která
se z historických důvodů jmenuje ASCII
(americký standardní kód pro výměnu informací).
#$20=#32= ' ' '!' '"' '#' '$' '%' '&' '''' '(' ')' '*' '+' ',' '-' '.' '/' #$30=#48= '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' ':' ';' '<' '=' '>' '?' #$40=#64= '@' 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' #$50=#80= 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' '[' '\' ']' '^' '_' #$60=#96= '`' 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' #$70=#112='p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' '{' '|' '}' '~' #127
Znaky #0..#31 nemají původně význam znaků ale kontrolích
povelů (původně pro dálnopis).
Znak #9 se nazývá tabulátor, znaky #10 a #13 mají význam
přechodu na nový řádek, případně jen "návratu
vozíku".
Ostatní znaky z tohoto rozsahu mohou mít podle situace význam
řídícího znaku nebo jen třeba jen znaku srdíčka. Pokud k
tomu nemáme dobrý důvod (např. níže zvědavost)
neposíláme do textového výstupu kontrolní znaky a pro
řádkování používáme Writeln. Ten vypíše na každé
platformě platnou sekvenci kontrolních zanků pro přechod na
nový řádek. S tabulátorem nebývají potíže.
Proměnná typu char se deklaruje podle očekávání jako
var c : char;
Pro ujasnění významu znaků mezi 9 a 13 vyzkoušejte co vypíše
writeln('abcd',#13,'12');
Případně jednoduchý cyklus
var c:char; ... for c:=#9 to #13 do begin writeln(ord(c),':'); writeln('abcd',c,'12'); end;
Jak vidíme, proměnná typu char může vystupovat jako
řídící proměnná cyklu for.
Pořadí znaku v tabulce (tedy číslo, kterým počítač znak
representuje) získáme použitím funkce ord.
Naopak znak z celého čísla vyrobíme použitím konverse typu tak,
že idnetifikátor typu použijeme jako funci s jedním
parametrem. Proto následující kód dá stejný výstup.
var i:integer; ... for i:=9 to 13 do begin writeln(i,':'); writeln('abcd',char(i),'12'); end;
Proto také můžeme místo ord(c) psát integer(c).
Spolu s celočíselnými typy je typ char příkladem tzv ordinálního typu, tedy typu repsesentujícího množinu s bobře definovaným uspořádáním, 1:1 zobrazitelnou na nějaký (konečný-víc se nám do počítače nevejde) interval celých čísel. Pro takovou množinu je pak rozumné definovat funkce předchůdce (pred) a následník (succ).
pred('B') = 'A', pred(0) = -1, succ(7) = 8 atp.