Práce s ukazateli - dvourozměrné pole
Zadání
Napište základní funkce pro práci s dvourozměrnými poli/maticemi.
Pole realizujte jako dynamické. Dynamickým polem rozumíme pole,
které je definováno pomocí ukazatelů (pro dvourozměrné pole tedy TYP
**). Dynamické pole má možnost měnit svoji velikost za chodu
programu. Pole je realizováno pomocí ukazatelů a (fyzicky) je
vytvořené alokací paměti až za chodu programu (na rozdíl od
statického pole, které má dán pevný rozměr při překladu)). Dynamické
pole je nutné po použití odalokovat (vrátit použitou paměť
systému).
Funkce by měly na začátku obsahovat testy (jsou rozměry
smysluplné? (tj. Větší než nula). Jsou matice inicializovány?). Na
konci by funkce (které neprovedou co měly, nebo provádí odalokaci)
měly matice nastavit do stavu aby se s nimi dále
nepracovalo.
Postupně realizujte následující činnosti (napsat
funkci, vyzkoušet, po odladění pokračovat další funkcí).
Naalokování dvourozměrného pole (matice) s inicializací všech prvků na danou hodnotu (můžete zkusit více způsobů vracení - jako parametr, nebo návratová hodnota ...)
odalokování dvourozměrného pole (matice)
výpis (tisk) dvourozměrného pole (matice) na konzolu
součet odpovídajících si prvků matic (cij = aij + bij)
bude-li čas, lze zkusit transpozici matice a následně násobení matic a = b * bT
Výsledná struktura programu:
// vytvoření proměnných
// volání funkce tisk – nic se
netiskne
// volání funkce pro součet – nic se nestane
//
volání funkce pro alokaci
// volání funkce tisk
// volání
funkce pro součet
// volání funkce tisk
// volání funkce pro
odalokaci
// volání funkce tisk – nic se netiskne
Poznámky ke tvorbě programu:
Vytvořte projekt, ve kterém budou tři moduly. V prvním modulu bude funkce main, ve druhém modulu budou funkce pro manipulaci s polem a třetím bude modul check.cpp (do main vložte check.h). Funkce opět vytvářejte postupně – vyzkoušejte v main jako kód bez volání, následně jako funkci ve stejném modulu jako main a nakonec funkci přesuňte do jejího modulu.
Vytvořte proměnnou pro uložení
dvourozměrného pole. Rozměry pole zvolte 2(řádky)x4(sloupce).
(Postupně) napište funkci, která pro pole naalokujte paměť.
Prvky pole inicializujte na zvolenou hodnotu (touto hodnotou asi
bude nejčastěji nula. Pro účely ladění by ovšem bylo vhodnější
uložit například hodnotu 10*řádek+sloupec, ze které by bylo vidět
jestli jsme program napsali správně. Teprve po odladění přiřadit
celému poli zadanou hodnout – použít například podmíněný
překlad. Funkce tedy bude mít tři vstupní parametry – rozměry
pole a hodnotu pro inicializaci pole. Vytvořené pole je možné vrátit
pomocí návratové hodnoty, nebo pomocí (vhodného) čtvrtého parametru
ve volání.
Přeložte, spusťte a podívejte se co píše check.
Napište funkci pro odalokování
pole. Zkuste odalokovat pole před a po naalokování. Před
naalokováním by funkce neměla provést žádnou činnost. Funkce bude
mít dva vstupní parametry: (vhodnou) proměnnou pro předání pole a
počet řádků.
Přeložte, spusťte a podívejte se co píše check.
Napište funkci, která vytiskne obsah pole. Vyzkoušejte ji před i po odalokování. Po odalokování by neměla tisknout obsah pole. Funkce bude mít tři vstupní parametry: pole a jeho rozměry.
Napište funkci, která provede
součet dvou matic. Přidejte další proměnnou pro pole, pole
inicializujte hodnotou 5. Funkce bude mít šest vstupních hodnot: dvě
pole a jejich rozměry. Výsledné pole je opět možné předat buď pomocí
návratové hodnoty, nebo pomocí (vhodného) čtvrtého parametru ve
volání. Přeložte, spusťte a podívejte se co píše check.
Funkce by
měla otestovat, zda jsou matice „použitelné“ - tj.
existují a mají stejné rozměry.
Motivační ukázka realizace 2D pole v paměti
Poslední změna 2014-04-08