Formátovaný vstup dat



Procvičení načítání formátovaných dat, volání funkcí, předávání parametrů, 2D pole.



Zadání:

Napište program, který zobrazí data načtená ze souboru na disku. Jméno souboru s daty je předáno jako parametr příkazové řádky programu. Data se nacházejí v souboru ascii1.out nebo ascii2.out a jejich formát je následující:

(int_x_souřadnice,int_y_souřadnice)=uchar_hexa_hodnota

V souboru jsou uvedeny souřadnice ve čtvercové síti (bod 0,0 je vlevo nahoře) a hodnoty na daných souřadnicích ležící. Hodnoty reprezentují ASCII hodnoty znaků. Na pozicích, které nejsou v souboru uvedeny je znak mezera.

Příklad:
(0,10)=0x41
V prvním (0-tém) sloupci a jedenáctém (10-tém) řádku je umístěn znak s hexadecimální hodnotou 41 tj. znak 'A'

Projekt vypracujte v jediném zdrojovém souboru mainascii.c.



0. krok: Založte si nový projekt. (Příklad vychází koncepčně z předchozího, naplnění pole je ovšem ze souboru).


1. krok: Parametrem programu (funkce main 5.2.25) je název souboru s daty. Proveďte kontrolu přítomnosti názvu souboru v parametrech funkce main, soubor otevřete (zkontrolujte zda k otevření došlo) a zavřete. Při následném rozšiřování programu o další funkce, by k uvolnění zdrojů (zavření souboru, odalokování paměti ...) mělo dojít co nejdříve.


2. krok: Data ze souboru načtěte ve funkci do dvourozměrného pole typu char, které bude nadefinováno ve funkci main a bude parametrem funkce. Předpokládejte, že maximální rozměr pole může být 79x60 znaku. (Funkce bude mít jako parametry (otevřený) soubor, rozměry pole, vlastní pole). Použijte formátované načítání fscanf (5.2.21). Výsledné pole je obdélníkové s větším rozměrem sloupců než řádků.


3. krok: Napište funkci, která načtená data vytiskne na obrazovku jako ASCII znaky, tak aby vznikl grafický obrazec daných rozměrů. Pole bude předáno jako parametr funkce, společně se svými rozměry. Zjistěte si, kolik znaků je možné vytisknout na řádek (pokud vytisknete znak na poslední místo v řádku monitoru, může dojít k automatickému pokračování na dalším řádku (je tedy lépe tisknout o znak méně a přechod na nový řádek zajistit pomocí vyslaného kódu).



4. krok: Dvourozměrné pole nadefinované ve funkci je uloženo na zásobníku a zabírá lineární paměťový prostor. Napište funkci, která bude provádět stejnou činnost jako funkce v kroku 3, ale funkce bude mít jako parametry rozměry pole a pole bude předáno pouze jako ukazatel na první prvek pole (tj. TYP *pole). K prvkům v dvourozměrném poli se tedy bude přistupovat pomocí jednoho indexu.

















Poslední úpravy 2016-03-31