Tato stránka je pouze pro čtení. Můžete si pouze prohlédnout zdrojový kód, ale ne ho měnit. Zeptejte se správce, pokud si myslíte, že něco není v pořádku. ~~NOCACHE~~ ~~REVEAL theme=dokuwiki&transition=convex&controls=1&show_progress_bar=1&build_all_lists=1&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1480x960~~ ====== Pole====== * Představte si, že si chcete uložit nějaké údaje o více prvcích. Např. chcete v paměti uchovávat 10 čísel, políčka šachovnice nebo jména 50ti uživatelů. Asi vám dojde, že v programování bude nějaká lepší cesta, než začít bušit proměnné ''uzivatel1'', ''uzivatel2''... až ''uzivatel50''. Nehledě na to, že jich může být třeba 1000. A jak by se v tom potom hledalo? Brrr, takle ne :) * Pokud potřebujeme uchovávat větší množství proměnných stejného typu, tento problém nám řeší pole. Můžeme si ho představit jako řadu přihrádek, kde v každé máme uložený jeden prvek. Přihrádky jsou očíslované tzv. indexy, první má index 0. ===== Struktura pole ===== {{:spse:pm1:pasted:20210125-224841.png}} * Pole deklarujeme jako běžnou proměnnou, pouze za její název uvedeme hranaté závorky s počtem prvků: <fragment-block> <code c> int pole[10]; </code> </fragment-block> * Slovo pole je samozřejmě název naší proměnné. Nyní máme v proměnné pole pole o velikosti deseti typů int. Jelikož jsme pole teprve založili a operační systém nám pro něj přidělil nějakou paměť, kterou mohla předtím používat jiná aplikace, nemůžeme se spolehnout na to, že jsou v poli samé nuly. Stejně dobře v něm zatím mohou být libovolná náhodná čísla. * K prvkům pole poté přistupujeme opět přes hranatou závorku, pojďme na první index (tedy index 0) uložit číslo 1. ==== Plnění pole ==== <fragment-block> <code c> int pole[10]; pole[0] = 1; </code> </fragment-block> * Plnit pole takto ručně by bylo příliš pracné, použijeme cyklus a naplníme si pole čísly od 1 do 10. K naplnění použijeme for cyklus: <fragment-block> <code c> int pole[10]; int i; for (i = 0; i < 10; i++) { pole[i] = i + 1; } </code> </fragment-block> * Pozn.: i + 1 do pole ukládáme proto, že i jde od nuly a my chceme do pole uložit čísla od 1. ==== Výpis pole ==== * Abychom pole vypsali, můžeme za předchozí kód připsat: <fragment-block> <code c> for (i = 0; i < 10; i++) { printf("%d ", pole[i]); } // Výstup: 1 2 3 4 5 6 7 8 9 10 </code> </fragment-block> ==== Naplnění pole při inicializaci ==== * Pole samozřejmě můžeme naplnit ručně a to i bez toho, abychom dosazovali postupně do každého indexu. Použijeme k tomu složených závorek a prvky oddělujeme čárkou: <fragment-block> <code c> int cisla[] = {15, 8, 3, 10, 9, 2, 2}; </code> </fragment-block> * Všimněte si, že nemusíme udávat velikost pole, překladač si ji odvodí z počtu prvků ve výčtu. * Pole často slouží k ukládání mezivýsledků, které se potom dále v programu používají. Když něco potřebujeme 10x, tak to nebudeme 10x počítat, ale spočítáme to jednou a uložíme do pole, odtud poté výsledek jen načteme. ===== Příklad ===== * Napište program s písmeny od A do K. * Postupně jej ve for cyklu projděte a vypište. spse/pm1/pole.txt Poslední úprava: 2024/07/07 16:48autor: 127.0.0.1