< back

Cvičení 1 - Práce se strukturami

Zadání

Pozn. : proměnné typu struct jsou „velké“. Jak probíhá jejich předávání do funkcí (hodnotou)? Jak se dá nevýhodě zabránit?

Pozn.2: Pokud se parametr předává pomocí ukazatele a ne hodnoty, jaký je rozdíl při změně členských proměnných struktury ve funkci? Jak se dá změně zabránit?

Doporučené řešení:

  1. Vytvořte nový projekt – prázdnou konzolovou aplikaci
  2. Vytvořte soubory projektu:
    • main01.cpp – ve kterém bude funkce main s definicí proměnných a ukázkami volání funkcí
    • Matice01.cpp – ve kterém budou funkce pro práci s vektorem a maticí, které tvoří kód (funkčné volání)
    • Matice01.h – ošetřený hlavičkový soubor umožňující volání funkcí ze souboru Matice01.cpp a dále obsahující definice struktur a inline funkce (které netvoří kód a proto je umisťujeme do hlavičkového souboru)
  3. Následující umísťujte do souborů, do kterých logicky patří.
  4. Nakreslete si jak bude vypadat výsledná proměnná TMatrix složená z členských proměnných iSize a iData. Rozkreslete i proměnnou iData typu pole TVector (každá s proměnnými iSize a iData).
  5. -Nadefinujte konstantní proměnné X a Y pomocí vhodného konstantního typu a nastavte je na hodnoty 10 a 5.
  6. Nadefinujte strukturu TVector s datovými proměnnými iData a iSize.
  7. Ve funkci main vytvořte proměnné vect, vect1 a vect2 typu TVector. V C++ již není nutné uvádět struct.
  8. Inicializujte proměnné vect,vect1 a vect2 v definici na nulové hodnoty v poli iData a X v iSize.
  9. Napište inline funkci Set pro nastavení prvků vektoru. V případě úspěchu (pozice není mimo pole) vraťte hodnotu nula, jinak jedničku. Funkci bude předán vektor, pozice a hodnota, která se má na danou pozici nastavit.
  10. Proměnné vect1 a vect2 naplňte (pomocí funkce Set) hodnotami vzrůstajícími o 1, vect1 od 0, vect2 od 10.
  11. Správné nastavení hodnot ověřte tiskem hodnot v proměnné vect2 pomocí funkce pro získání hodnot Get.
  12. Napište funkci pro součet dvou vektorů Add – funkce bude mít tři parametry – dva pro předání vstupních proměnných a třetí pro uložení výsledku. Pokud budou vstupní vektory různé délky vrátí hodnotu 1 a součet neprovede. Délku výstupního vektoru nastaví podle délky vstupních proměnných. Při úspěchu vrátí hodnotu 0.
  13. Napište funkci pro rozdíl dvou vektorů Sub -funkce bud mít dva parametry pro předání vstupních proměnných, výsledek bude předán pomocí návratové hodnoty. Pokud budou vektory různé délky vrátí strukturu s poctem nastaveným na hodnotu 0 a rozdíl neprovede.
  14. Pomocí proměnných vect otestujte ve funkci main správnost funkcí Add a Sub.
  15. Vytvořte proměnnou vect3 typu ukazatel na TVector. Vlastní strukturu vytvořte pomocí alokace funkcí calloc (knihovna cstdlib; nezapomeňte,že každá alokace musí mít odalokaci).
    • Calloc/malloc vrací typ void *. C++ nedovoluje implicitní konverzi ukazatelů různých typů. Jak se provede konverze explicitní?
    • Ve vytvořené proměnné nastavte hodnotu iSize na X a hodnoty pole od 30. Zkuste použít jako vstupní a výstupní parametr při volání funkcí Get a Set.
  16. Obdobně (body 5 až 14) postupujte pro strukturu TMatrix.

Pozn.: Ve cvičeních se snažte vyřešit co nejvíce, zbytek dopracujte za DU.