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 16

int 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 0

Když 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 assignable

Hláš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 88

Kopie musí být aspoň tak velká jako původní pole. U menšího pole by se cyklus dostal za jeho konec.

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

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

10/12