[Cvičení 4] [Obsah] [Cvičení 6]

Cvičení 5


Úloha 5.1

Napište program, který vypočítá obsah a obvod obdélníka. Vyzve uživatele k zadání dvou stran obdélníka a vypíše výsledky. Zaměřte se na ladění programu - krokování, výpis proměnných (watches) a nastavování breakpointů.

Řešení:

CodeBlocks:obsah.cbp, obsah.c


Úloha 5.2

Doplňte pomocí podmíněného překladu program pro výpočet nejmenšího společného násobku nsn tak, aby bylo možné vytvořit dvě jazykové verze - anglickou a českou.
CodeBlocks:nsn.cbp, nsn.c
Návod: definujte symbolickou konstantu #define ENGLISH a pomocí podmíněného překladu vložte dvě verze tisku hlášení na obrazovku pomocí printf.

Vyzkoušejte pouze fázi preprocesingu pomocí přepínače -E, tj. spusťte z příkazové řádky překladač s parametrem -E: gcc nsn.c -E. Na obrazovce se vypíše zdrojový text po preprocesingu. Pro přesměrování výpisu do souboru spusťte překladač takto: gcc nsn.c -E > prelozeny.c. V souboru prelozeny.c bude uložen výstup.

Řešení:

 CodeBlocks:nsn1.cbp, nsn1.c
 CodeBlocks:nsn2.cbp, nsn2.c


Úloha 5.3

Upravte program pro výpočet obsahu obdélníka z úlohy 5.1 , aby se při chybném zadání stran program cyklicky dožadoval opětovného zadání.
Poznámka: Při chybném zadání zůstanou ve vyrovnávací paměti (bufferu) standardního vstupu (klávesnice) nepřečtené znaky. Funkce scanf při dalším průchodu tyto znaky opět interpretuje jako chybné zadání a cyklus čtení probíhá nekonečně dlouho. Proto je po chybném zadání nutné přečíst zbylé znaky ve vyrovnávací paměti. Protože je poslední znak Enter ('\n'), vyprázdníme vyrovnávací paměť tímto cyklem: while(getchar()!='\n');. Středník má zde význam prázdného příkazu.

Řešení:

CodeBlocks:obsah2.cbp, obsah2.c

Úloha 5.4

Napište program, který čte posloupnost celých čísel ukončených nulou. Pak vypíše, kolil bylo čísel na vstupu, kolik bylo čísel v intervalu 3 .. 10 (včetně hranic) a dále vypíše nejmenší číslo. Ukončující nula se mezi hodnoty posloupnosti již nepočítá.

Příklad vstupu:
2 -1 3 5 20 0

Příklad výstupu:
Pocet cisel celkem je: 5
Pocet hodnot mezi 3 az 10: 2
Nejmensi cislo: -1
Návod: použijte cyklus while, k načítání hodnot využijte funkci scanf.

Řešení:

CodeBlocks:posloupnost.cbp, posloupnost.c

Úloha 5.5

Napište program, který načte z klávesnice dvě přirozená čísla a a b. Zkontroluje, zda je a menší než b, pokud ne, hodnoty proměnných prohodí. Program vypíše všechna sudá čísla mezi a a b včetně těchto čísel, jsou-li samozřejmě sudá.
(Návod: Cyklus začněte provádět od hodnoty a, je-li sudá, nebo od hodnoty a+1, je-li lichá. Řídicí proměnnou cyklu zvyšujte o 2. Pro inicializaci řídicí proměnné cyklu použijte podmíněný výraz.)

Polotovar:

CodeBlocks:suda.cbp, suda.c
Řešení:
CodeBlocks:suda.cbp, suda.c

Úloha 5.6

Napište program, který počítá obsah a obvod obdélníka. Na obrazovku vypíše jednoduché menu o čtyřech položkách
1 ... Zadání stran
2 ... Obsah
3 ... Obvod
4 ... Konec
Velikosti stran uchovávejte po zadání ve dvou proměnných. Číslo varianty načtěte do proměnné typu int pomocí funkce scanf, výpočet větvete pomocí příkazu switch.

Polotovar:

CodeBlocks:obdelnik.cbp, obdelnik.c
Řešení:
CodeBlocks:obdelnik.cbp, obdelnik.c

Úloha 5.7

Přepište program pro výpočet nejmenšího společného násobku s využitím proudů cin, cout.

Konzolový vstup/výstup:CodeBlocks:nasobek.cbp, nasobek.cpp

Poznámka: Správnost zadání vstupních hodnot otestujte pomocí metody fail volanou nad streamem cin.

cin >> a;
if (cin.fail())
{
  cerr << "Chybová hláška";
  return -1;
}

Řešení: vstup/výstup pomocí proudů: CodeBlocks:nsn3.cbp, nsn3.cpp


[Cvičení 4] [Obsah] [Cvičení 6]