Násobilka formátovaný tisk (2015)
Zadání: Napište program na tisk malé násobilky, tak aby
tvořila tabulku v níž stejné řády čísel budou pod sebou.
Funkce
main bude v souboru maintab.c,
funkce budou v souborech ftab.c
a ftab.h.
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
Začněte tak, že napíšete příslušné cykly a v nich společně
provedete výpočet hodnoty a tisk.
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.Vytvořte soubor pro
zdrojový kod (název maintab.c).
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činitelé a v tabulce bude jejich součin.
Tisk proveďte pomocí printf, který nastavíte tak, aby byla tabulka
zarovnaná do sloupců. 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ěte.
4. 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.
5. krok: zdrojové a hlavičkové soubory
vytvořte
nový soubor pro zdroje a nový soubor pro hlavičku (přípony c a h:
ftab.c a ftab.h). Do souboru c 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, typ FILE*), 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 , 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.
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). Vyzkoušejte.
Pozn.: 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.
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í.
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 „vytiskne“ do souboru vystup.txt tabulku násobilky.
Poslední změna 2018-02-19