S třední škola stavební Jihlava Sada 1 - Základy programování 14. Strukturované datové typy - pole, záznam, množina Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2 - inovace a zkvalitnění výuky prostřednictvím ICT Jaromír Železný 2013 Projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky
Datový typ záznam datový typ pole má všechny složky stejného základního datového typu => pro popis reálných objektů se nehodí -reálné objekty mají různý počet vlastností obvykle různých typů nejběžnější metodou vytváření strukturovaných datových typů je spojování libovolných prvků do složených typů, pro popis těchto objektů Pascal nabízí strukturovaný datový typ záznam příkladem může být osobní karta obsahující jméno, příjmení, datum narození, místo narození apod.
Datový typ záznam záznam je nehomogenní datová struktura skládající se z několika položek různého typu počet položek záznamu je předem neomezený, ale konečný jména a typy položek záznamu se deklarují popisem, který má obecný tvar : Record end; jméno položky1: typ1; jméno položky2: typ2;... jméno položkyn: typn;
Datový typ záznam Příklad deklarací typu záznam : TYPE Osoba = Record Jmeno : String[20]; Prijmeni : String[15]; Narozeni : Datum; Misto : String[25]; End; VAR Pracovnik : Osoba; Přístup k jednotlivým položkám proměnné typu záznam se provádí následovně: promenna-typu-zaznam. jmeno-polozky Například: writeln (Pracovnik.Jmeno); writeln (Pracovník.Misto); X:= Pracovník.Prijmeni;
Datový typ záznam napište program, který bude fungovat jako telefonní seznam např. 5 jmen osob a jejich telefonních čísel po spuštění bude uživatel vyzván, aby uvedl příjmení, jméno a telefonní číslo 5ti osob jméno, příjmení a telefonní číslo budou reprezentovány datovou strukturou záznam, jednotlivé záznamy vložíme do jednorozměrného pole program poté všechny osoby stelefonními čísly zobrazí na obrazovce
Datový typ záznam - program Program PraceSeZaznamem; Type Osoba = Record Prijmeni:String; Jmeno:String; Telefon:LongInt; end; Var Clovek:Array[1..5] of Osoba; I:Integer; Begin Writeln('Zadavej postupne jmena a telefonni cisla'); For I:=1 to 5 do Begin Writeln('Polozka c.', I); Write(' Zadej prijmeni ');Readln(Clovek[I].Prijmeni); Write(' Zadej jmeno ');Readln(Clovek[I].Jmeno); Write(' Zadej telefon ');Readln(Clovek[I].Telefon); Writeln; End; Writeln; Writeln('Vypis tefonniho seznamu:'); For I:=1 to 5 do Begin Write(I,'. ',Clovek[I].Prijmeni); Write(' ',Clovek[I].Jmeno); Writeln(' ',Clovek[I].Telefon); End; Readln; End.
Datový typ - množina strukturovaný datový typ množina se vytváří z prvků báze (základu), bázovým typem smí být pouze typ ordinální všechny možné kombinace prvků báze pak jsou hodnotami typu množina popis typu množina má tento obecný tvar: SET OF bázový typ; počet takových množin je: 2 n, kde n je počet prvků báze, v Pascalu může mít bázový typ maximálně 256 hodnot
Datový typ - množina Příklad množiny: type I = 1..3; {interval, ktery tvori bazi - zaklad mnoziny} mnozina = set of I; {typ mnozina s bazovym typem I} var m: mnozina; {promenna typu mnozina} j: I; pak proměnná jtypu Imůže nabývat hodnot: 1, 2 nebo 3, hodnotami proměnné m typu mnozina mohou být: [] prázdná množina [1],[2],[3] jednoprvkové množiny [1, 2], [2, 3], [1, 3] dvouprvkové množiny [1, 2, 3] tříprvková množina!!!!! Pozor: [1, 2] je totéž co [2, 1]!!!!!
Datový typ - množina konstrukce hodnoty typu množina (konstruktor množiny) spočívá ve výčtu množinových elementů, které jsou odděleny čárkami a uzavřeny do hranatých závorek elementy jsou dány výrazy bázového typu nebo ve tvaru n..m, který představuje množinu všech prvků i bázového typu takových, že n<=i<=m [] označuje prázdnou množinu Příklad: [],[i+j,i-j],[0..9],[1,3,5..9,45,89..87]!!! POZOR - zápis 89..87 je přípustný a obsahuje prázdnou množinu!!!
Datový typ - množina S hodnotami datového typu množina jsou přípustné tyto operace: 1) sjednocení množin a. předpisuje se operátorem + (plus) b. výsledkem sjednocení množin A + B je množina obsahující všechny prvky sjednocovaných množin 2) průnik množin a. předepisuje se operátorem * (krát) b. výsledkem průniku množin A * B je množina obsahující společné prvky obou množin 3) rozdíl množin a. předepisuje se operátorem (mínus) b. rozdílem množin A B je množina obsahující prvky množiny A, které nejsou obsaženy v množině B 4) relace a. A <= B množina A je podmnožinou (částí) množiny B b. A >= B množina B obsahuje množinu B (B je podmnožinou množiny A) c. A = B množina A je totožná s množinou B d. A <> B množina A není totožná s množinou B e. pro hodnotu X ordinálního typu a množinu A je definovárelace X in A, tj. X je prvkem množiny A
Datový typ - množina program Eratostenovo_sito; {urceni seznamu prvocisel bez pouziti nasobeni a deleni} uses crt; var sito, prvocisla: set of 1..255; i,dalsi, nasobek: word; begin clrscr; prvocisla:=[]; {inicializace promennych} sito:=[2..255]; dalsi:=2; repeat while not (dalsi in sito) do dalsi:=succ(dalsi); {moznost pridat dalsi prvocislo} prvocisla:=prvocisla+[dalsi]; {pridani prvocisla} nasobek:=dalsi; while nasobek <= 255 do {eliminace nasobku prvocisla} Begin sito:=sito - [nasobek]; nasobek:=nasobek + dalsi; end; until sito=[]; {opakovani dokud nebude sito prazdne} write('vypis prvocisel: '); for i:=1 to 255 do if i in prvocisla then write(i,' '); repeat until keypressed; End.
Zdroje: TurboPascal 6.0 - příručka uživatele (help) Literatura: Radek HYLMAR: Programování pro úplné začátečníky, Computer Press, Brno, 2009, ISBN 978-80-251-2129-0 Januš DRÓZD, Rudolf KRYL: Začínáme s programováním, GRADA a.s., Praha, 1992, ISBN 80-85424-41-X Tomáš HRUŠKA: Pascal pro začátečníky, SNTL, Praha 1989, ISBN 80-03-00345-8 Materiál je určen k bezplatnému používání pro potřeby výuky a vzdělávání na všech typech škol a školských zařízení. Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je : Jaromír Železný Pokud není uvedeno jinak, byly při tvorbě použity volně přístupné internetové zdroje. Autor souhlasí se sdílením vytvořených materiálů a jejich umístěním na www.ssstavji.cz.