Stř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 jméno položky1: typ1; jméno položky2: typ2; ... jméno položkyN: typN; end;
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 s telefonní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: 2n, 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á j typu I můž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.