Karel Says Goodbye, NetBeans Says Hello

Ciele

  1. Oboznámiť sa so základnými údajovými typmi jazyka C.
  2. Naučiť sa pracovať s aritmetickými cyklami.
  3. Naučiť sa pracovať s premennými.
  4. Zoznámiť sa s vývojovým prostredím NetBeans IDE a naučiť sa v ňom ladiť program.
  5. Osvojiť si funkcie pre prácu so štandardným vstupom a výstupom.

Úvod

Na tomto cvičení sa naučíte pracovať s funkciami pracujúcimi so štandardným vstupom (čítanie z klávesnice) a štandardným výstupom (písanie na obrazovku). Tieto funkcie si osvojíte počas implementácie jednoduchých hier s názvom: Koľko je hodín? a Uhádni číslo, ktoré si myslím. Naučíte sa pracovať s vývojovým prostredím NetBeans IDE, ladiť v ňom programy, a nakoniec budete riešiť ďalšie Karlove problémy, pri riešení ktorých sa naučíte pracovať s premennými, ktoré Karlovi v mnohých prípadoch značne uľahčia prácu.

Postup

Krok č. 1

V tejto doplňujúcej úlohe budete riešiť jednoduchú hru s názvom Guess the Number alebo Uhádni číslo, ktoré si myslím, pomocou ktorej sa naučíte pracovať s funkciami pre štandardný vstup a výstup. Implementáciu budete realizovať v prostredí NetBeans IDE.

Úloha 1.1:

Vytvorte nový projekt v prostredí NetBeans IDE s názvom GuessTheNumber.

Úloha 1.2:

V hlavnej funkcii main() vytvorte celočíselnú premennú randomNumber, ktorá bude reprezentovať myslené číslo.
Premennú inicializujte na ľubovoľnú hodnotu. Neskôr, keď si overíte správnosť svojho riešenia, môžete použiť na jej inicializáciu generátor náhodných čísiel v rozsahu od 1 do 100 podľa nasledujúceho príkladu:
                        srand(time(NULL));
                        int randomNumber = (rand() % 100) + 1;
                    

Úloha 1.3:

Vyzvite hráča na zadanie jeho tipu. Následne jeho tip načítajte a uložte do premennej tip.

Úloha 1.4:

Vyhodnoťte hráčov tip oproti hodnote mysleného čísla. Pri hodnotení môže dôjsť k jednej z týchto troch situácií:
  1. hráčov tip je menší, ako je myslené číslo,
  2. hráčov tip je väčší, ako je myslené číslo,
  3. hráčov tip je zhodný s hodnotou mysleného čísla.
Riešenie si overte preložením a spustením programu.

Úloha 1.5:

Upravte program tak, aby hráč číslo hádal dovtedy, kým sa mu ho nepodarí uhádnuť.

Úloha 1.6:

Pri každom pokuse zobrazte hráčovi aktuálne číslo pokusu. Riešenie si overte preložením a spustením programu.

Úloha 1.7:

Upravte program tak, aby hráč mal na uhádnutie čísla pevne stanovený počet pokusov.

Úloha 1.8:

Pri každom pokuse zobrazte hráčovi zostávajúci počet pokusov. Riešenie si overte preložením a spustením programu.
Poznámka:
V prípade, že prekladač objaví chyby, môžete ich nájsť pomocou ladenia programu.

Krok č. 2

Vytvorte pre robota Karla program v prostredí NetBeans, pomocou ktorého bude Karel vedieť zdvojnásobiť počet značiek, ktoré cestou nájde. Karel vždy začne na pozícii [1,1] a prejde celým svetom, pričom zdvojnásobí každú značku, ktorú nájde. Počet značiek, ktoré má Karel k dispozícii na riešenie tejto úlohy, je dostatočný.

Úloha 2.1:

V prostredí NetBeans IDE vytvorte nový projekt s názvom Multiplier.
Poznámka:
V spodnej časti tejto stránky si stiahnite hlavičkový súbor karel.h a knižnice Karel the Robot a curses.

Úloha 2.2:

Do projektu pridajte knižnice pre prácu s robotom.
Poznámka:
Knižnica Karel the Robot musí byť na zozname uvedená pred knižnicou curses.
Poznámka:
Príručku pre prácu s prostredím NetBeans IDE nájdete na tejto stránke.

Úloha 2.3:

Nastavte adresár, v ktorom sa nachádza hlavičkový súbor karel.h.

Úloha 2.4:

Upravte rovnaký program z minulého cvičenia pomocou premenných a cyklu for.
Vaše riešenie si overte preložením a spustením programu na nasledujúcich mapách: multiplier1.kw a multiplier2.kw.
Poznámka:
Súbory sveta je potrebné uložiť do adresára aktuálneho NetBeans projektu.
Počiatočná situácia:
Koncová situácia:
Poznámka:
V prípade, že sa súbor sveta nezobrazil ideálne, zmeňte veľkosť terminálového okna vo Vlastnostiach Properties v záložke Rozloženie Layout.

Úloha 2.5:

Ak ste stihli vyriešiť všetky úlohy ešte na cvičení, pokračujte prvou doplňujúcou úlohou.

Doplňujúce úlohy

  1. Modifikujte program GuessTheNumber tak, aby počítač hádal číslo, ktoré si myslíte vy ako hráč.
  2. Modifikujte program GuessTheNumber nasledovne: Nech A si myslí číslo a B háda myslené číslo. Používateľ nech zadá interval, na ktorom je číslo hádané. Výstupom nech je konverzácia medzi A a B. Počítač teda bude komunikovať sám so sebou.
  3. Naprogramujte jednoduchú hru s názvom Koľko je hodín? Pomôcť vám môžu nasledujúce pomocné kroky:
    • Celočíselná premenná clock pre uchovávanie aktuálneho času.
    • Výzva pre hráča, aby zadal aktuálny čas, napr. otázkou Koľko je hodín?
    • Načítanie hodnoty aktuálneho času zo štandardného vstupu do premennej clock.
    • Na základe hodnoty aktuálneho času výpis pozdravu na štandardný výstup: Good morning!, Good day!, Good afternoon!, Good evening! alebo Good night!.
  4. Upravte program Koľko je hodín? tak, aby program vedel načítať rôzne formáty času.
  5. Precvičte si ladenie programu v prostredí NetBeans IDE na jednoduchej matematickej úlohe pre umocnenie čísla zadaného zo vstupu. Stiahnite si preto projekt Debug Me a otvorte ho v prostredí NetBeans.

    Porovnajte výstup programu s výstupom uvedeným na nasledujúcom obrázku (na vstupe bola zadaná hodnota 2). Výstupy sú rozdielne, pretože v programe sa nachádzajú tri sémantické chyby.

    Obr.: Koncová situácia po zadaní hodnoty 2

    Pokúste sa nájsť chybu ladením programu. Urobte preto analýzu, kde je vhodné do programu umiestniť body prerušenia (Breakpoints), ktoré sú potrebné pre ladenie programu.

  6. Upravte program pre výpočet mocniny použitím funkcie pow(). Prototyp funkcie pow():
                    double pow( double base, double exp );
                 
    Obr.: Koncová situácia po zadaní hodnoty 2
    Poznámka:
    Pre použitie danej funkcie je potrebné do programu vložiť nasledujúci riadok:
                      #include <math.h>
                    
    Vaše riešenie si overte preložením a spustením programu. Sú vypísané hodnoty správne?
    Poznámka:
    V prípade, že prekladač ohlásil chybu aj napriek math.h, pridajte ku prekladu prepínač -lm. V prostredí NetBeans otvorte vlastnosti projektu a v okne Project Properties v kategórii C Compiler pridajte do Additional Options prepínač -lm.
    Poznámka:
    V prípade, že na výstupe neboli vypísané správne hodnoty, otvorte v prostredí NetBeans vlastnosti projektu a v okne Project Properties v kategórii C Compiler nastavte Warning Level na More Warnings, prípadne pridajte do Additional Options prepínač -Wall. Preložte program a sledujte varovania prekladača.
  7. Upravte riešenie programov stairs, stairsbuilder, treasuremap a mirror z predošlého cvičenia s využitím poznatkov nadobudnutých na tomto cvičení.
  8. Upravte riešenie programu olympics z druhého cvičenia tak, aby Karel zistil, akú najvyššiu prekážku vo svojom behu zdolal. Po nájdení značky, ktorá znamená koniec behu, položí Karel na jeho miesto taký počet značiek, ktorý bude rovný výške najvyššej zdolanej prekážky. Karel ukončí svoj beh krokom na ďalšiu pozíciu.
  9. Vytvorte program, pomocou ktorého načítate zo vstupu postupnosť čísiel, pričom načítavanie ukončíte zadaním hodnoty 0. Na obrazovku vypíšte najväčšie zadané číslo, najmenšie zadané číslo, súčet všetkých zadaných čísiel a ich aritmetický priemer.
  10. Stiahnite si projekt printf() Examples a naštudujte si rôzne spôsoby formátovania výstupu. Popis k projektu nájdete v súbore printf.pdf.
$Id$