Programování v jazyku C++
|
|
- Marek Kraus
- před 5 lety
- Počet zobrazení:
Transkript
1 Programování v jazyku C++ Předmět navazuje na X36ALG, tj. předpokládá znalosti základů algoritmizace a základů jazyka Java Dokumentace k předmětu na WWW Slajdy k přednáškám možno stáhnout z WWW nebo zakoupit v Copy-Centrum Dejvice přednášky nejsou jen prezentace slajdů, další informace na tabuli (kopie slajdů použít pro záznam poznámek) Doporučená skripta: Cvičení: Virius, M.: Programování v C++. ČVUT vše u počítače Vývojové prostředí: ve škole CBuilderX pro Solaris, doma cokoliv Závěrečné hodnocení viz zvláštní slajd C++ 1
2 Programovací jazyk C 1972 D. Ritchie Bell Laboratories PDP Kernighan, Ritchie: The C Programming Language Systémový jazyk operačního systému Unix 1982 ANSI norma X3J11, převzala ISO #include <stdio.h> void main(void) { printf( Nazdar, toto je prvni program v C\n ); C++ 2
3 Programovací jazyk C Bjarne Stroustrup, AT&T Bell Laboratories 1986 Bjarne Stroustrup: The C++ Programming Language 1990 M.Ellis, B.Stroustrup: The Annotated C++ Reference Manual 1991 Bjarne Stroustrup: The C++ Programming Language vyšlo v českém překladu (BEN 1997) 1994 Bjarne Stroustrup: The Design and Evaluation of C Working Paper for Draft Proposed International Standard for Information Systems -- Programming Language C Bjarne Stroustrup: The C++ Programming Language (3nd Edition) 1998 ISO norma ISO/IEC 14882, převzala ANSI 2000 Bjarne Stroustrup: The C++ Programming Language (Special Edition) C++ 3
4 První program v C++ Pro starší překladače vytvořené před normou (např. Borland C++ 3.1) // PrvniProgram1.cpp #include <iostream.h> void main() { cout << "Nazdar, toto je prvni program v C++" << endl; Pro novější překladače vytvořené po normě (např. ) // PrvniProgram2.cpp #include <iostream> using namespace std; int main() { cout << "Nazdar, toto je prvni program v C++" << endl; return 0; C++ 4
5 Stručná charakteristika C++ Procedurální vyšší programovací jazyk, podporující objektově orientované programování, s vysokou efektivitou cílového programu Některé rysy nižších jazyků (asemblerů) Jednoduché (skalární) datové typy: celočíselné, reálné, ukazatele Strukturované datové typy: pole, řetězce, struktury, třídy (nejsou v C) Zvláštní typ reference Bohaté operační struktury: aritmetické, logické, bitové, přiřazení Základní řídicí struktury: podmíněné příkazy, přepínače, cykly, bloky, funkce, výjimky (výjimky nejsou v C) Programové rušení dynamicky vytvořených datových objektů (není sbírání smetí garbage collection) Přetěžování funkcí a operátorů (není v C) Generické funkce a třídy (není v C) Program se skládá ze zdrojových souborů nezávisle překládaných Zdrojové soubory obsahují deklarace a definice Vstupním bodem programu je funkce main C++ 5
6 // DruhyProgram.cpp #include <iostream> using namespace std; Ukázky programů int main () { int x = 10, y; y = x + 20; cout << "hodnota promenne x je " << x << endl; cout << "hodnota promenne y je " << y << endl; return 0; Program po překladu a spuštění vypíše: hodnota promenne x je 10 hodnota promenne y je 30 C++ 6 uvod\druhyprogram.cpp
7 Ukázky programů Program, který pro zadaný rok zjistí, zda je přestupný Přestupný rok je dělitelný 4 a buď není dělitelný 100 nebo je dělitelný 400 // rok.cpp #include <iostream> using namespace std; int main() { int rok; cout << "zadejte rok "; cin >> rok; cout << "rok " << rok; if (rok%4==0 && (rok%100!=0 rok%400==0)) cout << " je prestupny"; else cout << " neni prestupny"; cout << endl; return 0; C++ 7 uvod\rok.cpp
8 Ukázky programů Program pro výpočet pořadového čísla dne v roce // den.cpp #include <iostream> using namespace std; int main() { int den, mesic, rok, n = 0; cout << "zadejte den, mesic a rok: "; cin >> den >> mesic >> rok; switch (mesic) { case 1: n = den; break; case 2: n = 31+den; break; case 3: n = 59+den; break; case 4: n = 90+den; break; case 5: n = 120+den; break;... case 12: n = 334+den; break; default: cout << "nedovoleny mesic"; return 1; if (mesic>2 && rok%4==0 && (rok%100!=0 rok%400==0)) n++; cout << den << "." << mesic << "." << rok; cout << " je " << n << ". den v roce\n"; return 0; C++ 8 uvod\den.cpp
9 Ukázky programů Výpočet faktoriálu přirozeného čísla n ( n! = n ) // faktorial.cpp #include <iostream> using namespace std; int main() { cout << "zadejte prirozene cislo" << endl; int n; cin >> n; if (n<1) { cout << n << " neni prirozene cislo"; return 1; int i = 1; int f = 1; while (i<n) { i = i+1; f = f * i; cout << n << "! = " << f << endl; return 0; C++ 9 uvod\faktorial.cpp
10 Ukázky programů Program pro součet posloupnosti čísel vstupní data: n a 1 a 2... a n // soucetcisel.cpp #include <iostream> using namespace std; int main() { int dalsi, suma = 0, n; cout << "zadejte pocet cisel "; cin >> n; cout << "zadejte " << n << " cisel" << endl; for (int i=1; i<=n; i++) { cin >> dalsi; suma = suma+dalsi; cout << "soucet je " << suma << endl; return 0; C++ 10 uvod\soucetcisel.cpp
11 Ukázky programů Počet znaků, řádků a slov ve vstupním textu // rdslzn.cpp #include <iostream> using namespace std; int main() { int c, nl = 0, nw = 0, nc = 0; bool inword = false; while ((c = cin.get())!= EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' c == '\n' c == '\t') inword = false; else if (!inword) { inword = true; ++nw; cout << "znaku " << nc << " radku " << nl; cout << " slov " << nw << endl; return 0; C++ 11 uvod\rdslzn.cpp
12 Ukázky programů Tabulka četnosti číslic ve vstupním textu // cislice.cpp #include <iostream> using namespace std; int ndig[10]; // globální proměnná int main() { int c, i; while ((c = cin.get())!= EOF) if (c >= '0' && c <= '9') ++ndig[c-'0']; for (i = 0; i < 10; ++i) cout << i << ' ' << ndig[i] << endl; return 0; C++ 12 uvod\cislice.cpp
13 Ukázky programů Funkce pro výpočet celočíselné mocniny // mocnina1.cpp #include <iostream> using namespace std; int mocnina(int x, int n) { int v = 1; for (int i = 1; i <= n; ++i) v *= x; return v; int main() { for (int i = 0; i < 10; ++i) { cout << i << ' ' << mocnina(2,i); cout << ' ' << mocnina(-3,i) << endl; return 0; C++ 13 uvod\mocnina1.cpp
14 Ukázky programů Funkce pro výpočet celočíselné mocniny // mocnina2.cpp #include <iostream> using namespace std; int mocnina(int, int); int main() { for (int i = 0; i < 10; ++i) { cout << i << ' ' << mocnina(2,i); cout << ' ' << mocnina(-3,i) << endl; return 0; int mocnina(int x, int n) { int v = 1; for (int i = 1; i <= n; ++i) v *= x; return v; C++ 14 uvod\mocnina2.cpp
15 Ukázky programů třídy, objekty, ukazatelé Vstup: řada celých čísel zakončená nulou Výstup: čísla v opačném pořadí // opacneporadi.cpp #include <iostream> using namespace std; class Prvek { int _hodn; Prvek *_dalsi; public: Prvek(int h, Prvek *d) { _hodn = h; _dalsi = d; int hodn() {return _hodn; Prvek* dalsi() {return _dalsi; ; C++ 15 uvod\opacneporadi.cpp
16 Ukázky programů třídy, objekty, ukazatelé int main() { cout << "zadejte radu cisel zakoncenych nulou" << endl; Prvek* prvni = NULL; int cislo; cin >> cislo; while (cislo!=0) { prvni = new Prvek(cislo, prvni); cin >> cislo; cout << "cisla v opacnem poradi" << endl; Prvek *pom = prvni; while (pom!=null) { cout << pom->hodn() << " "; pom = pom->dalsi(); cout << endl; return 0; C++ 16 uvod\opacneporadi.cpp
17 Ukázky programů výstupní parametry // minmax1.cpp // funkce s výstupními parametry pomocí ukazatelů #include <iostream> using namespace std; void minmax(int x, int y, int *pmin, int *pmax) { if (x < y) { *pmin = x; *pmax = y; else { *pmin = y; *pmax = x; int main() { int a, b, min, max; cout << "zadej dve cela cisla: "; cin >> a >> b; minmax(a, b, &min, &max); cout << "min = " << min << ", max = " << max << endl; return 0; C++ 17 uvod\minmax1.cpp
18 Ukázky programů typ reference // minmax2.cpp // funkce s výstupními parametry pomocí typu reference #include <iostream> using namespace std; void minmax(int x, int y, int& pmin, int& pmax) { if (x < y) { pmin = x; pmax = y; else { pmin = y; pmax = x; int main() { int a, b, min, max; cout << "zadej dve cela cisla: "; cin >> a >> b; minmax(a, b, min, max); cout << "min = " << min << ", max = " << max << endl; return 0; C++ 18 uvod\minmax2.cpp
19 identifikátory Lexikální elementy písmena (rozlišuje se velikost), číslice, _, klíčová slova if while malými písmeny! omezovače a operátory { ; + - & && <<= číselné literály e E3 oktalové: 037 hexadecimální: 0x1F znakové literály x \n \t \0 \\ \ \014 řetězce abcd xyz\nabc vnitřní reprezentace: posloupnost znaků zakončená nulou komentáře /* toto je komentar */ // zbytek řádku je komentář C++ 19
20 Typy dat Připomeňme: datový typ (zkrácené jen typ) specifikuje: množinu hodnot množinu operací, které lze s těmito hodnotami provádět Rozdělení typů podle struktury: jednoduché (skalární), jejichž hodnoty jsou z hlediska operací atomické strukturované, jejichž hodnoty se skládají ze složek void, jehož množina hodnot je prázdná Rozdělení typů z hlediska jejich definice: základní (standardní), které jsou definovány programovacím jazykem odvozené, které jsou definovány programem Jednoduché typy: celočíselné reálné ukazatele Množiny hodnot jednoduchých typů nejsou (na rozdíl od jazyka Java) definovány normou jazyka, ale implementací C++ 20
21 Základní celočíselné typy Číselné se znaménkem short = signed short = signed short int int = signed = signed int long = long int = signed long = signed long int Číselné bez znaménka unsigned short = unsigned short int unsigned = unsigned int unsigned long = unsigned long int Znakové typy unsigned char signed char char Logický typ bool Pro všechny celočíselné typy jsou definovány stejné operace (+, -, *, /, %, atd.) C++ 21
22 Základní celočíselné typy množiny hodnot Množiny hodnot jsou dány implementací, norma požaduje pouze short <= int <= long, unsigneg short <= unsigned <= unsigned log Vnitřní reprezentací je obvykle dvojkový doplněk Následující přehled uvádí obvyklé velikosti vnitřní reprezentace a rozsahy hodnot v prostředí 32 bitů short 2B int 4B long 4B unsigned short 2B unsigned 4B unsigned long 4B signed char 1B unsigned char 1B char 1B bool 1B false = 0, true = 1 C++ 22
23 Reálné typy Označení reálných typů: float double long double Množiny hodnot jsou dány implementací, norma požaduje pouze float <= double <= long double Vnitřní reprezentací je pohyblivá řádová čárka Následující přehled uvádí obvyklé velikosti vnitřní reprezentace, rozsahy absolutních hodnot a počet planých číslic mantisy v prostředí 32 bitů float 4B 3.4E E+38 7 až 8 double 8B 1.7E E až 16 long double 10B 3.4E E až 20 Aritmetické typy: celočíselné + reálné C++ 23
24 Odvozené typy Výčtový typ výčet identifikátorů označujících celočíselné konstanty Pole jednorozměrná pole prvků libovolného typu (kromě funkce), indexováno od 0 Struktura (záznam) obsahuje pojmenované položky různých typů uložené za sebou Union (sjednocení) pojmenované položky různých typů uložené přes sebe Třída struktura s definovanými operacemi (metodami) Funkce specifikuje funkci typem návratové hodnoty a typy parametrů Ukazatel adresa datového objektu (proměnné nebo konstanty) nebo funkce specifikovaného typu Reference synonymum existujícího datového objektu C++ 24
25 Deklarace Stejná syntaxe pro deklaraci proměnných, typů, funkcí, struktur apod. Syntaxe zjednodušeně: paměťová třída kvalifikátor specifikace typu seznam deklarátorů ; například extern const int prom, pole[20] ; Paměťová třída v deklaraci proměnné určuje způsob přidělení paměti auto dynamické přidělení paměti na zásobníku register proměnná v registru static statické přidělení paměti resp. lokální v souboru extern bez přidělení paměti Není-li paměťová třída v deklaraci proměnné uvedena, pak: lokální proměnné ve funkci je paměť přidělena na zásobníku globální proměnné je paměť přidělena staticky Třída static u globální proměnné znamená, že proměnná je použitelná pouze v daném souboru, tzn. není přístupná z jiných souborů C++ 25
26 Deklarace (pokračování) Kvalifikátor udává další vlastnosti deklarovaného objektu: const konstantní objekt volatile přístup k objektu nemá být optimalizován například: extern const int Max; Max = 10; /* chyba */ Specifikace typu: void = prázdná množina hodnot označení aritmetického typu popis výčtového typu, struktury, sjednocení nebo třídy identifikátor typu Není-li specifikace typu uvedena, starší překladače doplní int Identifikátory typu se deklarují deklarací s paměťovou třídou typedef C++ 26
27 Deklarátory Možné tvary deklarátoru (bez typu reference): identifikátor jednoduchý deklarátor * deklarátor deklarátor ukazatele deklarátor [ konstantní výraz ] deklarátor pole deklarátor ( parametry ) deklarátor funkce ( deklarátor ) za hvězdičkou může být kvalifikátor Příklady deklarací: int i; proměnná typu int int *pi; proměnná typu ukazatel na int char ca[9]; pole 9 znaků long lf(int); funkce typu long s jedním parametrem typu int int *fp(void); funkce typu ukazatel na int bez parametrů int (*pf)(void); ukazatel na funkci typu int bez parametrů const char *pc; ukazatel na konstatní znak char * const cp; konstantní ukazatel na znak C++ 27
28 Deklarátory (pokračování) Obecná pravidla pro význam deklarátorů je-li S specifikace typu pro deklarátor tvořený identifikátorem id, pak se deklaruje id typu S v ostatních případech provede deklaraci vnořený deklarátor D, kterému se dodá specifikace typu upravená následujícím způsobem: deklarátor * D ukazatel na S D [ n ] D ( parametry ) ( D ) S specif. typu pro vnořený deklarátor pole n prvků typu S Příklad: char (*pp)[10] pole 10 znaků (*pp) pole 10 znaků *pp ukazatel na pole 10 znaků pp funkce vracející hodnotu typu S a s danou specifikací parametrů C++ 28
29 Deklarace typu Deklarace obsahující paměťovou třídu typedef Příklady: typedef unsigned char Byte; typedef unsigned short Word, *WordPtr; static Byte b; Word w; WordPtr pw; typedef int Mat[10][10]; extern Mat M; C++ 29
30 Popis výčtového typu Syntaxe: enum značka { seznam literálů Příklad: enum Color {Red, Blue, Green; Literály jsou synonyma celočíselných hodnot /* Red = 0, Blue = 1, Green = 2 */ Literálu lze explicitně přiřadit hodnotu enum Masky { Nula, Jedna, Dva, Ctyri = 4, Osm = 8; /* Dva = 2, Ctyri = 4, Osm = 8 */ enum Sign { Minus = -1, Zero, Plus; /* Minus = -1, Zero = 0, Plus = 1 */ enum { E1, E2, E3 = 5, E4, E5 = E4 + 10, E6; /* E4 = 6, E5 = 16, E6 = 17 */ Pro výčtové typy jsou definovány stejné operace, jako pro celočíselné typy Vnitřní reprezentace proměnných výčtových typů je stejná jako vnitřní reprezentace proměnných typu int (velikost 4B ve 32 bitovém prostředí) C++ 30
31 Inicializace Datové objekty (proměnné, konstanty) se inicializují v době vzniku statické na začátku programu ostatní na začátku funkce (bloku) Implicitní inicializace statické objekty jsou vynulovány ostatní nemají definovanou hodnotu Explicitní inicializace deklarátor = výraz nebo deklarátor = { seznam výrazů Statické objekty lze inicializovat pouze konstantními výrazy Příklady: float A = 10; register int B = A*A; C++ 31
32 Výrazy Bohatý repertoár operací: aritmetické, bitové, logické, relační, operace s ukazateli Výraz může označovat modifikovatelný objekt (lvalue) nebo hodnotu (rvalue) Pořadí vyhodnocení operandů není (až na výjimky) definováno Některé operace mají vedlejší efekt (inkrementace, dekrementace, přiřazení) v jednom výrazu nad jedním objektem max. jeden! Pro operátory je důležitá jejich priorita a asociativita C++ 32
33 Priorita a asociativita operátorů ( ) [ ]. -> závorky, indexace, selekce + -! * & unární operátory inkrementace, dekrementace (typ) p řetypování sizeof operátor délky * / % násobení, d ělení, zbytek po dělení + - s čítání, odčítání << >> bitový posun vlevo, vpravo < > <= >= relace ==!= rovnost, nerovnost & bitový logický sou čin ^ bitová nonekvivalence bitový logický sou čet && logický sou čin logický sou čet?: podmín ěný výraz = *= /= %= += -= <<= >>= &= = ^= p řiřazení, operátor čárka C++ 33
34 Aritmetické výrazy Operace se provádějí v těchto aritmetikách: int, unsigned, long, unsigned long, float, double, long double Před provedením operace může dojít k implicitní konverzi operandů: bool, char, short (signed, unsigned) a enum jsou před provedením operace konvertovány na int (nebo unsigned int) - tzv. celočíselné roztažení (integral promotion) jméno pole prvků typu T je konvertováno na typ ukazatel na T jméno funkce je konvertováno na typ ukazatel na funkci C++ 34
35 Aritmetické výrazy U většiny operací s aritmetickými operandy se provádějí tzv. běžné aritmetické konverze (usual arithmetic conversion): operandy se konvertují pomocí celočíselného roztažení, a potom je-li typ jednoho operandu C++ 35 druhý se převede na long double long double double double float float unsigned long unsigned long long long unsigned unsigned int int Typy číselných literálů: 12 int 12L long 3.4 double 3.4F float 3.4L long double Příklady: a + b konverze na int, výsledek int 1 / 2 celočíselné dělení, výsledek / 2.0 reálné dělení, výsledek double 1 / 2.0L konverze na long double
36 Aritmetické operace Operandy aritmetického typu, provádějí se běžné aritm. konverze Unární: + - Binární: + - * / % Dělení je podle typu operandů buď celočíselné nebo reálné Operace % je zbytek po dělení, musí mít operandy celočíselné, a je definována takto: x == (x / y) * y + x % y Operace + a - jsou definovány též pro ukazatele (viz dále) C++ 36
37 Relační operace Operandy aritmetického typu, provádějí se běžné aritm. konverze Výsledek je typu bool: false (0) relace neplatí true (1) relace platí Binární: < > <= >= ==!= Relační operátory jsou definovány též pro ukazatele C++ 37
38 Operandy skalárního typu Logické operace Výsledek typu bool (false 0 nebo true 1) Operandy se vyhodnocují zleva, druhý operand se nevyhodnocuje, je-li výsledek dán prvním operandem Unární:! logická negace výsledek true, má-li operand hodnotu false, jinak je výsledek true Binární: && logický součin výsledek true, mají-li oba operandy hodnotu true, jinak false logický součet výsledek true, má-li alespoň jeden operand hodnotu true, jinak false C++ 38
39 Bitové operace Operandy jen celočíselné, provádějí se běžné aritm. konverze Unární: ~ negace všech bitů Binární: & logický součin všech bitů logické součet všech bitů ^ logické xor všech bitů << posun bitové reprezentace levého operandu vlevo >> posun bitové reprezentace levého operandu vpravo U operací posunu pravý operand udává délku posunu v bitech Pozor, plete se & a &&, a : x = 1; y = 2; x & y == 0 x && y == 1 C++ 39
40 Inkrementace a dekrementace Unární operace, operand skalárního typu, modifikovatelný, označení místa v paměti Lze zapsat prefixově nebo postfixově Má vedlejší efekt: změní hodnotu operandu Inkrementace: ++ Dekrementace: -- Prefix: ++X --X inkrementuje (dekrementuje) X, hodnotou je změněné X Postfix: X++ X-- inkrementuje (dekrementuje) X, hodnotou je X před změnou Příklady: před operace po x == 1 y = ++x x == 2, y == 2 x == 1 y = x++ x == 2, y == 1 x == 1 y = --x x == 0, y == 0 x == 1 y = x-- x == 0, y == 1 C++ 40
41 Přiřazení Syntaxe: X = Y Levý operand musí být modifikovatelný, označení místa v paměti Přiřazení má hodnotu a vedlejší efekt Hodnotou výrazu je přiřazovaná hodnota, typem je typ levé strany Pozor: plete se = a ==! Přípustné typy operandů: levá a pravá strana jsou téhož skalárního typu nebo téhož typu struct nebo union (pro pole není přiřazení dovoleno) jsou-li typy levé a pravé strany skalární, avšak různé, musí být hodnota pravé strany konvertibilní na typ levé strany Složené přiřazení: += -= *= /= %= &= = ^= <<= >>= Význam: X op= Y je zkratkou za X = X op (Y) C++ 41
42 Konverze při přiřazení Následující tabulka udává implicitní konverze při přiřazení typ pravé strany typ levé strany poznámka ke konverzi jednoduchý bool je-li hodnota pravé strany nenulová, přiřadí se true (1), jinak false (0) reálný kratší reálný zaokrouhlení mantisy reálný delší reálný doplnění mantisy nulami reálný celočíselný odseknutí necelé části celočíselný reálný možná ztráta přesnosti celočíselný kratší celočíselný odseknutí vyšších bitů celočíselný unsgn. delší celočíselný doplnění nulových bitů celočíselný sgn. delší celočíselný rozšíření znaménka 0 T * T * nebo 0 void * C++ 42
43 Podmíněný výraz Výsledek výrazu je závislý na hodnotě podmínky Syntaxe: Podmínka? Výraz1 : Výraz2 kde Výraz1 a Výraz2 jsou kompatibilních typů Je-li Podmínka splněna, je výsledkem hodnota Výrazu1, jinak je výsledkem hodnota Výrazu2 Vyhodnocuje se podmínka a pak jen příslušný výraz Příklad: max = a > b? a : b; p = r * (x < 0? -1 : x == 0? 0 : 1); C++ 43
44 Operátor čárka Umožňuje několik výrazů v místě, kde se očekává jeden výraz (nejčastěji v příkazu for, viz dále) Syntaxe: Výraz1, Výraz2,, Výrazn Výrazy se vyhodnotí v pořadí zleva doprava, výsledkem je hodnota posledního výrazu (hodnoty ostatních výrazů se zahodí ) Pozor: může škodit (viz indexace) Nejčastější použití v příkazu for: for (v = 1, i = n; i > 1; v *= i, i--); Další operátory budou vysvětleny později C++ 44
45 Standardní datové proudy Při operacích vstupu nebo výstupu data proudí od zdroje ke spotřebiči Objekt umožňující operaci vstupu nebo výstupu se nazývá datový proud (zkráceně proud, angl. stream) Vstupní proud: zdrojem je vstupní zařízení (např. klávesnice) nebo vstupní soubor, spotřebičem je program Výstupní proud: zdrojem je program, spotřebičem výstupní zařízení (např. obrazovka monitoru) nebo výstupní soubor Standardní proudy cin, cout a cerr poskytuje knihovna specifikovaná v hlavičkovém souboru <iostream> Vstupní proud cin umožňuje vstupní konverze dat zadaných z klávesnice cin >> proměnná Druh konverze je dán typem proměnné Výstupní proud cout (cerr) umožňuje výstupní konverze dat na obrazovku cout << výraz Druh konverze je dán typem výrazu Při spuštění programu lze cin a cout přesměrovat C++ 45
46 Výstup: cout << char short int long char * float double long double void * Přípustné typy v konverzích Vstup: cin >> char short int long char * float double long double přeskočí počáteční mezery! C++ 46
47 Manipulátory Slouží pro řízení vstupní a výstupní konverze Jsou definovány v souboru <iomanip> int n = 36; cout << n <<, << hex << n <<, ; cout << oct << n << endl; cout << dec << setw(6) << n << endl; Některé manipulátory: dec hex oct endl setw(int n) setfill(int c) setprecision(int n) dekadická konverze šestnáctková konverze osmičková konverze konec řádku + flush šířka položky n znaků plnící znak c n desetinných míst C++ 47
48 Příkazy Obecně: příkazy se dělí na jednoduché a strukturované všechny jednoduché jsou zakončeny středníkem podmínka v cyklech a podmíněném příkazu je dána výrazem skalárního typu; je splněna, je-li hodnota výrazu různá od nuly Výrazový příkaz: výraz ; smysl mají jen výrazy s vedlejším efektem x = y + 2; y++; f(a, 2); g(); g; /* příkaz bez vedlejšího efektu */ Prázdný příkaz: ; použití např. jako prázdné tělo cyklu for (i = 0; i < 10; a[i++] = 0); C++ 48
49 Příkaz bloku Příkaz bloku: { posloupnost deklarací posloupnost příkazů deklarace jsou v bloku lokální, v bloku platí též deklarace z nadřazeného kontextu lokální deklarace zastíní deklaraci stejného identifikátoru z nadřazeného kontextu deklarace mohou chybět (složený příkaz) { int a, b; a = 10; { int c = a; /* c = 10 */ int a = 20; c = a; /* c = 20 */ a = 0; cout << a; /* vypíše se 10 */ C++ 49
50 Podmíněný příkaz Podmíněný příkaz: if ( podmínka ) příkaz if ( podmínka ) příkaz1 else příkaz2 else se vztahuje k nejbižšímu předcházejícímu if ve stejném bloku if (a > b) m = a; else m = b; if (a > b) if (a > c) m = a; else m = c; if (a > b) { if (a > b) m = a; else m = b; C++ 50
51 Příkazy cyklu Příkaz while: while ( podmínka ) příkaz tělo cyklu se provádí, dokud je splněna podmínka podmínka se vyhodnocuje na začátku Příkaz do: do příkaz while ( podmínka ) ; tělo cyklu se provádí, dokud je splněna podmínka podmínka se vyhodnocuje na konci těla jediný strukturovaný příkaz zakončený středníkem Příkaz for: for ( výraz1 ; výraz2 ; výraz3 ) příkaz příkaz má stejný efekt, jako příkazy: { výraz1 ; while ( výraz2 ) { příkaz ; výraz3 ; C++ 51
52 Příkazy řízení Příkaz break: break ; ukončí bezprostředně nadřazený cyklus nebo přepínač Příkaz continue: continue ; přejde na nové vyhodnocení podmínky cyklu while ( podm1 ) { if ( podm2 ) break; if ( podm3 ) continue; C++ 52
53 Příkaz větvení (přepínač) Příkaz switch: switch ( výraz ) příkaz slouží k rozdělení výpočtu do několika větví podle hodnoty celočíselného výrazu příkazem je téměř vždy složený příkaz některé z příkazů ve složeném příkazu jsou označeny návěštími ve tvaru: case konst. výraz : nebo default : po vyhodnocení výrazu se pokračuje tou variantou, která je označena návěštím se stejnou hodnotou (návěští musí být různá) návěští default pokrývá ostatní hodnoty každá větev obyčejně končí příkazem break switch ( n ) { case 1: cout << * ; break; case 2: cout << ** ; break; case 3: cout << *** ; break; default: cout << - C++ 53
54 Příkaz skoku a návratu Příkaz skoku: goto návěští ; návěští je identifikátor použití: výskok z více úrovní vnoření cyklu apod. lze skákat dovnitř strukturovaných příkazů - nedoporučuje se Příkaz s návěštím: návěští : příkaz návěští jsou lokální ve funkci for (i = 1; j < 10; i++) for (j = 1; j < 20; j++) { if (podm) goto konec; konec: ; Příkaz return: return výraz ; nebo return ; ukončí funkci a definuje návratovou hodnotu C++ 54
55 Pole Typ indexu: 0.. počet prvků - 1 kde počet prvků je dán konstantním výrazem v deklarátoru pole Typ prvků: libovolný, kromě reference Příklad: int a[10]; const int MAX = 100; float pole[max+1]; // v C musí být MAX zavedeno jinak Jméno typu pole lze zavést deklarací typu: typedef int POLE[20]; POLE a; Operace: pouze indexace (selektor pole) přiřazení mezi dvěma poli není dovoleno a[1] = 10; pole[i] = 0; Hodnota indexu se nekontroluje! C++ 55
56 Pole Vícerozměrná pole se deklarují jako pole, jejichž prvky jsou pole int mat[10][5]; Otázka: jaké pole se zavede následující deklarací: int a[10,5]; Přístup k prvkům vícerozměrného pole: mat[i][j] = 20; Inicializace polí: int P[3] = {1, 2, 3; /* inicializací lze zadat počet prvků pole */ int Q[] = {1, 2, 3; int PP[4][3] = {{1, 3, 5, {2, 4, 6, {3, 5, 7; /* následující inicializace má stejný efekt */ int PP[4][3] = {1, 3, 5, 2, 4, 6, 3, 5, 7; /* inicializace nemusí být úplná */ int QQ[][3] = { {1, {2, {3, {4 ; /* pole má 4 řádky, inicializován jen 1. sloupec ostatní jsou vynulovány */ C++ 56
57 /* razeni1.cpp */ #include <iostream> using namespace std; Příklad - řazení pole čísel const int MAXPOCET = 100; int pole[maxpocet], pocet; void sort(void) { int i, imin, min, j, n = pocet-1; for (i = 0; i < n; i++) { imin = i; min = pole[i]; for (j = i+1; j <= n; j++) if (pole[j]<min) { imin = j; min = pole[j]; if (imin!= i) { pole[imin] = pole[i]; pole[i] = min; C++ 57 pole\razeni1.cpp
58 Příklad - řazení pole čísel int main(void) { int i; cout << "zadej pocet: "; cin >> pocet; cout << "zadej " << pocet << " celych cisel\n"; for (i = 0; i < pocet; i++) cin >> pole[i]; sort(); cout << "serazene pole:\n"; for (i=0; i<pocet; i++) cout << pole[i] << endl; return 0; C++ 58 pole\razeni1.cpp
59 Literály typu řetězec: abcd xyz\nabc Řetězce knihovna C V paměti jsou zobrazeny posloupností znaků zakončenou nulovým bytem Proměnná typu řetězec se deklaruje jako pole znaků dostatečné délky char txt[10]; /* lze uložit až 9-ti znakový řetězec */ Inicializace pole znaků řetězcem: char Msg1[10] = abcd ; char Msg2[] = text ; Operace s řetězci provádějí funkce deklarované v <string.h> Pro přiřazení řetězce do pole znaků slouží knihovní funkce strcpy(kam,co): strcpy(txt, abcd ); strcpy(msg1, Msg2); Nekontroluje se, zda pole je dostatečně velké! Pro porovnání řetězců slouží knihovní funkce strcmp: strcmp(x, y) < 0 když x < y = 0 když x = y > 0 když x > y C++ 59
60 Příklad - řazení pole řetězců ve stylu C Program přečte posloupnost slov zakončených tečkou a slova seřadí /* razeni2.cpp */ #include <iostream> #include <string.h> using namespace std; const int MAXPOCET = 100; const int MAXDELKA = 100; char pole[maxpocet][maxdelka]; int pocet; void sort(void) { int i, imin, j, n = pocet-1; char min[maxdelka]; for (i = 0; i < n; i++) { imin = i; strcpy(min, pole[i]); for (j = i+1; j <= n; j++) if (strcmp(pole[j],min)<0) { imin = j; strcpy(min, pole[j]); if (imin!= i) { strcpy(pole[imin], pole[i]); strcpy(pole[i], min); C++ 60 pole\razeni2.cpp
61 Příklad - řazení pole řetězců ve stylu C int main() { int i; pocet = 0; cout << "zadej posloupnost slov zakoncenou teckou" << endl; cin >> pole[pocet]; while (strcmp(pole[pocet],".")!=0) cin >> pole[++pocet]; sort(); cout << "serazena slova:\n"; for (i = 0; i < pocet; i++) cout << pole[i] << endl; return 0; C++ 61 pole\razeni2.cpp
62 Řetězce knihovna C++ Jednodušší práci s řetězci umožňuje třída string ze standardní knihovny C++ Deklarace třídy je v souboru <string> Příklady deklarací objektů typu string, operací a metod: string s1, s2 = "abc", s3 = s2; s1 = s2; s3 = s1 + s2; s3 += s1; s3 += "abc"; s3 += 'x'; int delka = s3.length(); s1[0] = 'x'; cout << s1.substr(0, 2) << endl;; int i = s2.find('b'); C++ 62 pole\string.cpp
63 Příklad - řazení pole řetězců ve stylu C++ /* razeni3.cpp */ /* precte posloupnost slov zakoncenou teckou a slova seradi */ #include <iostream> #include <string> using namespace std; const int MAXPOCET = 100; string pole[maxpocet]; int pocet; void sort(void) { int i, imin, j, n = pocet-1; string min; for (i = 0; i < n; i++) { imin = i; min = pole[i]; for (j = i+1; j <= n; j++) if (pole[j]<min) { imin = j; min = pole[j]; if (imin!= i) { pole[imin] = pole[i]; pole[i] = min; C++ 63 pole\razeni3.cpp
64 Příklad - řazení pole řetězců ve stylu C++ int main() { int i; pocet = 0; cout << "zadej posloupnost slov zakoncenou teckou" << endl; cin >> pole[pocet]; while (pole[pocet]!= ".") cin >> pole[++pocet]; sort(); cout << "serazena slova:" << endl; for (i = 0; i < pocet; i++) cout << pole[i] << endl; return 0; C++ 64 pole\razeni3.cpp
65 Ukazatele Příklady deklarací proměnných typu ukazatel: int *p; /* p je ukazatel na int */ char *q; /* q je ukazatel na char */ S typem ukazatel souvisejí operace reference a dereference Reference (adresa): & X kde X je označení datového objektu nebo funkce Je-li X typu T, pak &X je typu T*, tzn. ukazatel na T Dereference (zpřístupnění objektu, na který ukazuje ukazatel): * X kde X je výraz typu ukazatel Je-li X typu T*, pak *X je typu T Příklady: int i, *pi = &i; /* pi obsahuje adresu i */ char c, *pc = &c; /* pc obsahuje adresu c */ *pi = 25; /* do i se uloží 25 */ *pc = a ; /* do c se uloží a */ char str[] = Hello, word ; char *ptr = &str[2]; *ptr = 1 ; /* změní se str[2] */ C++ 65
66 Přiřazení ukazatelů Kompatibilní vzhledem k přiřazení jsou ukazatele se stejným doménovým typem int i, *pi, pi1; char c, *pc = &c; pi = &i; O.K. pi1 = pi; O.K. pi = &c; Chyba pc = pi; Chyba Typovou kontrolu lze obejít pomocí operace přetypování pc = (char*)pi; pc ukazuje na první byte proměnné i pi = (int*)pc; nebezpečné! Prázdný ukazatel je NULL (označuje 0) pc = NULL; Ukazatel s prázdným doménovým typem: void *p; C++ 66
67 Ukazatelová aritmetika Ukazatelé mohou být operandy sčítání, odčítání a všech relačních operátorů Dovolené kombinace a typ výsledku: T* + int -> T* T* - int -> T* T* - T* -> int T* relop T* -> int Přičtení n k ukazateli typu T* znamená jeho změnu o n-násobek délky typu T podobně odečtení a rozdíl ukazatelů Příklady: int a[10], *p = &a[0]; *(p + 3) = 10;/* do a[3] se uloží 10 */ /* vynulování pole a */ for (p = &a[0]; p <= &a[9]; p++) *p = 0; /* nebo */ for (p = &a[0]; p <= &a[9]; *p++ = 0); C++ 67
68 Pole a ukazatele Jméno pole prvků typu T = konstantní ukazatel typu T* ukazující na prvek s indexem 0 int a[10], *pa, i; pa = a; totéž co pa = &a[0] *(a + 2) = 3; totéž co a[2] = 3 *(a + i) = 4; totéž co a[i] = 4; for (pa = a; pa <= a + 9; *pa++ = 0); a++; Chyba (proč?) Upřesnění indexace: X [ Y ] kde jeden výraz je typu ukazatel na T a druhý typu int, výsledek je typu T Výraz X [ Y ] je ekvivalentní s *(( X ) + ( Y ) ) pa[3] = 10; totéž co *(pa + 3) = 10; C++ 68
69 Příklad - řazení pole čísel pomocí ukazatelů /* razeni1a.cpp */ /* razeni pole celych cisel pomoci ukazatelu */ #include <iostream> using namespace std; const int MAXPOCET = 100; int pole[maxpocet], pocet; void sort(void) { int *p, *pmin, min, *q, *pn = pole + pocet-1; for (p = pole; p < pn; p++) { pmin = p; min = *p; for (q = p+1; q <= pn; q++) if (*q < min) { pmin = q; min = *q; if (pmin!= p) { *pmin = *p; *p = min; C++ 69 pole\razeni1a.cpp
70 Příklad - řazení pole čísel pomocí ukazatelů int main(void) { int *p; cout << "zadej pocet: "; cin >> pocet; cout << "zadej " << pocet << " celych cisel\n"; for (p = pole; p < pole+pocet; p++) cin >> *p; sort(); cout << "serazene pole:\n"; for (p = pole; p < pole+pocet; p++) cout << *p << endl; return 0; C++ 70 pole\razeni1a.cpp
71 Deklarace funkce Funkce jsou podprogramy realizující dílčí algoritmy Funkce může mít parametry: parametr funkce v C++ (C) je lokální proměnná funkce, která je při volání funkce inicializována skutečným parametrem (náhrada parametru hodnotou) Funkce může vracet hodnotu libovolného typu s výjimkou pole (typ výsledku funkce) Jestliže funkce nevrací žádnou hodnotu (je to procedura), je typ výsledku void Deklarací funkce (funkčním prototypem) se deklaruje identifikátor funkce, typy parametrů a typ výsledku; tělo funkce je dáno definicí funkce Funkce může mít proměnný počet parametrů Příklady deklarací funkcí (jména parametrů nejsou významná): int F(void); // funkce bez parametrů int F1(); // funkce bez parametrů void G(long x, int y); // procedura char *H(char *, char *); // bez jmen parametrů int K(int, ); // proměnný počet parametrů C++ 71
72 Definici funkce tvoří: Definice funkce hlavička funkce, což je deklarace funkce nezakončená středníkem, tělo funkce, což je blok. Tělo funkce, jejíž výsledek je typu T (T!= void), může kdekoliv dynamicky končit příkazem return x; kde x je výraz kompatibilní vzhledem k přiřazení s typem T. Tělo procedury může dynamicky končit kdekoliv příkazem return; Příklady definice funkce: long Power(long x, int z) { long result = 1; while (y-- >= 0) result *= x; return result; void Dummy(void) { C++ 72
73 Volání funkce Syntaxe: F ( X1, X2, Xn ) kde F je ukazatel na funkci a X1, Xn jsou výrazy skutečných parametrů Identifikátor funkce je konstantním ukazatelem na funkci Při volání funkce se: kontroluje počet parametrů (není-li funkce deklarována s proměnným počtem parametrů) kontroluje přípustnost skutečných parametrů a provádějí případné konverze (podobně jako při přiřazení) Pozor: závorky jsou třeba, i když se jedná o funkci bez parametrů! C++ 73
74 Volání funkce (pokračování) Příklady: long Power(long, int); long l; int a, b; float r; l = Power(l, 10); a = Power(a+3, b); f = Power(f, 3); void CtiPole(int, int *); int pole[10]; CtiPole(10, pole); C++ 74
75 Přetěžování (overloading) funkcí Funkce se rozlišují nejen jménem, ale i typy parametrů a počtem parametrů (neplatí v C) void f(char x) { cout << x << endl; void f(int x) { cout << x << endl; main() { f( a ); f(10); C++ 75
76 Přetěžování funkcí (pokračování) Při volání přetížené funkce se vyvolá ta, jejíž parametry se nejlépe spárují se skutečnými parametry Párování (matching) parametrů: 1. přesná shoda typů 2. shoda typů po roztažení (promotion) char int short int enum int float double 3. shoda typů po standardní konverzi int float float int int unsigned int long 4. shoda typů po uživatelské konverzi Pokud nejlepší párování má více než jedna funkce, ohlásí se chyba C++ 76
77 Přetěžování funkcí (pokračování) Příklady void f(float, int); void f(int, float); f(1,1); f(1.2,1.3); void f(long); void f(float); f(1.1); f(1.1f); void f(unsigned); void f(int); void f(char); unsigned char uc; f(uc); // chyba // chyba // chyba // f(float) // f(int) C++ 77
78 Implicitní hodnoty parametrů V hlavičce funkce lze definovat implicitní (default) hodnotu parametru, skutečný parametr pak lze vynechat (neplatí v C) Skutečné parametry lze vynechávat od konce void f(int x, int y=1, int z=3) { cout << x= << x << y= << y << z= << z); main() { f(10, 20, 30); f(10, 20); f(10); Co není dovoleno f(int x=1, int y); chyba f(int x, int y=10); f(int x); f(20); nejednoznačnost C++ 78
79 Inline funkce Volání inline funkce není skok do podprogramu, ale nahradí se tělem funkce inline int max(int x, int y) { return x>y? x : y; main() { int a,b,c; a = max(b, c); Překlad inline není zaručen C++ 79
80 Výstupní parametry funkcí Parametrem může být funkci zadána proměnná, jejíž hodnotu má funkce změnit Styl C (pomocí ukazatelů): Má-li funkce změnit hodnotu proměnné typu T, parametr bude typu T*, tj. ukazatel na T Příklad: funkce pro výměnu hodnot dvou proměnných typu int void swap(int *px, int *py) { int pom = *px; *px = *py; *py = pom; použití: int a, b; float x, y; const int c = 10; swap(&a, &b); swap(&x, &y); // chyba při překladu swap(&x, &c); // chyba při překladu (viz též příklad uvod/minmax1.cpp) C++ 80
81 Výstupní parametry funkcí Styl C++ (pomocí typu reference): Má-li funkce změnit hodnotu proměnné typu T, parametr bude typu T&, tj reference na T Příklad: void swap(int& x, int& y) { int pom = *x; x = y; y = pom; použití: int a, b; float x, y; const int c = 10; swap(a, b); swap(x, y); // chyba při překladu swap(x, c); // chyba při překladu (viz též příklad uvod/minmax2.cpp) C++ 81
82 Parametr typu reference Parametr typu reference na T označuje ve funkci proměnnou, která je dána skutečným parametrem Přípustným skutečným parametrem pro parametr typu reference je pouze proměnná typu T (nemůže to být ani proměnná jiného typu, ani konstanta, ani výraz obsahující operátory) Typ reference může být použit i při deklaraci proměnné (viz později) Typ reference může být kvalifikován jako typ označující konstantu (viz později) C++ 82
83 Příklad - čtení a řazení pole funkcemi s parametry /* razeni.cpp */ #include <iostream> using namespace std; void ctipole(int& pocet, int maxpocet, int *pole); void vypispole(int pocet, int *pole); void sort(int pocet, int *pole); int main() { const int MAXPOCET = 100; int pocet; int pole[maxpocet]; ctipole(pocet, MAXPOCET, pole); cout << "zadane pole" << endl; vypispole(pocet, pole); sort(pocet, pole); cout << "serazene pole" << endl; vypispole(pocet, pole); return 0; C++ 83 funkce\razeni.cpp
84 Příklad - čtení a řazení pole funkcemi s parametry void ctipole(int& pocet, int maxpocet, int *pole) { cout << "zadej pocet prvku pole(max. " << maxpocet << "): "; cin >> pocet; if (pocet>maxpocet) { cout << "pocet prevysuje limit" << endl; exit(1); cout << "zadej " << pocet << " celych cisel\n"; for (int i = 0; i < pocet; i++) cin >> pole[i]; C++ 84 funkce\razeni.cpp
85 Příklad - čtení a řazení pole funkcemi s parametry void vypispole(int pocet, int* pole) { for (int i=0; i<pocet; i++) cout << pole[i] << endl; C++ 85
86 Příklad - čtení a řazení pole funkcemi s parametry void sort(int pocet, int* pole) { int i, imin, min, j, n = pocet-1; for (i = 0; i < n; i++) { imin = i; min = pole[i]; for (j = i+1; j <= n; j++) if (pole[j]<min) { imin = j; min = pole[j]; if (imin!= i) { pole[imin] = pole[i]; pole[i] = min; C++ 86 funkce\razeni.cpp
87 Modulární struktura programu Modul je obecně programová jednotka, ve které jsou definovány prostředky (typy, proměnné, funkce,...) použitelné v jiných programových jednotkách; říkáme, že modul tyto prostředky vyváží Modul má dvě části: specifikační část, ve které jsou vyvážené prostředky deklarovány implementační část, ve které jsou vyvážené prostředky implementovány V jazyku C++ (C) je modul m tvořen dvěma soubory: specifikační část tvoří soubor m.h (hlavičkový soubor) implementační část tvoří soubor m.cpp soubor m.h se direktivou #include vloží do všech souborů, které prostředky vyvážené modulem m využívají, a pro zajištění konzistence specifikace a implementace i do souboru m.cpp C++ 87
88 Modulární struktura programu Příklad: řazení pole Procedury pro čtení, výpis a řazení pole vložíme do samostatného modulu tvořeného soubory pole.h a pole.cpp // pole.h void ctipole(int&, int, int*); void vypispole(int, int*); void sort(int, int*); // pole.cpp #include "pole.h" #include <iostream> using namespace std; void ctipole(int& pocet, int maxpocet, int *pole) {... void vypispole(int pocet, int* pole) {... void sort(int pocet, int* pole) {... C++ 88 prog\priklad1\pole.h,pole.cpp
89 Modulární struktura programu Soubor main.cpp bude používat funkce vyvážené modulem pole // main.cpp #include "pole.h" #include <iostream> using namespace std; int main() { const int maxpocet = 100; int pocet; int pole[maxpocet]; ctipole(pocet, maxpocet, pole); cout << "zadane pole" << endl; vypispole(pocet, pole); sort(pocet, pole); cout << "serazene pole" << endl; vypispole(pocet, pole); return 0; C++ 89 prog\priklad1\main.cpp
90 Parametry funkce main Hlavní funkce main může být napsána jako funkce se dvěma parametry, s jejichž pomocí lze převzít parametry příkazového řádku, kterým je program spuštěn /* mainpar.cpp */ #include <iostream> using namespace std void main(int argc, char *argv[]) { int i; cout << "parametry prikazoveho radku:\n"; for (i = 0; i < argc; i++) cout << i << ": " << argv[i] << endl; argv[0] cesta souboru spuštěného programu argv[1] první parametr argv[argc-1] poslední parametr C++ 90
91 Třídy a objekty V jazyku Java musí každá deklarace být součástí nějaké třídy; třída zde slouží jako zdroj funkcí i jako datový typ Jazyk C++ vychází z jazyka C, kde zdrojem funkcí i dat jsou soubory tvořené deklaracemi a definicemi. V jazyku C++ třída slouží především jako popis strukturovaného datového typu a specifikuje, z jakých složek (položek, atributů) se skládají objekty (instance) dané třídy a jaké operace lze s objekty dané třídy provádět. Připomeňme příklad z X36ALG: Čítač Zvětšit Zmenšit Nastavit 35 C++ 91
92 Čítač Příklad komunikace s programem Hodnota=0 0. Konec 1. Zvetsit 2. Zmensit 3. Nastavit Vase volba: 1 Hodnota=1 0. Konec 1. Zvetsit 2. Zmensit 3. Nastavit Vase volba: 0 Konec C++ 92
93 Funkce menu int menu() /* vypise nabidku a precte volbu vrati: 0... konec, 1,2,3... operace s citacem */ { char volba; cout << endl; do { cout << "0. Konec\n"; cout << "1. Zvetsit\n"; cout << "2. Zmensit\n"; cout << "3. Nastavit\n"; cout << "Vase volba: "; cin >> volba; cin.ignore(100, '\n'); if (volba < '0' volba > '3') { cout << "Nedovolena volba\n"; volba = 'e'; while (volba == 'e'); return volba '0'; C++ 93 tridy1\priklad1\main.cpp
94 Čítač jako datový typ Čítač zavedeme jako datový typ s operacemi zvetsit, zmensit, nastavit a hodnota a s datovými položkami hodn a pochodn Grafické vyjádření: Citac hodn název typu datové položky pochodn zvetsit operace zmensit nastavit hodnota Poznámka: hodnota položky pochodn bude stanovena při vytvoření objektu C++ 94
95 Třída Citac /* citac.h */ class Citac { int hodn; int pochodn; public: Citac(int ph) {pochodn = ph; nastavit(); void zvetsit() {hodn++; void zmensit() {hodn--; void nastavit() {hodn = pochodn; int hodnota() {return hodn; ; C++ 95 tridy1\priklad1\citac.h
96 #include "citac.h" #include <iostream> using namespace std; Program s objektem třídy Citac int menu() /* vypise nabidku a precte volbu vrati: 0... konec, 1,2,3... operace s citacem */ {... int main() { int volba; cout << "\ncitac - obektový styl\n"; Citac citac(0); do { cout << "Hodnota = " << citac.hodnota() << endl; volba = menu(); switch (volba) { case 1: citac.zvetsit(); break; case 2: citac.zmensit(); break; case 3: citac.nastavit(); break; while (volba > 0); cout << "Konec\n"; return 0; C++ 96 tridy1\priklad1\main.cpp
97 Definice metod v implementačním souboru Definice metod nemusí být součástí deklarace třídy, ale mohou být uvedeny v implementačním souboru Příklad: soubor citac.h obsahuje deklaraci třídy, ve které jsou pouze deklarace položek a deklarace (prototypy) konstruktoru a metod: /* citac.h */ class Citac { int hodn; int pochodn; public: Citac(int ph); void zvetsit(); void zmensit(); void nastavit(); int hodnota(); ; C++ 97 tridy1\priklad2\citac.h
98 Definice metod v implementačním souboru Soubor citac.cpp obsahuje definice metod: /* citac.cpp */ #include "citac.h" Citac::Citac(int ph) {pochodn = ph; nastavit(); void Citac::zvetsit() {hodn++; void Citac::zmensit() {hodn--; void Citac::nastavit() {hodn = pochodn; int Citac::hodnota() {return hodn; C++ 98 tridy1\priklad2\citac.cpp
99 Deklarace třídy Typ třída = datové položky + metody + konstruktory + destruktor + případné další deklarace class T { deklarace položek deklarace metod typ jméno( ); deklarace konstruktorů T( ); deklarace destruktoru ~T(); ; Definice metody: typ T::jméno( ) { Definice konstruktoru: T::T( ) { Definice destruktoru: T::~T() { V těle metody (konstruktoru, destruktoru) jsou přímo vidět položky (metody) daného objektu C++ 99
100 Inline metody Je-li metoda (konstruktor, destruktor) definována v rámci deklarace třídy (ne v implementačním souboru), překladač ji přeloží jako jako inline class T { typ jméno( ) { tělo T( ) { tělo ~T() { tělo ; Inline překlad není zaručen Poznámka: deklarace metody uvnitř deklarace třídy je zakončena středníkem definice metody uvnitř deklarace třídy není zakončena středníkem C++ 100
101 Řízení přístupu Veřejné položky (metody, konstruktory, destruktor) přístupné z vnějšku třídy se deklarují za klíčovým slovem public class T { deklarace privátních položek a metod z vnějšku nepřístupných public: deklarace veřejných položek, metod, konstruktorů a destruktoru z vnějšku přístupných ; Privátní položky metody) jsou přístupné jen v metodách dané třídy Klíčovým slovem private se přístupnost mění na privátní class T { public: deklarace veřejných metod a položek private: deklarace privátních metod a položek ; C++ 101
102 Deklarace objektu Objekt v C++ je proměnná typu třída (instance třídy) Deklarace objektu je vždy spojena s inicializací konstruktorem T x( ); T y; deklarace objektu a inicializace konstruktorem s parametry deklarace objektu a inicializace konstruktorem bez parametrů Konstruktor nelze vyvolat jinak, než při vytvoření proměnné! Konstruktory mohou být přetížené, při inicializaci se vyvolá ten, jehož parametry se nejlépe párují se skutečnými parametry Bezprostředně před zrušením objektu se volá destruktor (je-li deklarován) C++ 102
103 Použití přístupných metod a položek Volání metody M na objekt x: x.m( ); Metody mohou být přetížené, vyvolá se ta, jejíž parametry se nejlépe párují se skutečnými parametry Označení přístupné položky P objektu x: x.p Příklad: class T { public: int a; ; T x; x.a = 1; C++ 103
104 Rozdíl mezi class a struct Jen v implicitní přístupnosti class T { přístupnost private ; struct T { přístupnost public ; class T { int a; public: void f(); ; struct T { private: int a; public: void f(); ; class T { public: void f(); private: int a; ; C struct T { void f(); private: int a; ;
105 Třída pro operace s komplexními čísly /* complex.h */ #include <ostream> using namespace std; Třída Complex class Complex { double re, im; public: Complex(double r = 0, double i = 0); double getre() const {return re; double getim() const {return im; double abs() const; Complex plus(const Complex& y) const; Complex minus(const Complex& y) const; friend ostream& operator<<(ostream&, const Complex&); ; C tridy1\priklad3\complex.h
106 Implementace třídy Complex: /* complex.cpp */ #include "complex.h" #include <cmath> using namespace std; Třída Complex Complex::Complex(double r, double i) { re=r; im=i; double Complex::abs() const { return sqrt(re*re + im*im); Complex Complex::plus(const Complex& y) const { return Complex(re+y.re, im+y.im); Complex Complex::minus(const Complex& y) const { return Complex(re-y.re, im-y.im); ostream& operator<<(ostream& os, const Complex& x) { os << x.tostring(); return os; C tridy1\priklad3\complex.cpp
107 Poznámky ke třídě Complex Complex plus(const Complex& y) const; const ve specifikaci parametru typu reference znamená, že metoda (funkce) parametr nezmění a skutečným parametrem tedy může být i konstanta const na konci hlavičky metody znamená, že metoda nezmění položky objektu, na který se volá, a že tedy může být volána i na konstantní objekt (const se musí být uvedeno i v hlavičce definice metody) #include <ostream> vložení h-souboru, který obsahuje deklaraci tříd pro práci s výstupními proudy (streamy) friend ostream& operator<<(ostream&, const Complex&); deklarace funkce, která se vyvolá pro provedení operace os << c, kde os je objekt s vlastnostmi výstupního proudu a c je objekt typu Complex. Tím, že je tato deklarace funkce součástí deklarace třídy a má prefix friend, funkce má stejná přístupová práva k privátním položkám objektů typu Complex jako metody dané třídy C++ 107
108 Použití třídy Complex /* main.cpp */ #include "complex.h" #include <iostream> using namespace std; int main() { Complex a(1,1), b(2,2), c; cout << "a = " << a << endl; cout << "b = " << b << endl; c = a.plus(b); cout << "a+b = " << c << endl; return 0; C tridy1\priklad3\main.h
109 Struktury v jazyku C V jazyku C nejsou třídy, pouze struktury Popis typu struktura obsahuje pouze deklarace veřejných položek a pro zavedení jména typu struktury je třeba použít deklaraci typu typedef typedef struct Complex {float re, im; Complex;... Complex x = {1,1, y = {2,2, z; Operace se strukturou se realizují pomocí funkcí Complex plus(complex x, Complex y) { Complex vysl; vysl.re = x.re + y.re; vysl.im = x.im + y.im;... z = plus(x,y); C++ 109
110 Dynamické proměnné Statická proměnná: je dána deklarací a má jméno je-li deklarovaná na úrovni souboru, existuje po celou dobu provádění programu je-li deklarovaná ve funkci, je ve funkci lokální a existuje jen po dobu provádění funkce Dynamická proměnná: není dána deklarací je vytvořena dynamicky operátorem new (v C funkcí malloc apod.) při provádění programu nemá jméno, je přístupná pomocí ukazatele existuje do té doby, než je programově zrušena operátorem delete (v C++ není garbage collector) C++ 110
111 Dynamicky vytvořený objekt - příklad Příklad (čítač): #include "citac.h"... int main() { int volba; cout << "Citac\n"; Citac* pcitac = new Citac(0); do { cout << "Hodnota = " << pcitac->hodnota() << endl; volba = menu(); switch (volba) { case 1: pcitac->zvetsit(); break; case 2: pcitac->zmensit(); break; case 3: pcitac->nastavit(); break; while (volba > 0); cout << "Konec\n"; delete pcitac; return 0; C dynprom\citac\main.cpp
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íceVý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íceData, 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íceObsah. 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íceVý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ícePaměť 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íceProgramovací 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Ú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Ú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íceRacioná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íceAlgoritmizace 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Ú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íceRacionální čísla, operátory, výrazy, knihovní funkce
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Racionální čísla, operátory, výrazy, knihovní funkce BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík
VíceAbstraktní třídy, polymorfní struktury
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství
VíceŘí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ícefor (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ícePř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íceZá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íceC++ 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ícepř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íceProgramovací 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íce1. 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íceUkazka 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íce1.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íceMě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íceStruktury, funkce, reference
Struktury, funkce, reference 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 a Martin Mazanec Karel Richta,
VíceZPRO 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íce5 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íce3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti
Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti 3. přednáška nalezení největšího prvku, druhého nejvyššího prvku, algoritmus shozeného praporku. Algoritmizace
VíceProgramová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íceProgramovací jazyk C++ Cvičení 2
Programovací jazyk C++ Cvičení 2 Ačkoliv opakujeme jazyk C, naučíme se již něco z C++ 1. Komentáře: komentáře v jazyce C: /* */ nesmějí se vnořovat je možné je využívat i v C++ používají se hlavně jako
VíceJazyk 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íce24-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íce9.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ícepř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íceIUJCE 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íceProgramová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íceFunkce, intuitivní chápání složitosti
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 Funkce, intuitivní
Více1. 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íceZá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íceJak 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íceAlgoritmizace 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íceOpaková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ícePŘ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íceLogické 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íceProgramovací 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íce2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.
Vážení zákazníci, dovolujeme si Vás upozornit, že na tuto ukázku knihy se vztahují autorská práva, tzv copyright To znamená, že ukázka má sloužit výhradnì pro osobní potøebu potenciálního kupujícího (aby
VíceOperační systémy. Cvičení 4: Programování v C pod Unixem
Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné
VíceÚ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íceMichal 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íceVý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ícePB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory
PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory Výhody objektového řešení Nástroje pro IO operace jsou v C++ součástí knihoven Hierarchie objektových
VíceZá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íceV 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íceJazyk 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- 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íceProgramování v jazyce JavaScript
Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Operátory a příkazy BI-JSC Evropský sociální fond
VíceAhoj 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ícePrezentace 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íce8. 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íceOperační systémy. Cvičení 3: Programování v C pod Unixem
Operační systémy Cvičení 3: Programování v C pod Unixem 1 Obsah cvičení Editace zdrojového kódu Překlad zdrojového kódu Základní datové typy, struktura, ukazatel, pole Načtení vstupních dat Poznámka: uvedené
VíceOdvozené 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íceJazyk 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ícePROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK
PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK ČÍSLO OPERAČNÍHO PROGRAMU: CZ.1.07 NÁZEV OPERAČNÍHO PROGRAMU: VZDĚLÁVÁNÍ PRO KONKURENCESCHOPNOST OPATŘENÍ:
VíceZá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íce7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená
VíceObjektově 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íceJazyk 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íceSprávné vytvoření a otevření textového souboru pro čtení a zápis představuje
f1(&pole[4]); funkci f1 předáváme hodnotu 4. prvku adresu 4. prvku adresu 5. prvku hodnotu 5. prvku symbolická konstanta pro konec souboru je eof EOF FEOF feof Správné vytvoření a otevření textového souboru
VíceOperá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íceKonstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
VíceMartin 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íceProstory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...
Proudy v C++ Jmenné prostory Prostory jmen při vkládání několika hlavičkových souborů může vzniknout kolize zeleznice.h const int x=10; typedef struct {... } Hradlo; logika.h const int x=5; typedef struct
Více6. 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íceAlgoritmizace 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íceDatové typy pro reálná čísla
Datové typy pro reálná čísla KAPITOLA 3 V této kapitole: Vlastnosti datových typů pro reálná čísla v jazyce C/ C++ Vstupně/výstupní operace z pohledu reálných čísel Aritmetické operace s reálnými čísly
VíceProgramová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íce2 Datové typy v jazyce C
1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,
VíceMaturitní otázky z předmětu PROGRAMOVÁNÍ
Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti
VícePB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky
VíceStručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787
Stručný obsah První týden 25 den 1 Začínáme 27 den 2 Anatomie programu C++ 43 den 3 Proměnné a konstanty 57 den 4 Výrazy a příkazy 79 den 5 Funkce 107 den 6 Objektově orientované programování 141 den 7
VíceOperá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íceVyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky
Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové
VícePROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Programová realizace DKA typedef enum {q0, q1,... qn,
VíceZá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íceVíce o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
Více- 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ícePromě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íceFunkční objekty v C++.
Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční
VíceBI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky
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 Ukazatele BI-PA1
VíceFormá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íceZáklady jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní
Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti
VícePřednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.
Přednáška 7 Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu
VícePREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
Víceint t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;
Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení s proměnnými typu int: int t1, t2, t3, t4, t5,
VíceOperá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íceAlgoritmizace a programování
Algoritmizace a programování Strukturované proměnné Pole (array), ukazatele (pointer) Jazyk C České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Pole (array) (1) Pole je množina
VíceEVROPSKÝ 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ícetype Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;
Vícerozměrné pole type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; M[2,3] := 3145; - počet indexů není omezen (v praxi obvykle nejvýše tři) - více indexů pomalejší přístup k prvku (počítá
VícePředmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20
Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................
Více