Plnění pole
Zatím jste všechny prvky psali do složených závorek. Často ale hodnoty spočítá až program. Pak vytvořte pole správné velikosti bez hodnot a naplňte ho v cyklu:
int ctverce[5];
int pocet = sizeof(ctverce) / sizeof(ctverce[0]);
for (int i = 0; i < pocet; i++) {
ctverce[i] = i * i;
}
for (int i = 0; i < pocet; i++) {
printf("%d ", ctverce[i]);
}
printf("\n");Program vypíše:
0 1 4 9 16int ctverce[5]; vytvoří pole pěti prvků, které ještě nemají žádné hodnoty. sizeof funguje už teď, protože velikost pole je pevná od začátku. První cyklus dá každému prvku jeho hodnotu (druhou mocninu indexu): ctverce[0] dostane 0, ctverce[1] dostane 1, ctverce[2] dostane 4 a tak dále. Druhý cyklus prvky vypíše.
Prvek nečtěte dřív, než dostane hodnotu: jazyk C neříká, co v něm je. U samostatné proměnné bez hodnoty tento web ohlásí chybu, ale u prvku pole ne, takže si na tuhle chybu musíte dát pozor sami.
Když chcete, aby všechny prvky začínaly na nule, napište = {0}. To se hodí pro počítadla. Tady každý prvek počítá hlasy pro jednoho ze čtyř kandidátů:
int hlasy[4] = {0};
hlasy[2]++;
hlasy[2]++;
hlasy[0]++;
int pocet = sizeof(hlasy) / sizeof(hlasy[0]);
for (int i = 0; i < pocet; i++) {
printf("%d ", hlasy[i]);
}
printf("\n");Program vypíše:
1 0 2 0Když je ve složených závorkách méně hodnot, než je velikost pole, doplní C zbývající prvky nulami. {0} nastaví na 0 první prvek a ostatní budou také 0. Pozor: = {1} pole jedničkami nenaplní. Nastaví na 1 jen první prvek a všechny ostatní budou 0.
Složené závorky fungují jen při vytvoření pole. Později už celé pole najednou naplnit nejde: hlasy = {0, 0, 0, 0}; skončí chybou error: expected expression. Pomocí = nejde pole ani zkopírovat. Když jsou kopie a body dvě pole pěti hodnot typu int, příkaz kopie = body; nepůjde přeložit:
main.c:6:10: error: array type 'int[5]' is not assignableHláška říká, že do pole jako celku nejde přiřadit. Pole proto kopírujte prvek po prvku v cyklu:
int body[] = {80, 92, 75, 60, 88};
int pocet = sizeof(body) / sizeof(body[0]);
int kopie[5];
for (int i = 0; i < pocet; i++) {
kopie[i] = body[i];
}
printf("%d %d\n", kopie[0], kopie[4]);Program vypíše:
80 88Kopie musí být aspoň tak velká jako původní pole. U menšího pole by se cyklus dostal za jeho konec.
Jak psát:
Pokyny
Pod komentář vytvořte pole nasobky pro 10 celých čísel, bez hodnot. Potom ho v cyklu naplňte násobilkou sedmi: 7, 14, 21 a tak dále až do 70. Prvek s indexem i dostane hodnotu (i + 1) * 7.
Ve druhém cyklu vypište všechny prvky na jeden řádek, oddělené mezerami: 7 14 21 28 35 42 49 56 63 70.
Pod to vytvořte druhé pole kopie pro 10 celých čísel a v cyklu do něj zkopírujte pole nasobky.
Nakonec vypište na jeden řádek i kopii a před ni napište Kopie:. Ve výpisu by se měl objevit řádek Kopie: 7 14 21 28 35 42 49 56 63 70.
Začněte programovat zdarma
10/12