1 / 25

Programování v Pascalu Přednáška 8

Programování v Pascalu Přednáška 8. RNDr. Hana Havelková. Typ záznam. Deklarace Přístup k položkám záznamu, příkaz with Záznam obsahující záznamy Záznam obsahující pole Pole záznamů Variantní typy Typové konstanty Vybrané systémové záznamy Záznamy jako parametry procedur a funkcí.

moeshe
Download Presentation

Programování v Pascalu Přednáška 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programování v Pascalu Přednáška 8 RNDr. Hana Havelková

  2. Typ záznam • Deklarace • Přístup k položkám záznamu, příkaz with • Záznam obsahující záznamy • Záznam obsahující pole • Pole záznamů • Variantní typy • Typové konstanty • Vybrané systémové záznamy • Záznamy jako parametry procedur a funkcí

  3. record end seznam položek pevná část ; ; proměnná část Deklarace záznamu seznam položek

  4. Pevná část záznamu pevná část : typ seznam identifikátorů ;

  5. case typ varianta of identifikátor : ( ) konstanta seznam položek , Proměnná část záznamu proměnná část varianta

  6. Příklady type TDatum = record den : 1..31; mesic : 1..12; rok : word; end; TAdresa = record ulice : string[20]; cislo : string[10]; mesto : string[25]; psc : string[5]; end;

  7. Příklady type TCas = record hod : 0..24; min : 0..60; sec : 0..60; end; TZak = record trida : string[4]; cislo : byte; jmeno : string[15]; prijmeni : string[20]; end;

  8. Přístup k jednotlivým položkám pomocí tečky . identifikátor proměnné identifikátor proměnné var datum : TDatum ; begin Write('Zadej den: '); ReadLn (datum.den); Write('Zadej mesic: '); ReadLn (datum.mesic); Write('Zadej rok: '); ReadLn (datum.rok); … … end.

  9. Přístup k položkám záznamu (.) var pracovnik : record jmeno, prijmeni : string[15]; datnar : TDatum; adresa : TAdresa; end; begin Write('Zadej jmeno'); ReadLn(pracovnik.jmeno); Write('Zadej prijmeni'); ReadLn(pracovnik.prijmeni); Write('Zadávej postupně datum narozeni (den, mesic, rok)'); ReadLn(pracovnik.datnar.den, pracovnik.datnar.mesic, pracovnik.datnar.rok); WriteLn('Zadej adresu'); Write('Ulice: '); ReadLn(pracovnik.adresa.ulice); Write('Číslo: ');ReadLn(pracovnik.adresa.cislo); Write('Město: '); ReadLn(pracovnik.adresa.mesto); Write('PSČ: ');ReadLn(pracovnik.adresa.psc); … end.

  10. with proměnná záznamového typu do , Přístup pomocí příkazuwith var datum : TDatum; begin WriteLn('Zadání data'); with datum do begin Write('Zadej den: '); ReadLn (den); Write('Zadej mesic: '); ReadLn (mesic); Write('Zadej rok: '); ReadLn (rok); end; … end.

  11. Přístup pomocí with var termin : record datum : TDatum; cas : TCas; end; begin WriteLn('Stanovený termín:'); with termin do begin with datum do begin Write('den, mesic, rok: '); ReadLn (den, mesic, rok); end; with cas do begin Write('hod, minuta, sekunda: '); ReadLn (hod, min, sec); end; end; … … end.

  12. Záznam obsahující pole type TZnamka = 0..5; TZnamky = array [1..15] of TZnamka; TZak = record cislo : byte; jmeno : string[30]; znamky : TZnamky; end; var Zak : TZak; pocet, i : 1..15; begin {pristup pomoci tecky} Write('Počet predmetu (znamek) – max 15'); ReadLn(pocet); Write('Cislo zaka: '); ReadLn(Zak.cislo); Write('Prijmeni a jmeno zaka: '); ReadLn(Zak.jmeno); for i := 1 to pocet dobegin Write(i, '. znamka: '); ReadLn(Zak.znamky[i]); end; … end.

  13. Pole záznamů type TZbozi = record nazev : string [40]; jednotka : string [2]; cena_j : real; end; var Zbozi : array [1..200] of TZbozi; pocet : byte; begin {pristup pomoci with} Write('Počet položek (zboží) – max 200'); ReadLn(pocet); for i := 1 to pocet do with Zbozi[i] dobegin Write('Nazev: '); ReadLn(nazev); Write('Jednotka: '); ReadLn(jednotka); Write('Jednotkova cena: '); ReadLn(cena_j); end; … end.

  14. Pole záznamů obsahujících pole type TBody = array [1..10] ofreal; TZavodnik = record start_cislo : byte; jmeno : string [30]; stat : string [3]; umelecky_dojem : TBody; technicka_hodnota : TBody; end; var Zavodnici : array [1..100] of TZavodnik; jméno 3. závodníka Zavodnici[3].jmeno body 5. závodníka za umělecký dojem Zavodnici[5].umelecky_dojem[1] Zavodnici[5].umelecky_dojem[2] Zavodnici[5].umelecky_dojem[3] …

  15. Variantní záznam type TDoprava = (Mistni, Dojizdejici, Internatni); Zak = record trida : string [3]; Jmeno : string [30]; case Doprava : TDoprava of Mistni : (delka : real); Dojizdejici : (druh : char; delka : real); Internatni : (pokoj: byte; cena : real); end;

  16. Variantní záznam type TOsoba = record Jmeno : string [30]; Vek : byte; Vyska : byte; Vlasy : string [30]; case Pohlavi : charof 'M' : (plnovous, knir : boolean); 'Z' : (prsa, pas, boky : byte); end;

  17. Typové konstanty type TZavod = record misto : string[50]; datum : TDatum; start :TCas; end; const ADRESA : TAdresa = (ulice:'Jeronymova';cislo:'10';mesto:'CB'); ZACATEK : TCas = (hod:9;min:0;sec:0); KONEC : TCas = (hod:11;min:59;sec:59); ZAVOD : TZavod = ( misto:'Praha'; datum:(den:12;mesic:12;rok:2008); start:(hod:14;min:14;sec:14));

  18. Systémové záznamové typy • DateTime (DOS) • Registers (DOS) • SearchRec (DOS) • PalleteType (GRAPH) • PointType (GRAPH) • ViewPortType (GRAPH) • …

  19. Datový typ DateTime, Registers type DateTime = record Year,Month,Day: Word; Hour,Min,Sec: Word; end; Registers = record caseInteger of 0: (AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags: Word); 1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte); end;

  20. Datový typ SearchRec type { záznam použitý v rutině FindFirst a FindNext } { vyhledávání souborů v adresáři } SearchRec = record Fill: array [1..21] of Byte; Attr: Byte; Time: Longint; Size: Longint; Name: string [12]; end;

  21. Ukázky datových typů jednotky GRAPH const MaxColors = 15; type PaletteType = record Size : Byte; Colors : array [0..MaxColors] ofShortint; end; PointType = record X, Y : integer; end; ViewPortType = record x1, y1, x2, y2 : integer; Clip : Boolean; end;

  22. Záznam jako parametr procedur a funkcí • vstupní parametr (volání hodnotou) • formální a skutečný parametr by měly být shodné typy • výstupní parametr (volání odkazem) • používáme pokud • chceme načíst záznam v podprogramu • chceme změnit hodnoty položek záznamu • chceme výsledek výpočtů podprogramu uložit do proměnné typu záznam event. uložit více výsledků • u formálního parametru musíme použít var • formální a skutečný parametr by měly být shodné typy • funkce nesmí vracet typ záznam !!!

  23. Zlomky - krácení type TZlomek = record citatel : integer; jmenovatel : word; end; {predpokladame existenci funkce NSD - nejvetsi spolecny delitel} procedure Kraceni (var z : TZlomek); var delitel : word; begin delitel := NSD(z.citatel, z.jmenovatel); z.citatel := z.citatel div delitel; z.jmenovatel := z.jmenovatel div delitel; end;

  24. Zlomky procedure Soucet (z1, z2 : TZlomek; var s : TZlomek); begin Kraceni(z1); Kraceni(z2) ; s.citatel := z1.citatel*z2.jmenovatel + z1.jmenovatel*z2.citatel ; s.jmenovatel := z1.jmenovatel * z2.jmenovatel ; Kraceni(s) ; end;

  25. Převod času zadaného v sekundách type TCas = record hod : word; min : byte; sec : byte; end; procedure Sec_HMS(s : word; var cas : TCas); begin with cas dobegin hod := s div 3600; s := s mod 3600; min := s div 60; s := s mod 60; sec := s; end; end;

More Related