[Cvičení 3] [Obsah] [Cvičení 5]

Cvičení 4


Ukázka výpisu adres:

Napíšeme program, který vypíše na obrazovku adresy paměti, kde jsou umístěny jednotlivé položky jednak statického, jednak dynamického pole.

Řešení:

Dev C++:adresy.dev, adresy.c
CodeBlocks:adresy.cbp, adresy.c


Úloha 4.1

Napište dvě funkce pro převod úhlu zadaného ve stupních na radiány a naopak. Přepište je také jako procedury s výstupními proměnnými.
Funkce a procedury napište nejprve do jednoho souboru se zdrojovým kódem, potom si vyzkoušejte tvorbu vlastní knihovny a hlavičkového souboru (stačí pouze pro funkce).

Postup, jak vytvořit v překladači Dev C++ (resp. CodeBlocks) a připojit k projektu vlastní knihovnu a hlavičkový soubor, který bude obsahovat zmíňované funkce, si popíšeme.

  1. V hlavní nabídce zvolíme Soubor - Nový - Zdrojový kód. Vytvoří se nový soubor Beze jména 1.
  2. Uložíme si soubor pod názvem uhly.c.
  3. V hlavní nabídce opět zvolíme Soubor - Nový - Zdrojový kód.
  4. Uložíme si soubor pod názvem uhly.h (hlavičkový soubor) .
  5. Do hlavičkového souboru uhly.h napíšeme prototypy funkcí (nezapomeneme na středník):
    float deg2rad(float u);
    float rad2deg(float u);
    
  6. Implementaci napíšeme do souboru uhly.c, resp. zkopírujeme z předchozího programu.
  7. Vytvoříme nový projekt: Soubor - Nový - Projekt a uložíme jej např. pod názvem prevody.
  8. Na začátek hlavního programu vložíme pomocí direktivy hlavičkový soubor: #include "uhly.h"
  9. Do projektu vložíme naši knihovnu: stiskneme pravé tlačítko myši na názvu projektu a zvolíme položku Připojit k projektu.
  10. Přeložíme knihovnu (Zkompilovat tento soubor). Všimněte si, že v adresáři je přeložená knihovna - uhly.o.
  11. Doplníme hlavní program a vyzkoušíme knihovnu.

V překladači CodeBlocks je postup obdobný. Pořadí kroků lze i obrátit, tj. nejprve vytvoříme projekt a teprve potom nové soubory uhly.h a uhly.c.

Pokud si soubory uhly.c a uhly.h, resp. uhly.o uložíme do archivu, můžeme obě funkce použít např. za půl roku v jiném programu, aniž bychom je znovu programovali. V tom je výhoda deklarace procedur a funkcí v knihovnách.

Chceme-li někomu poskytnout naši knihovnu a přitom utajit implementaci (zdrojový kód), poskytneme uživateli pouzé soubory uhly.h a uhly.o. Pak musíme nastavit parametry překladače tak, aby sestavovací program používal při sestavení knihovnu uhly.o. V prostředí Dev C++ to provedeme následovně: Zobrazíme vlastnosti projektu (stiskem pravého tlačítka myši na názvu projektu) a zvolíme Vlastnosti projektu. Zobrazíme kartu Parametry a do posledního editačního okénka Linker přidáme pomocí tlačítka Připojit knihovnu uhly.o. V prostředí CodeBlocks také stiskneme pravé tlačítko na názvu projektu, zvolíme Build options... a pak kartu Linker settings. Do okénka Link libraries přidáme pomocí tlačítka Add přeloženou knihovnu (pokud jde o soubor s příponou .o, musíme vybrat všechny soubory).

Řešení:

Kompletní kód v jediném souboruDev C++:stupne.dev, stupne.c
 CodeBlocks:stupne.cbp, stupne.c
 
Funkce pro převod v samostatné knihovněKnihovna:uhly.c, uhly.h
 Dev C++:stupne2.dev, stupne2.c


Úloha 4.2

Napište funkci, která zjistí, zda je zadaný prvek v neseřazeném poli. Funkce má tři parametry: pole, počet prvků pole a hledaný prvek. Pokud je prvek nalezen, funkce vrátí jeho index, jinak vrátí hodnotu -1. Dále naprogramujte dvě procedury, které seřadí prvky pole. První procedura seřadí pole vzestupně bublinkovým řazením, druhá procedura seřadí pole sestupně výběrem maximálního prvku.

Prezentace s popsanými algoritmy řazení a vyhledávání: algoritmy_vyhledavani_razeni.ppt

Polotovar:
Dev C++:hledani_vzor.dev, hledani_vzor.c
CodeBlocks:hledani_vzor.cbp, hledani_vzor.c
Řešení:
Dev C++:hledani.dev, hledani.c
CodeBlocks:hledani.cbp, hledani.c

Domácí úloha - tvorba interaktivního programu

Úloha slouží k procvičení definic procedur a funkcí.

Zadání:

Napište interaktivní program, který počítá obsah kruhu a obsah obdelníka.
Na obrazovku vypíše následující nabídku:
Nabidka:
---------------------
1 ... Obsah kruhu
2 ... Obsah obdelnika
3 ... Konec
---------------------
Volba:
Při volbě 1 se program dotáže na poloměr, pak vypočítá a vytiskne obsah kruhu. Při volbě 2 se program dotáže na velikost stran obdélníka a vytiskne jeho obsah. Po provedení výpočtu se opět na obrazovku vypíše nabídka.
Při tvorbě programu ošetřete zadání záporných hodnot.

Hotový program pro inspiraci je ke stažení zde: obsahy.exe

Úlohu naprogramujte pomocí procedur a funkcí. Napište zejména tyto procedury a funkce:

  1. procedura vypisující nabídku
  2. funkce, která čte volbu z klávesnice (doporučuji nabídku uchovat jako číslo typu int) a vrací ji
  3. funkce, která má jako parametr zvolenou funkci (1 nebo 2) a provede příslušný výpočet
Návod: výpis nabídek a výpočet provádějte v cyklu (s podmínkou na konci). Pro rozhodování typu operace využijte příkaz switch. Nezapomeňte na break.

Hlavní program bude mít tuto kostru:

int volba;
do
{
  tisk_nabidky();
  volba = nacteni_volby();
  vypocet(volba);
}  while (); /* vymyslete podmínku ukončení */

Polotovar:

Dev C++:obsahy_vzor.dev, obsahy_vzor.c
CodeBlocks:obsahy_vzor.cbp, obsahy_vzor.c
Řešení:
Dev C++:obsahy.dev, obsahy.c
CodeBlocks:obsahy.cbp, obsahy.c


[Cvičení 3] [Obsah] [Cvičení 5]