Procházení pole cyklem
Celé pole najednou vypsat nejde. Když zkusíte printf("%d\n", body);, program nepůjde přeložit:
main.c:5:20: error: format specifies type 'int' but the argument has type 'int *' [-Werror,-Wformat]Formátovací značka %d vypíše jedno celé číslo, ale printf dostal celé pole body. (Jeho datový typ tu C zapisuje jako int *. Co znamená hvězdička, se dozvíte v lekci o ukazatelích.) Pole se musí vypisovat prvek po prvku.
Pro pět prvků by stačilo pět příkazů printf. Pro sto prvků by to bylo hodně psaní. Naštěstí index nemusí být číslo napsané přímo v kódu. Může to být i proměnná: když má i hodnotu 2, je body[i] totéž co body[2]. A cyklus for umí s proměnnou i projít všechny indexy od 0 až po poslední:
int body[] = {80, 92, 75, 60, 88};
for (int i = 0; i < 5; i++) {
printf("%d\n", body[i]);
}Program vypíše:
80
92
75
60
88V prvním průchodu cyklem má i hodnotu 0 a cyklus vypíše body[0]. Ve druhém průchodu má i hodnotu 1 a vypíše se body[1], a tak dále až po body[4]. V podmínce je i < 5, ne i <= 5: pole má 5 prvků, takže poslední index je 4. Co se stane s indexem 5, uvidíte v dalším cvičení.
Počet prvků se v programu často objeví na několika místech, třeba v několika cyklech. Proto je dobré uložit ho do konstanty, aby byl napsaný jen jednou:
int body[] = {80, 92, 75, 60, 88};
const int POCET = 5;
for (int i = 0; i < POCET; i++) {
printf("Test %d: %d bodů\n", i + 1, body[i]);
}Program vypíše:
Test 1: 80 bodů
Test 2: 92 bodů
Test 3: 75 bodů
Test 4: 60 bodů
Test 5: 88 bodůČíslo testu je i + 1, protože lidé počítají testy od 1, kdežto indexy začínají od 0. Konstanta musí odpovídat poli. Když do pole přidáte šestý výsledek a zapomenete změnit POCET, cyklus projde pořád jen pět prvků a nový výsledek se nikdy nevypíše.
Cyklus může prvky vypsat i na jeden řádek, oddělené čárkami. Čárka se píše před každý prvek kromě prvního, tedy toho s indexem 0:
int body[] = {80, 92, 75, 60, 88};
const int POCET = 5;
for (int i = 0; i < POCET; i++) {
if (i > 0) {
printf(", ");
}
printf("%d", body[i]);
}
printf("\n");Program vypíše:
80, 92, 75, 60, 88Poslední printf("\n") je až za cyklem. Ukončí řádek, když už jsou všechny prvky vypsané.
Jak psát:
Pokyny
Pod řádek, který vypisuje kapitána, vytvořte konstantu POCET s počtem hráčů, tedy 5. Potom napište cyklus for, jehož proměnná prochází indexy od 0, dokud je menší než POCET.
V cyklu vypište každé číslo dresu na samostatný řádek: 7, 10, 23, 4 a 11.
Pod to napište druhý cyklus, který vypíše všechna čísla na jeden řádek, oddělená čárkou a mezerou: 7, 10, 23, 4, 11.
Začněte programovat zdarma
4/12