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:

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:

  1. Základy - funkce main(), datové typy, proměnné, operátory
  2. Komentáře- rozlišení řádkového (//...) a blokového (/*...*/)
  3. Základní vstup a výstup - funkce getchar() a putchar(), funkce printf() pro výstup pevně zadaného řetězce
  4. Větvení programu - konstrukce if (...) {...}, else if (...) {...}, else {...}
  5. Cykly - while (...) {...}, do {...} while (...), for (...;...;...) {...}
  6. Přepínač - switch (...) { case ...: ... break; ... default: ... }
  7. Pokročilejší vstup a výstup - funkce printf() a scanf() včetně formátových specifikací (%d, %c, %s, ...)
  8. Funkce a procedury - ukázky definice, návratové hodnoty, argumenty
  9. Pole - definice, přístup k jednotlivým prvkům
  10. Vícerozměrná pole a konstanty - rozšíření znalostí získaných na jednorozměrných polích
  11. Struktury - ukázka na implementaci jednoduchého zásobníku
  12. 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.

  1. Vypište druhou nejvyšší hodnotu.
  2. Vypište N-té nejvyšší číslo / N-tou nejvyšší hodnotu, kde N je [1, 100].
  3. 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:

  1. Umožněte přečíst i záporná čísla.
  2. 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.