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“ (asi nejlépe překopírovat a založit nový projekt).
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.
1. krok: formátovaný tisk tabulky malé
násobilky
naprogramujte vnořený cyklus (dva for-y v sobě)
a vytvořte tabulku malé násobilky tak, že první řádek a sloupec budou
reprezentovat jednotliví součitnitelé a v tabulce bude jejich součin.
Tisk proveďte pomocí printf, který nastavíte tak, aby byla tabulka
zarovnaná do sloupců (skripta stránka 210). K tomu aby fungoval
printf, bude potřebné includovat příslušnou knihovnu.
2. 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.
3. krok: tvorba funkcí a předávání parametrů
vytvořte
dvě funkce (Napln a Tiskni), vyzkoušejte jejich volání. 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.
4. krok: zdrojové a hlavičkové soubory
vytvořte
nový soubor pro zdroje a nový soubor pro hlavičku (přípony cpp a h).
Do souboru cpp přeneste funkce Napln a Tiskni. Hlavičkový soubor
naincludujte v 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.str 181 (185)
skript, možno vidět při otevření standardních hlavičkových souborů).
5. 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 (str. 182), 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 (str.215). 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) (str.216). Vyzkoušejte.
6. krok: název souboru jako parametr programu
Zadání
jména souboru, do kterého se bude pole ukládat, přímo do programu
(=konstanta) není příliš vhodné. 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 (str. 220). 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).
7. 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“.
Poslední změna 2010-09-27