Upozornění pro čtenáře a uživatele této knihy
Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována ani šířena v papírové, elektronické či jiné podobě bez předchozího písemného souhlasu nakladatele. Neoprávněné užití této knihy bude trestně stíháno.

Miroslav Virius

Začínáme programovat v jazyku C++

Vydala Grada Publishing, a.s.
U Průhonu 22, Praha 7
obchod@grada.cz, www.grada.cz
tel.: +420 234 264 401
jako svou 8642. publikaci

Odpovědná redaktorka Věra Slavíková
Sazba Jaroslav Kolman
Formát ePub Štěpán Böhm
Počet stran 200
První vydání, Praha 2023
Vytiskly Tiskárny Havlíčkův Brod a.s.

© Grada Publishing, a.s., 2023
Cover Design © Grada Publishing, a.s., 2023

Názvy produktů, firem apod. použité v knize mohou být ochrannými známkami nebo registrovanými ochrannými známkami příslušných vlastníků.

ISBN 978-80-247-5935-7 (ePub)
ISBN 978-80-247-5902-9 (pdf)
ISBN 978-80-271-5157-8 (print)

Předmluva

V této knize nabízím čtenářům seznámení s programovacím jazykem C++. Jak brzy zjistíte, je to krásný a mocný nástroj.

Co budete potřebovat

Odpověď je jednoduchá – kromě chuti seznámit se s programováním v C++ a trochy trpělivosti vlastně nic jiného než počítač připojený k internetu, neboť výklad je založen na volně dostupném prostředí OnlineGDB Beta, což je webová stránka dostupná na adrese [1]. Tato webová stránka funguje jako vývojový nástroj, ve kterém si lze zkoušet programování v řadě programovacích jazyků, samozřejmě včetně C++.

Co v této knize najdete

Na rozdíl od běžných knih pro začátečníky se snažím ukázat C++ v celé jeho šíři. Samozřejmě začneme nejjednodušším programem a v duchu nejlepších tradic to bude program vypisující pozdrav, pak se seznámíme se základními konstrukcemi, jako jsou proměnné, vybrané příkazy a funkce. To nám zabere prvních pět kapitol. Potom se ale spolu podíváme i na pokročilé konstrukce, jako jsou šablony funkcí, objektové typy a jejich šablony, a zavadíme i o jednu z dlouho očekávaných novinek standardu jazyka z roku 2020, o omezení šablonových parametrů (koncepty). Za to ovšem zaplatíme, neboť výklad o náročnějších konstrukcích nebude podrobný, poskytne pouze první přiblížení.

Podívejme se stručně, jak budeme postupovat.

V první kapitole najdete rozhovor se čtenářem, který se zajímá o programování. Najdete v něm vysvětlení základních pojmů, které budeme v knize potřebovat.

Ve druhé kapitole se seznámíme s prostředím OnlineGDB Beta, napíšeme první program, spustíme ho a vysvětlíme si, co vlastně dělá. Dále si ukážeme, co se stane, když uděláme chybu. Ve třetí kapitole napíšeme program, který si od uživatele vyžádá zadání celého čísla a vypíše jeho dvojnásobek. Pak ho vylepšíme, takže si vyžádá zadání poloměru kružnice a vypíše její délku. To nám umožní seznámit se s celými a reálnými čísly v C++, s proměnnými a s některými dalšími konstrukcemi.

Ve čtvrté kapitole upravíme náš program, aby si vyžádal zadání celého nezáporného čísla a vypsal jeho faktoriál. To nám umožní seznámit se s cykly, s rozhodováním a s deklarací a používáním konstant. Poznáme také logické hodnoty a jejich použití v programu. V páté kapitole si ukážeme, jak naprogramovat relativně samostatnou část programu, kterou pak můžeme používat na více místech, tedy – jak říkáme v C++ – funkci. Ukážeme si také, jak rozdělit program na několik samostatně překládaných částí.

Šestá kapitola je věnována ladění, tedy hledání, proč náš program dělá něco jiného, než by měl, co jsme naprogramovali špatně. Seznámíme se nejen s nástroji pro krokování programu v prostředí OnlineGDB Beta, ale i s nástroji, které nám poskytuje jazyk C++, jako jsou aserce a ladicí výpisy.

V sedmé kapitole si stanovíme úkol na základě zadaného data spočítat, kolikátý den v roce je. To nám umožní seznámit se s konstrukcí zvanou pole, s globálními proměnnými a s tzv. výčtovými typy. Poznáme také typy pro práci se znaky, typ string pro práci se znakovými řetězci a tzv. nulou ukončené řetězce. Nakonec si zkusíme převádět v programu malá písmena na velká a naopak.

V osmé kapitole se vrátíme k vyjádření kalendářního data v programu. Pokusíme se odstranit nedostatky, které způsobovalo použití pole, a to nás přivede nejprve k tzv. strukturám a od nich pak k objektovým typům.

V deváté kapitole se nejprve seznámíme se základními pojmy objektově orientovaného programování a pak upravíme a rozšíříme nástroj pro práci s datem, který jsme naprogramovali v předchozí kapitole. Naším cílem bude udělat z něj nástroj pro kalendářní výpočty, tedy například ke zjištění, kolik dnů uplynulo od přistání Kryštofa Kolumba u břehů Ameriky. Tyto úpravy dokončíme v desáté kapitole a přitom se seznámíme s přetěžováním operátorů, s nástroji pro obsluhu chyb (tzv. výjimkami), se šablonami objektových typů a s omezeními parametrů šablon.

V jedenácté kapitole si zadáme jiný úkol: Napsat program, který bude hádat zvířata. Přesněji program bude na počátku znát pouze dvě zvířata a znak, kterým se liší. Zeptá se uživatele, zda má hádané zvíře tento znak, a podle jeho odpovědi mu napíše, které zvíře určil. Pak se zeptá, zda je jeho odpověď správná, a když není, zeptá se ho, co to tedy je a čím se liší, a nové zvíře si zapamatuje. To nám umožní seznámit se s tzv. ukazateli a s dynamickými proměnnými. Vedle toho se naučíme zapsat data do souboru a při příštím spuštění je přečíst, takže program bude zvíře, které se nyní naučil, při příštím běhu znát.

V poslední kapitole najdete stručný přehled dalších možností jazyka C++, tedy nástrojů, na které se v této knize nedostalo.

Příklady

Výklad doprovází řada příkladů. Jejich zdrojové texty si můžete stáhnout na webových stránkách nakladatelství Grada Publishing (www.grada.cz, vyhledejte příslušnou sekci této knihy), nebo na mých webových stránkách; odkaz na ně najdete dále. V příkladech důsledně používám české identifikátory – na rozdíl od mých ostatních knih bez háčků a čárek, neboť prostředí OnlineGDB Beta jejich použití nepodporuje. Vím, že profesionální programátoři se tomu vyhýbají a že v mezinárodních týmech jsou anglické identifikátory samozřejmostí. Mám ale dlouholetou zkušenost, že při výkladu určeném začátečníkům mohou české identifikátory výrazně usnadnit orientaci v ukázkách zdrojového kódu – a to je můj hlavní cíl. Má to ale ještě jednu přednost: V příkladech to umožňuje snadno rozlišit, co jsou třídy z knihovny a co naše vlastní, popřípadě které metody jsou zděděné po předchůdcích z knihovny a které jsou naše vlastní.

Terminologie

V celé knize používám důsledně českou terminologii. Vím, že má mnoho odpůrců, jsem však přesvědčen, že použití vhodných českých názvů výrazně usnadní pochopení, oč jde – a to je v knize určené naprostým začátečníkům velice důležité. Anglické termíny samozřejmě uvádím alespoň při prvním výskytu také.

Náročnější pasáže

Části textu, které jsou poněkud náročnější, jsou označeny čarou po straně; při prvním čtení je můžete přeskočit. Doporučuji však se k nim později vrátit, neboť mohou obsahovat velmi užitečné informace.

Obrázky

Většina obrázků v této knize představuje snímky okna editoru nebo konzolového okna vývojového prostředí OnlineGDB Beta. Pozadí těchto oken je černé, text v něm barevný, a prostředí OnlineGDB Beta to – alespoň v současné verzi – neumožňuje změnit. Protože však barevný text na černém pozadí při černobílém tisku bývá málo výrazný, dohodl jsem se s nakladatelstvím Grada Publishing, že pozadí změní na bílé. V textu knihy ovšem na několika místech zmiňuji černé pozadí. Věřím, že se tím nenecháte zmást.

Kde získat další informace

Při čtení této knihy mějte prosím na paměti, že představuje pouze seznámení s jazykem C++, takže výklad o většině témat je neúplný. Jestliže se po přečtení této knihy rozhodnete pokračovat a naučit se jazyk C++ do hloubky, můžete zkusit např. moji knihu Programování v C++ od základů k profesionálnímu použití, kterou vydalo nakladatelství Grada v roce 2018 [20]. Podrobné a přesné informace o základních konstrukcích jazyka, o jeho standardní knihovně a o mnoha dalších věcech najdete na stránkách cppreference.com [21].

Na závěr

I přes veškerou péči, kterou jsem této knize věnoval, se do ní mohly vloudit chyby. Jestliže zde nějakou najdete, dejte mi prosím zprávu na níže uvedenou adresu; bude-li to možné, uveřejním na svých webových stránkách opravu.

Praha 26. 6. 2023

Miroslav Virius

miroslav.virius@fjfi.cvut.cz

http://people.fjfi.cvut.cz/virius

1Několik slov,
než začneme

1.1Co je C++

■Co se skrývá za názvem C++?

C++ je programovací jazyk, a to jeden z nejpoužívanějších.

■A co to je, programovací jazyk?

Programovací jazyk je jazyk, v němž zapisujeme programy – dnes s oblibou říkáme také aplikace, i když tohle slovo může znamenat skupinu programů, které fungují jako jeden celek. Program říká počítači, co má dělat, co od něj požadujeme.

■A jak program vypadá?

Program v C++ se obvykle podobá směsi anglických slov, občas obsahuje i zápisy podobné matematickým vzorcům. Tato slova a vzorce vyjadřují pokyny – příkazy –, které říkají počítači, co má udělat.

■To znamená, že počítač zná ona vybraná anglická slova a rozumí jim?

To je skoro pravda; skutečnost je ale o něco složitější. Každý počítač rozumí pouze jakémusi svému vlastnímu jazyku (který může být u různých typů počítačů různý) a my potřebujeme nástroj, který náš program nejprve z jazyka C++ (nebo z nějakého jiného programovacího jazyka) přeloží, aby mu daný počítač rozuměl. Tomuto nástroji se říká překladač neboli kompilátor.

■Takže když se chci seznámit s C++, musím si instalovat překladač C++?

To není třeba – alespoň pro první seznámení ne. Na webu je k dispozici několik portálů, na nichž můžeme napsat jednoduché programy, můžeme je online překládat a spouštět. Ovšem pro skutečné programování budeme potřebovat nejen překladač, ale i vhodné vývojové prostředí.

■Co je zas tohle?

To je složitější povídání. Už jsme si řekli, že program musíme nejdříve napsat ve zvoleném programovacím jazyce; napsaný program uložíme do souboru – tomu říkáme zdrojový program (v programátorštině, tedy v programátorském slangu, mu říkáme zdroják). K napsání programu potřebujeme textový editor. Pak zdrojový program přeložíme.

Přitom se může stát, že program nenapíšeme správně, budou v něm chyby – to, co napíšeme, nebude správné C++ a překladač tomu nebude rozumět a nedokáže to přeložit. Může se ale také stát, že překladač náš program sice přeloží, ale ten bude dělat něco jiného, než chceme (uděláme chybu v popisu postupu, který chceme počítač naučit). V obou případech musíme chyby odstranit, musíme program odladit.

Vývojové prostředí (přesněji integrované vývojové prostředí; často se používá zkratka IDE z anglického Integrated Development Environment) je nástroj, který v sobě spojuje textový editor, překladač, nástroje pro spouštění a ladění programů a některé další pomůcky.

1.2Program: sada pokynů pro počítač

■Program je tedy nějaká sada pokynů pro počítač?

Ano, to je správně.

■Ale to znamená, že když chci napsat program, musím úlohu, kterou bude tento program řešit, umět vyřešit sám?

Přesně tak. A nejen to: Musíme ji umět přepsat do řeči počítače.

■Přeložit návod do nějakého jazyka, to snad není tak těžké.

Je a není. Ve skutečnosti je to podobné, jako když to, co budu chtít naučit počítač (tedy co budu chtít naprogramovat), chci naučit třeba kamaráda. Musím to rozložit na kroky, tedy dílčí operace, kterým kamarád – nebo počítač – rozumí. V případě počítače ty kroky v podstatě odpovídají jednotlivým příkazům programovacího jazyka.

■To znamená, že si požadovaný úkol musím přepsat po jednotlivých operacích, které počítač umí?

Ano. Musíme si sestavit – na papíře, nebo spíše v nějakém editoru – posloupnost kroků, které bude počítač dělat, aby zadaný úkol vyřešil. Takovémuto návodu říkáme také algoritmus. Tento návod pak přepíšeme do C++ a tak vznikne program.

■A je nějaký doporučený postup, jak ten algoritmus vytvořit?

Nejobvyklejší je postup shora dolů. Když známe řešení dané úlohy, napíšeme je jako posloupnost kroků, kterým rozumíme. Pak se podíváme, zda jim bude rozumět i počítač – nebo lépe zda je budeme umět naprogramovat. Když ne, rozložíme tyto kroky na menší a tento postup budeme opakovat, dokud nedospějeme na úroveň kroků, které naprogramovat dokážeme.

■Takže na program se můžeme dívat jako na zápis algoritmu v C++?

I tak to lze říci.

1.3Co potřebuji vědět o počítači

■Když chci zkusit programovat, co potřebuji vědět o počítači? Občas slýchám něco o velikosti paměti, o nějakých megabajtech, gigabajtech a tak.

Dnešní počítač je typicky složen ze čtyř základních součástí. Jednou z nich je procesor – to je část, která opravdu počítá. Druhou z nich je operační paměť. Tam si počítač ukládá program, data, s nimiž bude počítat, mezivýsledky, výsledky atd. Ovšem obsah operační paměti se při vypnutí počítače ztratí, a proto mají počítače také trvalou – permanentní – paměť. Donedávna to zpravidla byly magnetické disky, dnes je zvolna nahrazují paměti SSD, které jsou konstrukčně podobné jako např. populární „flešky“. Poslední důležitou součástí počítače jsou vstupní a výstupní zařízení – obrazovka, klávesnice, USB porty apod., jejichž prostřednictvím počítač komunikuje s okolím.

■Prima. A ty gigabajty?

Ty vyjadřují velikost paměti. Paměť dnešních počítačů se skládá z tzv. bitů – to jsou místa, na kterých může být uložena buď nula, nebo jednička, nic jiného. To vypadá jako veliké omezení, ale není – pomocí nul a jedniček lze zapsat jakékoli číslo – a nejen data, ale i příkazy pro počítač jsou vyjádřeny jako čísla. (Počítač ve skutečnosti nerozumí ničemu jinému než číslům.)

Bity jsou na dnešních počítačích sdruženy do skupin po osmi. Tyto skupiny označujeme bajty (anglicky byte = slabika). Snadno se přesvědčíte, že osm nul nebo jedniček může vytvořit 256 různých kombinací čili že do jednoho bajtu lze zapsat 256 různých hodnot, které mohou představovat např. čísla od 0 do 255 nebo čísla od –128 do +127. To je ovšem velice málo, a proto se často pracuje se skupinami složenými ze 2, 4 nebo 8 bajtů. Do skupiny 8 bajtů už můžeme uložit 18 triliónů různých hodnot.

Paměť je tedy vlastně dlouhá řada bajtů. Ty jsou očíslovány, každý bajt má své pořadové číslo, kterému říkáme adresa.

Názvy jako kilobajt, megabajt atd. se používají pro vyjádření velikosti úseku paměti (nebo celé paměti) a mají podobnou logiku jako názvy kilometr, megahertz apod., i když ne úplně stejnou. Jeden kilobajt, 1 kB, je 1 024 bajtů (tedy 210 B), jeden megabajt je 1 048 576 bajtů (tedy 220 B) atd.1

1.4.cpp

■Vraťme se k programování v C++. Je obvyklé, že typy souborů lze rozlišit podle přípony – soubory s obrázky mívají např. příponu .jpg nebo .png, soubory se zvukovým záznamem zase např. mp3. Jak poznám zdrojový soubor v C++? Mají takovéto soubory také nějakou typickou příponu?

Pod Windows a v některých dalších prostředích mají zdrojové soubory v jazyce C++ zpravidla příponu .cpp. V některých jiných prostředích, například v některých verzích Unixu, mohou mít příponu .C (velké C). Přípona .c (malé c) je zpravidla vyhrazena pro příbuzný jazyk C.

Jak ale uvidíme, některé speciální zdrojové soubory mohou mít příponu .h nebo mohou být bez přípony.

1.5Neopakujme se

■Ještě jednou bych rád zopakoval: Program je tedy soubor s příponou .cpp nebo podobnou, který obsahuje posloupnost příkazů pro počítač?

V prvním přiblížení to tak je. Ve skutečnosti však program zpravidla rozložíme na několik částí, které představují dílčí postupy, jako je příprava uživatelského rozhraní programu, zjištění požadavků uživatele, jejich zpracování, uložení nebo vypsání výsledků atd.

■Představme si takovouto situaci. V programu budu potřebovat na sedmi místech zapsat data do souboru a na dvou místech data ze souboru přečíst. Budu muset programovat zápis dat sedmkrát a čtení dvakrát?

Ne. Jazyk C++ nám umožňuje naprogramované dílčí postupy pojmenovat a pak se na ně odvolávat. Tyto pojmenované dílčí postupy se v programech v C++ nazývají funkce.

■To znamená, že počítač vlastně naučíme nové kroky, které předtím neuměl a které po něm nyní můžeme požadovat? Funkce tedy představuje takový dílčí krok?

Přesně tak. To je ve skutečnosti základní programátorské pravidlo: NEOPAKUJTE SE. Když už jednou něco naprogramujeme, nebudeme to programovat znovu, budeme se na to už jen odvolávat.2

1.6Knihovna

■Dobře, ale mohu použít něco, co jsem naprogramoval v jednom programu, v jiném? Nebo platí zásada neopakování jen v jednom programu?

Zásada neopakování platí samozřejmě i mezi různými programy. Když už něco naprogramujeme, můžeme si uschovat zdrojový text a příště ho použít. Můžeme si také uschovat přeloženou část programu a pak ji připojovat podle potřeby k dalším programům – můžeme si vytvořit vlastní programovou knihovnu.

Ve skutečnosti je řada běžných dílčích postupů, jako je už zmíněný zápis dat do souboru, čtení dat ze souboru, výpočet hodnot často používaných matematických funkcí a mnoho a mnoho dalších, součástí tzv. standardní knihovny jazyka C++, takže je nemusíme programovat, můžeme se na ně odvolávat jako na kroky, které počítač už zná.

1.7Projekt

■Zdrojový kód programu zapíšu v textovém editoru, který je součástí integrovaného vývojového prostředí, a uložím ho do souboru. Co když ale bude opravdu program rozsáhlý? Někde jsem četl, že kód jistého komerčního programu – tedy asi jeho zdrojový kód – měl několik miliónů řádek. Jak se v tom pak má člověk orientovat? Je možné rozdělit jeden program do několika zdrojových souborů?

Jistě, a v této knize si to ukážeme. Skupině souborů, které tvoří jeden program, se obvykle říká projekt a integrovaná vývojová prostředí ho umějí spravovat – vytvořit ho, přidávat do něj nové soubory, přeložit jednotlivé soubory i celý projekt atd.

Součástí projektů jsou zpravidla i jiné než zdrojové soubory – některé slouží jako pomůcka pro integrované vývojové prostředí (v nich si IDE uchovává informace o tom, které soubory k projektu patří, různá nastavení, kterými se bude překladač řídit atd.), jiné mohou obsahovat tzv. prostředky (anglicky resource, obrázky a texty, které bude program používat apod.).

Překladač přeloží jednotlivé zdrojové soubory, které projekt tvoří, a pak z nich sestaví výsledný spustitelný program. Integrovaná vývojová prostředí umějí zpravidla pracovat i se skupinami projektů (v některých vývojových nástrojích se označují jako řešení). Takováto skupina projektů obvykle představuje skupinu programů, které nějakým způsobem spolupracují – ale to už přesahuje možnosti úvodního povídání.

1.8Proč bych si měl vybrat jazyk C++

■Pochopil jsem, že programovacích jazyků je více. Proč bych si měl vybrat právě C++?

Důvodů může být mnoho. Jazyk C++ vytvořil a publikoval v polovině 80. let minulého století Bjarne Stroustrup a tento jazyk velice rychle získal popularitu. V 90. letech byl programovacím jazykem číslo 1 a od té doby – i když vznikla řada nových jazyků – je stále mezi pěticí nejpoužívanějších. To je jistě dobrý důvod, proč ho používat.

Dalším důvodem může být, že jazyk C++ není vázán na žádnou konkrétní platformu (tedy zhruba řečeno na konkrétní druh počítačů a jejich vybavení); to znamená, že jsou k dispozici překladače pro převážnou většinu platforem – a samozřejmě pro všechny běžné.

1.9Jak vypadá program v C++

■Vraťme se k programování. Jak takový program vypadá?

Nejjednodušší program v C++ si ukážeme hned v následující kapitole. Pojďme už na to; další podrobnosti si povíme později.

1.10Vývojové prostředí a překladače

■Než se pustíme do programování, ještě jednu otázku: Jaká vývojová prostředí – a jaké překladače – si mohu vybrat? Když na to přijde, je překladač vždy součástí nějakého vývojového prostředí?

Některé překladače jsou k dispozici samostatně, jen s doprovodnými knihovnami a některými dalšími doplňkovými nástroji, jiné jsou k dostání pouze jako součást IDE; některé překladače a některá vývojová prostředí jsou k dispozici bezplatně, některá je třeba zakoupit.

Asi nejznámějším volně dostupným překladačem je g++, jeden ze sady překladačů různých programovacích jazyků projektu GNU (GNU Compiler Collection, viz např. [7]). Tento překladač používá i prostředí OnlineGDB Beta. Z nekomerčních vývojových prostředí, která si musíme instalovat, se zmíníme o nástroji Code::Blocs, jehož instalační program si lze stáhnout na adrese [8], a o pokročilém nástroji Qt Creator [9], který nabízí mimo jiné i knihovnu pro tvorbu grafického uživatelského rozhraní, jež sice není standardní součástí jazyka C++, ale je velmi oblíbená.

Mezi komerčními překladači je dnes asi nejznámější překladač firmy Microsoft, který je součástí vývojového prostředí MS Visual Studio. Toto prostředí je sice placené, ale pro nekomerční použití je k dispozici jeho verze označovaná Community Edition, která je zdarma (za registraci). Vedle toho nabízí Microsoft zdarma také nástroj MS Visual Studio Code [16]. Dalším komerčním nástrojem je C++Builder od firmy Embarcadero, u něhož je také k dispozici bezplatná Community Edition [11]; podmínkou je opět registrace.

1 Tak to běžně – ale nesprávně – používáme. Ve skutečnosti 1 kilobajt – 1 kB – je 1 000 B a 1 024 B je kibibajt, 1 KiB. Podobně 220 B je 1 mebibajt, 1 MiB atd. Viz též [6]. V běžné řeči však lidé od počítačů používají označení kilobajt apod. ve významu, který jsme si řekli v hlavním textu.

2 Anglicky Don’t Repeat Yourself, ve zkratce DRY; někdy to bývá žertem překládáno jako „suchý princip“.

2První program vC++

Nejlepší cestou, jak se seznámit sprogramováním vjakémkoli programovacím jazyce, je zkusit si napsat jednoduchý program, přeložit ho aspustit ho, abychom viděli, že dělá právě to, co jsme zamýšleli, nic víc, nic míň. My jsme se rozhodli pro C++ auž víme, že ktomu potřebujeme vhodné vývojové prostředí (IDE). Řekli jsme si také, že některá IDE jsou kdispozici online, takže si je nemusíme instalovat. Za toto pohodlí ovšem zaplatíme – nebudeme mít kdispozici přeložený program, náš program budeme moci spouštět pouze vtomto prostředí. Při prvním seznamování sprogramováním vC++ to však není důležité.

Vtéto kapitole poznáme – alespoň povrchně – vývojové prostředí OnlineGDB Beta, které je kdispozici na webu, napíšeme první jednoduchý program, přeložíme ho aspustíme. Ukážeme si také, co se stane, když překladač jazyka C++ vprogramu najde chybu, takže mu nebude rozumět.

2.1Prostředí OnlineGDB Beta

Už jsme si řekli, že vtéto knize budeme používat prostředí OnlineGDB Beta, které najdete na webové adrese [1]. Toto prostředí umožňuje programovat vřadě programovacích jazyků, mezi jinými ivC++. Po otevření této webové stránky uvidíte nejspíš něco podobného jako na obrázku 2.1. Prostředí pro nás vytvořilo projekt obsahující jediný zdrojový soubor nazvaný main.cpp, který obsahuje jednoduchý program.

Než se budeme zabývat programem, který nám OnlineGDB Beta nabídlo, alespoň povrchně se stímto prostředím seznámíme.

Na levé straně je panel sodkazy, znichž většina vyžaduje vytvoření účtu apřihlášení, aproto je ponecháme stranou. Tlačítkem se znakem <, které najdeme uprostřed levého okraje, můžeme tento panel zavřít. Přitom se na levém okraji stránky objeví tlačítko sbleskem (viz obr. 2.2), kterým tento panel vpřípadě potřeby zase otevřeme.

Střed stránky tvoří panel editoru, ve kterém budeme zapisovat své programy. Po otevření tam bude již zobrazen jednoduchý program vněkterém zprogramovacích jazyků, které toto prostředí podporuje.

Obr. 2.1 Vývojové prostředí OnlineGDB Beta po otevření

Nad panelem editoru je lišta, jež obsahuje tlačítka pro spuštění programu, pro jeho ladění apod. ataké pro volbu programovacího jazyka, který chceme používat; mělo by tam být uvedeno C++ následované rokem vydání standardu. Pokud není, klepnutím myší na toto pole rozvineme seznam jazyků avybereme např. C++ 20.3 Prostředí zobrazí jednoduchý program vC++.

Poznamenejme, že čísla řádek, která vidíte na levé straně panelu editoru, nejsou součástí programu, doplnilo je prostředí. Oceníme je, až si budeme povídat otom, co která řádka programu znamená, ataké při luštění zpráv ochybách.

Vpravé části této webové stránky je – nebo může být – zobrazen panel snástroji, které slouží kladění programů – tedy khledání anápravě chyb, které způsobují, že program sice běží, ale dělá něco jiného, než chceme, nebo že se rozběhne askončí chybou. Později sním budeme pracovat.

Ve spodní části stránky je panel, ve kterém nás po otevření upoutají reklamy. Podíváme-li se pozorněji, uvidíme zde vstupní pole nadepsané Command line arguments (parametry příkazové řádky) apřepínače, které umožňují volit, zda budeme našemu programu zadávat data zkonzole, nebo zda je zde předem napíšeme (také ktomu se vrátíme později).

Vtomto prostoru se bude zobrazovat výstup našeho programu, tedy text, který napíše náš program po spuštění.

2.2První program

Stalo se tradicí, že první program napíše pozdrav askončí. To dělá iprogram, který se ve vývojovém prostředí OnlineGDB Beta zobrazil po otevření. My si ho ale trochu upravíme: Smažeme úvodní řádky č. 1–8, které obsahují komentář – text, který je určen programátorovi, ale který neříká počítači, co má dělat. (Když komentář ponecháme nebo inějak změníme, nic se nestane, program bude fungovat úplně stejně jako bez něj. Navíc zde komentář informuje oúčelu prostředí OnlineGDB Beta, takže je pro nás zcela zbytečný.)

Dále odstraníme řádku 16, která je prázdná (jestliže jste odstranili komentář, je to nyní řádka 8). Nakonec změníme text pozdravu, který má program vypsat akterý je zapsán vuvozovkách na řádce 7, z

"Hello, World"

na

"Nazdárek, lidičky".

Výsledný program bude mít tvar

#include <iostream>

using namespace std;

int main()

{

cout << "Nazdárek, lidičky";

return 0;

}

To je vše.

2.3Spouštíme první program

Nyní náš program přeložíme aspustíme. Ktomu použijeme tlačítko Run, které je třetí na liště nad panelem editoru. Jestliže jste program upravili přesně tak, jak jsme si ukázali – musí se shodovat ivelikost písmen, nesmějí chybět středníky apod. –, vývojové prostředí náš program úspěšně přeloží aspustí. Vpanelu ve spodní části vývojového prostředí zmizí nejen reklama, ale ivstupní pole apřepínače aobjeví se tam nápis

Nazdárek, lidičky

který napsal náš program – viz obr. 2.2. Pod ním bude ještě sdělení

...Program finished with exit code 0

Press ENTER to exit console.

které připojilo vývojové prostředí akteré říká, že program skončil skódem 0 (tedy bez problémů) aže po stisknutí klávesy Enter se toto okno (tzv. konzole) uzavře. Když skutečně stiskneme klávesu Enter, tento výstup – tedy text napsaný naším programem adoprovodný komentář – zmizí avrátí se tam původní obsah.

Obr. 2.2 Výsledek spuštění našeho prvního programu vC++

2.4Když uděláme chybu

Zkusme nyní smazat středník, kterým končí 7. řádka, takže na ní bude napsáno pouze

cout << "Nazdárek, lidičky"

astiskněme znovu tlačítko Run. Místo panelu svýstupem programu se ve spodní části prostředí objeví panel, který vidíte na obr. 2.3.

Obr. 2.3 Panel se zprávou ochybě

Červený nápis vzáhlaví zobrazeného textu oznamuje, že překlad se nezdařil kvůli chybám, které jsou uvedeny dále. Pod ním je na černém pozadí text

main.cpp:7:34: error: expected ‘;’ before ‘return’

který říká, že překladač vsouboru main.cpp na 15. řádce ve 34. sloupci očekával středník před slovem return. Pod ním je ještě výpis části programu, kde překladač chybu našel, aznak ^ upozorňuje na místo, kde překladač středník očekával. Program se tedy nepodařilo přeložit, aproto samozřejmě ani nemohl být spuštěn.

Programovací jazyky – nejen C++ – jsou, pokud jde opřeklepy, vynechávky (jako je náš zapomenutý středník) apodobné chyby, poměrně přísné: Mohlo by se zdát, že si ten chybějící středník mohl překladač doplnit – když už dokázal poznat, že tam chybí – aneobtěžovat stím; nicméně takhle se překladače programovacích jazyků nechovají, nesnaží se doplnit, co programátor vynechal, protože by to nemusely uhodnout správně aprogram by pak mohl dělat něco jiného, než co programátor chtěl.

Poznámka

Všimněte si, že se ve skutečnosti vpanelu ve spodní části stránky objevila nová záložka nadepsaná stderr. To je název používaný vC++ pro standardní výstup zpráv ochybách (vznikl jako zkratka slov Standard Error Output).

2.5Co vlastně náš program dělá

Napsali jsme – či spíše prostředí za nás napsalo – program, který vypíše pozdrav, nic víc. Teď si povíme, jak je tento program postaven, zčeho se skládá aco počítači říká.

Náš program má za úkol vypsat jakýsi text na konzoli (říkáme také do standardního výstupu). Ktomu potřebuje nástroje amy mu musíme říci, kde je najde – aktomu slouží první dvě řádky programu. Přesněji: Popisy nástrojů pro vstup zkonzole (tedy pro čtení toho, co uživatel programu napíše na klávesnici) avýstup na konzoli (typicky do „černého okénka“, vnašem případě do černého panelu ve spodní části stránky prostředí OnlineGDB Beta) jsou vsouboru, který se jmenuje iostream akterý má překladač kdesi připraven.4

První řádka programu tedy překladači říká, že chceme používat nástroje ze standardní knihovny popsané vsouboru iostream; třetí řádka nám toto používání usnadňuje – jak, ktomu se později vrátíme.

Pak následuje vlastní popis operací, které náš program bude dělat. Tento popis začíná zápisem

int main()

na který se můžeme dívat jako na úvod programu (později uvidíme, že jde otzv. hlavičku funkce jménem main()5). Za ním následuje otevírací složená závorka { aprogram končí uzavírací složenou závorkou }. Mezi těmito závorkami jsou uzavřeny příkazy popisující, co od programu požadujeme (těmto příkazům říkáme také tělo funkce main).6

První zpříkazů těla programu má tvar

cout << "Nazdárek, lidičky";

aříká: vezmi proud (tak označujeme vC++ nástroje pro vstupní avýstupní operace), který se jmenuje cout akterý slouží kvýstupu na konzoli, avlož do něj – tedy napiš do konzolového okna – text Nazdárek, lidičky. Dvojice znaků „menší než“, <<, musí za sebou následovat bez mezery apředstavuje příkaz „vlož následující text do proudu“. Budeme oní hovořit jako ovýstupním operátoru.

Text, který chceme vypsat, musí být uzavřen vuvozovkách (avprogramech se používají pouze rovné uvozovky, stejné na počátku ina konci).

Ozápisu, jako je "Nazdárek, lidičky", hovoříme jako oznakovém řetězci nebo ořetězcové konstantě.

Pak následuje ještě příkaz

return 0;

který říká „zde program končí avše se podařilo“.

Za slovem return můžeme zapsat jakékoli celé číslo; ovšem konvence říká, že 0 znamená, že program skončil úspěšně, kdežto nenulové hodnoty říkají, že došlo kchybě, že se něco nepodařilo tak, jak jsme chtěli. Číslo samo obvykle znamená kód chyby.

Poznamenejme, že hodnotu uvedenou za slovem return vypíše prostředí ve zprávě oukončení programu. Kdybychom náš program ukončili např. příkazem

return 10;

dostali bychom v„černém okénku“ zprávu

...Program finished with exit code 10

ikdyž program proběhl bez problémů avypsal, co jsme po něm chtěli.

2.6Zdrojový text programu

Nyní si uložíme text, který představuje náš první program, do souboru – třeba proto, abychom se kněmu mohli později vrátit. Ktomu nám poslouží tlačítko označené šipkou dolů (poslední vlevé skupině na liště nad panelem editoru).

Jestliže toto tlačítko stiskneme, najdeme vadresáři pro stažené soubory nový soubor main.cpp. Jedná se otextový soubor vkódování UTF-8 (později, v7. kapitole, si povíme, co to znamená). Stažený soubor pak můžeme upravovat vprogramech, jako je Poznámkový blok ve Windows nebo editor vi vLinuxu, nehodí se ktomu však např. MS Word, který do souboru implicitně vkládá také informace opoužitém písmu, jeho velikosti apod.

Otevřeme tedy tento soubor, upravíme příkaz, kterým vypisujeme pozdrav, do tvaru

cout << "Jak se máte? \nJá dobře.";

soubor uzavřeme, vrátíme se do prostředí OnlineGDB Beta aupravený soubor do něj nahrajeme: Stiskneme tlačítko se šipkou nahoru směřující do oblaku – vlevé skupině na liště nad panelem editoru je druhé zleva. Objeví se dialog pro otevření souboru; vněm vyhledáme náš soubor main.cpp astiskneme tlačítko Otevřít. Prostředí OnlineGDB Beta vybraný soubor přečte ajeho obsahem nahradí text zobrazený veditoru.

Poznámka

Jinou možností je uložit zdrojový text do některého zúložišť – prostředí OnlineGDB Beta nabízí Facebook, Github nebo Google+, pokud na nich máte vytvořen účet. Ktomu slouží tlačítko Save na panelu nástrojů.

Poznámka

Připomeňme si, že text programu, který jsme napsali vC++, označujeme jako zdrojový text (programátoři obvykle říkají zdroják). Textový soubor, který ho obsahuje, označujeme jako zdrojový soubor (itomu se obvykle říká zdroják).

2.7Upravený program

Jestliže upravený program spustíme, vypíše

Jak se máte?

Já dobře.

aza touto zprávou bude následovat obvyklé sdělení, že program skončil skódem 0 aže máme stisknout klávesu Enter, abychom zavřeli konzoli. Všimněte si, že výstup je nyní rozdělen na dvě řádky. Za to může symbol \n (obrácené lomítko bezprostředně následované malým n), který se ve znakových řetězcích vjazyce C++ používá pro vyznačení přechodu na novou řádku.

#include <iostream>

using namespace std;

int main()

{

cout << "Jak se máte?" << endl << "Já dobře.";

return 0;

}

Obr. 2.4 Náš program umí přejít na novou řádku

Jednotlivé části vystupujícího textu pochopitelně musejí být uzavřeny vuvozovkách. Přesněji: Nyní vypisujeme dva různé řetězce (akaždý znich musí být uzavřen vuvozovkách).

Podívejme se podrobněji na příkaz

cout << "Jak se máte?";

2.8Komentáře

}