Struktura jako návratová hodnota

Funkce může strukturu i vracet. Příkaz return vrací jen jednu hodnotu, ale tato hodnota může mít několik členů. V lekci o ukazatelích vracela funkce dva výsledky přes dva parametry, které byly ukazatele. Se strukturou to často jde jednodušeji: výsledky uložíte do jedné struktury a tu vrátíte. Tato funkce převede počet sekund na minuty a sekundy:

#include <stdio.h>

typedef struct {
    int minuty;
    int sekundy;
} Cas;

Cas ze_sekund(int celkem) {
    Cas vysledek;
    vysledek.minuty = celkem / 60;
    vysledek.sekundy = celkem % 60;
    return vysledek;
}

int main(void) {
    Cas beh = ze_sekund(1000);
    printf("%d min %d s\n", beh.minuty, beh.sekundy);
    return 0;
}

Program vypíše:

16 min 40 s

Návratový typ před názvem funkce je Cas. Funkce vytvoří lokální proměnnou vysledek, vyplní její členy a vrátí ji. Stejně jako u parametrů se struktura zkopíruje: beh v main dostane kopii proměnné vysledek a vysledek sám na konci funkce zanikne, jako každá lokální proměnná. Proměnnou vysledek byste mohli vytvořit i rovnou s hodnotami: Cas vysledek = {celkem / 60, celkem % 60};.

Funkce může vrátit i jednu ze struktur pole, které dostane. return polozky[i]; vrátí kopii tohoto prvku. Stejně funguje přiřazení: nejlepsi = polozky[i]; zkopíruje do proměnné nejlepsi celou strukturu, všechny její členy najednou. Právě tak najdete v úkolu níže nejlevnější produkt: zapamatujte si první produkt, a kdykoli narazíte na levnější, zapamatujte si místo něj ten.

Pokyny

Nad main napište funkci Produkt nejlevnejsi(const Produkt polozky[], int pocet), která vrátí nejlevnější produkt v poli.

Pod cyklem v main funkci zavolejte a výsledek si uložte: Produkt nejlepsi = nejlevnejsi(regal, 4);. Pak vypište Nejlevnější: Jogurt (14.90). Název i cenu vezměte z proměnné nejlepsi.

Napište ještě funkci Produkt se_slevou(Produkt polozka, int procenta), která vrátí produkt s cenou sníženou o procenta procent. Funkce dostane kopii produktu, a tak v ní může cenu změnit a kopii vrátit. Originál zůstane, jak byl. (Pozor: procenta / 100 je celočíselné dělení.) Na konci main ji zavolejte s nejlepsi a 10 a vypište starou i novou cenu: Jogurt: 14.90 -> 13.41.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

8/9