Nejlepší žák

Kdo byl v pololetí nejlepší? Jak najít největší hodnotu, víte z lekce o polích: zapamatujete si první prvek a v cyklu zkoušíte, jestli některý další není větší. Tentokrát porovnáváte průměry žáků a chcete vědět, kdo to je, ne jen jaký je nejvyšší průměr. Funkce si proto zapamatuje celého žáka a vrátí ho: funkce může vrátit strukturu stejně jako číslo. Třeba nejdelší skok v závodě:

#include <stdio.h>

typedef struct {
    char jmeno[20];
    int skok;
} Zavodnik;

Zavodnik nejdelsi_skok(const Zavodnik zavodnici[], int pocet) {
    Zavodnik nejlepsi = zavodnici[0];
    for (int i = 1; i < pocet; i++) {
        if (zavodnici[i].skok > nejlepsi.skok) {
            nejlepsi = zavodnici[i];
        }
    }
    return nejlepsi;
}

int main(void) {
    Zavodnik zavodnici[] = {
        {"Petra", 412},
        {"Ondra", 455},
        {"Klára", 430},
    };
    Zavodnik vitez = nejdelsi_skok(zavodnici, 3);
    printf("Nejdelší skok: %s, %d cm\n", vitez.jmeno, vitez.skok);
    return 0;
}
Nejdelší skok: Ondra, 455 cm

Proměnná nejlepsi začíná prvním závodníkem, a cyklus proto může začít až od indexu 1. Porovnání > (ne >=) znamená, že při shodě vyhraje ten, kdo je v poli dřív.

Všimněte si příkazu nejlepsi = zavodnici[i];. Pole pomocí = přiřadit nejde, strukturu ano: zkopírují se všechny její členy, i pole uvnitř ní. V proměnné nejlepsi je tedy kopie závodníka a funkce tuhle kopii vrátí. Ke čtení jména a délky skoku víc nepotřebujete.

Ve své funkci porovnávejte průměry: prumer(zaci[i]) > prumer(nejlepsi). Ve funkci vypis_vysledky() pak výsledek uložte do proměnné, třeba Zak nejlepsi = nejlepsi_zak(zaci, pocet);, a vypište jeho jméno a průměr: nejlepsi.jmeno a prumer(nejlepsi).

Pokyny

Pod funkci znamka() (nad vypis_vysledky()) napište funkci Zak nejlepsi_zak(const Zak zaci[], int pocet), která vrátí žáka s nejvyšším průměrem.

Na konci funkce vypis_vysledky(), za cyklem (ne v něm), vypište jméno a průměr nejlepšího žáka:

Nejlepší: Filip (průměr 48.3)

Pokud se vypíše Jakub, porovnáváte obráceně.

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/7