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 sNá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.
Jak psát:
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
8/9