Úlohy zadávané v kurzu Úvod do programování

Úloha č. 1.: Toto je ukázková úloha k procvičení.

Úloha č. 2.: Zvolte vhodný číselný typ pro reprezentaci dne v týdnu (Po-Ne).

Úloha č. 3.: Zvolte vhodný číselný typ pro reprezentaci délky časového úseku udané v milisekundách (úsek přitom může trvat až 1 rok).

Úloha č. 4.: Uspořádejte číselné proměnné podle jejich vzrůstajících paměťových nároků (tj. podle toho, kolik jedna proměnná příslušného typu zabere v paměti). Pokud mají dvě proměnné různého typu paměťové nároky stejné, uveďte na první místo tu, jež má větší rozsah do kladných hodnot.

Úloha č. 5.: Upravte níže uvedený program tak, aby přijímal a správně zpracovával i částky větší než tisíc korun.

Úloha č. 6.: Napište program na výpočet objemu koule s poloměrem r. Vyjděte z výše uvedeného programu.

Úloha č. 7.: Napište program, který vypočte úroky z pevného vkladu za jedno měsíční úrokové období (je dána roční úroková sazba - je potřeba z ní spočíst úroky za měsíc - a procento zdanění přibylých úroků).

Úloha č. 8.: Upravte výše uvedený program tak, aby spočítal úroky i za více období. Předpokládejte složené úročení se stabilní úrokovou sazbou po celou dobu.

Úloha č. 9.: Napište program, kterému uživatel zadá celé číslo v rozsahu 0-80 a program vypíše na jeden řádek zadaný počet hvězdiček.

Úloha č. 10.: Může se předávání parametrů odkazem někdy hodit i v případě, že v těle procedury/fce nepotřebujeme tyto parametry modifikovat tak, aby se změny projevily navenek? Odpověď vlastními slovy zdůvodněte.

Úloha č. 11.: Tento úkol jde trochu za rámec probíraného. Ilustruje totiž tzv. blokovou strukturu pascalských programů. Zkuste napsat program, který vychází z programu Prekryti.pas, ale v deklarační části (tj. mezi hlavičkou a begin procedury Prekryj je deklarována ještě další procedura PrekryjUvnitr, opět s lokálními proměnnými a, b. Do těla procedury PrekryjUvnitr dejte opět přiřazení do proměnných a i b. Pomocí výpisů ukažte, že přiřazení modifikuje právě ty proměnné a, b, nacházející se právě až v proceduře PrekryjUvnitr.

Úloha č. 12.: Mějme následující program:

Úloha č. 13.: Poslední úkol je skutečně tvůrčí. Napište program, který vypíše ze dvou zadaných celých čísel vždy to menší.

Úloha č. 14.: Rozšiřte výše uvedený program o funkci "vypiš kontakt číslo x", tedy tak, aby se zeptal uživatele na číslo kontaktu a ten vypsal.

Úloha č. 15.: Další vaše rozšíření by mělo umožňovat databázi (tj. v poli) kontaktů vyhledávat: najde a vypíše záznam, kde jméno bude rovno jménu zadanému. Dva řetězce lze porovnat běžným = (rovná se).

Úloha č. 16.: Napište program, který bude postupně načítat posloupnost kladných reálných čísel zadávanou z klávesnice a zjistí její aritmetický, geometrický a harmonický průměr. Posloupnost bude ukončena zadáním čísla 0.

Úloha č. 17.: Napište program, který bude postupně načítat posloupnost kladných reálných čísel zadávanou z klávesnice, zjistí a nakonec vypíše nejdelší nerostoucí podposloupnost nachazející se v zadávané posloupnosti. (Podposloupností se myslí souvislý úsek hodnot z původní posloupnosti.) Posloupnost bude ukončena zadáním čísla 0.

Úloha č. 18.: Je možné v Turbo Pascalu 5.5 deklarovat pole následujícího typu: array [-100..100, -100..100] of integer nebo array [1..10000] of real?

Úloha č. 19.: Použijte tuto optimalizaci na výše uvedený program.

Úloha č. 20.: Použijte vnitřní cyklus z Insert Sortu jako proceduru, zařazující další prvek do již uspořádané poslupnosti.

Úloha č. 21.: Spočtěte, kolik elementárních operací - porovnání dvou hodnot - si vyžádá uspořádání pole o n prvcích metodou "opakovaného výběru minima".

Úloha č. 22.: Je dáno n slov. Jak dlouho lze hrát nad těmito slovy slovní kopanou "na první/poslední písmeno", když lze každé ze slov použít nejvýše jedenkrát (m-krát, ale to by nemělo být těžší).

Úloha č. 23.: "LIFE" ve zjednodušené podobě. Program vygeneruje matici "černých a bílých" buněk (na každém políčku je současně nejvýše jedna buňka) a poté v každém "tiku" aktivuje jednu buňku. Ta, pokud může, ve spolupráci s jinou "svou" - stejné barvy - "sežere" nepřátelskou buňku umístěnou mezi nimi. (vodorovně nebo svisle, ne diagonálně)

Úloha č. 24.: Horolezec má několik lan, u každého je udána délka a celková cena lana. Dále má spojky, kterými lze spojit vždy dvě lana k sobě. Cena spojky je pro všechny stejná. Má za úkol vyrobit případným spojováním více lan jedno lano o zadané délce (nebo delší) tak, aby bylo co nejlevnější.

Úloha č. 25.: Najděte nejkratší cestu ze zadaného města (uzlu) do jiného zadaného města. (použijte Dijkstrův algoritmus na hledání nejkratší cesty - viz Literatura: Libicher, I., Töpfer, P.: Od problému k algoritmu a programu)

Úloha č. 26.: Je dána úsečka (přímá cesta) s počátkem označeným 0 a délkou s. Na cestě je n bodů (čerpadel PHM), každý je dán dvojicí (Si, Pi), kde Si je vzdálenost bodu od počátku a Pi je, jednotková cena PHM v dané stanici. Auto má ve výchozím bodu nádrž o celkové kapacitě V naplněnu objemem V0. Navrhněte optimální schema tankování, aby celková útrata za PHM na cestě byla minimální.

Úloha č. 27.: Je dána "krajina" složená z navazujících úseček daných krajními body o souřadnicích (s0,0), (s1, h1), (s2, h2),..., (sn, 0). Ze kterého bodu (si, hi) je vidět do krajiny nejdále?

Úloha č. 28.: Firmě zbývá na konci roku x Kč, které musí co nejdůkladněji (s nejmenším zbytkem do dalšího roku) utratit. Skoro všechno už je vyprodané, takže má možnost koupit buďto výrobky A s cenou a Kč/ks nebo výrobky B s cenou b Kč/ks. Kolik čeho má koupit, aby jí zbylo nejméně Kč?