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

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

  • Upload
    moeshe

  • View
    41

  • Download
    2

Embed Size (px)

DESCRIPTION

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í. - PowerPoint PPT Presentation

Citation preview

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

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

RNDr. Hana Havelková

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

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í

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

Deklarace záznamu

record

seznam položek

end

seznam položek

pevná část

proměnná část; ;

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

Pevná část záznamu

pevná část

seznam identifikátorů

;

: typ

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

Proměnná část záznamu

proměnná část

case

identifikátor

typ of varianta

varianta

,

konstanta seznam položek( ):

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

Příklady

typeTDatum = record

den : 1..31;mesic : 1..12;rok : word;

end;

TAdresa = recordulice : string [20];cislo : string [10];mesto: string [25];psc : string [5];

end;

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

Příklady

typeTCas = record

hod : 0..24;min : 0..60;sec : 0..60;

end;

TZak = recordtrida : string [4];cislo : byte;jmeno : string [15];prijmeni : string [20];

end;

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

Přístup k jednotlivým položkám

pomocí tečky

identifikátor proměnné . identifikátor proměnné

vardatum : TDatum ;

beginWrite('Zadej den: '); ReadLn (datum.den);Write('Zadej mesic: '); ReadLn (datum.mesic);Write('Zadej rok: '); ReadLn (datum.rok);……

end.

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

Přístup k položkám záznamu (.)

varpracovnik : record

jmeno, prijmeni : string[15];datnar : TDatum;adresa : TAdresa; end;

beginWrite('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.

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

Přístup pomocí příkazu with

with proměnná záznamového typu do

,

vardatum : TDatum;

beginWriteLn('Zadání data');with datum do begin

Write('Zadej den: '); ReadLn (den);Write('Zadej mesic: '); ReadLn (mesic);Write('Zadej rok: '); ReadLn (rok);

end;…end.

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

Přístup pomocí with

vartermin : record

datum : TDatum;cas : TCas;

end;begin

WriteLn('Stanovený termín:');with termin do begin

with datum do beginWrite('den, mesic, rok: ');ReadLn (den, mesic, rok);

end;with cas do begin

Write('hod, minuta, sekunda: ');ReadLn (hod, min, sec);

end;end;

……

end.

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

Záznam obsahující pole

typeTZnamka = 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.

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

Pole záznamů

typeTZbozi = 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 beginWrite('Nazev: '); ReadLn(nazev);Write('Jednotka: '); ReadLn(jednotka);Write('Jednotkova cena: '); ReadLn(cena_j);

end;…

end.

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

Pole záznamů obsahujících pole

typeTBody = 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íka Zavodnici[3].jmenobody 5. závodníkaza umělecký dojem Zavodnici[5].umelecky_dojem[1]

Zavodnici[5].umelecky_dojem[2]Zavodnici[5].umelecky_dojem[3]…

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

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;

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

Variantní záznam

typeTOsoba = 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;

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

Typové konstanty

typeTZavod = 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));

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

Systémové záznamové typy

DateTime (DOS) Registers (DOS) SearchRec (DOS) PalleteType (GRAPH) PointType (GRAPH) ViewPortType (GRAPH) …

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

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;

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

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;

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

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;

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

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 !!!

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

Zlomky - krácení

typeTZlomek = 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;

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

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;

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

Převod času zadaného v sekundách

typeTCas = record

hod : word;min : byte;sec : byte;

end;procedure Sec_HMS (s : word; var cas : TCas);begin

with cas do beginhod := s div 3600; s := s mod 3600;min := s div 60; s := s mod 60;sec := s;

end;end;