Pole struktur

Představte si seznam hor, každou s názvem a výškou. Jedna hora je jedna struktura. Abyste jich uložili víc, použijete to, co už znáte: pole. Struktura je datový typ jako každý jiný, a tak můžete vytvořit i pole struktur:

#include <stdio.h>

typedef struct {
    char nazev[20];
    int vyska;
} Hora;

int main(void) {
    Hora hory[3] = {
        {"Everest", 8849},
        {"K2", 8611},
        {"Lhotse", 8516}
    };

    for (int i = 0; i < 3; i++) {
        printf("%-8s %5d m\n", hory[i].nazev, hory[i].vyska);
    }
    return 0;
}

Program vypíše:

Everest   8849 m
K2        8611 m
Lhotse    8516 m

Každý prvek pole se zapíše jako samostatná struktura ve složených závorkách a prvky se oddělují čárkami, jako v každém poli. hory[0] je celá první hora, Everest. Zápis hory[i].nazev čtěte zleva doprava: nejdřív vezměte prvek pole s indexem i, potom jeho člen nazev.

Typickou chybou je opačné pořadí: hory.nazev[i]. To by znamenalo „člen nazev pole hory“, jenže pole nemá členy, jen prvky:

main.c:16:36: error: member reference base type 'Hora[3]' is not a structure or union
   16 |         printf("%-8s %5d m\n", hory.nazev[i], hory[i].vyska);
      |                                ~~~~^~~~~~

Hláška říká, že to, co stojí před tečkou, tedy datový typ Hora[3] (pole tří hor), není struktura. (Union je něco podobného struktuře, co v tomto kurzu nepoužíváme.)

Stejně jako v lekci o řetězcích nastavuje printf v cyklu šířku sloupců, aby byly hezky pod sebou. %-8s vypíše text do sloupce širokého 8 znaků zarovnaný doleva (to dělá znaménko -) a %5d vypíše číslo do sloupce širokého 5 znaků zarovnané doprava. U desetinných čísel znamená %6.2f dvě desetinná místa a celkovou šířku 6 znaků.

Pozor jen na písmena s diakritikou: šířka se počítá ve znacích typu char a písmeno jako é jich v řetězci zabírá dva. Řádek s textem „Mléko“ by proto byl o jedno místo kratší a sloupce by se rozjely. V tabulkách proto používáme názvy bez diakritiky.

Místo počtu 3 v cyklu můžete nechat program počet spočítat, stejně jako u každého pole: const int POCET = sizeof(hory) / sizeof(hory[0]); Velikost celého pole vydělená velikostí jednoho prvku je počet prvků, ať jsou v poli čísla, nebo struktury.

Pokyny

Program vypíše jen první produkt v košíku. Nahraďte printf cyklem for, který stejným způsobem vypíše všechny produkty. Program vypíše:

Chleba    32.50 x 2
Jogurt    24.90 x 3
Jablka     8.50 x 6

Pod cyklem vypište, kolik stojí celý košík. U každého produktu vynásobte cenu počtem kusů a výsledky sečtěte. Můžete to udělat ve stejném cyklu, nebo v novém. Výsledek vypište na dvě desetinná místa: Celkem: 190.70.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

4/9