Programovanie (1) v C/C++
1-INF-127, ZS 2024/25

Úvod · Pravidlá · Prednášky · Softvér · Testovač
· Kontaktujte nás pomocou e-mailovej adresy E-prg.png (bude odpovedať ten z nás, kto má príslušnú otázku na starosti alebo kto má práve čas).
· Prosíme študentov, aby si pravidelne čítali e-maily na @uniba.sk adrese alebo aby si tieto emaily preposielali na adresu, ktorú pravidelne čítajú.


Prednáška 1: Rozdiel medzi revíziami

Z Programovanie
Skočit na navigaci Skočit na vyhledávání
 
(61 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených)
Riadok 1: Riadok 1:
 
Pozrite si [[Zimný semester, úvodné informácie|úvod k predmetu]] a [[Zimný semester, pravidlá|pravidlá]].
 
Pozrite si [[Zimný semester, úvodné informácie|úvod k predmetu]] a [[Zimný semester, pravidlá|pravidlá]].
  
==Organizačné poznámky==
+
==Oznamy==
* Zajtra budú hlavné cvičenia s prvými bodovanými príkladmi
+
* Ak nemáte predmet zapísaný v AIS, zapíšte si ho pokiaľ možno už dnes do 14:00, aby sme pre vás pripravili konto na cvičenia.
** Oboznámenie sa s prostredím, s testovačom, riešenie jednoduchých príkladov k prvej prednáške
+
* Zajtra budú hlavné cvičenia s prvými bodovanými príkladmi.
** Budete potrebovať prihlasovacie meno a heslo do AIS2 na prihlásenie na počítač v učebni
+
** Dve skupiny 9:50 a 14:50, zaradenie do skupiny ste dostali emailom. Treba prísť na určenú skupinu.
** Aspoň na úvod cvičenia odporúčame prísť aj pokročilým
+
** Oboznámenie sa s prostredím, s testovačom, riešenie jednoduchých príkladov k prvej prednáške.
* Do piatka sa prihlásiť na test pre pokročilých
+
** Budete potrebovať prihlasovacie meno a heslo do AIS2 na prihlásenie na počítač v učebni.
* Test pre pokročilých bude budúcu stredu počas doplnkových cvičení
+
** Budete potrebovať aj heslo na náš testovač, ktoré vám pošleme dnes večer.
* Ak si neviete C++ nainštalovať na notebook, prineste ho na doplnkové cvičenia budúcu stredu, skúsime pomôcť (hlavne ak máte Windows)
+
** Aspoň na úvod cvičenia odporúčame prísť aj pokročilým.
 +
** Môžete si priniesť a používať aj vlastný počítač.
 +
** Ak z vážnych príčin nemôžete prísť, kontaktujte nás a dohodneme náhradné riešenie.
 +
* Na cvičení alebo aj skôr prosím vyplňte anonymnú [https://forms.gle/ECzWp4kf3MEKhVzEA anketu].
 +
* V stredu druhá prednáška.
 +
* Tento piatok sú doplnkové cvičenia pre všetkých nepovinné.
 +
* Ak si neviete C++ nainštalovať na notebook, prineste ho na doplnkové cvičenia niektorý piatok, skúsime pomôcť.
 +
* Do stredy obeda sa v prípade záujmu prihláste na test pre pokročilých.
 +
* Test pre pokročilých bude v piatok počas doplnkových cvičení v I-H3.
  
 
== Programátorské prostredie ==
 
== Programátorské prostredie ==
  
* Na tomto predmete budeme programovať v jazyku '''C++''', budeme však z neho používať len malú časť
+
* Na tomto predmete budeme programovať v jazyku '''C++''', budeme však z neho používať len malú časť.
* Budeme používať programátorské prostredie '''NetBeans''', ktoré spríjemňuje a zjednodušuje prácu alebo jednoduchší editor '''Kate'''
+
* Na cvičeniach odporúčame vyskúšať ako v operačnom systéme '''Linux''' používať editor '''Kate'''.
* Cvičenia a skúšky budú v operačnom systéme '''Linux'''
 
  
 
* Môžete používať aj iné programátorské prostredia, ale
 
* Môžete používať aj iné programátorské prostredia, ale
** odovzdané programy (DÚ, skúška) musia správne pracovať v prostredí ako na cvičeniach
+
** odovzdané programy musia správne pracovať na testovači,
** počas skúšky budete mať k dispozícii len to, čo beží v učebniach v Linuxe
+
** počas skúšky budete mať k dispozícii len to, čo beží v učebniach v Linuxe bez pripojenia na internet,
** viac informácií na stránke [[#Netbeans#Alternat.C3.ADvy_k_Netbeans|o alternatívach k Netbeans]]
+
** v iných prostrediach vám nemusíme vedieť pomôcť s ich používaním.
 +
* Ak na vašom počítači máte Windows, namiesto Kate si môžete nainštalovať napr. Visual Studio Code.
 +
** Viac informácií na stránke [[Zimný semester, softvér#In.C3.A9_program.C3.A1torsk.C3.A9_prostredia|o alternatívach ku Kate]].
 +
* Vypnite si v programátorských prostrediach AI pomocné nástroje na písanie alebo opravovanie kódu.
  
* Netbeans a ďalšie potrebné nástroje si môžete nainštalovať zadarmo aj na vašom počítači  
+
* Potrebné nástroje si môžete nainštalovať zadarmo aj na vašom počítači alebo môžete mimo rozvrhu používať školské učebne.
** [[#Netbeans|Návod k práci v prostredí Netbeans]]
 
  
 
==Prvý program==
 
==Prvý program==
  
 
* Tradične sa v učebniciach programovania ako prvý uvádza program, ktorý iba vypíše na obrazovku text <tt>"Hello world!"</tt>. Tu je v jazyku C++:
 
* Tradične sa v učebniciach programovania ako prvý uvádza program, ktorý iba vypíše na obrazovku text <tt>"Hello world!"</tt>. Tu je v jazyku C++:
{{preC|
+
<syntaxhighlight lang="C++">
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
  
int main(void) {
+
int main() {
 
     cout << "Hello world!" << endl;
 
     cout << "Hello world!" << endl;
 
}
 
}
}}
+
</syntaxhighlight>
 
* Samotný text je vypísaný príkazom <tt>cout << "Hello world!" << endl;</tt>
 
* Samotný text je vypísaný príkazom <tt>cout << "Hello world!" << endl;</tt>
 
* Všimnite si, že text <tt>Hello world!</tt> sme dali do úvodzoviek, čím poukazujeme na to, že to nie sú príkazy programovacieho jazyka, ale text, s ktorým treba niečo robiť.
 
* Všimnite si, že text <tt>Hello world!</tt> sme dali do úvodzoviek, čím poukazujeme na to, že to nie sú príkazy programovacieho jazyka, ale text, s ktorým treba niečo robiť.
* Za príkazom sme dali bodkočiarku, ktorá ho ukončuje.
+
* Za príkaz sme dali bodkočiarku, ktorá ho ukončuje.
 
* O vypisovaní si povieme viac neskôr, ale už teraz môžete vypisovať rôzne texty tým, že zmeníte text medzi úvodzovkami.  
 
* O vypisovaní si povieme viac neskôr, ale už teraz môžete vypisovať rôzne texty tým, že zmeníte text medzi úvodzovkami.  
  
* Riadok <tt>int main(void) {</tt> označuje začiatok programu, program ide až po ukončovaciu zloženú zátvorku <tt>}</tt>
+
* Riadok <tt>int main() {</tt> označuje začiatok programu, program ide až po ukončovaciu zloženú zátvorku <tt>}</tt>
 
* Jazyk C++ sám o sebe neobsahuje príkazy na vypisovanie (<tt>cout <<...</tt>). Na to potrebujeme použiť '''knižnicu''': súbor príkazov, ktoré niekto už naprogramoval a my ich len používame. Prvé dva riadky programu nám umožnia používať štandardnú knižnicu <tt>iostream</tt>, ktorá je súčasťou C++ a ktorá obsahuje príkazy na vypisovanie.
 
* Jazyk C++ sám o sebe neobsahuje príkazy na vypisovanie (<tt>cout <<...</tt>). Na to potrebujeme použiť '''knižnicu''': súbor príkazov, ktoré niekto už naprogramoval a my ich len používame. Prvé dva riadky programu nám umožnia používať štandardnú knižnicu <tt>iostream</tt>, ktorá je súčasťou C++ a ktorá obsahuje príkazy na vypisovanie.
  
Riadok 46: Riadok 55:
 
===Spúšťanie programu===
 
===Spúšťanie programu===
 
* Na to, aby sme náš program mohli spustiť na počítači, potrebujeme ho najskôr '''skompilovať''', t.j. preložiť do spustiteľného strojového kódu.
 
* Na to, aby sme náš program mohli spustiť na počítači, potrebujeme ho najskôr '''skompilovať''', t.j. preložiť do spustiteľného strojového kódu.
* Ako na to, nájdete v [[#Netbeans|návode k práci v prostredí Netbeans]]
+
* Ako na to, nájdete [[Zimný_semester,_softvér#Kate|v návode na prácu s editorom Kate]].
* V prostredí Netbeans vieme program aj spustiť, môžeme si ho však aj skopírovať a spúšťať na iných počítačoch nezávisle od Netbeans.
 
  
 
==Ďalší jednoduchý program==
 
==Ďalší jednoduchý program==
  
 
* Podobným spôsobom môžeme vypísať aj iný text. Napríklad dnešný dátum:
 
* Podobným spôsobom môžeme vypísať aj iný text. Napríklad dnešný dátum:
<pre>
+
<syntaxhighlight lang="C++">
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
  
int main(void) {
+
int main() {
     cout << "Dnes je 24.9.2018!" << endl;
+
     cout << "Dnes je 23.9.2024." << endl;
 
}
 
}
</pre>
+
</syntaxhighlight>
  
* Cvičenie: Vypíšte dátum v rôznych formátoch (skrátený formát, americký formát, ...). Každý na jeden riadok.
+
* Cvičenie: Rozšírte program tak, aby na druhý riadok vypísal dátum v americkom formáte mesiac/deň/rok.
  
 
==Premenné==
 
==Premenné==
Riadok 67: Riadok 75:
 
Príklad z cvičenia by mohol vyzerať napríklad takto:
 
Príklad z cvičenia by mohol vyzerať napríklad takto:
  
<pre>
+
<syntaxhighlight lang="C++">
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
 
+
int main() {
int main(void) {
+
     cout << "23.9.2024" << endl;
     cout << "24.9.2018" << endl;
+
     cout << "9/23/2024" << endl;
    cout << "24.9." << endl;
 
     cout << "9/24/2018" << endl;
 
 
}
 
}
</pre>
+
</syntaxhighlight>
  
Ak by sme v ňom chceli zmeniť dátum na prvú prednášku o rok, museli by sme pomeniť vhodné čisla v celom programe. Navyše keď vidíme v programe nejaké číslo, nemusí byť úplne jasné, ako sme k nemu prišli.
+
Ak by sme v ňom chceli zmeniť dátum na prvú prednášku o rok, museli by sme pomeniť vhodné čísla na dvoch miestach. Navyše keď vidíme v programe nejaké číslo, nemusí byť úplne jasné, čo znamená.
  
 
Program teraz prepíšeme tak, aby sme deň, mesiac a rok mali zapísané symbolicky a mohli ich meniť na jednom mieste.
 
Program teraz prepíšeme tak, aby sme deň, mesiac a rok mali zapísané symbolicky a mohli ich meniť na jednom mieste.
  
<pre>
+
<syntaxhighlight lang="C++">
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
 
+
int main() {
int main(void) {
+
     int den = 23;
     int den = 24;
 
 
     int mesiac = 9;
 
     int mesiac = 9;
     int rok = 2018;
+
     int rok = 2024;
  
 
     cout << den << "." << mesiac << "." << rok << endl;
 
     cout << den << "." << mesiac << "." << rok << endl;
    cout << den << "." << mesiac << "." << endl;
 
 
     cout << mesiac << "/" << den << "/" << rok << endl;
 
     cout << mesiac << "/" << den << "/" << rok << endl;
 
}
 
}
</pre>
+
</syntaxhighlight>
  
 
Symbolickým hodnotám '''den, mesiac, rok''' sa hovorí '''premenné'''.
 
Symbolickým hodnotám '''den, mesiac, rok''' sa hovorí '''premenné'''.
  
* Premmená je vyhradené miesto v pamäti počítača, ku ktorému v programe pristupujeme pod určitým názvom.
+
* Premenná je vyhradené miesto v pamäti počítača, ku ktorému v programe pristupujeme pod určitým názvom.
 
* Do tejto pamäti si môžeme zapísať hodnotu a neskôr ju použiť.
 
* Do tejto pamäti si môžeme zapísať hodnotu a neskôr ju použiť.
  
Riadok 108: Riadok 112:
 
Ak v programe premenným priradíme iné čísla, môžeme vypísať iný dátum.
 
Ak v programe premenným priradíme iné čísla, môžeme vypísať iný dátum.
  
Príkaz <tt>int x = 100;</tt> vieme rozpísať aj na dva príkazy <tt>int x; x = 100;</tt>. Prvý z nich vytvorí premennú <tt>x</tt>, ktorá bude mať nejakú ľubovoľnú hodnotu a druhý túto počiatočnú hodnotu zmení na 100.
+
Príkaz <tt>int x = 100;</tt> vieme rozpísať aj na dva príkazy:
 +
<syntaxhighlight lang="C++">
 +
int x;  
 +
x = 100;
 +
</syntaxhighlight>  
 +
Prvý z nich vytvorí premennú <tt>x</tt>, ktorá bude mať nejakú ľubovoľnú hodnotu a druhý túto počiatočnú hodnotu zmení na 100.
  
 
==Zhrnutie==
 
==Zhrnutie==
 
* Programy, ktoré sme doteraz videli, vyzerali takto:
 
* Programy, ktoré sme doteraz videli, vyzerali takto:
 
** Najprv sme zapli používanie niekoľkých knižníc
 
** Najprv sme zapli používanie niekoľkých knižníc
** Samotný program začínal <tt>int main(void) {</tt> a končil zloženou zátvorkou <tt>}</tt>
+
** Samotný program začínal <tt>int main() {</tt> a končil zloženou zátvorkou <tt>}</tt>
 
** Program mohol mať niekoľko príkazov ukončených bodkočiarkami, ktoré sa vykonávajú jeden po druhom.
 
** Program mohol mať niekoľko príkazov ukončených bodkočiarkami, ktoré sa vykonávajú jeden po druhom.
  
Riadok 130: Riadok 139:
 
== Textový výpis a načítanie ==
 
== Textový výpis a načítanie ==
  
Vieme už vypísať niečo na obrazovku (výstup - output) a podobne môžeme aj čítať, čo nám používateľ napíše na klávesnici (vstup - input). Takéto zadané hodnoty tiež uložíme do premenných, aby sme s nimi mohli ďalej pracovať.
+
Vieme už vypísať niečo na obrazovku (výstup, output) a podobne môžeme aj čítať, čo nám používateľ napíše na klávesnici (vstup, input). Takéto zadané hodnoty tiež uložíme do premenných, aby sme s nimi mohli ďalej pracovať.
  
 
===Sčítanie čísel===
 
===Sčítanie čísel===
Nasledujúci program od užívateľa vypýta dve čísla a vypíše ich súčet.
+
Nasledujúci program od používateľa vypýta dve čísla a vypíše ich súčet.
  
<pre>
+
<syntaxhighlight lang="C++">
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
  
int main(void) {
+
int main() {
 
     int x, y;
 
     int x, y;
  
Riadok 150: Riadok 159:
 
     cout << x << "+" << y << "=" << result << endl;
 
     cout << x << "+" << y << "=" << result << endl;
 
}
 
}
</pre>
+
</syntaxhighlight>
  
Tu je príklad behu programu, keď užívateľ zadal čísla 10 a 3:
+
Tu je príklad behu programu, keď používateľ zadal čísla 10 a 3:
  
 
<pre>
 
<pre>
Riadok 160: Riadok 169:
 
</pre>
 
</pre>
  
* Tento program používa na vstup a výstup príkazy z knižnice iostream a teda do hlavičky programu dáme <tt>#include <iostream></tt> a <tt>using namespace std;</tt>
+
* Tento program používa na vstup a výstup príkazy z knižnice <tt>iostream</tt> a teda do hlavičky programu dáme <tt>#include <iostream></tt> a <tt>using namespace std;</tt>
* Program najskôr vytvorí dve premenné <tt>x</tt> a <tt>y</tt> typu <tt>int</tt> (a nepriradzuje im zatiaľ žiadne hodnoty)
+
* Program najskôr vytvorí dve premenné <tt>x</tt> a <tt>y</tt> typu <tt>int</tt> (a nepriradzuje im zatiaľ žiadne hodnoty).
* Potom príkazom <tt>cout</tt> vypíše text <tt>"Please enter the first number: "</tt> aby užívateľ vedel, čo má robiť.
+
* Potom príkazom <tt>cout</tt> vypíše text <tt>"Please enter the first number: "</tt> aby používateľ vedel, čo má robiť.
* Potom pomocou príkazu <tt>cin</tt> načíta číslo od používateľa do premennej <tt>x</tt>
+
* Potom pomocou príkazu <tt>cin</tt> načíta číslo od používateľa do premennej <tt>x</tt>.
* To isté opakuje pre premennú <tt>y</tt>
+
* To isté opakuje pre premennú <tt>y</tt>.
 
* Potom vytvorí novú premennú <tt>result</tt> a uloží do nej súčet <tt>x</tt> a <tt>y</tt>.
 
* Potom vytvorí novú premennú <tt>result</tt> a uloží do nej súčet <tt>x</tt> a <tt>y</tt>.
 
* Nakoniec vypíše výsledok aj s výrazom, ktorý sme počítali, pomocou príkazu <tt>cout</tt>.
 
* Nakoniec vypíše výsledok aj s výrazom, ktorý sme počítali, pomocou príkazu <tt>cout</tt>.
Riadok 170: Riadok 179:
 
=== Viac o príkaze cout ===
 
=== Viac o príkaze cout ===
  
* Pomocou <tt>cout</tt> vypisujeme na konzolu, t.j. textovú obrazovku
+
* Pomocou <tt>cout</tt> vypisujeme na konzolu, t.j. textovú obrazovku.
* To, čo chceme vypísať pošleme na <tt>cout</tt> pomocou šípky <tt><<</tt>
+
* To, čo chceme vypísať, pošleme na <tt>cout</tt> pomocou šípky <tt><<</tt>
* <tt>cout << endl;</tt> vypíše koniec riadku
+
* <tt>cout << endl;</tt> vypíše koniec riadku.
 
* Môžeme naraz vypísať aj viac vecí oddelených šípkami <tt><<</tt>
 
* Môžeme naraz vypísať aj viac vecí oddelených šípkami <tt><<</tt>
 
**  Napr. <tt>cout << x << "+" << y << "=" << result << endl;</tt> vypíše najskôr obsah premennej <tt>x</tt> (napr. hodnotu 10), potom znamienko plus (ktoré máme v úvodzovkách), potom obsah premennej <tt>y</tt>, potom znamienko rovnosti, potom obsah premennej <tt>result</tt> a nakoniec koniec riadku.
 
**  Napr. <tt>cout << x << "+" << y << "=" << result << endl;</tt> vypíše najskôr obsah premennej <tt>x</tt> (napr. hodnotu 10), potom znamienko plus (ktoré máme v úvodzovkách), potom obsah premennej <tt>y</tt>, potom znamienko rovnosti, potom obsah premennej <tt>result</tt> a nakoniec koniec riadku.
Riadok 178: Riadok 187:
 
=== Viac o príkaze cin ===
 
=== Viac o príkaze cin ===
  
* Pomocu <tt>cin</tt> načítavame z konzoly údaje od užívateľa
+
* Pomocu <tt>cin</tt> načítavame z konzoly údaje od používateľa.
 
* Tieto údaje pošleme do premenných pomocou šípky <tt>>></tt>
 
* Tieto údaje pošleme do premenných pomocou šípky <tt>>></tt>
 
* Opäť môžeme načítať aj viac vecí naraz, napr. nasledovný úryvok si vypýta obe čísla naraz a uloží ich do premenných ''x'' a ''y''  
 
* Opäť môžeme načítať aj viac vecí naraz, napr. nasledovný úryvok si vypýta obe čísla naraz a uloží ich do premenných ''x'' a ''y''  
 +
<syntaxhighlight lang="C++">
 +
cout << "Please enter two numbers separated by a space: ";
 +
cin >> x >> y;
 +
</syntaxhighlight>
  
    cout << "Please enter two numbers separated by space: ";
+
* Pozor, <tt>cin</tt> nekontroluje, že používateľ zadáva rozumné hodnoty. Čo sa stane, ak namiesto čísla zadá nejaké písmená a podobne?
    cin >> x >> y;
 
 
 
* Pozor, cin nekontroluje, že užívateľ zadáva rozumné hodnoty. Čo sa stane, ak namiesto čísla zadá nejaké písmená a podobne?
 
 
 
== Podmienka (if) ==
 
 
 
Niekedy chceme vykonať určité príkazy len ak sú splnené nejaké podmienky. To nám umožňuje príkaz '''if'''.
 
 
 
* Nasledujúci program si vypýta od užívateľa číslo a vypíše, či je toto číslo záporné (negative) alebo nezáporné (non-negative).
 
 
 
<pre>#include <iostream>
 
using namespace std;
 
 
 
int main(void) {
 
    int x;
 
    cout << "Please enter some number: ";
 
    cin >> x;
 
 
 
    if (x < 0) {
 
        cout << "Number " << x << " is negative." << endl;
 
    } else {
 
        cout << "Number " << x << " is non-negative." << endl;
 
    }
 
}</pre>
 
 
 
* Tu je príklad dvoch behov programu:
 
 
 
<pre>
 
Please enter some number: 10
 
Number 10 is non-negative.
 
</pre>
 
 
 
<pre>
 
Please enter some number: -3
 
Number -3 is odd.
 
</pre>
 
 
 
 
 
* Ako vidíme, za príkazom <tt>if</tt> je zátvorka s podmienkou. V našom príklade podmienka je <tt>x < 0</tt>.
 
* Ak je podmienka v zátvorke splnená (t.j. ak x je menšie ako nula), vykonáme príkazy v zloženej zátvorke za príkazom <tt>if</tt>.
 
* Ak podmienka nie je splnená (t.j. ak je x väčšie alebo rovné nule), vykonáme príkazy v zloženej zátvorke za slovom <tt>else</tt>
 
* Časť <tt>else {...}</tt> je možné vynechať, ak nechceme vykonávať žiadne príkazy.
 
* Ak za if alebo else nasleduje iba jeden príkaz, zátvorky { a } môžeme vynechať. To však ľahko vedie k chybám, preto je lepšie ich vždy použiť.
 
 
 
'''Cvičenie:'''
 
* Pomocou podmienky vypíšte absolútnu hodnotu načítaného čísla.
 
* Namiesto vypísania uložte túto hodnotu do premennej y, ktorá by sa dala ďalej v programe použiť.
 
 
 
=== Vnorené podmienky ===
 
 
 
Príkazy if môžeme navzájom vnárať. Príklad: načítaj číslo a zisti, či je kladné, záporné alebo nula.
 
* Test na rovnosť sa robí operátorom ==
 
 
 
<pre>
 
#include <iostream>
 
using namespace std;
 
 
 
int main(void) {
 
    int x;
 
    cout << "Please enter some number: ";
 
    cin >> x;
 
 
 
    if (x == 0) {
 
        cout << "Zero" << endl;
 
    } else {
 
        if (x > 0) {
 
            cout << "Positive" << endl;
 
        } else {
 
            cout << "Negative" << endl;
 
        }
 
    }
 
 
 
}
 
</pre>
 
 
 
=== Upozornenie===
 
Častá chyba, ktorá sa vyskytuje pri podmienke, je použitie priradenia namiesto porovnania. Keby sme napísali
 
<pre>if (x=0) cout << "Zero" << endl; </pre>
 
tak program do premennej x priradí nulu.
 
 
 
Ďalšia bežná chyba je zabudnutie zložených zátvoriek
 
<pre>
 
  if (x==0) cout << "Zero"; cout << endl;
 
</pre>
 
Tento program vykoná <tt>cout << endl</tt> vždy, nezávisle od podmienky. V prípade, že chceme vykonať v podmienke viacero príkazov, nesmieme zabudnúť ich uzátvorkovať:
 
<pre>
 
  if (x==0) { cout << "Zero"; cout << endl; }
 
</pre>
 

Aktuálna revízia z 08:24, 23. september 2024

Pozrite si úvod k predmetu a pravidlá.

Oznamy

  • Ak nemáte predmet zapísaný v AIS, zapíšte si ho pokiaľ možno už dnes do 14:00, aby sme pre vás pripravili konto na cvičenia.
  • Zajtra budú hlavné cvičenia s prvými bodovanými príkladmi.
    • Dve skupiny 9:50 a 14:50, zaradenie do skupiny ste dostali emailom. Treba prísť na určenú skupinu.
    • Oboznámenie sa s prostredím, s testovačom, riešenie jednoduchých príkladov k prvej prednáške.
    • Budete potrebovať prihlasovacie meno a heslo do AIS2 na prihlásenie na počítač v učebni.
    • Budete potrebovať aj heslo na náš testovač, ktoré vám pošleme dnes večer.
    • Aspoň na úvod cvičenia odporúčame prísť aj pokročilým.
    • Môžete si priniesť a používať aj vlastný počítač.
    • Ak z vážnych príčin nemôžete prísť, kontaktujte nás a dohodneme náhradné riešenie.
  • Na cvičení alebo aj skôr prosím vyplňte anonymnú anketu.
  • V stredu druhá prednáška.
  • Tento piatok sú doplnkové cvičenia pre všetkých nepovinné.
  • Ak si neviete C++ nainštalovať na notebook, prineste ho na doplnkové cvičenia niektorý piatok, skúsime pomôcť.
  • Do stredy obeda sa v prípade záujmu prihláste na test pre pokročilých.
  • Test pre pokročilých bude v piatok počas doplnkových cvičení v I-H3.

Programátorské prostredie

  • Na tomto predmete budeme programovať v jazyku C++, budeme však z neho používať len malú časť.
  • Na cvičeniach odporúčame vyskúšať ako v operačnom systéme Linux používať editor Kate.
  • Môžete používať aj iné programátorské prostredia, ale
    • odovzdané programy musia správne pracovať na testovači,
    • počas skúšky budete mať k dispozícii len to, čo beží v učebniach v Linuxe bez pripojenia na internet,
    • v iných prostrediach vám nemusíme vedieť pomôcť s ich používaním.
  • Ak na vašom počítači máte Windows, namiesto Kate si môžete nainštalovať napr. Visual Studio Code.
  • Vypnite si v programátorských prostrediach AI pomocné nástroje na písanie alebo opravovanie kódu.
  • Potrebné nástroje si môžete nainštalovať zadarmo aj na vašom počítači alebo môžete mimo rozvrhu používať školské učebne.

Prvý program

  • Tradične sa v učebniciach programovania ako prvý uvádza program, ktorý iba vypíše na obrazovku text "Hello world!". Tu je v jazyku C++:
#include <iostream>
using namespace std;

int main() {
    cout << "Hello world!" << endl;
}
  • Samotný text je vypísaný príkazom cout << "Hello world!" << endl;
  • Všimnite si, že text Hello world! sme dali do úvodzoviek, čím poukazujeme na to, že to nie sú príkazy programovacieho jazyka, ale text, s ktorým treba niečo robiť.
  • Za príkaz sme dali bodkočiarku, ktorá ho ukončuje.
  • O vypisovaní si povieme viac neskôr, ale už teraz môžete vypisovať rôzne texty tým, že zmeníte text medzi úvodzovkami.
  • Riadok int main() { označuje začiatok programu, program ide až po ukončovaciu zloženú zátvorku }
  • Jazyk C++ sám o sebe neobsahuje príkazy na vypisovanie (cout <<...). Na to potrebujeme použiť knižnicu: súbor príkazov, ktoré niekto už naprogramoval a my ich len používame. Prvé dva riadky programu nám umožnia používať štandardnú knižnicu iostream, ktorá je súčasťou C++ a ktorá obsahuje príkazy na vypisovanie.


Spúšťanie programu

  • Na to, aby sme náš program mohli spustiť na počítači, potrebujeme ho najskôr skompilovať, t.j. preložiť do spustiteľného strojového kódu.
  • Ako na to, nájdete v návode na prácu s editorom Kate.

Ďalší jednoduchý program

  • Podobným spôsobom môžeme vypísať aj iný text. Napríklad dnešný dátum:
#include <iostream>
using namespace std;

int main() {
    cout << "Dnes je 23.9.2024." << endl;
}
  • Cvičenie: Rozšírte program tak, aby na druhý riadok vypísal dátum v americkom formáte mesiac/deň/rok.

Premenné

Príklad z cvičenia by mohol vyzerať napríklad takto:

#include <iostream>
using namespace std;
int main() {
    cout << "23.9.2024" << endl;
    cout << "9/23/2024" << endl;
}

Ak by sme v ňom chceli zmeniť dátum na prvú prednášku o rok, museli by sme pomeniť vhodné čísla na dvoch miestach. Navyše keď vidíme v programe nejaké číslo, nemusí byť úplne jasné, čo znamená.

Program teraz prepíšeme tak, aby sme deň, mesiac a rok mali zapísané symbolicky a mohli ich meniť na jednom mieste.

#include <iostream>
using namespace std;
int main() {
    int den = 23;
    int mesiac = 9;
    int rok = 2024;

    cout << den << "." << mesiac << "." << rok << endl;
    cout << mesiac << "/" << den << "/" << rok << endl;
}

Symbolickým hodnotám den, mesiac, rok sa hovorí premenné.

  • Premenná je vyhradené miesto v pamäti počítača, ku ktorému v programe pristupujeme pod určitým názvom.
  • Do tejto pamäti si môžeme zapísať hodnotu a neskôr ju použiť.
  • Príkaz int x = 100; vytvorí novú premennú a uloží do nej hodnotu 100.
  • Každá premenná má určitý typ, ktorý určuje, aké hodnoty do nej môžeme ukladať.
  • Tieto premenné majú typ int, čo je skratka zo slova integer, celé číslo.

Ak v programe premenným priradíme iné čísla, môžeme vypísať iný dátum.

Príkaz int x = 100; vieme rozpísať aj na dva príkazy:

int x; 
x = 100;

Prvý z nich vytvorí premennú x, ktorá bude mať nejakú ľubovoľnú hodnotu a druhý túto počiatočnú hodnotu zmení na 100.

Zhrnutie

  • Programy, ktoré sme doteraz videli, vyzerali takto:
    • Najprv sme zapli používanie niekoľkých knižníc
    • Samotný program začínal int main() { a končil zloženou zátvorkou }
    • Program mohol mať niekoľko príkazov ukončených bodkočiarkami, ktoré sa vykonávajú jeden po druhom.
  • Logiku za tým, prečo jednotlivé príkazy píšu tak, ako sa píšu, sme zatiaľ ešte nevysvetľovali, mali by ste však byť schopní modifikovať príklady uvedené v prednáške menením čísel, textov v úvodzovkách, pridávaním ďalších príkazov a podobne.
  • Upozornenia:
    • Je rozdiel medzi malými a veľkými písmenami
    • Všetky čiarky, bodkočiarky, zátvorky a podobne sú dôležité
    • Na väčšine miest v programe môžeme voľne pridávať medzery a konce riadku, snažíme sa tým program spraviť prehľadný
  • Programy, ktoré sme videli doteraz, nie sú veľmi zaujímavé, lebo vždy robia to isté a robia pevný počet krokov, ktoré sme museli ručne všetky vypísať. Ďalej uvidíme
    • načítanie, ktoré nám umožní získať dáta od používateľa
    • podmienky, ktoré nám umožnia vykonávať príkazy podľa okolností
    • cykly, ktoré nám umožnia opakovať tie isté príkazy veľa krát

Textový výpis a načítanie

Vieme už vypísať niečo na obrazovku (výstup, output) a podobne môžeme aj čítať, čo nám používateľ napíše na klávesnici (vstup, input). Takéto zadané hodnoty tiež uložíme do premenných, aby sme s nimi mohli ďalej pracovať.

Sčítanie čísel

Nasledujúci program od používateľa vypýta dve čísla a vypíše ich súčet.

#include <iostream>
using namespace std;

int main() {
    int x, y;

    cout << "Please enter the first number: ";
    cin >> x;
    cout << "Please enter the second number: ";
    cin >> y;

    int result = x + y;
    cout << x << "+" << y << "=" << result << endl;
}

Tu je príklad behu programu, keď používateľ zadal čísla 10 a 3:

Please enter the first number: 10
Please enter the second number: 3
10+3=13
  • Tento program používa na vstup a výstup príkazy z knižnice iostream a teda do hlavičky programu dáme #include <iostream> a using namespace std;
  • Program najskôr vytvorí dve premenné x a y typu int (a nepriradzuje im zatiaľ žiadne hodnoty).
  • Potom príkazom cout vypíše text "Please enter the first number: " aby používateľ vedel, čo má robiť.
  • Potom pomocou príkazu cin načíta číslo od používateľa do premennej x.
  • To isté opakuje pre premennú y.
  • Potom vytvorí novú premennú result a uloží do nej súčet x a y.
  • Nakoniec vypíše výsledok aj s výrazom, ktorý sme počítali, pomocou príkazu cout.

Viac o príkaze cout

  • Pomocou cout vypisujeme na konzolu, t.j. textovú obrazovku.
  • To, čo chceme vypísať, pošleme na cout pomocou šípky <<
  • cout << endl; vypíše koniec riadku.
  • Môžeme naraz vypísať aj viac vecí oddelených šípkami <<
    • Napr. cout << x << "+" << y << "=" << result << endl; vypíše najskôr obsah premennej x (napr. hodnotu 10), potom znamienko plus (ktoré máme v úvodzovkách), potom obsah premennej y, potom znamienko rovnosti, potom obsah premennej result a nakoniec koniec riadku.

Viac o príkaze cin

  • Pomocu cin načítavame z konzoly údaje od používateľa.
  • Tieto údaje pošleme do premenných pomocou šípky >>
  • Opäť môžeme načítať aj viac vecí naraz, napr. nasledovný úryvok si vypýta obe čísla naraz a uloží ich do premenných x a y
cout << "Please enter two numbers separated by a space: ";
cin >> x >> y;
  • Pozor, cin nekontroluje, že používateľ zadáva rozumné hodnoty. Čo sa stane, ak namiesto čísla zadá nejaké písmená a podobne?