Umíte pascalsky - 15.lekce ... |
Umíte pascalsky? 15.lekce |
Vytisknout |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Vícerozměrné pole Složky pole mohou být rovněž typu pole, tím dostáváme typ pole polí nebo-li vícerozměrné pole. Příklad: Matici ![]() Typ dvojrozměrné pole lze deklarovat takto: type <jméno> = array [ typ_index1 ] of array [ typ_index2 ] of <typ složek> zkráceně: type <jméno> = array [ typ_index1 , typ_index2 ] of <typ složek> Chceme-li v programu pracovat s maticí typu RxS (R řádků a S sloupců) , zavedeme typ TMatice jako dvojrozměrné pole celých čísel: type TMatice = array [ 1..R , 1..S ] of integer; Proměnné typu dvojrozměrné pole deklarujeme obvyklým způsobem: var <jméno> : <název typu>; tedy proměnnou A,B typu TMatice deklarujeme takto: var A,B : TMatice; Přístup ke složkám vícerozměrného pole se provádí pomocí indexů (indexované proměnné). ![]() proměnná A ... celá matice (dvojrozměrné pole) A[i] ... i-tý řádek matice A - jednorozměrné pole typu array[1..s] of integer; A[i,j] ... prvek matice A v i-tém řádku a j-tém sloupci Zápisům A[i] , A[i,j] říkáme indexovaná proměnná. Hodnoty proměnných (typu dvojrozměrné pole) se definují a mění stejně jako jednorozměrného pole buď postupně, po složkách: Např.: A[1,1] := 2 ; A[1,2] := 5 ; atd nebo najednou pro celou proměnnou (resp.část): Např.: 1. Vynulování matice A - vynulujeme první řádek for ktery:=1 to s do A[1,ktery]:=0; - přiřadíme ostatním řádkům for ktery:=2 to r do A[ktery] := A[1]; 2. Výměna dvou řádků matice potřebujeme pomocnou proměnnou stejného typu jako řádek matice - nejdřív zavedeme typ řádků a potom pomocí něho typ celé matice type TRadek = array[1..s] of integer; TMatice = array[1..R] of TRadek; var A,B : TMatice; Pom : TRadek; ... pouze pro řádky !!! Potom výměnu i-tého a j-tého řádku matice můžeme zapsat takto: Pom := A[i]; A[i] := A[j] ; A[j] := Pom; 3. Přiřazení matice matici A := B ; (pokud je již matice B definována). Příklad: Sestavte program Zmena_Matice, který načte matici zadaného typu RxS a potom najde největší a nejmenší prvek mezi prvky matice a tyto prvky vymění. Myšlenka (hrubý algoritmus): <zadání typu matice a načtení prvků> ... Nacti_Matici ... opakujeme načítání řádků matice - první (vnější) cyklus ...... v řádku načítáme prvky po sloupcích - druhý (vnitřní) cyklus ! dvojrozměrné pole (matici) projdeme pomocí dvou cyklů ! <nalezení maxima a minima matice> ... Najdi ... opět pomocí dvojice cyklů, pamatovat i jejich posice <výměna maxima a minima matice> ... Vymena <tisk obou původní a změněné matice> ... Tisk Program Zmena_Matice může vypadat takto:
Proměnné typu pole lze požít jako parametry v procedurách i funkcích. Ukážeme si to na následujícím příkladě. Příklad2: Přepište proceduru Tisk jako proceduru s parametrem, aby umožnila vytištění jak původní matice B tak i změněné A.
Hlavní program se potom změní takto:
Domácí úkol: Sestavte program Transpo_Matice, který načte matici zadaného typu RxS a vytiskne matici transponovanou - řádky vyměněné za sloupce a naopak. 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. |