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 cmPromě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).
Jak psát:
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
4/7