Do nového roku jako lepší programátoři? Znovu otevíráme večerní školu programování. Nette framework, návrhové vzory, testování nebo vůbec poprvé kurzy ASP.NET dostupné odkudkoli v republice.

Cvičení k 10. a 11. lekci Céčka

C++ Základní konstrukce C Cvičení k 10. a 11. lekci Céčka

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Následující 3 cvičení vám pomohou procvičit znalosti programování v C z minulých lekcí. Ve vlastním zájmu se je pokuste vyřešit sami. Pod článkem máte pro kontrolu řešení ke stažení. Ale pozor, jakmile se na něj podíváte bez vyřešení příkladů, ztrácí pro vás cvičení smysl a nic se nenaučíte :)

Pokud si opravdu nebudete vědět rady, podívejte se raději znovu do minulého tutoriálu a pokuste se na to přijít.

Jednoduchý příklad

Vytvořte program, který do konzole vykreslí šachovnici. Pro tmavá pole můžete využít mřížku "#" nebo kterýkoli jiný znak, pro světlá pole využijte mezeru.

Vykreslení šachovnice v Céčku

Tip: Pro vykreslení samozřejmě využijte znalosti cyklů. Pro zjištění zda je pole světlé nebo tmavé vám pomůže modulo.

Středně pokročilý příklad

Naprogramujte aplikaci, která simuluje hru piškvorky pro 2 hráče. Aplikace vykresluje hrací plochu do konzole a nechává si střídavě od hráčů zadávat souřadnice, na které pokládají své kameny. Kontrolu výhry můžete zanedbat, uživatelské vstupy ošetřete.

K reprezentaci hrací plochy využijte vícerozměrného pole.

Ukázka programu:

Piškvorky v Céčku

Pokročilý příklad

Pomocí goniometrické funkce sinus vykreslete do konzole jednu periodu sinusoidy (grafu této funkce).

Nápověda: Protože je vypisování pouze jednosměrné (co napíšeme již nelze vzít zpět) a lineární (musíme zapisovat znaky, jak jdou po sobě), používá se u úloh podobného typu tzv. buffer. Buffer je pole znaků v paměti, kde si připravíme jak chceme obrazovku vykreslit a teprve až je vše jak potřebujeme, vykreslíme vše naráz. V tomto případě si vytvoříme buffer podle rozměrů, které si nastavíme (bude se jednat o 2D pole). Do tohoto bufferu zaneseme jednotlivé body sinu. Až budeme mít celý výpočet hotový, teprve poté celý buffer vykreslíme do konzole.

Ukázka programu:

Vykreslení sinu v Céčku

Tip: Perioda funkce sinus je 2 PI. Začněte vykreslením této křivky v poměru 1:1, sice bude malá, ale bude v konzoli vidět. Abyste dosáhli výsledku jako na obrázku, musíte ji pronásobit poměrem rozměrů konzole a hodnotou funkce sinus. Sinusoida se poté roztáhne. Jednotlivé souřadnice bodů vypočítávejte v desetinných číslech, výsledné souřadnice teprve zaokrouhlíte na celé znaky.


 

Stáhnout

Staženo 45x (98.81 kB)
Aplikace je včetně zdrojových kódů v jazyce c

 

  Aktivity (4)

Článek pro vás napsal patrik.valkovic
Avatar
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu.

Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!


 


Miniatura
Předchozí článek
Matematické funkce v jazyce C
Miniatura
Všechny články v sekci
Programování v jazyce C - Základy
Miniatura
Následující článek
Funkce v jazyce C

 

 

Komentáře

Avatar
Mate
Člen
Avatar
Mate:

Dobrý den,

řešení středně těžkého příkladu, které tu máte ke stažení není správně. Nefunguje zadávání do sloupce H.

Tak není ošetřeno zadávání malých písmen (to ale není součástí zadání).

 
Odpovědět 25.7.2016 16:11
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Mate
patrik.valkovic:

Chybělo rovnítko, mělo by to být opraveno.

Odpovědět 25.7.2016 19:03
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Johny
Člen
Avatar
Johny:

Dobrý den,

prosím o kritiku k mému kodu.

krok = (2*M_PI)/(double)SIRKA;     // vypocet kroku pro inkrementaci pred vypoctem funkce SIN

      for(i=0; i<SIRKA; i++){
               hodnota = sin(i*krok);
               j = (int)trunc((hodnota*10));
               if(j>0)
               {
                       j = 10 - j;
                      buffer[i][j] = '#';
               }
               else if(j<=0){
                       j = (((-1)*j) + 9);
                       buffer[i][j] = '#';
                       }

               printf("%d = %2.2f\t", j, (hodnota*10));
               if(i%5 == 0)printf("\n");

      }

Děkuji :-)

 
Odpovědět 12. ledna 13:38
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Johny
DarkCoder:
  1. opakující se výpočet výrazu v závorce, lepší zařadit koeficient násobení 10 do výpočtu proměnné hodnota
  2. trunc není nejšťastnější, lepší je použit round
  3. if za else je zbytečné, stačí else
  4. tentýž příkaz v obou podmínkách je lepší zařadit za tyto podmínky
  5. pro testy na nulu je lepší užívat operátor negace !
 
Odpovědět 12. ledna 21:52
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.