Shrnutí

V této lekci jste se naučili, že:

  • Struktura spojí hodnoty, které k sobě patří, klidně různých datových typů, do jednoho celku. Její definice vyjmenuje členy a končí };, i se středníkem.
  • Proměnnou typu struktury vytvoříte s hodnotami ve složených závorkách v pořadí členů: struct produkt chleba = {"Chléb", 32.5, 2};.
  • K členu se dostanete tečkou, chleba.cena, a pracujete s ním jako s obyčejnou proměnnou. Text do členu kopírujete funkcí strcpy, protože do pole nejde přiřadit pomocí =.
  • typedef struct { ... } Produkt; dá datovému typu název Produkt, takže píšete Produkt chleba. V tomto kurzu píšeme struktury takto.
  • Pole struktur, Produkt kosik[3], má v každém prvku jednu strukturu: kosik[i].nazev. Šířky jako %-8s a %6.2f srovnají sloupce tabulky pod sebe.
  • Členem může být i pole nebo jiná struktura a tečky a závorky pak řetězíte: eva.narozeniny.rok, eva.body[0].
  • Struktura předaná funkci se zkopíruje, stejně jako struktura přiřazená pomocí =. Změny kopie originál nezmění. Struktury nejde porovnat pomocí ==, porovnávejte raději jejich členy.
  • Přes ukazatel, Produkt *polozka, funkce změní originál: polozka->pocet je totéž co (*polozka).pocet a funkci voláte s &mleko. const Produkt *polozka použijete pro funkci, která strukturu jen čte.
  • Funkce může strukturu vrátit, a vrátit tak několik hodnot najednou.

Tím jste prošli poslední nové téma kurzu. V další lekci vás čeká závěrečný projekt: krok za krokem napíšete jeden větší program a využijete v něm všechno, co jste se naučili: proměnné, podmínky, cykly, pole, řetězce, funkce, ukazatele i struktury.

Nejdřív si ale struktury procvičte na malém úkolu: seznamu knih, které čtete.

Pokyny

Nad main definujte pomocí typedef strukturu Kniha se třemi členy: názvem nazev (pole 30 znaků) a dvěma celými čísly, počtem stran stran a počtem už přečtených stran precteno. V main vytvořte pole knihy se třemi knihami: Hobit má 310 stran a přečtených je z nich 120, Matylda má 240 stran a nemáte z ní přečtenou ani jednu a Momo má 300 stran a máte ji přečtenou celou. Pak knihy vypište v cyklu, každou na jeden řádek, ve tvaru Hobit: 120/310.

Mezi definici struktury a main napište funkci void precti(Kniha *kniha, int pocet), která knize přičte pocet k přečteným stranám precteno, ale nikdy víc, než má kniha stran: kdyby byl výsledek větší než stran, nastaví precteno na stran. V main ji před cyklem zavolejte dvakrát: precti(&knihy[0], 250) a precti(&knihy[1], 35). Program pak vypíše Hobit: 310/310, Matylda: 35/240 a Momo: 300/300.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

9/9