Příklady na programování
Na této stránce máte další příklady k tomu, co jsme probrali, na kterých si můžete procvičit svoje programátorské schopnosti.
Vstup, výstup a aritmetika
- Vypište na obrazovku
***
**
*
- Načtěte z klávesnice celé číslo a o 1 vyšší hodnotu vypište.
- Načtěte reálné číslo – rychlost v km/h – a vypište ji v m/s.
- Načtěte dvě celá čísla, vypište jejich celočíselný podíl a zbytek po dělení.
Příkaz if
- Načtěte celé číslo a vypište jeho znaménko, buď
kladne, nebo zaporne, nebo nula.
- Načtěte celé číslo a vypište jeho paritu, buď
sude, nebo liche.
- Jako 4. příklad v minulé části, ale pokud je druhé číslo 0, program místo výsledků vypíše
nejde delit nulou.
- Načtěte tři čísla a vypište z nich to největší.
- Načtěte tři čísla – koeficienty kvadratické rovnice – a vypište řešení. Počitejte i s případy, že nějaký koeficient je 0 a že řešení může být jen jedno nebo žádné.
Cykly while a repeat…until
- Donuťte uživatele napsat třeba číslo 12 – vypisujte
Zadej cislo 12: a čekejte na vstup, dokud ho uživatel nezadá.
- Totéž, ale stačí, když napíše číslo mezi 0 a 100. (Podobná funkce se může hodit, když třeba chcete, aby uživatel zadal smysluplnou hodnotu, třeba svůj věk.)
- Naprogramujte Euklidův algoritmus pro výpočet největšího společného dělitele.
- Sčítejte členy řady 1/2i od i=1, dokud není hodnota členu menší než 0.0001, a pak vypište výsledek. Nepotřebujete umět mocnit.
Cyklus for
- Načtěte celé číslo a vytiskněte tolik hvězdiček za sebou.
- Načtěte dvě celá čísla a vypište všechny hodnoty mezi nimi. Pokud je druhé číslo větší, než první, vypište je sestupně.
- Načtěte reálné číslo a vypište jeho nula- až desetinásobek.
- Vypište malou násobilku.
- Vypište přirozená čísla menší než 100, která nejsou dělitelná 5 ani 7.
- Načtěte přirozené číslo a zjistěte jeho největšího vlastního dělitele.
- Načtěte přirozené číslo a zjistěte, zda je prvočíslo.
Jednorozměrné pole
- Naplňte všechny prvky pole celých čísel
p tak, že p[i] = i*(10-i).
- Vyhledejte číslo v poli (obecně neuspořádaném); pokud tam je, vypište index, pokud není, vypište 0.
- Vyhledejte číslo v uspořádaném poli a uspořádanost využijte ke značnému zrychlení algoritmu. Jaká je složitost?
- Najděte nejmenší prvek v poli a vyměňte ho s prvním prvkem. Tuto schopnost pak využijte k uspořádání celého pole. Jaká je složitost?
- Naprogramujte Erastothenovo síto, například vypište všechna prvočísla menší než 10000. Složitost?
Funkce
Kterýkoli příklad z výše uvedených, který vydá nějaký jeden výsledek, můžete přepsat na funkci. Zatím se netrapte předáváním pole jako parametru, v takovém případě použijte globální proměnnou. Pár dalších možných funkcí:
- Z (třeba) tří čísel vrátí to nejmenší.
- Funkce načte tři parametry, počet hodin, minut a sekund, a vrátí, kolik je to dohromady sekund.
- Zjistěte, zda je datum (rok, měsíc, den) validní a vraťte hodnotu typu boolean. Datum je validní, pokud měsíc je mezi 1 a 12 a den mezi 1 a počet dnů daného měsíce. Můžete kontrolovat přestupnost roku.
- Spočítejte funkcí kombinační číslo.
Procedury
Podobně jako u funkcí, mnoho příkladů z výše uvedených můžete napsat jako proceduru, tady jsou nějaké další nápady:
- Jediný parametr procedury je počet sekund a vy ho rozložte na srozumitelný čas – (dny,) hodiny, minuty, sekundy – a ten vypište.
- Seřaďte (třeba) tři proměnné přijaté jako parametry podle velikosti.
- Vypište všechny dělitele čísla.
Rekurze
- Měli byste být schopni spočítat n-tý člen jakékoli běžné rekurentně zadané posloupnosti.
- Spočítejte n-té Catalanovo číslo pomocí rekurentní formule. Použijte cacheování.
Všehochuť
- Šachovnice
- Vyberte si nějakou šachovou figurku, popřípadě si vymyslete nějakou novou:
- Kolik nejméně těchto figurek je potřeba, aby ohrožovaly celou šachovnici?
- Kolik nejvýše těchto figurek je možné umístit tak, aby se navzájem neohrožovaly?
- Na kolik tahů se dostane figurka z jednoho políčka na druhé?
- Všechna slova obsahující x nahraďte *, zbytek ať se nezmění.
- Vypiště kalendář zadaného roku.
- Zjistěte, kolika způsoby se dá zaplatit zadaná částka pomocí běžných bankovek a mincí.
Spojový seznam
Zkuste při implementaci procedur a funkcí využívat jednak těch už implementovaných a jednak toho, že s každý prvek seznamu je hlavou podseznamu. (Dá se to říct také tak, že spojový seznam je buď nil nebo prvek seznamu + pointer na seznam.)
- Přidání na začátek
- Odebrání ze začátku
- Zjištění, zda je prvek v seznamu
- Přidání jednou (pokud už prvek ve spojáku je, nepřidávat)
- Odebrání prvního výskytu
- Odebrání všech výskytů
- Spočítání výskytů
- Zařazení prvku (předpokládejte, že je seznam setříděný a zařaďte nový prvek, aby stále byl setříděný)
- Zmnožinování (každý prvek seznamu se v něm po zmnožinování bude vyskytovat právě jednou)
- Setřídění prvků seznamu