19 - Vetvenia + cykly

Doteraz sme sa naučili niekoľko základných prvkov programu:

  • premenné a výrazy s nimi

  • podprogramy a udalosti

  • vetvenie if

  • cykly for

Je na čase začať ich kombinovať, lebo tak sa nám mnohonásobne rozšíria možnosti, čo vieme urobiť. Rozcvičíme si podmienky a cykly samostatne a potom ich budeme spájať.

Úloha 1

Kamarátku pozdravíte „Ahoj“, ale viete, že starších ľudí treba pozdraviť slušne, napríklad „Dobrý deň“. Napíšte program, v ktorom do premennej vek priradíte vek človeka. Potom použite príkaz vetvenia na to, aby sa program podľa veku rozhodol, ktorý z uvedených dvoch pozdravov vypíše. Otestujte, aké pozdravy sa vypisujú pre rôzne hodnoty premennej vek.

Úloha 2

Na brigáde v bufete vás zaplatia podľa takéhoto pravidla:

  • ak budete pracovať menej ako 10 hodín, tak zarobíte 3 eurá za hodinu,

  • inak dostanete plat 4 eurá za hodinu.

Do premennej hodin priraďte počet odpracovaných hodín. Vypíšte hlášku o počte odpracovaných hodín. Potom pomocou príkazu vetvenia vypíšte, koľko zarobíte. Program vypíše napríklad:

Pracovali ste 7 hodin.
Zarobili ste 21 eur.

Alebo:

Pracovali ste 12 hodin.
Zarobili ste 48 eur.

Úloha 3

Predchádzajúca úloha sa dá riešiť aj takto:

int plat;
int hodin = 20;

if ( .................... )
{
  plat = ................
}
else
{
  plat = ................
}

println("Pracovali ste", hodin, "hodin");
println("Zarobili ste", plat, "eur.");

Doplňte namiesto vybodkovaných častí správne výrazy. Overte, že program korektne počíta plat pre rôzne hodnoty premennej hodin.

Úloha 4

Vytvorte skeč, ktorý vygeneruje náhodnú hodnotu premennej cas z rozsahu 018 a podľa tejto hodnoty nakreslí buď krajinku s trávou a oblohou. Ak je cas < 8, obloha je tmavá a svieti mesiac, inak je obloha svetlá a svieti slnko.

cas < 8
inak

Úloha 5

Nasledujúci program vypíše denný harmonogram:

for (int i = 0; i < 8; i++)
{
    println(i, "ešte spím");
}
for (int i = 8; i < 16; i++)
{
    println(i, "som v škole"); 
}

Čo program vypíše?

Program sa dá zapísať aj takto, iba pomocou jedného cyklu:

for (int i = 0; i < 16; i++)
{
  if (i < 8)
  {
    println(i, "ešte spím");
  } else
  {
    println(i, "som v škole");
  }
}

Telo cyklu for obsahuje jeden vnorený príkaz vetvenia if else. Vyskúšajte, ako funguje táto verzia.

Vetvenie vnorené v cykle

Úloha 6

Podobne, ako v predchádzajúcom príklade, použite cyklus s vnoreným vetvením a vypíšte:

0 km je blizko
10 km je blizko
20 km je blizko
30 km je blizko
40 km je blizko
50 km je uz daleko
60 km je uz daleko
70 km je uz daleko
80 km je uz daleko
90 km je uz daleko

Úloha 7

Pomocou jediného cyklu s vnoreným vetvením nakreslite takéto koráliky.

Úloha 8

Vytvorte grafický ekvalizér. Na obrazovke je 10 dielikov nakreslených vedľa seba. Prvých niekoľko je zelených, ostatné sú červené. To, koľko je tých niekoľko, je náhodné číslo z rozsahu 010.

Pozor! Ak vám program robí toto, máte niečo zle:

Úloha 9

Vložte svoj program do setup a draw a rozpohybujte svoj ekvalizér.

Ak sa vám nepáči, že bliká rýchlo, tak môžete program spomaliť pomocou príkazu frameRate(10); ktorý dáte do setup.

Vetvenie vnorené vo vetvení

Už poznáme vetvenie pomocou podmienky, či je niečo menšie alebo väčšie. Ako by sme urobili vetvenie, ktoré sa bude pýtať, či je niečo rovné?

Úloha 10

Urobte program, ktorý 10-krát vygeneruje náhodné celé číslo od 1 do 6, ako keby sme hádzali kockou. V každom kole cyklu si uložte vygenerované čislo do premennej kocka.

Keď hodíme 6ku, tak vypíše: Vyhravas!. Inak vypíše napríklad Hodil si 3, prehravas.

Keď sa chceme spýtať, či je premenná k rovná číslu, 6, použijeme takýto znamienko ==:

if (k == 6)
{ 
    ....
}

Takto môže vyzerať výpis:

Hodil si 1 prehravas
Hodil si 4 prehravas
Hodil si 1 prehravas
Hodil si 1 prehravas
Hodil si 3 prehravas
Vyhravas!
Hodil si 2 prehravas
Vyhravas!
Hodil si 4 prehravas
Hodil si 3 prehravas

Uistite sa, že vám kocka nehádže číslo 0 a že vám kocka hádže aj číslo 6.

Znamienko = je priradenie hodnoty do premennej. Znamienko == je porovnanie, či sa niečo rovná niečomu inému.

Úloha 11

Urobte nový program (alebo upravte program z predošlej úlohy), ktorý vypisuje čísla hodené na kocke a spočíta, koľkokrát padla 6ka:

6
2
5
6
2
3
2
4
1
2
Padlo 2 sestiek a 8 inych cisel

Úloha 12

Futbaloví rozhodcovia sa dohodli, ako budú hráčov hodnotiť za priestupky:

  • ak hráč spraví 0 priestupkov, hrá férovo,

  • ak spraví 1 alebo 2 priestupky, dostáva žltú kartu,

  • inak dostane červenú a je vylúčený z hry.

Vidíme, že v tejto úlohe je viac podmienok. Pozri si a vyskúšaj toto riešenie:

int pocet = 0;

if (pocet == 0)
{
     println("Hráš férovo");
}
else
{
    if (pocet < 3)
    {
         println("Máš žltú kartu");
    }         
    else
    {
        println("Máš červenú kartu");
    }
}

Doplň do tabuľky, čo program vypíše, ak do premennej pocet priradíme hodnotu:

Čomu sa rovná pocet
Čo program vypíše

pocet = 0

pocet = 1

pocet = 2

pocet = 3

pocet = 4

pocet = -1

Úloha 13

Cyklistov budeme zaraďovať do 3 kategórií, podľa toho koľko kilometrov prejdú za hodinu:

  • ak prejde menej ako 10 kilometrov, koláčikov, je to začiatočník

  • ak prejde aspoň 10 ale menej ako 20 kilometrov, je to pokročilý

  • pre aspoň 20 kilometrov, bude hodnotený ako expert.

Vytvorte program, v ktorom najprv do premennej kilometre priradíte počet prejdených kilometrov. Program sa potom rozhodne, akú hlášku vypíše.

Otestujte, že program zobrazí správnu hlášku pre čísla 1, 9, 10, 19, 20, 100.

Úloha 14

V Úlohe 11 vidno, že počítač nevie správne skloňovať slová. Mal by vypísať:

  • Padla 1 šestka...

  • Padli 2 šestky...

  • Padlo 5 šestiek...

Napíš program, v ktorom do premennej n priradíš číslo a počítač zobrazí gramaticky správnu vetu.

Úloha 15

Chceš porovnať svoj vek s kamarátkou. Vytvor program, v ktorom do premenných ja a ona priradíš tvoj vek a vek tvojej kamarátky. Program ich porovná a podľa toho vypíše: Sme rovnako starí, Mám menej rokov alebo Ona je mladšia.

Úloha 16

Vlajku Nemecka môžeš nakresliť aj tak, že pomocou cyklu vygeneruješ 10000 náhodných súradníc x z intervalu 10, 350 a y z intervalu 10, 250. Na vygenerované súradnice nakreslíš farebný krúžok s polomerom 5. Farbu krúžku zvolíš podľa y-ovej súradnice:

  • ak je y < 90 kresli čierny krúžok,

  • inak, ak je y < 170 kresli červený krúžok,

  • inak nakresli žltý krúžok.

Vyskúšaj tento program spustiť aj pre menší počet farebných krúžkov (napríklad 100 alebo 1000)

Úloha 17 **

Vytvor program, ktorý podobne, ako v predchádzajúcej úlohe, nakreslí vlajku bývalého Československa:

Last updated