Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
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 ; seznam položek record seznam položek end
pevná část proměnná část ;
4
seznam identifikátorů
Pevná část záznamu pevná část seznam identifikátorů : typ ;
5
Proměnná část záznamu , ( ) : proměnná část varianta case
identifikátor typ of varianta varianta , konstanta seznam 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];
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];
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
Přístup pomocí příkazu with
proměnná záznamového typu do , 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); with cas do begin Write('hod, minuta, sekunda: '); ReadLn (hod, min, sec); … 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.
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.
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í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 : 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);
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; ViewPortType = record x1, y1, x2, y2 : integer; Clip : Boolean;
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 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;
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;
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.