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í
Riadok 52: Riadok 52:
  
 
* 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>
+
{{preC|
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
Riadok 59: Riadok 59:
 
     cout << "Dnes je 24.9.2018!" << endl;
 
     cout << "Dnes je 24.9.2018!" << endl;
 
}
 
}
</pre>
+
}}
  
 
* 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: Vypíšte dátum v rôznych formátoch (skrátený formát, americký formát, ...). Každý na jeden riadok.
Riadok 67: Riadok 67:
 
Príklad z cvičenia by mohol vyzerať napríklad takto:
 
Príklad z cvičenia by mohol vyzerať napríklad takto:
  
<pre>
+
{{preC|
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
Riadok 76: Riadok 76:
 
     cout << "9/24/2018" << endl;
 
     cout << "9/24/2018" << endl;
 
}
 
}
</pre>
+
}}
  
 
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é čisla v celom programe. Navyše keď vidíme v programe nejaké číslo, nemusí byť úplne jasné, ako sme k nemu prišli.
Riadok 82: Riadok 82:
 
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>
+
{{preC|
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
Riadok 95: Riadok 95:
 
     cout << mesiac << "/" << den << "/" << rok << endl;
 
     cout << mesiac << "/" << den << "/" << rok << endl;
 
}
 
}
</pre>
+
}}
  
 
Symbolickým hodnotám '''den, mesiac, rok''' sa hovorí '''premenné'''.
 
Symbolickým hodnotám '''den, mesiac, rok''' sa hovorí '''premenné'''.
Riadok 135: Riadok 135:
 
Nasledujúci program od užívateľa vypýta dve čísla a vypíše ich súčet.
 
Nasledujúci program od užívateľa vypýta dve čísla a vypíše ich súčet.
  
<pre>
+
{{preC|
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
Riadok 150: Riadok 150:
 
     cout << x << "+" << y << "=" << result << endl;
 
     cout << x << "+" << y << "=" << result << endl;
 
}
 
}
</pre>
+
}}
  
 
Tu je príklad behu programu, keď užívateľ zadal čísla 10 a 3:
 
Tu je príklad behu programu, keď užívateľ zadal čísla 10 a 3:
Riadok 192: Riadok 192:
  
 
* 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).
 
* 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).
 
+
{{preC|
<pre>#include <iostream>
+
#include <iostream>
 
using namespace std;
 
using namespace std;
  
Riadok 206: Riadok 206:
 
         cout << "Number " << x << " is non-negative." << endl;
 
         cout << "Number " << x << " is non-negative." << endl;
 
     }
 
     }
}</pre>
+
}
 +
}}
  
 
* Tu je príklad dvoch behov programu:
 
* Tu je príklad dvoch behov programu:
Riadok 236: Riadok 237:
 
* Test na rovnosť sa robí operátorom ==
 
* Test na rovnosť sa robí operátorom ==
  
<pre>
+
{{preC|
 
#include <iostream>
 
#include <iostream>
 
using namespace std;
 
using namespace std;
Riadok 256: Riadok 257:
  
 
}
 
}
</pre>
+
}}
  
 
=== Upozornenie===
 
=== Upozornenie===

Verzia zo dňa a času 20:50, 17. september 2019

Pozrite si úvod k predmetu a pravidlá.

Organizačné poznámky

  • Zajtra budú hlavné cvičenia s prvými bodovanými príkladmi
    • 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
    • Aspoň na úvod cvičenia odporúčame prísť aj pokročilým
  • Ak si neviete C++ nainštalovať na notebook, prineste ho na doplnkové cvičenia, skúsime pomôcť (hlavne ak máte Windows)

Programátorské prostredie

  • 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
  • Cvičenia a skúšky budú v operačnom systéme Linux
  • 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
    • počas skúšky budete mať k dispozícii len to, čo beží v učebniach v Linuxe
    • viac informácií na stránke o alternatívach k Netbeans

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++:

Šablóna:PreC

  • 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íkazom 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(void) { 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 k práci v prostredí Netbeans
  • 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

  • Podobným spôsobom môžeme vypísať aj iný text. Napríklad dnešný dátum:

Šablóna:PreC

  • Cvičenie: Vypíšte dátum v rôznych formátoch (skrátený formát, americký formát, ...). Každý na jeden riadok.

Premenné

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

Šablóna:PreC

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.

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

Šablóna:PreC

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.
  • 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(void) { 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 užívateľa vypýta dve čísla a vypíše ich súčet.

Šablóna:PreC

Tu je príklad behu programu, keď uží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 uží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 uží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 space: ";
   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).

Šablóna:PreC

  • Tu je príklad dvoch behov programu:
Please enter some number: 10
Number 10 is non-negative.
Please enter some number: -3
Number -3 is odd.


  • Ako vidíme, za príkazom if je zátvorka s podmienkou. V našom príklade podmienka je x < 0.
  • 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 if.
  • 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 else
  • Časť else {...} 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 ==

Šablóna:PreC

Upozornenie

Častá chyba, ktorá sa vyskytuje pri podmienke, je použitie priradenia namiesto porovnania. Keby sme napísali

if (x=0) cout << "Zero" << endl; 

tak program do premennej x priradí nulu.

Ďalšia bežná chyba je zabudnutie zložených zátvoriek

   if (x==0) cout << "Zero"; cout << endl;

Tento program vykoná cout << endl vždy, nezávisle od podmienky. V prípade, že chceme vykonať v podmienke viacero príkazov, nesmieme zabudnúť ich uzátvorkovať:

   if (x==0) { cout << "Zero"; cout << endl; }