MFF UK / Ústav teoretické fyziky / Tomáš Ledvinka
Přednášky
. . . . . . . . . . . . . . . . . . . . . . . . . .
Programování pro fyziky (1.r)
  Úvod
  Programy a algoritmy
  Píšeme program
  Píšeme program II
  Procedury a funkce
  Malujeme funkce
  Chyby. Typy I.
    Chyby při běhu programu
    Používáme knihovny I.
    I data mají strukturu
    Typy (interval, výčtový)
    Množiny
  Typy II. Pole a Záznamy
  Pole II.Řetězce.Soubory.
  Gnuplot.Interpolace...
  Matice. Velké O...
  Fronta,Zásobník. Postscript
  Bin. soubory, ...
  Ukazatele,Objekty, ...
Počítačová algebra
Klasická elektrodynamika (2.r)
Vybrané partie OTR

Cvičení
. . . . . . . . . . . . . . . . . . . . . . . . . .
Programování pro fyziky (1.r)
Teoretická mechanika (2.r)
Klasická elektrodynamika (2.r)


Věda
. . . . . . . . . . . . . . . . . . . . . . . . . .
Diskové zdroje v OTR
Hyperbolické systémy v OTR


Kontakt
. . . . . . . . . . . . . . . . . . . . . . . . . .
Email
Konzultační hodiny


Ostatní
. . . . . . . . . . . . . . . . . . . . . . . . .
Mallorca
Ze společnosti

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.

.