Násobilka formátovaný tisk



Motivace: Toto cvičení slouží k procvičení práce s překladačem MSVC++. Snažte se proto prozkoumat jeho možnosti (záložky, menu, nastavení ...). Z hlediska jazyka C dojde k procvičení formátovaných tisků, cyklů, předávání proměnných a volání funkcí. Program nejprve napište v souborech s příponou „c“. Po dokončení přeložte pro přípony „cpp“ (založit nový projekt, překopírovat (pouze soubory c a h), přejmenovat soubory (koncovky c na cpp), soubory vložit do projektu, přeložit ... ).



Zadání: Napište program na tisk malé násobilky.

Upřesnění zadání: Tisk tabulky realizujte tak, aby byly řádky i sloupce čísel zarovnány (stejný řád vždy pod sebou). Tabulka bude mít na prvním řádku a v prvním sloupci násobitele, v tabulce bude na křížení řádku a sloupce výsledek.

  T |  1  2  3  4 ...  10
---------------------------------------------------
  1 |  1  2  3  4 ...  10
  2 |  2  4  6  8 ...  20
. . .
 10 | 10 20 30 40 ... 100


V druhé části napište další část programu kdy v jednom místě naplníte proměnnou (vhodného typu) tabulkou a na jiném místě proběhne tisk (použijte dvourozměrné statické pole)
Ve třetí části proveďte úpravu předchozího kroku tak, aby plnění i tisk pole byly v samostatných funkcích (funkce pro naplnění tabulky a druhá funkce pro tisk). Funkce umístěte do jiného souboru než je funkce main.



Realizace zadání
0. krok: vytvoření projektu
Otevřete si prostředí MS VC++ a vytvořte nový projekt (file/new/projekt) konzolové aplikace (WIN32 console application). Nastavte vytvoření nového řešení (create new solution) a v případě, že ještě není připraven adresář, potom potvrďte jeho vytvoření. Zadává se jméno pro řešení, a jméno vytvářeného projektu. Jedno řešení (například cvičení z bppc) může sestávat z řady projektů (například cvičení 1, cvičení 2 .....). Pro další projekty se použije volba AddToSolution. Po potvrzení jmen souborů a adresářů nastavíme volby projektu (Application settings), kde stačí Konzolová aplikace a důležitá je volba EmptyProject. Po potvrzení můžeme začít tvořit projekt tím, že vytvoříme soubor pro zdrojový kod a začneme programovat. (zde)


1. krok: formátovaný tisk tabulky malé násobilky
naprogramujte vnořený cyklus (dva for-y v sobě - skripta 5.2.13.) a vytvořte tabulku malé násobilky tak, že první řádek a sloupec budou reprezentovat jednotliví součinitelé a v tabulce bude jejich součin. Tisk proveďte pomocí printf, který nastavíte tak, aby byla tabulka zarovnaná do sloupců (skripta 5.2.21). K tomu aby fungoval printf, bude potřebné includovat příslušnou knihovnu.

2. krok: přesměrování do souboru na příkazovém řádku
Vstup a výstup z/do souboru je možné v příkazovém řádku realizovat i snadněji, a to přesměrováním vstupu (výstupu) do souboru přímo při spouštění programu. Při volání z příkazového řádku je možné přesměrovat výstup do souboru následně “tabulka.exe > vystup.txt“ (kromě standardního výstupu existuje i chybový výstup stderr (obecně různý od standardního), který se přesměrovává “tabulka.exe 2> vystup.txt“). Textový výstup je potom realizován místo na konzolu (monitor) do souboru s uvedeným jménem. Pomocí následujícího příkazu “tabulka.exe >> vystup.txt“ je možné připojit novou informaci na konec existujícího souboru (bez ztráty původního obsahu souboru - append). Vstup ze souboru je možný pomocí “tabulka.exe < vstup.txt“.

Toho lze využít ke kontrole správnosti programu. Program provede určitou činnost, která bude mít výstup na konzolu, ta se přesměruje do souboru a tento soubor se porovná se souborem vzorovým. K porovnání je možné použít vlastní program (zkuste si ho napsat), nebo program „fc.exe“. Pro kontrolu může sloužit soubor „test.bat“ po jehož provedení se objeví rozdíly mezi výsledky našimi a vzorovými
tabulka.exe > vystup.txt
fc.exe vystup.txt vzor.txt

3. krok: předávání parametrů v rámci jedné funkce
vytvořte další dva cykly (například kopírováním již vytvořeného kódu) a pomocnou proměnnou pro předání parametrů mezi nimi (statické dvourozměrné pole). Pole v prvním cyklu naplňte a ve druhém vytiskněnte.


4. krok: tvorba funkcí a předávání parametrů
vytvořte dvě funkce (Napln a Tiskni), vyzkoušejte jejich volání (kapitola 5.2.8. a 5.2.17). Následně do nich přeneste příslušné cykly z minulého kroku a zvolte parametry funkcí (ne globální proměnné) tak, aby program pracoval stejně jako v kroku 2.


5. krok: zdrojové a hlavičkové soubory
vytvořte nový soubor pro zdroje a nový soubor pro hlavičku (přípony c/cpp a h). Do souboru c/cpp přeneste funkce Napln a Tiskni. Hlavičkový soubor naincludujte v c/cpp souboru s main. Hlavičkový soubor napište tak, aby program fungoval jako v předchozích krocích. Nezapomeňte ošetřit hlavičku proti vícenásobnému načtení (kapitola 5.2.9.skript, možno vidět při otevření standardních hlavičkových souborů).


6. krok: tisk do souboru
Napište funkci, která uloží tištěné pole do souboru. Funkce dostane jako jeden z parametrů informaci o výstupním souboru (handler), do kterého se bude ukládat tabulka. Handler nese informaci o otevřeném souboru, chyby spojené s otevřením je výhodnější řešit v hlavní funkci. Jméno souboru zadejte pomocí direktivy #define (kapitola 5.2.9), která umožní, že se název souboru bude moci měnit mimo vlastní volání (nadefinováno bude na začátku souboru, použito může být na několika místech níže v kódu). Tisk je modifikací standardního tisku na konzolu, pouze je nutné otevřít soubor do kterého se bude tisknout. Použít funkci pro tisk do souboru fprintf (kapitola 5.2.23). Nesmí se zapomenout na zavření otevřeného souboru, protože několikanásobným voláním funkce bez uzavření bychom mohli vyčerpat počet otevřených souborů, jak ho povoluje systém. Pro kontrolu lze použít programy testování přidělení zdrojů – například checker uvedený sekci literatura.
Touto funkcí je možné tisknout také na konzolu (monitor), který má předdefinovaný (otevřený) kanál, který je možné použít (tento kanál ovšem nesmíme po použití zavřít) (5.2.23). Vyzkoušejte.


7. krok: název souboru jako parametr programu
Abychom mohli ukládat data do souboru, musí být známo jeho jméno. Zadání tohoto jména přímo do programu není příliš vhodné (název je konstanta, jméno souboru stále stejné). Proto využijeme možnosti předat název tohoto souboru do programu jako jeho parametr (z příkazové řádky) – který se stane parametrem funkce main (5.2.25). V tomto případě je nutné provést kontrolu, zda byl parametr skutečně zadán. Parametry je (pro případ ladění) možné zadat přímo v prostředí (zde).

Spolu s názvem výstupního souboru můžeme například zadat i počáteční hodnoty od nichž se bude tabulka s rozměry 10 sloupců krát 10 řádků tisknout. Například tabulka.exe vystup.txt 100 200 „vytiskne“ do souboru vystup.txt tabulku násobků od 100x200 do 109x209.

Testovací bat soubor může mít i více řádků a mohl by vypadat třeba takto (vyzkouší i různé „ nepříjemné“ parametry)

tabulka.exe vystup.txt 0 0
fc.exe vystup.txt vzor00.txt

tabulka.exe vystup.txt 1 1
fc.exe vystup.txt vzor11.txt

tabulka.exe vystup.txt 10 -10
fc.exe vystup.txt vzor10m10.txt

tabulka.exe vystup.txt -10 10
fc.exe vystup.txt vzorm10m10.txt

tabulka.exe vystup.txt 100 100
fc.exe vystup.txt vzor100100.txt

atd.



Vzorové soubory si můžete vytvořit z následujícího souboru















Poslední změna 2011-09-19