03. Výpočty
Začnime tým, že podobne ako v minulej lekcii sme vypli komponent Vypisovanie, vypnime aj komponent Premenne. Urobíme si nový skript pre novú lekciu, nech sa nám to nemotá.
Vytvorte nový skript Vypocty, priraďte ho na game object Main Camera a otvorte si skript v editore.
Opäť budeme písať príkazy do metódy Start
.
Keď sme skúšali do konzoly vypísať výraz 1+1
, počítač do konzoly vypísal 2
. Nič prekvapivé. V počítačovom jazyku fungujú výpočty rovnako ako v matematike. Môžeme zapisovať rôzne výrazy s použitím matematických operácií.
Vyskúšajte ako fungujú nasledujúce príkazy:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Vypocty : MonoBehaviour { // Start is called before the first frame update void Start() { Debug.Log(1 + 5 * (7 - 3)); Debug.Log(30 / 5); Debug.Log(2 * 2 * 2 * 2 * 2); Debug.Log(1 / 2); } // Update is called once per frame void Update() { } }
Skontrolujme si, či nám všetkým vyšlo to isté:

Možno vás zaujalo (a ak nie, tak by malo), že výpis 1/2
vypíše číslo 0
a nie 0.5
. Toto je neintuitívne a býva to zdroj chýb v programoch. Preto si to vyjasníme. V jazyku C# platí konvencia, že akého typu sú čísla v operácii, takého typu bude aj výsledok. Čísla 1 aj 2 sú celé čísla. Preto aj výsledok bude celé číslo. A preto, hoci matematický výsledok 1/2 je 0.5, počítač odsekne desatinnú časť .5 a ponechá len celočíselnú časť 0.
Vyskúšajte čo sa vypíše, ak zmeníme 1/2
na 1f/2
.
Keď sme namiesto 1
(čo je celé číslo, typu int
) použili číslo 1f
(čo je desatinné číslo, typu float
), prinútili sme počítač rátať s jednotkou ako s desatinným číslom. A aj keď nemá desatinnú časť, tak f
ho označuje ako desatinné, a preto aj výsledok bude desatinné číslo a výpis v konzole už bude 0.5 namiesto 0.
Výpočty s premennými
Takisto, ako sme v minulej lekcii namiesto slova "Kristína"
použili premennú, vieme použiť premenné aj namiesto čísiel vo výpočtoch.
Pozrime sa teraz na v poradí tretí výpis:
void Start() { Debug.Log(1 + 5 * (7 - 3)); Debug.Log(30 / 5); Debug.Log(2 * 2 * 2 * 2 * 2); Debug.Log(1f / 2); }
Zápis 2 * 2 * 2 * 2 * 2
je v skutočnosti 25, ale v C# nemáme jednoduchý operátor na umocnenie, tak to je zatiaľ napísané takto primitívne. Čo keby som po vás chcel, aby ste zápis zmenili tak, aby počítal 35 ? A čo keby som chcel, aby ste zápis zmenili na 45 ? Budete prepisovať čísla ako úradníci. My sme ale programátori a nie úradníci. Takže namiesto dvojek si vytvoríme premennú a budeme meniť už len hodnotu premennej.
- Vytvorte v metóde
Start
novú premennú názvomn
a priraďte do nej hodnotu 3. Premenná nech je celočíselného typu. - Nahraďte každú dvojku vo výraze
2 * 2 * 2 * 2 * 2
premennoun
.
Program by mal vypísať 243:

Aké číslo vám vypíše, keď zmeníme n
na hodnotu 4 ?
Teraz by ste už mali zvládnuť takéto jednoduché cvičenie:
- Doplňte do programu premennú
polomer
a nastavte jej hodnotu na2.5f
- Doplňte do programu výpis, ktorý vypíše obvod kruhu s takýmto polomerom. Použite hodnotu
3.14f
namiesto čísla Pí.
Všimnite si, že desatinné čísla zapisujeme s desatinnou bodkou, nie čiarkou
Takto by mal vyzerať váš výpis:

Doplňte do programu výpis, ktorý vypíše aj obsah takéhoto kruhu:

Výpočty s viacerými premennými
Premenné môžeme vo výrazoch aj kombinovať navzájom. Napríklad vyrobíme výpočet veku z roku narodenia a aktuálneho roku:
- Vytvorte premennú
rok_narodenia
a priraďte do nej svoj rok narodenia - Vytvorte premennú
rok_teraz
a priraďte do nej súčasný rok - Vytvorte premennú
vek
a priraďte do nej rozdiel premennýchrok_teraz
arok_narodenia
. - Pridajte do programu výpis hodnoty premennej
vek
.

Len pre kontrolu, takto nejak vyzerá aktuálne náš kód:
void Start() { int n = 4; Debug.Log(1 + 5 * (7 - 3)); Debug.Log(30 / 5); Debug.Log(n * n * n * n * n); Debug.Log(1f / 2); float polomer = 2.5f; Debug.Log("Obvod kruhu je " + 2 * 3.14 * polomer); Debug.Log("Obsah kruhu je " + 3.14 * polomer * polomer); int rok_narodenia = 1980; int rok_teraz = 2020; int vek = rok_teraz - rok_narodenia; Debug.Log("Tvoj vek je " + vek); }
Neskúšajte si zjednodušiť prácu takýmto výpisom:
Debug.Log("Tvoj vek je " + rok_teraz - rok_narodenia);
C# nebude vedieť ako odpočítať rok_narodenia
od textu "Tvoj vek je "
a zahlási chybu:

Výpočty na jednej premennej
Teraz vyskúšame urobiť finančnú kalkulačku. Začnime s premennou ucet
ktorá bude desatinného typu a priradíme jej na začiatok hodnotu 100f
.
float ucet = 100f; Debug.Log("Stav na ucte je " + ucet);
Teraz pripočítame na účet 1 euro:
float ucet = 100f; Debug.Log("Stav na ucte je " + ucet); ucet = ucet + 1; Debug.Log("Stav na ucte je " + ucet);
A takto pridáme na účet 2% úrok:
float ucet = 100f; Debug.Log("Stav na ucte je " + ucet); ucet = ucet + 1; Debug.Log("Stav na ucte je " + ucet); ucet = ucet + 0.02f * ucet; Debug.Log("Stav na ucte je " + ucet);
Do konzoly nám pribudli takéto výpisy:

Pre výpočty s jednou premennou sú v jazyku C# aj viaceré zjednodušenia, aby sme si toľko neničili prsty. Napríklad:
- Namiesto
ucet = ucet + 3
môžeme napísaťucet += 3
- Namiesto
ucet = ucet + 1
môžeme napísaťucet += 1
, a špeciálne pri čísle 1 môžeme použiť ajucet++
- Namiesto
ucet = 1.02f * ucet
môžeme napísaťucet *= 1.02f
- Podobne to funguje aj s operáciami
/
a-
Teraz by ste už mohli vedieť aj sami zrealizovať nasledujúce zadanie:
- Vytvorte nový skript, ktorý sa bude volať Health a priraďte ho na game objekt Main Camera
- Vytvorte v metóde
Start
premennúzdravie
, ktorá bude desatinného typu a priraďte do nej na začiatok hodnotu 100. - Vytvorte premennú
lekarnicka
a priraďte do nej hodnotu 10 - Znížte zdravie o 30.
- Pridajte k zdraviu hodnotu lekárničky.
- Zvýšte zdravie na 1.5-násobok.
- Po každej zmene vypíšte hodnotu zdravia.
Takto by mal vyzerať výpis:

Zhrnutie
Rôzne výpočty budeme pri programovaní používať často. Slúžia nám k tomu matematické výrazy a vieme v nich používať aj premenné, ktorými vo výpočtoch nahrádzame konkrétne hodnoty.