Zpět na hlavní stránku
Výuka na Gymnáziu Christiana Dopplera
Informatika a výpočetní technika - 6. M š. r. 2010/2011 - Programování v jazyku C
Přehled průběžného hodnocení:
Připravuje se.
Domácí úkoly:
Několik poznámek k následujícím "velkým" domácím úkolům:
- Povinně je potřeba vypracovat alespoň jeden z nich. Tento pak bude mít stejnou váhu jako písemka (bude se vlastně jednat o program, který budete muset během hodiny napsat a odladit) psaná 12. 1. 2011.
- Můžete dobrovolně vypracovat i druhý, avšak nelze jím nahradit známku z výše zmíněné písemky. Lze za něj však získat bonusové body k ostatním vypracovaným domácím úkolům, případně vymazat pětky za nesplněné.
- Termín pro odevzdání je 19. 1. 2011 do 23:59. Vyřešený úkol posílejte na dobromilek@seznam.cz.
- Pokud objevím dvě řešení, která si budou příliš podobná, podrobím autora toho později poslaného řešení menšímu "výslechu", jestli ví, jak jeho program funguje. Výsledek této zpovědi započítám do známky za úkol. Výjimka je, pokud budou řešení naprosto totožná - v tom případě je to za nedostatečnou bez debat. Cílem tohoto postupu je, abych vás neodrazoval od vzájemné výpomoci, ale vyfiltroval ty případy, kde "výpomoc" znamenala jen Ctrl+C, Ctrl+V.
Jejich zadání:
Kvadratická rovnice
Jak název napovídá, uvažujete kvadratickou rovnici ve tvaru ax2 + bx + c = 0. Od uživatele si vyžádáte hodnoty jednotlivých proměnných a, b, c (doporučuji datový typ float). Potom spočítáte diskriminant, dle jeho hodnoty zjistíte počet řešení a všechna řešení vypíšete. Nezapomínejte, že při záporném diskriminantu má rovnice řešení v oboru komplexních čísel. Bude se vám hodit funkce sqrt(float a), která vrací druhou odmocninu ze zadaného nezáporného čísla. Abyste ji mohli použít, je potřeba na začátek programu přidat hlavičkový soubor: #include <math.h>.
Dokonalý systém plusů a minusů
Na vstupu dostanete několik řádků, které obsahují pouze znaky '+' a '-' a ukončující prázdný řádek. Každý řádek představuje jednoho studenta a vaším úkolem je pro každého spočítat, jaké známky za aktivitu mu udělím. Tyto známky oddělujte ", " (tedy čárkou a mezerou). Na konec pak ještě přidejte přebývající plusy a minusy (také oddělené). Připomínám, že známka se počítá pro každou čtveřici znamének, pro 4 plusy je to 1 a za každý minus stupeň dolů.
Příklad řádku:
++-+--+++++++--++-+
Výstup:
2, 3, 1, 3, ++-
Jak je vidět, plusy a minusy, kterými jsme na konci doplnili známky, nemusíme vypsat ve stejném pořadí, jako byly na vstupu.
Ukázkové zdrojové kódy pro probíranou látku:
- Základy - funkce main(), datové typy, proměnné, operátory
- Komentáře- rozlišení řádkového (//...) a blokového (/*...*/)
- Základní vstup a výstup - funkce getchar() a putchar(), funkce printf() pro výstup pevně zadaného řetězce
- Větvení programu - konstrukce if (...) {...}, else if (...) {...}, else {...}
- Cykly - while (...) {...}, do {...} while (...), for (...;...;...) {...}
- Přepínač - switch (...) { case ...: ... break; ... default: ... }
- Pokročilejší vstup a výstup - funkce printf() a scanf() včetně formátových specifikací (%d, %c, %s, ...)
- Funkce a procedury - ukázky definice, návratové hodnoty, argumenty
- Pole - definice, přístup k jednotlivým prvkům
- Vícerozměrná pole a konstanty - rozšíření znalostí získaných na jednorozměrných polích
- Struktury - ukázka na implementaci jednoduchého zásobníku
- Soubory - vstup a výstup, ke stažení dále: vstup.txt, cisla.txt
Výše uvedeným zdrojovým kódům je potřeba rozumět, tedy vědět, co a kdy se během programu odehrává. Použité konstrukce a funkce musíte samozřejmě také umět použít ve vašem vlastním programu.
Pokud budete potřebovat s něčím poradit, doporučuji se na mě během hodiny obrátit. Nekoušu :-). Trochu komplikovanější možnost je poslat mi e-mail (dobromilek@seznam.cz). Pokud bude dotaz k věci, odepíšu vám, případně problém vysvětlím během hodiny.
Příklady řešené na hodinách:
Kopírování vstupu na výstup
Čtěte znaky ze vstupu a vypisujte je na výstup, dokud nepřečtete znak 'a'. (Zda toto 'a' vypíšete, záleží na vás. Další znaky však již nevypisujte.)
Vzorové řešení
Dobrovolné příklady pro pokročilé:
N-tý ve frontě je vyvolený
Na vstupu dostanete posloupnost celých čísel oddělených bílými znaky. Poslední číslo je -1. Vypište druhé největší číslo.
- Vypište druhou nejvyšší hodnotu.
- Vypište N-té nejvyšší číslo / N-tou nejvyšší hodnotu, kde N je [1, 100].
- Stejně jako předchozí, ale N není shora omezeno.
Můžete předpokládat, že vstup je zadaný tak, aby vždy byla jednoznačná odpověď (tedy vždy je na vstupu dostatek čísel). Zkuste se zamyslet nad efektivitou vašeho řešení po časové i paměťové stránce.
Read(i)
Přečtěte z textového vstupu kladné číslo typu int (v desítkové soustavě). Ignorujte všechny nečíselné znaky, které číslu v textu předcházejí. Modifikace:
- Umožněte přečíst i záporná čísla.
- Upravte program tak, aby bylo možné převést číslo v číselné soustavě o základu N, kde N je [1, 36].
Předpokládáme, že cifry pro soustavy o vyšším základu než 10 jsou číslice a následně písmena abecedy. Tedy v 20-kové soustavě bude (2H)20 = (57)10.