Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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

Podobné prezentace


Prezentace na téma: "Programování v Pascalu Přednáška 8 RNDr. Hana Havelková."— Transkript prezentace:

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 Deklarace záznamu record seznam položek end seznam položek pevná část proměnná část ;;

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

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

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é. 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 Přístup pomocí příkazu with withproměnná záznamového typudo, 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.

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 do begin 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] do begin 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] of real; 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íkaZavodnici[3].jmeno body 5. závodníka za umělecký dojemZavodnici[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 : char of '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 case Integer 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] of Shortint; 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 do begin hod := s div 3600; s := s mod 3600; min := s div 60; s := s mod 60; sec := s; end;


Stáhnout ppt "Programování v Pascalu Přednáška 8 RNDr. Hana Havelková."

Podobné prezentace


Reklamy Google