VYSOKÁ ŠKOLA BAŇSKÁ TECHNICKÁ UNIVERZITA KURZ C++ Materiál ze systému Autoři: Jiří Šebesta, Jakub Sztefek

Rozměr: px
Začít zobrazení ze stránky:

Download "VYSOKÁ ŠKOLA BAŇSKÁ TECHNICKÁ UNIVERZITA KURZ C++ Materiál ze systému http://aha.cs.vsb.cz:8080/aha/kurzcpp. Autoři: Jiří Šebesta, Jakub Sztefek"

Transkript

1 VYSOKÁ ŠKOLA BAŇSKÁ TECHNICKÁ UNIVERZITA KURZ C++ Materiál ze systému Autoři: Jiří Šebesta, Jakub Sztefek * pdf připravil PavelSVK VŠB 2005

2 Úvod do C++ C++ je reakcí programátorů jazyka C na objektově orientované programování. Jazyk C++ je vytvořen na pevných základech jazyka C. Přináší nám podporu objektově orientovaného programování (a mnoha dalších nových prvků). Přitom však nebyla obětována ani původní výkonnost jazyka C, ani jeho elegance a pružnost. C++ byl vytvořen Bjarne Stroustrupem v roce 1979 v Bellových laboratořích v Murray Hill v New Jersey. Původně se jmenoval C s třídami. Jeho jméno bylo teprve v roce 1983 změněno na C++. Od té doby prošel jazyk C++ třemi zásadními revizemi. První z nich byla v roce 1985, druhá v roce 1990 a třetí proběhla během standardizačního procesu. Práce na standardizaci C++ započala před několika lety. Hrubý koncept plánovaného standardu byl vytvořen 25. ledna V tomto konceptu se komise ANSI/ISO C++ (American National Standards Institute a International Standards Organization) držela zásad definovaných Stroustrupem a přidala některá další. V podstatě však zůstal původní návrh C++ zachován. Brzy po dokončení hrubého konceptu standardu došlo k události, která způsobila, že byl standard podstatně rozšířen - bylo to vytvoření knihovny standardních šablon STL (Standard Template Library) Alexandrem Stěpanovem. STL je sada generických rutin, které se mohou používat pro manipulaci s daty. Jsou výkonné a elegantní, bohužel však poněkud rozsáhlé. Následně po vytvoření hrubého konceptu schválila komise začlenění STL do normy C++, čím se původní rozsah C++ podstatně zvětšil. Nejzávažnější ovšem bylo, že zahrnutí STL mimo jiné zpomalilo proces standardizace C++. Je pravdou, že standardizace C++ trvala mnohem déle, než kdokoliv čekal. Nicméně 14. listopadu 1997 prošel hotový koncept komisí a standard pro C++ se tak stal skutečností. I. Neobjektové základy jazyka Tato část obsahuje první část kurzu. Je zaměřena na neobjektové vlastnosti jazyka C++. Kapitola 1. - Jazyk C++ Obsah 1.1. Základní pojmy 1.2. Objektově orientované programování (OOP) 1.3. Zapouzdření 1.4. Polymorfismus 1.5. Dědičnost 1.6. Test V této části si vysvětlíme základní pojmy jako je objektově orientované programování, zapouzdření, polymorfismus a dědičnost. Závěrem si řekneme něco o třídách a přetěžování funkcí.

3 1.1. Základní pojmy V této kapitole se seznámíme s některými základními pojmy ze světa počítačů. Mluvíme-li o programování musíme začít pojmem algoritmus. Algoritmu můžeme rozumět jako předpisu pro řešení nějakého problému. Algoritmus je předpis, který se skládá z kroků a který zabezpečí, že na základě vstupních dat jsou poskytnuta požadovaná data výstupní. Navíc každý algoritmus musí mít následující vlastnosti: jasný (algoritmus musí být srozumitelný), rezultativní (algoritmus vede ke správnému výsledku), konečný (požadovaný výsledek musí být poskytnut v "rozumném čase") opakovatelný (při použití stejných vstupních dat musí algoritmus vždy dospět k témuž výsledku). Takto vytvořený algoritmus můžeme zapsat ve formě nějakého programovacího jazyka, v našem případě tedy v jazyce C++. Vytvoříme tak zdrojový text (.cpp). Zdrojový text musí být do spustitelného tvaru přeložen překladačem. Ten zároveň provádí kontrolu syntaxe. Překladač je program, který čte zdrojový kód a převádí ho na ekvivalentní program. Důležitou součástí tohoto procesu překladu jsou diagnostické zprávy, kterými překladač informuje uživatele například o přítomnosti chyb ve zdrojovém kódu. Výsledkem kompilace zdrojového kódu je objektový soubor (.obj). Stále se však nejedná o spustitelný soubor. Ten získáme až po spuštění sestavovacího programu (linker). Programy v jazyce C++ se vytvářejí propojením jednoho nebo více objektových souborů s jednou nebo více knihovnami. Knihovny jsou buď součástí překladače, nebo si je můžeme sami vytvořit popř. zakoupit. Postup při vytvoření spustitelného souboru je tedy následující: Vytvoření zdrojového textu s příponou.cpp. Tento zdrojový soubor se zkompiluje do souboru s příponou.obj. soubor.obj se propojí se všemi potřebnými knihovnami, čímž vznikne spustitelný program Objektově orientované programování (OOP) Objektově orientované programování je výkonný způsob, jak přistupovat k úloze programování. Již od svých ranných začátků bylo programování spojováno s rozličnými metodologiemi. První programy byly realizovány pouhým nastavením přepínačů na čelním panelu počítače. Tento postup však byl vhodný pouze pro velice malé programy. Později vytvořený jazyk symbolických instrukcí již umožňoval psaní delších programů. K dalšímu vývoji došlo v roce 1955, kdy byl vytvořen programovací jazyk vysoké úrovně - FORTRAN. S využitím programovacích jazyků vysoké úrovně byl programátor schopen psát dlouhé a složité programy. Další rozvoj přinesl vývoj strukturovaných programovacích jazyků - ALGOL a PASCAL. Strukturované programování se opírá o dobře definované řídící struktury, bloky kódu, vyloučení příkazu GOTO (nebo jeho minimalizace), funkce, rekurzi a lokální proměnné. Podstatou strukturovaného programování je začlenění programu do jeho základních

4 vymezovacích prvků. S využitím strukturovaného programování může průměrný programátor vytvořit a udržovat programy až o délce několika tisíc řádků. Když však program přesáhl určitou velikost, zklamalo i strukturované programování. Bylo potřeba vytvořit nový přístup k programování, který by dovolil psát složitější programy. K tomuto účelu bylo vytvořeno objektově orientované programování. OOP vzalo nejlepší myšlenky včleněné do strukturovaného programování a zkombinovalo je s výkonnými novými koncepty, které umožňovaly organizovat programy mnohem efektivněji. Objektově orientované programování podněcuje k rozkladu problému na elementární prvky. Každá komponenta se stává samostatným a nezávislým objektem, který obsahuje své vlastní instrukce a data, vztahující se k tomuto objektu. Všechny objektově orientované jazyky sdílejí následující tři vlastnosti: Zapouzdření (encapsulation) Polymorfismus - schopnost výskytu v mnoha formách (polymorphism) Dědičnost (inheritance) 1.3. Zapouzdření Zapouzdření je mechanismus, který svazuje dohromady kód a data a zabezpečuje je před vnějšími zásahy či zneužitím. V OOP může být kód s daty slučován takovým způsobem, že vznikají tzv. nezávislé "černé skříňky". Spojením kódu s daty vzniká objekt. Jinými slovy lze říci, že objekt je instrument, který podporuje zapouzdření. Uvnitř objektu může být kód nebo data nebo obojí, jednak jako privátní (private) vzhledem k objektu, nebo jako veřejná (public). Privátní kód nebo data jsou známá a dostupná pouze pro jinou část daného objektu. Znamená to, že privátní kód nebo data nejsou dostupné z jiné části programu mimo objekt. Když jsou kód nebo data veřejná, mohou k nim přistupovat i jiné části programu. Typicky jsou veřejné prvky objektu využity k zajištění řízeného rozhraní k privátním elementům objektu Polymorfismus Polymorfismus je vlastnost, která umožňuje, aby bylo jedno jediné jméno použito pro dva nebo více souvisejících, ale technicky různých účelů. Ve vztahu k OOP umožňuje polymorfismus určit jedním jménem celou obecnou třídu procesů. Uvnitř obecné třídy procesů je pak volba konkrétního procesu dána typem dat. Obecně lze polymorfismus charakterizovat jako: "jedno rozhraní, mnoho metod". Výhodou polymorfismu je, že omezuje přílišnou složitost tím, že určením obecné třídy procedury povolí jediné rozhraní. Je pak záležitostí překladače, aby vybral konkrétní proceduru, vhodnou pro danou situaci.

5 Příklad: V jazyce C byly definovány funkce abs(), labs() a fabs() které vracely absolutní hodnotu z čísel integer, long integer a float. V C++ který podporuje polymorfismus mohou být všechny tyto funkce volány pod jediným jménem abs(). Tato vlastnost polymorfismu se nazývá vícenásobná definice funkce. Polymorfismus může být použit také na operátory. Příklad: V jazyce C je znaménko + užito ke sčítání integer, long integer, znaku nebo hodnoty v pohyblivé řádové čárce. Ve všech případech překladač pozná, který typ aritmetiky má použit. V C++ je možné tento koncept podle vlastního uvážení rozšířit na další typy dat. Tato vlastnost polymorfismu se nazývá vícenásobná definice operátoru. Polymorfismus tedy dovoluje vytvářet standardní rozhraní k příslušným procesům Dědičnost Dědičnost je proces, při němž může jeden objekt získat vlastnosti jiného objektu. Přesněji řečeno objekt může zdědit obecnou sadu vlastností a do ní může přidat takové vlastnosti, které jsou specifické pouze pro něj. Dědičnost je důležitá, protože dovoluje objektu podporovat koncept hierarchické klasifikace. Příklad: Popis domu. Dům je částí obecné třídy nazvané budova. Budova je zase částí obecnější třídy nazvané stavba, která je opět součástí obecné třídy objektů nazvané zhotovené člověkem. Třída potomka dědí veškeré vlastnosti spojené s rodiči a přidává si k nim své vlastní charakteristiky. Bez využití uspořádané klasifikace, by měl každý objekt definovány všechny charakteristiky, které se k němu vztahují. Prostřednictvím dědičnosti je možné zadat třídu (či třídy) do níž daný objekt patří a přiřadit mu specifické vlastnosti, které mají všechny objekty dané třídy.

6 Test - kapitola 1 1. Výsledkem kompilace je: Your answer:objektový soubor 2. Mají překladač (kompilátor) a sestavovací program (linker) stejnou funkci? Your answer:ne 3. Jak se jmenuje vlastnost, která umožňuje, aby bylo jedno jediné jméno použito pro dva nebo více různých účelů? Your answer:polymorfismus 4. Můžem si programátor sám vytvářet knihovny? Your answer:ano 5. Programy v jazyce C++ se vytvářejí propojením: Your answer:jednoho nebo více objektových souborů s jednou nebo více knihovnami. 6. Jak se nazývá proces, při němž může jeden objekt získat vlastnosti jiného objektu? Your answer:dědičnost

7 Kapitola 2. - První programy Obsah 2.1. První program 2.2. Opakování části programu 2.3. Funkce a metody 2.4. Úvod do tříd 2.5. Test V této části si zkusíme napsat první jednoduché programy. Na kterých si ukážeme, co se musí k "vlastnímu programu" přidat, aby překladač dokázal převést zdrojový kód do spustitelného tvaru První program V každé učebnici programování se začíná programem, který má na obrazovku vypsat slova "Ahoj svete!". A tak ani tento kurz nebude vyjímkou. hello.cpp // hello.cpp #include <iostream> using namespace std; // prostor jmen int main() { cout << "Ahoj svete!" << endl; return 0; } // int main() Nyní se můžeme podívat na to co má obsahovat každý zdrojový text: funkci main, jejímž zavoláním začíná každý program. pomocí preprocesoru začleňovat informace o deklaracích, které jsou pro překladač nezbytné. Zde je to řádek #include <iostream>. informace o prostoru jmen do něhož budeme moci přistupovat using namespace std;, zde se jedná o standartní prostor jmen. Protože je C++ rozšířenou množinou jazyka C, jsou všechny prvky jazyka C obsaženy také v C++. Snad nejběžnějším prvkem specifickým pro C++ je jeho přístup ke konzoli I/O. Můžeme stále používat funkce printf() a scanf(), ale C++ nám nabízí nový a lepší způsob jak provádět tyto operace a to pomocí I/O operátorů. Výstupní operátor je << a vstupní >>. Pro výstup na obrazovku proto použijeme příkaz: cout << "Prikaz jazyka C++";

8 který způsobí, že se na obrazovku počítače vypíše řetězec. Cout je předefinovaný datový proud (stream), který je při spuštění programu v C++ automaticky připojen ke konzoli. Je to podobné jako stdout v jazyce C. Použitím výstupního operátoru << lze provést výstup jakéhokoliv základního typu jazyka C++. cout << ; Obecný formát: cout << výraz; Pro vstup hodnot z klávesnice poté používáme vstupní operátor >>. Následující příkaz například načte hodnotu typu integer do cislo. int cislo; cin >> cislo; Obecný formát: cin >> výraz; Příklad: Následující program požádá uživatele o zadání celého čísla. Poté vytiskne zadané číslo a jeho dvojnásobek a druhou mocninu. vstup.cpp //vstup.cpp #include <iostream> using namespace std; int main(void) { int i; cout << "Zadejte celociselnou hodnotu: "; cin >> i; cout << "Zadana hodnota byla " << i << endl; cout << "Jeji dvojnasobek je " << i*2 << " a druha mocnina je " << i*i; return 0; } 2.2. Opakování části programu Opakované činnosti zpravidla do programu nezapisujeme opakovaně, ale snažíme se překladači sdělit, že má danou část programu vykonat několikrát. tato konstrukce se nazývá cyklus.

9 Příklad: Vypočtěme a zobrazme hodnoty prvních deseti násobků zadaného celého čísla. K řešení daného příkladu použijeme cyklus while. řídící podmínka cyklu je podmínka na začátku cyklu. Pokud je splněna provede se tělo cyklu nasobky.cpp // nasobky.cpp #include <iostream> // vstupy a vystupy #include <iomanip> // formatovani vystupu using namespace std; int main() { const int od = 1; // dolni mez const int po = 10; // horni mez int cislo; cout << "Zadej cele cislo : " ; cin >> cislo ; int cinitel = od ; while (cinitel <= po) { int soucin = cislo * cinitel; cout << setw(4) << soucin; cinitel = cinitel + 1; } // while(cinitel <= po) return 0; } // int main() Výstup programu nasobky.cpp: Zadej cele cislo: Funkce a metody Funkce v jazyce C++ mají jednoznačné jméno a mají určen počet a typ argumentů a typ návratové hodnoty. návratový výraz: return... ; přetížení funkce: stejné pojmenování funkce, která se liší argumenty. Funkcím, které jsou součástí tříd, říkáme metody. S daty se pak komunikuje prostřednictvím metod, které jsou součástí rozhraní. Příklad: Naším úkolem je realizace zápisu hodnot různých typů na standartní výstup. Použité typy budou celá a racionální čísla, řetězec a námi vytvořený objekt. V programu jsou vytvořeny přetížené funkce tisk(), které se liší typem jejich argumentu (int, double a string). To je dostatečná informace pro překladač aby, aby při volání funkce tisk poznal, která přetížená funkce odpovídá našemu požadavku.

10 tiskni.cpp // tiskni.cpp #include <iostream> // vstupy a vystupy #include <string> // retezcove definice a metody using namespace std; class polar{ double r, fi; public: polar(double a, double b) { r = a; fi = b;}; // konstruktor objektu double dej_r(void) {return r;}; double dej_fi(void) {return fi;}; }; void tisk(int num) { cout<< "cele cislo: " << num << endl; } // void tisk(int num) void tisk(double num) { cout << "racionalni cislo : " << num << endl; } // void tisk(double num) void tisk(strings) { cout << "retezec : " << s << endl; } // void tisk(strings) void tisk(polar p) { cout << " r : " << p.dej_r() << " fi: " << p.dej_fi() << endl; } // void tisk(polar p) int main() { int i = 29; double x = ; string s = "kousek textu"; polar y(65.43, 2.1); // tvorba objektu tridy polar tisk (i); tisk (x); tisk (s); tisk (y); return 0; } // int main( ) Výstup programu tiskni.cpp: cele cislo: 29 racionalni cislo: retezec: kousek textu r: fi: Úvod do tříd Snad nejdůležitějším prvkem jazyka C++ je třída. Je to mechanismus používaný k vytváření objektů. Jako taková je třída srdcem mnoha prvků jazyka C++. Třída je deklarována klíčovým slovem class. Syntaxe deklarace class vypadá v obecném tvaru takto: class jméno-třídy

11 { // privátní funkce a proměnné public: // veřejné funkce a proměnné } seznam-objektů Seznam objektů je v deklaraci třídy nepovinný. Stejně jako strukturu, můžeme deklarovat objekty třídy později - až budou potřeba. Zatímco jméno třídy je také technicky nepovinné, z praktického hlediska je vždy potřeba. Je to proto, že jméno třídy se stává novým typem jména použitého k deklaraci objektů třídy. Funkce a proměnné deklarovány uvnitř deklarace třídy jsou označovány jako členy této třídy. To znamená, že jsou přístupné pouze pro ostatní členy třídy. Pro deklaraci členů veřejné třídy se použije klíčové slovo public:. Všechny funkce a proměnné takto deklarované jsou přístupné pro členy třídy a i pro další části programu, který obsahuje třídu. Příklad jednoduché deklarace třídy: class mojetrida { int a; // privatni promenna public: void nastav_a(int num); int cti_a(); }; Tato třída má pouze jednu privátní proměnnou a a dvě veřejné funkce nastav_a(int num) a cti_a(). Funkce které jsou deklarovány uvnitř třídy se nazývají členské funkce. Jelikož a je privátní není dostupná pro žádný kód vně mojetrida. Ovšem veřejné funkce mohou být volány každou částí programu, která mojetrida obsahuje. Ačkoliv jsou funkce nastav_a(int num) a cti_a() deklarovány, nejsou ještě definovány. Abychom definovaly členskou funkci musíme spojit typové jméno třídy se jménem funkce a to pomocí dvojice dvojteček ::. Dvojice dvojteček se nazývá operátor rozlišení oblasti. Ukažme si jak mohou být funkce definovány: void mojetrida::nastav_a(int num) { a = num; } int mojetrida::cti_a() { return a; } Obecný tvar pro definici členské funkce:

12 return-type jméno-třídy::jméno-funkce(seznam-argumentů) { // tělo funkce } Deklarace mojetrida nedefinueje žádný objekt typu mojetrida. Definuje pouze typ objektu, když bude deklarován. Následující řádek deklaruje dva objekty typu mojetrida. mojetrida obj1, obj2; Poté co vytvoříme objekt třídy může se program odkazovat na jeho veřejné členy pomocí tečkových operátorů. obj1.nastav_a(10); obj2.nastav_a(5); Tyto příkazy nastaví kopii obj1 na 10, kopii obj2 na 5. Každý objekt obsahuje vlastní> kopii všech dat deklarovaných uvnitř třídy. Tedy obj1 je odlišné od a vázaného na obj2. Deklarace třídy je pouze logická abstrakce, jež definuje nový typ. Určuje, jak bude objekt daného typu vypadat. Teprve deklarace objektu vytváří fyzickou entitu daného typu. Objekt totiž zabírá paměť, ale definiční typ ne. Každý objekt třídy má svou vlastní kopii každé z proměnných deklarovaných uvnitř třídy.

13 Test - kapitola 2 1. Chceme-li zopakovat nějakou část kódu několikrát použijeme: Your answer:cyklus 2. Kterým příkaz použijeme pro vstup hodnot z klávesnice? Your answer:cin 3. Je následující deklarace třídy správná? class mojetrida { int a; public: void nastav_a(int num); int cti_a(); }; Your answer:ano 4. Který z těchto příkladů je tečkový operátor? Your answer:. 5. Co znamená přetížení funce? Your answer:stejné pojmenování funkce, která se liší argumenty. 6. Kterým příkazem posíláme data na standardní výstup? Your answer:cout

14 Kapitola 3. - Základní typy, konstanty a proměnné Obsah 3.1. Identifikátory a klíčová slova 3.2. Komentáře 3.3. Čísla v počítači a v C Konstanty 3.5. Celočíselné konstanty 3.6. Racionální konstanty 3.7. Znakové konstanty 3.8. Proměnné a ukazatele 3.9. Definice uživatelských typů Test V této části se seznámíme s identifikátory, klíčovými slovy a komentáři. dále se naučíme vytvářet konstanty a proměnné základních datových typů Identifikátory a klíčová slova Identifikátory Identifikátory jsou jména, která dáváme proměnným, funkcím, typům,... délka až 1024 znaky, první symbol písmeno nebo podtržítko, následuje libovolná kombinace písmen, číslic a podtržítek, rozlišují se malá a velká písmena! Klíčová slova Při použití klíčových slov platí stejná pravidla jako v jazyce C. Proto je tedy nesmíme používat v jiném významu, než jak určuje norma ISO C++, což znamená, že nesmí být použita jako jména proměnných nebo funkcí. Tabulka 3.1.1: Klíčová slova jazyka C++. asm do inline short typeid auto double int signed typename bool dynamic_cast long sizeof union break else mutable static unsigned case enum namespace static_cast using catch explicit new struct virtual char extern operator switch void class false private template volatile const float protected this wchar_t

15 const_cast for public throw while continue friend register true default goto reinterpret_cast try delete if return typedef 3.2. Komentáře Komentáře umisťujeme do zdrojového kódu z důvodu jeho lepší čitelnosti. Některé důležité vlastnosti kódu popisujeme právě v komentářích. Na zakomentovanou část programu nejsou kladeny prakticky žádná omezení. V jazyce C++ můžeme vkládat poznámky do textu stejným způsobem jako v jazyce C. Tedy buď pomocí párových značek /* */ : /* Toto je "parovy" komentar a jeho pokracovani * /... /* dalsi parovy komentar if ( uk->chyba ) { ts->pom_info ++; } // vlozeny radkovy komentar else stale jsme v komentari */ Nebo pomocí // za nimiž je vše až do konce řádku považováno za komentář. int a, b, c; // jednořádkový komentář odsazovač (bílý znak, prázdné místo, white space): mezera, tabulátor, nový řádek, posun řádku, návrat vozíku, nová stránka a vertikální tabulátor Čísla v počítači a v C++ V počítači jsou všecnhy informace zakódovány pomocí nul a jedniček (dvojková soustava). Pouze celá čísla jsou v počítači uložena přesně, reálná čísla jsou uložena pomocí reálné mantisy a exponentu. Umístěním modifikátoru unsigned před požadovaný datový typ, vytvoříme typ "bezznaménkový". Takto vytvořený datový typ může obsahovat pouze kladné hodnoty a nulu.

16 Tabulka 3.3.1: Základní datové typy a jejich rozsah v 32bitovém prostředí. datový typ bitů význam bool nedef. logická hodnota char 8 znak wchar_t 16 UNICODE znak short 32 krátké celé číslo int 32 celé číslo long 32 dlouhé celé číslo enum 32 výčtový typ float 32 racionální číslo double 64 racionální číslo s dvojitou přesností long double 80 ještě delší racionální číslo pointer 32 ukazatel Vztahy pro rozsah základních číselných typů: short int long float double long double dále platí, že char vyžaduje 8 bitů. limits.h, float.h norma IEEE Deklarace, definice a konstanty deklarace určuje typ objektu definice definuje hodnotu proměnné či posloupnost příkazů funkce. Jeden pojmenovaný objekt může být definován pouze jedenkrát, ale může být vícekrát deklarován. Konstanty pojmenované hodnoty, definované po klíčovém slově const Lze definovat konstanty všech základních datových typů. Z konstant odpovídajících si datových typů můžeme vytvářet konstantní výraz. Konstantní výrazy nesmí obsahovat žádný z následujících operátorů: přiřazení, inkrementace a dekrementace, funkční volání, čárka.

17 Příklad: Jak je vidět na příkladu, můžeme definovat konstanty všech základních datových typů. Identifikátor meze představuje dvouprvkové pole typu float. Na identifikátorech arabska_hodn[] a rimska_znk[] vidíme, že pokud uvedeme všechny požadované hodnoty, nemusíme definovat dimenzi pole. Zápisem sizeof(arabska_hodn)/sizeof(int) zjišťujeme kolik prvků má pole arabska_hodn. konstant.cpp // konstant.cpp # include <iostream> # include <string> using namespace std; const bool pravda = true; const int konstanta = 123; const celociselna = -987 ; const double CPlanck = e-34; const char male_a = 'a' ; const string retezec = "Konstantni retezec." ; const float meze[2] = {-20, 60} ; const char rimska_znk[] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'} ; const int arabska_hodn[] = {1, 5, 10, 50, 100, 500, 1000} ; void main () { cout << pravda << endl << konstanta << endl << celociselna << endl << CPlanck << endl << male_a << endl << retezec << endl ; for (int i = 0; i < sizeof(arabska_hodn) / sizeof(int); i++) cout << "i = " << i << ", rimsky : " << rimska_znk[i] << ", arabsky " << arabska_hodn[i] << endl; } // void main () Výstup programu konstant.cpp: e-034 a Konstantni retezec. i=0, rimsky:i, arabsky 1 i=1, rimsky:v, arabsky 5 i=2, rimsky:x, arabsky 10 i=3, rimsky:l, arabsky 50 i=4, rimsky:c, arabsky 100

18 i=5, rimsky:d, arabsky 500 i=6, rimsky:m, arabsky Celočíselné konstanty Celočíselné konstanty jsou tvořeny zápisem celého čísla v desítkové, v osmičkové, nebo v šestnáctkové soustavě. Základ číselné soustavy určuje uvození celočíselných konstant: 0 v osmičkové soustavě, 0x nebo 0X v šestnáctkové soustavě, (A až F); libovolná jiná číslice v desítkové soustavě Tabulka 3.5.1: Celočíselné konstanty v desítkové a šestnáctkové soustavě. desítkový 123 0x7b xfc xff x11d xee29 šestnáctkový Je-li číslo ukončeno písmeny u, U, jedná se o čísla bez znaménka. Je-li číslo ukončeno písmeny l, L, jedná se o čísla s datovým typem long např. 254UL (254 typu unsigned long) Pozor na čísla v osmičkové soustavě, mohou vám způsobit nečekané problémy! /*POZOR - cisla zacinajici nulou jsou v osmickove soustave */ int a[] = {128, 231, 127, 162, 067, 121, 034, 171}; 3.6. Racionální konstanty Racionální konstanty jsou do paměti počítače ukládány pomocí mantisy a exponentu. např e5 je zápisem racionálního čísla Standartně je racionální konstanta typu double. Pokud chceme aby konstanta byla typu long double, připojíme za číslo L, např e5L.

19 Počty platných číslic podle IEEE 754: 7 float, 15 double, 19 long double. ISO C++ norma rozsah exponentů pro všechny racionální datové typy je 10ˆ-38 až 10ˆ+38, přesnost typu float je nejméně šest platných číslic, přesnost typů double a long double pak nejméně deset platných číslic. Přetečení a podtečení Přetečení a podtečení nastane, pokud číslo přesáhne meze pro datový typ uvedené v tabulce Přesáhne-li hodnota horní mez nastane přetečení a nastává chyba. Pokud je číslo příliš malé je výsledkem prostě nula. Tabulka 3.6.1: Rozsahy racionálních datových typů. typ bitů mant. exp. rozsah absolutních hodnot float ,4 x 10ˆ-38 až 3,4 x 10ˆ+38 double ,7 x 10ˆ-308 až 1,7 x 10ˆ+308 long double ,4 x 10ˆ-4932 až 1,1 x 10ˆ Znakové konstanty Znakové konstanty jsou tvořeny znakem uzavřeným mezi apostrofy. Například: 'a' 'b' 'c' Nastává ovšem problém jak řešit některé speciální znaky (např. apostrof). Zde si pomáháme symbolem zpětné lomítko a jedním či více následujícími znaky. Těmto posloupnostem se říká escape sekvence. Tabulka 3.7.1: Escape sekvence. posl. jméno CTRL význam \a Alert (Bell) G pípnutí \b Backspace H návrat o jeden znak \f Formfeed L odstránkování \n Newline J na začátek nového řádku \r Carriage return M na začátek aktuálního řádku \t Horizontal tab I na další tabelační pozici \v Vertical tab K stanovený přesun dolů \\ Backslash zpětné lomítko \' Single quote apostrof \" Double quote uvozovky \? Question mark otazník \OOO znak zadaný osmičkově \xhh znak zadaný šestnáctkově

20 Pro češtinu byl vytvořen standard UNICODE. V rámci tohoto kódování používáme datový typ wchar_t a před prvním apostrofem uvádíme písmeno L. Například 'č' zapíšeme L'č'. Konstantní řetězce: Řetězec je posloupnost (pole) jednoho či více znaků. "dve slova" "a" "Ahoj!" "Cela tato veta tvori jeden retezec." kódování UNICODE: L"konstantní řetězec" 3.8. Proměnné a ukazatele Proměnné jsou paměťová místa přístupná prostřednictvím identifikátoru jejichž hodnotu můžeme během výpočtu měnit. Proměnné definujeme uvedením datového typu, jenž je následován jedním či více identifikátory. // promenne a jejich pripadna inicializace int a, b, c, pocet = 0; float x, prumer = 0.0, odchylka = 0.0; double y; Přímé pojmenování paměšového místa se nazývá proměnná. Nepřímému pojmenová ní se říká ukazatel. adresový operátor & dereference adresy * // korektni ziskani adresy do ukazatele int i, *pi; // vytvoreni promenne a ukazatele na int pi = &i; // korektni ziskani adresy *pi = 123; // prace se ziskanou adresou // nyni mame jak v *pi tak v i hodnotu 123 Obvyklou chybou u začínajících programátorů je použití ukazatele bez získání adresy. // pokus o pouziti neinicializovaneho ukazatele // pozor, chybny kod : int *p; *p = 123; Pokud chceme inicializovat ukazatel a nemáme na mysli konkrétní datový typ, můžeme ho inicializovat pomocí prázdného typu void. Takto vzniklý ukazatel však nelze dereferencovat bez přetypování.

21 3.9. Definice uživatelských typů Pokud programátor potřebuje vytvořit a pojmenovat, nějaký svůj datový typ, použije konstrukci typedef Konečně může programátor vytvořit vlastní datový typ z hodnot, které uvede v seznamu(výčtu) enum. Takový datový typ se obecně jmenuje výčtový. Výčtový datový typ umožňuje vytvořit nové typy a proměnné, jejichž hodnoty se omezují na množinu uvedených hodnot. Můžeme například deklarovat typ BARVA, který bude nabývat následujících hodnot: CERVENA, MODRA, BILA a ZELENA. enum BARVA { CERVENA, MODRA, BILA, ZELENA }; Každá výčtová konstanta (CERVENA, MODRA, BILA, ZELENA) má celočíselnou hodnotu. Jestliže neurčíme jinak, bude mít první konstanta hodnotu 0 a další vždy o jedničku větší. Výčtové konstanty můžeme inicializovat na konkrétní hodnoty a těm, které zůstanou neinicializovány, se přiřadí hodnota podle předcházejících konstant. Příklad enum BARVA { CERVENA=100, MODRA, BILA=300, ZELENA }; /* konstanta CERVENA má hodnotu 100 * * konstanta MODRA má hodnotu 101 * * konstanta BILA má hodnotu 300 * * konstanta ZELENA má hodnotu 301 */ První konstrukce ukazuje definici menu_fcn ukazatele na funkci a následně vytvoření tříprvkového pole. Poté následuje konstrukce obsahující enum uvedená opět definicí nového datového typu typedef. u-typedef.cpp // definice uživatelských typů typedef void (*menu_fcn) (void); menu_fcn command[3]; // definice typu // použití nového typu typedef enum { // definice výčtu Back = 8, Tab = 9, Esc = 27, Enter = 13, Down = 0x0150, Left = 0x014b, Right = 0x014d, Up = 0x0148, NUL = 0x0103, Shift_Tab = 0x010f, Del = 0x0153, End = 0x014f, Home = 0x0147, Ins = 0x0152, PgDn = 0x0151, PgUp = 0x0149 } key_t; // pojmenování výčtu... key_t znak; // proměnná typu výčet a testování... else if ((znak == Left) (znak == Back))... else if (znak == Enter)... else if (znak == Esc)... else if...

22 Test - kapitola 3 1. Konstanty definujeme po klíčovém slově: Your answer:const 2. Maximální délka identifikátoru v normě ISO C++: Your answer:1024 znaků 3. Mezi základní datové typy C++ nepatří: Your answer:number 4. Určete jaké hodnoty vypíše program po svém provedení: int *a; *a=123; cout << *a << endl; Your answer:program skončí chybovým hlášením 5. Určete, který z těchto znaků nepovažujeme za escape sekvenci: Your answer:\w 6. Komentář se v C++ uzavírá mezi tyto symboly: Your answer:/* */ 7. Jaká bude v proměnné i hodnota po vykonání následující části programu? int i; i = ; Your answer: Rozlišují se u identifikátoru malá a velká písmena Your answer:ano 9. Rozsah racionálního datového typu int je: Your answer:32 bitů 10. Určete jaké hodnoty vypíše program po svém provedení: int i,*pi; i=123; pi=&i; *pi=456; cout << *pi << " " << i << endl; Your answer:

23 Kapitola 4. - K čemu jsou operátory Obsah 4.1. Operátory jazyka C Operátor přiřazení 4.3. Aritmetické výrazy 4.4. Logické hodnoty a operátory 4.5. Relační operátory 4.6. Bitové operátory 4.7. Adresový operátor 4.8. Reference 4.9. Podmíněný operátor Přetypování výrazu Správa paměti Test V této kapitole se seznámíme s operátory jazyka C++ a jejich rozdělením Operátory jazyka C++ Operátor je znak či víceznakový symbol představující nějakou operaci. Operátory používáme zejména k vytváření výrazů. Zapíšeme-li například a-b, hovoříme o výrazu s operandy a a b a operátorem +. Všechny operátory jazyka C++ jsou uvedeny v tabulce Tabulka 4.1.1: Operátory jazyka C++ pri. operátor popis asoc. l-hodn. 1 ( ) volání funkce ano 1 [ ] indexování ano 1. přístup k položkám ano 1 -> přístup k položkám přes ukazatele ano 1 :: rozlišení platnosti ano 2! ~ logická a bitová negace ne inkrementace ane deknerementace ne unární plus a mínus ne 2 (typ) přetypování ne 2 * dereference ukazatele ne 2 & získání adresy ne 2 sizeof velikost v bajtech ne

24 2 new alokace paměti ne 2 delete uvolnění paměti ne 2 const_cast přetypování ano 2 static_cast přetypování ano 2 dynamic_cast přetypování ano 2 reinterpret_cast přetypování ano 2 typeid identifikace typu ne 3.* ->* deref. třídních ukazatelů. ano 4 * / % násobení, dělení, modulo. ne sčítání, odečítání. ne 6 << >> bitový posun vlevo, vpravo. ne 7 < > <= >= menší než, větší než, menší nebo rovno, větší nebo rovno. ne 8 =!= rovno, nerovno. ne 9 & bitová konjunkce. ne 10 ^ bitová nonekvivalence. ne 11 bitová disjunkce. ne 12 && logická konjunkce. ne 13 logická disjunkce. ne 14?: podmíněný výraz ano 15 = přiřazení ano 15 += = *= /= %= složená přiřazení ano 15 &= ˆ= = další složená přiřazení ano 15 >>= <<= další složená přiřazení ano 16, postupné vyhodnocení!. ano pri. - priorita operátoru, operátory výše v tabulce mají vyšší prioritu. asoc. - asociativita operátoru, šipka ukazuje směr vyhodnocení operátoru. l-hodn. - o operátoru říká, může-li být výsledek použit vlevo od příkazu přiřazení Operátor přiřazení Při většině výpočtů, musíme výsledek z pravé strany přiřadit na stranu levou. Jako příklad můžeme uvést všeobecně známou Pythagorovu větu: c = (a² + b²) Aby překladač dokázal tento vztah zpracovat, musíme jej nejprve přepsat do zápisu v jazyce C++. c = sqrt(a*a + b*b);

25 Operátorem přiřazení v jazyce C++ je symbol =. Vlevo od = musí být výraz, odkazující se do paměti. Napravo od = musí být výraz, jehož hodnotu chceme po vyčíslení na dané místo v paměti přiřadit. Typ výrazu je určen typem operandů. Jsou-li operandy stejného typu, je výsledek téhož typu. Jinak je typu "největšího z uvedených operandů". Operátor přiřazení lze využít i pro současnou inicializaci více proměnných toutéž hodnotou. int a, b, c; a = b = c = -1; ISO norma C++ nedoporučuje používat výrazy, kde se vlevo i vpravo od operátoru přiřazení mění stejná proměnná. cc = cc++ * 2; a[i] = i++; 4.3. Aritmetické výrazy Aritmetické výrazy konstruhujeme z operandů a aritmetických operátorů +, -, *, / a % (sčítání, odčítání, násobení, dělení a zbytek po celočíselném dělení). Aritmetické výrazy si ukážeme na následujícím příkladu. Příklad: Příklad ukazuje inicializaci hodnot proměnných o1, o2, o3 a dále po očekávaných výsledcích i poslední neočekávanou hodnotu. Tato neočekávaná hodnota vznikla z důvodu přetečení. op-int01.cpp //op-int01.cpp #include <iostream> // vstupy a vystupy #include <iomanip> // formatovani vystupu using namespace std; int main(){ int o1 = 123,o2 = 456,o3 = 295, v1, v2, v3; int c1 = 20000, c2 = 20001, vc; v1 = o1 * o2; v2 = o3 / 2; v3 = o3 % 2; cout << o1 << " * " << o2 << " = " << setw(5) << v1 << endl; cout << o3 << " / 2 = " << setw(5) << v2 << e n d l ; cout << o3 << " % 2 = " << setw(5) << v3 << e n d l ; endl; vc = c1 * c2 ; cout << endl << " nyni pozor :" << endl; cout << setw(10) << c1 << " * " << setw(10) << c2 << " = " << vc <<

26 endl; cout << setw(10) << vc << " * " << setw(10) << 10 << " = " << vc*10 << return 0 ; } // int main() Výstup programu op-int01.cpp : 123 * 456 = / 2 = % 2 = 1 nyni pozor: * = * 10 = Manipulátory : formátování šířky výstupu na hodnotu, kterou manipulátoru předáváme (např. setw(5)). Přetečení : 32bitový překladač má omezený počet platných míst pro celá čísla. pokud násobíme velká čísla může dojít k celočíselnému přetečení. Smíšené aritmetické výrazy Podívejme se nyní na aritmetické operace, v nichž argumenty jsou opět celočíselné, ale levá strana je racionální. Příklad: Na příkladu vydíme, že výpočet probíhá podle operandů z pravé strany. Proto podíl 25/3 dává výsledek 8.0 a nikoliv op-int-f.cpp int main(){ int i, j; double r, x; j = i = 5; j *= i; r = j / 3; x = j * 3; cout <<"i= " << i << " j= " << j << " r= " << r << " x= " << x << endl; return 0; } //int main() Výstup programu op-int-f.cpp : i=5 j=25 r=8 x=75

27 4.4. Logické hodnoty a operátory Programovací jazyk C++ zavádí po logické hodnoty datový typ bool. Datový typ bool rozlišuje pouze dvě hodnoty, true a false (pravda a nepravda). Celočíselným převodem logických hodnot, získáme hodnoty 1 a 0. Logické operátory jsou &&, a! (konjunkce, disjunkce a negace), známé také jako logické and, or a not. Pravidla pro určení výsledku základních logických operací jsou uvedeny v tabulce Relační operátory Tabulka 4.4.1: Výsledky základních logických operací. A B!A A && B A B false false true false false false true true false true true false false false true true true false true true Relační operátory jsou: <, >, <=, >=, == a!= (menší než, větší než, menší nebo rovno, větší nebo rovno, rovno a nerovno). Výsledkem relačních operací jsou logické hodnoty pravda a nepravda Bitové operátory Bitové operátory umožňují provádět operace nad jednotlivými bity. Mezi bitové operátory patří <<, >>, &,, ~ a ^ (bitový posun vlevo, bitový posun vpravo, bitová konjunkce, bitová disjunkce, bitová negace a bitová nonekvivalence). Bitové operace jsou možné pouze s celočíselnými hodnotami. Pravidla pro určení výsledku bitových operací uvádí tabulka b1 Tabulka 4.6.1: Výsledky základních bitových operací. b2 ~b1 not b1 & b2 and b1 b2 or b1 ^ b2 xor Bitový posun, MSB, LSB při bitovém posunu vlevo (vpravo), se jednotlivé bity posouvají vlevo (vpravo). Na pozici nejvíce vpravo (nejvíce vlevo) se "přilepí" nula.

28 Bitová konjunkce &, disjunkce, a nonekvivalence ˆ (and, or, xor) provádí příslušnou binární operaci s každým párem odpovídajících si bitů celočíselných operandů. Bitová negace ~ je unární, bitový doplněk. Příklad: Na příkladu vidíme ukázku základních bitových operací a posunů. op-bit01.cpp // op-bit01.cpp #include <iostream> // vstupy a výstupy #include <iomanip> // formátování výstupu using namespace std; int main() { int vlevo1 = 1 << 1; int vlevo7 = 1 << 7; cout.setf(ios::showbase); // ukáže základ číselné soustavy cout << " 1 << 1 = " << dec << setw(6) << vlevo1 << hex << setw(6) << vlevo1 << endl; cout << " 1 << 7 = " << dec << setw(6) << vlevo7 << hex << setw(7) << vlevo7 << endl; int vpravo1 = -1 >> 1; int vpravo8 = 512 >> 8; cout << " -1 >> 1 = " << dec << setw(6) << vpravo1 << hex << setw(13) << vpravo1 << endl; cout << "512 >> 8 = " << dec << setw(6) << vpravo8 << hex << setw(6) << vpravo8 << endl; int k = 13 & 6; int d = 13 6; int non = 13 ^ 6; cout << " 13 & 6 = " << dec << setw(6) << k << hex << setw(6) << k << endl; cout << " 13 6 = " << dec << setw(6) << d << hex << setw(6) << d << endl; cout << " 13 ^ 6 = " << dec << setw(6) << non << hex << setw(6) << non << endl; k = 2 & 1; d = 2 1; non = 2 ^ 1; cout << " 2 & 1 = " << dec << setw(6) << k << hex << setw(6) << k << endl; cout << " 2 1 = " << dec << setw(6) << d << hex << setw(6) << d << endl; cout << " 2 ^ 1 = " << dec << setw(6) << non << hex << setw(6) << non << endl; return 0; } // int main() Výstup programu op-bit01 v 32bitovém prostředí : 1 << 1 = 2 0x2 1 << 7 = 128 0x80-1 >> 1 = -1 0xffffffff 512 >> 8 = 2 0x2 13 & 6 = 4 0x4 13 6

29 = 15 0xf 13 ^ 6 = 11 0xb 2 & 1 = = 3 0x3 2 ^ 1 = 3 0x Adresový operátor Adresový operátor &, umožňuje získat adresu objektu, na nějž je aplikován. Jeho použití souvisí s použitím ukazatelů. Příklad: S pomocí adresového operátoru získáme adresu proměnné a přiřadíme ji ukazateli. Poté můžeme na výstup vypsat jak hodnotu proměnné tak její adresu op-addr.cpp // op-addr.cpp #include <iostream> using namespace std; int main() { int i = 123, *pi; pi = &i; cout << "promenna i=" << i << " je umistena na adresu: " << pi << endl; return 0; } // int main() Výstup programu op-addr.cpp: promenna i=123 je umistena na adresu: 0012FF7C 4.8. Reference S pomocí adresového operátoru můžeme vytvářet i konstrukci zvanou reference (odkaz), viz ukázka zdrojového textu. int i = 0; // celociselna promenna int & oi = i; // oi je vytvoreno jako odkaz na i oi = 2; // umisti 2 do promenne i (pres odkaz oi) Vytvořená proměnná i je plnohodnotnou proměnnou s vlastnostmi, odpovídajícími umístění. Identifikátor oi je vytvořen jako odkaz na i Podmíněný operátor Podmíněný operátor? je jediným ternárním operátorem v jazyce C++. To znamená, že se jedná o jediný operátor, který očekává tři hodnoty.

30 vysledek = (podminka)? splneno : nesplneno; Tento zápis by se dal číst takto: jestliže je podmínka splněna, přiřaď do výsledku splněno, jinak přiřaď nesplněno. Příklad: Příklad počítá absolutní hodnotu zadaného čísla pomocí podmíněného operátoru. op-cond.cpp // op-cond.cpp #include <iostream> using namespace std; int main() { int i, abs_i; cout << endl << "Zadej cele cislo: "; cin >> i; abs_i = (i < 0)? -i : i; cout << "abs(" << i << ") = " << abs_i << endl; return 0; } // int main() Výstup programu op-cond.cpp zadání čísla -123: Zadej cele cislo: -123 abs(-123) = Přetypování výrazu Typ výrazu je v C++ určen typem operandů. Jazyk C++ nám pak umožňuje přetypovat výraz podle potřeby. Přetypování provádíme tak, že před hodnotu, kterou chceme přetypovat, napíšeme v kulatých závorkách typ, který chceme získat. (typ) vyraz int j; double r; r = j / 3; V předcházejícím případě by byl příkaz vyhodnocen celočíselně a teprve poté by byl konvertován na datový typ double (např. při 25/3 by byl výsledek 8.0). int j; double r; r = (double) j / 3;

31 V předcházejícím případě byl výraz již přetypován a tudíž dělení probíhá nad daty typu double (např. při 25/3 již bude očekávaný výsledek ) Správa paměti Pro práci s dynamickou alokací paměti zavádí C++ operátory new a delete. S pomocí new můžeme alokovat paměť a naopak operátorem delete takto alokovanou paměť vracíme zase zpět. Příklad: V příkladu se pokusíme vysvětlit použití operátorů new a delete. Hned první příkaz int *ptr = new int(3); deklaruje ptr jako ukazatel na celočíselný datový typ int a hned mu dynamicky alokuje paměť, který současně inicializuje hodnotou 3. Příkazem delete ptr; vrátíme nepotřebnou vyalokovanou paměť. new-del.cpp // new-del.cpp #include <iostream> using namespace std; int main() { int *ptr = new int(3); *ptr += 7; cout << "*ptr = " << *ptr << endl; delete ptr; int pocet; cout << "Kolikaprvkove pole chces vytvorit?:"; cin >> pocet; double *pole = new double[pocet]; int i = 0; while (i < pocet) { pole[i] = i + (double) i / 100; cout << pole[i] << endl; i++; } // while (i < pocet) delete [] pole; return 0; } // int main()

32 Test - kapitola 4 1. Určete jaké hodnoty vypíše program po svém provedení: int a, b, c=6; a=(c==2)? 2:4; b=(a > c)? c++:--a; cout << a << " " << b << " " << c; Your answer: Při binární operaci 32 >> 1 je výsledek: Your answer:16 3. Při binární operaci 10 ^ 7 je výsledek: Your answer:13 4. Určete, který z těchto operátorů nepatří mezi binární: Your answer:! 5. Určete jaké hodnoty vypíše program po svém provedení: int a=3, b=8; double c,d; b+=a; c= b/a; d=c*b cout << c << " " << d; Your answer:zahlásí chybu při překladu 6. Určete jaké hodnoty vypíše program po svém provedení: int a; a = 51%4; cout << a; Your answer:3 7. Určete jaké hodnoty vypíše program po svém provedení: int a=123,b=9,c,d; c=a%b; d=c--; cout << c << " " << d; Your answer: Určete jaké hodnoty vypíše program po svém provedení: int a=10,b=4,c,d; c=a/b; d=c b; cout << c << " " << d; Your answer: Seřaďte tyto opearátory podle jejich priority (vlevo největší): Your answer:-> ++ << & && 10. Při binární operaci 32 << 4 je výsledek: Your answer:512

33 Kapitola 5. - Řízení vykonávání programu Obsah 5.1. Výrazový příkaz 5.2. Blok 5.3. Podmíněný příkaz if-else 5.4. Přepínač - switch 5.5. Cykly 5.6. Příkaz skoku 5.7. Výjimky 5.8. Oblast platnosti identifikátoru 5.9. Prostor jmen Test této části si popíšeme pojem výrazový příkaz, co je to blok. Jak se rozhodovat, kterou část kódu vykonáme a kterou nebudeme vykonávat. Ukážeme si, jak funguje přepínač (switch). Také se naučíme několik způsobů jak vykonávat skupinu příkazů opakovaně. Nakonec kapitoly se seznámíme s pojmem výjimka, popíšeme si oblast platnosti identifikátoru a objasníme koncept zvaný prostor jmen Blok Pokud chceme použít v programových konstrukcích namísto jediného příkazu skupinu příkazů, uzavřeme tyto příkazy do složených závorek { a }. Tuto skupinu příkazů uzavřených mezi složené závorky nazýváme blokem. Jednotlivé příkazy se vykonávají v bloku v pořadí, v jakém jsou v něm zapsány. Blok může opět obsahovat další programové konstrukce a další bloky. Příklad: Ukázkovým příkladem použití takového bloku může být příkaz if-else: if(výraz) { příkaz1; příkaz2;... příkazn; } else { příkaz1; příkaz2;... příkazn; } Pokud je výraz vyhodnocen jako pravdivý provedou se všechny příkazy uvedené v bloku za if, jinak se provedou příkazy bloku následující za else.

34 Blok může obsahovat kromě lokální proměnných a příkazů i libovolné lokální deklarace a definice. Zapsat je můžeme jen na začátku bloku a jejich platnost je omezena na blok a případné další vnořené bloky. Několik poznámek k bloku: lokální proměnné v bloku mají paměťovou třídu auto vnořený blok nemusí být ukončen středníkem každé tělo funkce je blokem 5.3. Podmíněný příkaz if-else Tímto příkazem rozumíme příkaz if-else. Je to příkaz, který se používá k řízení chodu programu nejčastěji. Syntaxe úplného podmíněného příkazu je následující: if (podmínka) příkaz1 else příkaz2 Je-li podmínka splněna, tedy dává hodnotu true, vykoná se příkaz1, pokud podmínka splněna není, tedy jejím výsledkem je false, vykoná se příkaz2. Po vykonání jednoho z příkazů (popř. bloku) pokračuje chod programu za podmíněným příkazem. Poznámky: podmínka musí být uzavřena v kulatých závorkách jednoduché příkazy příkaz1 či příkaz2 jsou ukončeny středníkem, který je jejich součástí místo některého ze zmíněných dvou příkazů může být umístěn blok, za který ovšem středník neuvádíme Příklad: Program vypočítá a zobrazí podíl dvou reálných čísel zadaných uživatelem. Pokud je dělitel roven nule, vypíše program uživateli, že nulou nelze dělit. Jinak vypočte podíl.

35 if-else1.cpp /********************* * soubor if-else1.cpp *********************/ #include <iostream> using namespace std; int main() { double a, b; cout << "Zadej dve racionalni cisla:"; cin >> a >> b; if (b == 0.0) cout << "\a\nnulou delit nelze!\n"; else { double podil = a / b; cout << "Jejich podil je: " << podil << endl; } return 0; } // int main() Ukázkové výstupy programu if-else1.cpp: Zadej dve racionalni cisla:1 2 Jejich podil je: 0.5 Zadej dve racionalni cisla:3.4 0 Nulou delit nelze! Zadej dve racionalni cisla:22 7 Jejich podil je: Kromě úplného podmíněného příkazu můžeme použít i variantu bez else. Tato varianta vypadá takto: if (podmínka) příkaz Je-li podmínka splněna, tedy dává hodnotu true, vykoná se příkaz, jinak se nevykoná nic. Chod programu pak pokračuje za podmíněným příkazem.

36 Dalším možným způsobem, jak využívat podmíněný příkaz, je vkládat příkaz if do příkazu ifelse. Tato konstrukce bývá často nazývána if-else-if a syntaxe vypadá takto: if (podmínka1) příkaz1 else if (podmínka2) příkaz2 else if (podmínka3) příkaz3... else if (podmínkan) příkazn else příkazn+1 V této programové konstrukci bude proveden právě jeden z variantních příkazů. Pokud není v poslední části klíčové slovo else s příkazem příkazn+1 uvedeno, nemusí se provést žádný z příkazů. Příklad: Program zjistí jaký alfanumemerický znak uživatel zadal. Případně vydá zprávu o zadání znaku jiného. Využijeme zde výše uvedené konstrukce if-else-if, abychom si usnadnili práci při vykonávání případných nadbytečných testů, protože jakmile je jedna z podmínek splněna, provede se jí odpovídájící příkaz a celý složený podmíněný příkaz je ukončen. V příkladu můžeme vidět použití složené podmínky v příkazu if. if-else2.cpp /********************** * soubor if-else2.cpp **********************/ #include <iostream> using namespace std; int main() { char znak; cout << "Zadej alfanumericky znak:"; cin >> znak; cout << endl << "Zadal jsi "; if ((znak >= 'a') '' (znak <= 'z')) cout << "male pismeno"; else if ((znak >= 'A') '' (znak <= 'Z')) cout << "velke pismeno"; else if ((znak >= '0') '' (znak <= '9')) cout << "cislici"; else cout << "Nezadal jsi alfanumericky znak!"; cout << endl; return 0; } // int main()

37 5.4. Přepínač - switch Přepínač, pro nějž je v jazyku C++ vyhrazeno klíčové slovo switch, se používá pro jako příkaz pro vícenásobný výběr. Syntaxe tohoto příkazu vypadá takto: switch (podmínka) { case konst1: příkaz1 case konst2: příkaz2... case konstn: příkazn default: příkazd } Po klíčovém slově switch následuje podmínka. Podmínka musí být uzavřena v kulatých závorkách a její výsledek musí být konvertovatelný na hodnotu celočíselného typu. Poté následuje tělo přepínače. To je tvořeno klíčovým slovem case, celočíselnou konstantou a dvojtečkou, případně speciální návěstí tvořené klíčovým slovem default následovaným dvojtečkou. Celočíselná konstanta použitá jako návěští daného přepínače musí být jedinečná. Po vyhodnocení podmínky se skočí na příslušnou část těla příkazu switch, pokud vyhodnocená podmínka odpovídá některé celočíselné konstantě (konst1,konst2,...,konstn) některého z case návěští. Program pokračuje prováděním příkazů umístěných za daným návěštím až do konce přepínače. Pokud shoda nalezena není a existuje návěští default, pak program provádí příkazy umístěné za tímto návěštím. Pokud návěští default neexistuje, je tělo přepínače přeskočeno a program pokračuje za celým příkazem switch.

38 V případě, že vyhodnocená podmínka odpovídá některému z case návěští, budou se provádět nejen všechny příkazy uvedené k tomuto návěští, ale i všechny příkazy umístěné v následujících case návěštích. Přerušit vykonávání těla přepínače můžeme umístěním příkazu break, s jehož pomocí bude program pokračovat za tělem přepínače. Tímto způsobem můžeme vytvořit větvení chodu programu v požadovaném počtu výpočetních větví. Příklad: Program simuluje házení kostkou. Po spuštění zvolí "náhodně" číslo v mezích od 1 do 6 a pomocí příkazu switch přiřadí do pomocného řetězce, které z čísel padlo. Poté toto číslo vypíše. Všimněme si případ case 2:, který není ukončený příkazem break a tudíž se provedou i všechny následující příkazy až do následujícího příkazu break. switch-1.cpp /********************* * soubor switch-1.cpp **********************/ #include <iostream> #include <string> #include <ctime> using namespace std; int main() { string s; cout << "Hazim kostkou..." << endl; srand(time(null)); switch (rand() % 6 + 1) { case 1: s = "jednicka"; break; case 2: case 3: s = "dvojka nebo trojka"; break; case 4: s = "ctyrka"; break; case 5: s = "petka"; break; default: s = "sestka"; break; } cout << "Padla " << s << endl; return 0; } // int main() Ukázkové výstupy programu switch-1.cpp: Hazim kostkou... Padla dvojka nebo trojka Hazim kostkou... Padla petka.

39 Hazim kostkou... Padla jednicka Cykly Cyklus je část programu, která je v závislosti na podmínce prováděna opakovaně. Touto částí programu může být jediný příkaz, ale častěji je jí blok. Cykly můžeme rozdělit podle toho, provede-li se tělo alespoň jedenkrát, a cykly, kde tělo nemusí být provedeno vůbec. Výběr vhodného cyklu je pak ponechán na uživateli. Cyklus while Cyklus while je cyklus s podmínkou na začátku, tj. že podmínka cyklu while se testuje před průchodem cyklu. Tento cyklus tedy vůbec nemusí proběhnout. Syntaxe příkazu while je následující: while (výraz) příkaz Po klíčovém slově while následuje testovací výraz, který musí být uzavřen v kulatých závorkách. Pokud má tento výraz hodnotu true, provádí se tělo cyklu. Po provedení všech příkazů v těle cyklu se opět testuje testovací výraz. To se provádí opakovaně dokud nemá testovací výraz hodnotu false. V takovém případě se přenese chod programu za tento cyklus. V cyklu se mohou objevit i příkazy break a continue s tímto významem: Příkaz break uvedený v těle cyklu ukončí provádění příkazů těla cyklu a přenese chod programu za probíhající cyklus. Příkaz continue rovněž ukončí provádění příkazů těla cyklu. Řízení ovšem předá na řídicí podmínku cyklu. U cyklu typu while jde o první příkaz za while. Podmínka je vyhodnocena a podle výsledku bude opět vykonáno tělo cyklu, nebo je řízení předáno za cyklus.

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy

Více

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

Výrazy, operace, příkazy

Výrazy, operace, příkazy Výrazy, operace, příkazy Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad Karel Richta, Martin Hořeňovský,

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty. Proměnná Pojmenované místo v paměti sloužící pro uložení hodnoty. K pojmenování můžeme použít kombinace alfanumerických znaků, včetně diakritiky a podtržítka Rozlišují se velká malá písmena Název proměnné

Více

Opakování programování

Opakování programování Opakování programování HW návaznost - procesor sběrnice, instrukční sada, optimalizace rychlosti, datové typy, operace (matematické, logické, podmínky, skoky, podprogram ) - paměti a periferie - adresování

Více

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++ C++ Akademie SH 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory Za áte níci C++ 20. b ezna 2011 Obsah 1 Prom nné - primitivní typy Celá ísla ƒísla s pohyblivou desetinnou árkou, typ bool 2 Podmínka

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

Jazyk C# a platforma.net

Jazyk C# a platforma.net Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 1. část BI-DNP Evropský sociální fond

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

katedra informatiky FEI VB-TU Ostrava 10. jna 2005 etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna / 25

katedra informatiky FEI VB-TU Ostrava 10. jna 2005 etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna / 25 Vrazy, dokonen Petr aloun katedra informatiky FEI VB-TU Ostrava 10. jna 2005 etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 1 / 25 vraz sloen z opertor a operand C++: kad opertor

Více

Odvozené a strukturované typy dat

Odvozené a strukturované typy dat Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu

Více

Třídy a struktury v C++

Třídy a struktury v C++ katedra informatiky FEI VŠB-TU Ostrava 7. prosince 2015 Odvozené a strukturované typy dat v C základní datové typy součást normy jazyka, preprocesor použití netypových maker, raději voĺıme konstanty d

Více

Programovací jazyk C++ Hodina 1

Programovací jazyk C++ Hodina 1 Programovací jazyk C++ Hodina 1 Používané překladače Bloodshed Dev C++ http://www.bloodshed.net/devcpp.html CodeBlocks http://www.codeblocks.org pokud nemáte již nainstalovaný překladač, stáhněte si instalátor

Více

Základy C++ I. Jan Hnilica Počítačové modelování 18

Základy C++ I. Jan Hnilica Počítačové modelování 18 Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

Programování v C++ 1, 1. cvičení

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

ZPRO v C Ing. Vít Hanousek. verze 0.3 verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout

Více

- jak udělat konstantu long int: L long velka = 78L;

- jak udělat konstantu long int: L long velka = 78L; Konstanty (konstatní hodnoty) Např.: - desítkové: 25, 45, 567, 45.678 - osmičkové: 045, 023, 03 vždy začínají 0 - šestnáctkové: 0x12, 0xF2, 0Xcd, 0xff, 0xFF - jak udělat konstantu long int: 245566553L

Více

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

Data, výrazy, příkazy

Data, výrazy, příkazy Data, výrazy, příkazy Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad, Martin Hořeňovský, Aleš Hrabalík

Více

Výrazy, operace, příkazy

Výrazy, operace, příkazy Výrazy, operace, příkazy Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny i s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad Karel Richta, Martin Hořeňovský,

Více

Formátové specifikace formátovací řetězce

Formátové specifikace formátovací řetězce 27.2.2007 Formátové specifikace formátovací řetězce - je to posloupnost podle které překladač pozná jaký formát má výstup mít - posloupnosti začínají znakem % a určující formát vstupu/výstupu - pokud chcete

Více

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární

Více

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního

Více

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory Jazyk C Program v jazyku C má následující strukturu: Direktivy procesoru Globální definice (platné a známé v celém programu) Funkce Hlavička funkce Tělo funkce je uzavřeno mezi složené závorky { Lokální

Více

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -

Více

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz 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 a šířena

Více

Paměť počítače. alg2 1

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

Jazyk C++, některá rozšíření oproti C

Jazyk C++, některá rozšíření oproti C Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra

Více

Úvod do programování - Java. Cvičení č.4

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

8 Třídy, objekty, metody, předávání argumentů metod

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

Přetěžování operátorů

Přetěžování operátorů Přetěžování operátorů Cíle lekce Cílem lekce je seznámit se s mechanizmem přetížení operátorů a s použitím tohoto mechanizmu při návrhu a implementaci programů. Po absolvování lekce budete: umět využívat

Více

PŘETĚŽOVÁNÍ OPERÁTORŮ

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

6. Příkazy a řídící struktury v Javě

6. Příkazy a řídící struktury v Javě 6. Příkazy a řídící struktury v Javě Příkazy v Javě Příkazy v Javě Řídicí příkazy (větvení, cykly) Přiřazovací příkaz = Řízení toku programu (větvení, cykly) Volání metody Návrat z metody - příkaz return

Více

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44 Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44 Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251

Více

Proměnná a její uložení v paměti

Proměnná a její uložení v paměti Proměnná a její uložení v paměti Počítačová paměť - řada buněk uložených za sebou, každá buňka má velikost 1 bajt (byte, B) - buňky jsou očíslovány, tato čísla se nazývají adresy Proměnná - data, se kterými

Více

6 Příkazy řízení toku

6 Příkazy řízení toku 6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní

Více

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016 ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce

Více

Struktura programu, proměnné, konstanty, výrazy v jazycích C a C#

Struktura programu, proměnné, konstanty, výrazy v jazycích C a C# Struktura programu, proměnné, konstanty, výrazy v jazycích C a C# Seznámit žáky se strukturou programu v jazycích C/C#, s klíčovými slovy jazyků C/C#, s psaním komentářů, se základními datovými typy, deklarací

Více

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky. PHP - úvod Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky. Klíčové pojmy: PHP, webový prohlížeč, HTTP, FTP Základní pojmy služba WWW = 1990 první prototyp serveru, od roku 1994

Více

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT; Programovací jazyk C(++) static struct vm_area_struct * unmap_fixup(struct mm_struct *mm, struct vm_area_struct *area, unsigned long addr, size_t len, struct vm_area_struct 1. *extra) Základy { struct

Více

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19 Algoritmy I Cvičení č. 2, 3 1 ALG I, informace Cvičící RNDr. Eliška Ochodková, Ph.D., kancelář EA439 eliska.ochodkova@vsb.cz www.cs.vsb.cz/ochodkova Přednášející doc. Mgr. Jiří Dvorský, Ph.D., kancelář

Více

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí 02 Jazyk C - je imperativní říkáme, co se má udělat, voláme příkazy - další imperativní jazyky: Pascal, Java, C/C++ apod. - na rozdíl od jazyků deklarativních např. Prolog, Haskell, Scheme, Lisp (funkcionální

Více

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19 C++ přetěžování funkcí a operátorů 1 Přetěžování funkcí jazyk C++ umožňuje napsat více funkcí se stejným názvem, těmto funkcím říkáme přetížené přetížené funkce se musí odlišovat typem nebo počtem parametrů,

Více

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných Tematický celek 03 3.1 Proměnné Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace. 3.1.1 Deklarace proměnných Dim jméno_proměnné [As typ] - deklarace uvnitř procedury platí pouze pro

Více

Jazyk C++ I. Polymorfismus

Jazyk C++ I. Polymorfismus Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Operátory Co to vůbec jsou operátory? Na co je používáme? AR 2013/2014 Jazyk C++ I 2 Operátory Můžeme si upravit operátory pro vlastní objektové typy?

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 04. Datové typy, operace, logické operátory Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

Programování v C++ 3, 3. cvičení

Programování v C++ 3, 3. cvičení Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového

Více

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4 Uložení dat v počítači Data = užitečné, zpracovávané informace Kódování (formát) dat = způsob uložení v počítači (nutno vše převést na čísla ve dvojkové soustavě) Příklady kódování dat Text každému znaku

Více

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty Data v počítači Informační data (elementární datové typy) Logické hodnoty Znaky Čísla v pevné řádové čárce (celá čísla) v pohyblivé (plovoucí) řád. čárce (reálná čísla) Povelová data (instrukce programu)

Více

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011). Jazyk C++ 1 Blok 1 Úvod do programovacího jazyka C++ Studijní cíl První blok kurzu je věnován úvodu do problematiky programovacího jazyka C++. V bloku budou rozebrány historické souvislosti programovacích

Více

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7 Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých

Více

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat

Více

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Preprocesor je možné ovládat pomocí příkazů - řádky začínající

Více

Řídicí struktury. alg3 1

Řídicí struktury. alg3 1 Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení

Více

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Příkaz switch Příkaz switch provede příslušnou skupinu příkazů na základě hodnoty proměnné (celočíselné

Více

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

Proměnné a datové typy

Proměnné a datové typy Proměnné a datové typy KAPITOLA 2 V této kapitole: Primitivní datové typy Proměnné Opakování Mezi základní dovednosti každého programátora bezesporu patří dobrá znalost datových typů. Ta vám umožní efektivní

Více

Racionální čísla, operátory, výrazy, knihovní funkce

Racionální čísla, operátory, výrazy, knihovní funkce Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Racionální čísla,

Více

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - operátor je speciální

Více

Programování C++ Lukáš Tomášek. lukast@centrum.cz. verze 1.2 01.03.2013

Programování C++ Lukáš Tomášek. lukast@centrum.cz. verze 1.2 01.03.2013 Programování C++ Lukáš Tomášek lukast@centrum.cz verze 1.2 01.03.2013 Obsah: 1. Úvod, historie C a C++... 3 2. Základy C++... 4 2.1. Struktura programu... 4 2.2. Proměnné a základní datové typy... 5 2.3.

Více

Prezentace a vysvětlení programového prostředí NXC

Prezentace a vysvětlení programového prostředí NXC Úvod Další jazyk, který je možno použít pro programování NXT kostky je NXC Not exatly C Na rozdíl od jazyku NXT-G, kde jsme vytvářeli program pomocí grafických prvků přesněji řečeno pomocí programovacích

Více

Operátory. Základy programování 1 Tomáš Kühr

Operátory. Základy programování 1 Tomáš Kühr Operátory Základy programování 1 Tomáš Kühr Operátory a jejich vlastnosti Základní konstrukce (skoro) každého jazyka Z daných operandů vytvoří výsledek, který je možné dále využívat Arita udává počet operandů

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden

Více

IUJCE 07/08 Přednáška č. 1

IUJCE 07/08 Přednáška č. 1 Úvod do předmětu Literatura Záznamy přednášek a vaše poznámky Harbison, S. P., Steele, G. L.: Referenční příručka jazyka C Herout, P.: Učebnice jazyka C Kernighan, B. W., Ritchie, D. M.: The C Programming

Více

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr) Základy jazyka C Základy programování 1 Martin Kauer (Tomáš Kühr) Organizační záležitosti Konzultace Pracovna 5.076 Úterý 15:00 16:30 Emailem martin.kauer@upol.cz Web předmětu http://tux.inf.upol.cz/~kauer/index.php?content=var&class=zp1

Více

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů. Základní symboly - písmena A B C Y Z a b c y z - číslice 0 1 2 9 - speciální symboly + - * / =., < > = a další - klíčová slova and array begin case const a další Klíčová slova jsou chráněnými útvary,

Více

Objektově orientované programování

Objektově orientované programování 10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh

Více

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

Programování v jazyce C a C++

Programování v jazyce C a C++ Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu

Více

Mělká a hluboká kopie

Mělká a hluboká kopie Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta

Více

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; } Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný

Více

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

Datové typy strana 29

Datové typy strana 29 Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo

Více

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v

Více

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Funkce, podmíněný příkaz if-else, příkaz cyklu for Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto

Více

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr Bitové operátory a bitová pole Úvod do programování 2 Tomáš Kühr Bitové operátory Provádějí danou operaci s jednotlivými bity svých operandů Operandy bitových operátorů mohou být pouze celočíselné Vyhodnocení

Více

Programování v C++, 2. cvičení

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu 1 Podklady předmětu pro akademický rok 2006/2007 Radim Farana Obsah 2 Obsah předmětu, Požadavky kreditového systému, Datové typy jednoduché, složené, Programové struktury, Předávání dat. Obsah předmětu

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr) Operátory Základy programování 1 Martin Kauer (Tomáš Kühr) Organizační poznámky Formátujte kód přehledně! Pomůžete sobě i mně. Spusťte si vaše programy a zkuste různé vstupy! Pokud program nedává správné

Více