Umíte pascalsky - 21.lekce ... |
Umíte pascalsky? 21.lekce |
Vytisknout |
|||||||||||||||||||||||||||||||||||||||||||||||||||
Datový typ záznam (record) Velmi často potřebujeme do proměnné uložit údaje různé povahy. Např. při zpracování výsledků sportovních závodů budeme u závodníka sledovat jméno řetězec) , startovní číslo a čas (číslo) případně další data. To nám pole neumožní, ale záznam ano. Záznam (record) je nehomogenní datová struktura skládající se z určitého počtu pojmenovaných složek, které mohou být různého typu a nazýváme je položkami záznamu. Datový typ záznam deklarujeme takto: type <název> = record selektor_1: typ_1; selektor_2: typ_2; ... selektor_n: typ_n; end; Tedy například typ proměnné pro uložení dat o závodníkovi bychom mohli deklarovat následovně: type TZavodnik = record cislo: 1..100; jmeno: string[30]; cas: real; end; Proměnou typu záznam deklarujeme běžným způsobem : var Zavodnik, Ten_zavodnik : TZavodnik; S každou proměnnou typu záznam můžeme pracovat buď jako s celkem nebo s její položkou. V proměnné Zavodnik ... jsou uloženy všechny položky závodníka (číslo, jméno, čas) Pokud chceme pracovat pouze s určitou položkou (složkou) záznamu, píšeme název položky (selektoru) za název proměnné a oddělujeme tečkou. Zavodnik.cislo ... startovní číslo závodníka Zavodnik.jmeno ... jméno závodníka Zavodnik.cas ... čas závodníka Hodnoty proměnných typu záznam se definují a mění buď a) postupně tak, že se přiřazují hodnoty jednotlivým položkám (složkám): Například: Zavodnik.cislo:=5; Zavodnik.jmeno:='Novák'; Zavodnik.cas:=10,5; nebo najednou celé proměnné: Ten_zavodnik:=Zavodnik; pokud jsou proměnné Zavodnik a Ten_zavodnik téhož typu (deklarovaná ve stejné deklaraci) a proměnná Zavodnik je již definovaná. Proměnných typu záznam lze použít jako parametrů procedur a funkcí. Příklad: Sestavte program Zavody pro vyhodnocení sportovnich závodů. Vstupovat bude trojice tvaru startovní číslo, jméno a dosažený čas. Po každém vstupu (číslo, jméno, čas) se napíše tabulka se záhlavím: pořadí start.číslo jméno čas ----------------------------------------------------- kde jsou závodníci uspořádáni podle dosažených časů. Údaje o jednom závodníkovi budeme ukládat do proměnné typu TZavodnik (jak jsme již vysvětlili na začátku lekce). Tyto jednotlivé závodníky potom budeme ukládat do proměnné typu TZavodnici, což bude pole o složkách typu TZavodnik. Typ TZavodnici deklarujeme tedy takto: type TZavodnici = array[1..100] of TZavodnik; A uvedenou proměnnou pro údaje všech závodníků deklarujeme: var Zavodnici : TZavodnici; Připomeńme si ještě význam jednotlivých složek strukturované proměnné Zavodnici: proměnné Zavodnici ................... představuje všechny údaje o všech závodnících složka Zavodnici[ktery] ............... všechny údaje jednoho závodníka s indexem ktery složka Zavodnici[ktery].cislo ..... startovní číslo jednoho závodníka s indexem ktery Abychom nemuseli při práci s položkami záznamu Zavodnik psát Zavodnik.cislo, Zavodnik.jmeno, Zavodnik.cas, můžeme použít zkráceného zápisu pomocí příkazu with, který má tvar: with <záznam> do <příkaz> Uvnitř příkazu můžeme označovat položky proměnné typu záznam pouze uvedením selektoru. Tak například with Zavodnici[Ktery] do begin cislo:=2; jmeno:='Novak'; cas:=2,89; end Tento příkaz zjednodušuje zápisy a urychluje zpracování záznamů, protože se přístup k proměnné typu záznam provádí pouze jednou. A teď k programu. Situaci lze přiblížit obrázkem: Kostru programu si opět zapíšeme. Myšlenka (hrubý algoritmus): <dokud nechceš skončit opakuj následující činnost - načti údaje závodníka - najdi místo (index Tam), kam se má Ktery závodník zařadit (vsunout) podle času - posuň následující závodníky o jedno místo dozadu - vlož závodníka Ktery na místo Tam - napiš tabulku závodníků> Jedná se tedy o modifikaci algoritmu InsertSort - zatřiďování podle času (bez vnějšího cyklu for - zatřiďujeme pouze jednoho, aktuálního závodníka). Program Zavody může vypadat takto:
Domácí úkol: Sestavte program Trida, který umožňuje zadat údaje žáků třídy - jméno, příjmení, hmotnost a výšku a potom žáky seřadit podle příjmení, vyhledat žáka se zadanou výškou a zjistit průměrnou hmotnost žáků. Řešte užitím procedur s parametry. On-line účast na řešení úkolu Pomocí volby Řešit můžete (po přihlášení) odeslat vaše řešení domácího úkolu (každý úkol smíte řešit jen jednou). Volbou Hodnocení si přečtete hodnocení a komentář od vyučujícího. Dotaz nebo připomínku můžete opakovaně zasílat pomocí tlačítka Dotazy, Komunikace (na levém okraji) zobrazuje příklad možné komunikace s vyučujícím. |