Pokročilé programování v jazyce C pro chemiky (C3220) Úvod do jazyka C++



Podobné dokumenty
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

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:

Úvod do programování. Lekce 1

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

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

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

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

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) 4. Textové řetězce, zápis dat do souboru

Programování v jazyce C pro chemiky (C2160) 10. Grafická knihovna g2

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Objektově orientované programování

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

DTP Základy programování Úvod do předmětu

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

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

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

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

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

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

Programovací jazyk C++ Hodina 1

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

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

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

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

Operační systémy. Cvičení 3: Programování v C pod Unixem

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

Základy C++ doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

2 Datové typy v jazyce C

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

Zápis programu v jazyce C#

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

Algoritmizace a programování

Algoritmizace a programování

Programovací jazyk Pascal

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

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

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Základy programování (IZP)

Sada 1 - Základy programování

Základy algoritmizace a programování

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Základy PERLu snadno a rychle

Pole a kolekce. v C#, Javě a C++

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

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).

Standardní algoritmy vyhledávací.

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Základy programování (IZP)

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Základy jazyka C. Základy programování 1 Tomáš Kühr

Funkční objekty v C++.

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

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

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

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

PROGRAMOVÁNÍ V C++ CVIČENÍ

Algoritmizace a programování

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

10 Algoritmizace Příklad 2 Word 2007/ VBA

Maturitní otázky z předmětu PROGRAMOVÁNÍ

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

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

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Základy programování (IZP)

Úvod do programovacích jazyků (Java)

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Vector datový kontejner v C++.

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 -

Množina čísel int stl-set-int.cpp

První kapitola úvod do problematiky

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

Algoritmizace a programování

C2110 Operační systém UNIX a základy programování

Stručný návod k programu Octave

CZ.1.07/1.5.00/

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

PROGRAMOVÁNÍ V SHELLU

DUM 06 téma: Tvorba makra pomocí VBA

typová konverze typová inference

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

Transkript:

Pokročilé programování v jazyce C pro chemiky (C3220) Úvod do jazyka C++

Objektové programování Objektový přístup data a metody pro manipulaci s nimi jsou sdruženy společně v rámci jedné entity Objektové programování pracuje s objekty = speciální proměnné obsahující datové položky (podobně jako struktury v C) a zároveň funkce pro manipulaci s nimi Simula - první objektově orientovaný jazyk (1967) ovlivnila mnoho dalších jazyků Další objektové jazyky: Smalltalk, C++, Java, C#, Objective-C, Python Novější verze jazyků COBOL, Pascal (Turbo Pascal, Delphi), Fortran (Fortran 2003), BASIC (Visual BASIC), Ada (Ada 95), Perl (Perl 5), PHP 2

Výhody: Široce používaný Jazyk C++ Vychází z prověřeného jazyka C Výhody objektového programování (vč. pokročilých technik) Rychlost (jedná se o kompilovaný jazyk) Široká dostupnost kvalitních překladačů pro různé hardwarové platformy, vývojových a ladících nástrojů a knihoven Nevýhody: Relativní složitost Chybí systém pro automatickou správu paměti (garbage collection) Některé knihovny nejsou standardizované (multithreading, network I/O, GUI) omezuje portabilitu Změna zdrojového kódu vyžaduje rekompilaci (jedná se o kompilovaný jazyk) Relativní nevýhody: Práce s ukazateli (efektivní, ale málo bezpečná) 3

Historie jazyka C++ 1969-1973 (nejvíce 1972) vyvinut jazyk C (Dennis Ritchie v AT&T Bell Labs) 1979 započal vývoj C with classes (AT&T Bell Labs, B. Stroustrup) rozšíření C o vlastnosti jazyka Simula 1983 jméno změněno na C++ 1986 Bjarne Stroustrup publikoval knihu The C++ Programming Language 1992 v Sun Microsystems vyvinuli jazyk Java (inspirován C++) 2000 v Microsoft vyvinuli v rámci projektu.net jazyk C# (inspirován C, C++, Java) Neobjektové jazyky Algol 60 1961 CPL 1960s BCPL 1966 B 1969 Objektové jazyky Simula 1967 1998 standard ISO/IEC 14882:1998 - C++98 2003 standard ISO/IEC 14882:2003 - C++03 2011 standard ISO/IEC 14882:2011 - C++11 Zkratky: ANSI - American National Standards Institute ISO - International Organization for Standardization IEC - International Electrotechnical Commission C 1973 C++ 1983 Java 1992 C# 2000 4

Základy Jazyka C++ Učebnice jazyka C++ Miroslav Virius: Od C k C++. KOPP, 2002. 232 s. ISBN 80-7232-110-2. (cca 199 Kč) Petr Šaloun: Programovací jazyk C++ pro zelenáče. Neocortex, 2005. 252 s., ISBN 80-86330-18-4 Podrobná učebnice jazyka C++ Jesse Liberty, Bradley L. Jones: Naučte se C++ za 21 dní. Computer Press, 2007. 800 s., ISBN 978-80-251-1583-1 (790 Kč) Pokročilejší témata jazyka C++ Miroslav Virius: Pasti a propasti jazyka C++. Computer Press, 2005. 376 s., ISBN 80-251-0509-1 Pokročilé techniky objektového programování Rudolf Pecinovský: Návrhové vzory - 33 vzorových postupů pro objektové programování. Computer Press, 2007. 527 s., ISBN 80-251-1582-8 Steve McConnell: Dokonalý kód umění programování a techniky tvorby software. Computer Press, 2006. 894 s., ISBN 80-251-0849-X 5

Kompilace programu v C++ Zdrojové soubory s kódem v C++ mývají příponu.cpp (někdy se používají.c,.cc,.cc) Hlavičkové soubory se používají podobně jako v C, mívají příponu.h,.hh,.hpp nebo.h, často však nemají žádnou příponu Kompilace se provádí podobně jako při programování v C, místo překladače gcc se používí g++ (pod Linuxem): g++ -o spustitelny_soubor zdrojovy_soubor.cpp V praxi je vhodné používat parametry -Wall a -pedantic Příklad: g++ -Wall -pedantic -o myprog myprog.cpp Pro psaní kódu programu lze použít např. editor Kate, který umožňuje automatické odsazování textu, barevné označení klíčových slov jazyka, vyznačení párování závorek a pod. 6

Make Nástroj make slouží k automatizovanému překladu programů Překlad se řídí instrukcemi zapsanými v souboru Makefile nebo makefile Jméno cíle (tj. jméno spustitelného souboru) zakončujeme dvojtečkou, pak uvádáme jména závislých souborů oddělených mezerou - jedná se zpravidla o zdrojový soubor s programem Dále uvádíme příkazy, každý na samostatném řádku, na začátku řádku musí být znak tabulátoru Překlad spustíme příkazem make jmeno_cile, spustíme-li make bez uvedení názvu cíle provede se první cíl # Soubor muze obsahovat komentare, ktere zacinaji znakem hash # Budeme kompilovat soubor myprog.cpp a vytvorime # spustitelny soubor myprog myprog: myprog.cpp g++ Wall pedantic o myprog myprog.cpp Zde musí být tabulátor, ne mezery! 7

Struktura programu v C++ Na začátku programu se nachází direktiva pro vložení hlavičkových souborů (používají se jiné hlavičkové soubory než v C) Pro použití standardních funkcí musíme deklarovat prostor jmen pomocí klíčových slov using namespace Program začíná funkcí main() podobně jako v C Komentáře jsou stejné jako v C, tj. dvojice /* a */ nebo // // Program v jazyce C #include <stdio.h> int main() { printf("hello, World!\n")); return 0; } // Program v jazyce C++ #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; } 8

Vstup a výstup v C++ Pro vstup a výstup používáme vstupní a výstupní proudy (angl. streams) cin a cout Pro výstup používáme cout ve spojení s operátorem << Pro vstup používáme cin ve spojení s operátorem >> Operátory << a >> můžeme řetězit (tj. používat je opakovaně za sebou v kombinaci s proměnnými a konstantami) Pro použití vstupů a výstupů musí být použit hlavičkový soubor iostream a deklarováno using namespace std #include <iostream> using namespace std; int main() { int a = 0; cout << "Jednoduchy text\n"; cout << "Operatory " << "lze " << "zretezit"; cin >> a; // Ukazka nacteni celociselne hodnoty } 9

Výstup v C++ Za operátorem << může následovat libovolná řetězcová, znaková nebo číselná konstanta nebo proměnná (dojde k automatické konverzi na řetězec) Konec řádku můžeme zapsat jako znak '\n' (jako v C) nebo použít endl (zkratka z end of line) int a = 1; double d = 3.14; char c = 'W'; cout << "Klasicke zakonceni radku\n"; cout << "Klasicke zakonceni radku trochu jinak" << '\n'; cout << "Alternativni zpusob zakonceni radku" << endl; cout << 10; // Vypis celeho cisla cout << 23.175; // Vypis desetinneho cisla cout << a; // Vypis hodnoty celociselne promenne cout << d; // Vypis hodnoty realne promenne cout << c; // Vypis hodnoty znakove promenne cout << "Cele cislo: " << a << " nasleduje realne cislo: " << d << endl; 10

Vstup v C++ Za operátorem >> uvedeme jméno proměnné do které se má načíst hodnota ze vstupu (tj. zpravidla z klávesnice) Hodnota na vstupu musí odpovídat typu proměnné (celé číslo, reálné číslo, znak) Při čtení se přeskakují bílé znaky (mezery, tabelátory, znak konce řádku) předcházející načítané hodnotě Pokud použijeme zřetězení operátoru >> hodnoty se načítají do proměnných v pořadí zleva doprava int a = 0, b1 = 0, b2 = 0, b3 = 0; double d = 0.0; char c = ' '; cin >> a; cin >> d; cin >> c; // Do promenne a se nacte celociselna hodnota // Do promenne d se nacte realna hodnota // Do promenne c se nacte znak // Postupne se nactou celociselne hodnoty do promennych b1, b2, b3 cin >> b1 >> b2 >> b3; 11

Řetězce v C++ Pro práci s řetezci používáme proměnné typu string Na začátku je třeba vložit hlavičkový soubor string deklarovat using namespace std Řetězcovou proměnnou můžeme inicializovat pomocí řetězcové konstanty, kterou uvedeme za = nebo do závorek Řetězcová proměnná typu string může obsahovat řetězec libovolné velikosti, paměť pro znaky je automaticky alokována/dealokována podle délky řetězce #include <string> using namespace std; int main() { string s1 = "Tady je nejaky text"; // Prvni zpusob inicializace string s2("tady je nejaky text"); // Jiny zpusob inicializace string s3; // Prazdny retezec } 12

Operace s řetězci v C++ Operátor = slouží k přiřazení hodnoty řetězci z jiné řetězcové proměnné nebo konstanty Pro spojování řetězců používáme operátor + Operátor += používáme k připojení jiného řetězce k danému řetězci Operátory ==,!=, <, <=, >, >= slouží k porovnávání řetězců (lexikografickému) Pro práci s řetězci nelze použít operátory -, *, / int main() { string s1, s2; s1 = "Skakal"; // Prirazeni retezcove konstanty do retezcove promennne s2 = s1 + " pes pres"; s2 += " oves"; } if (s2 == "Skakal pes pres oves") cout << "Retezce se shoduji"; 13

Výstup řetězcové proměnné Řetězcovou proměnnou můžeme zapsat na výstup pomocí operátoru << int main() { int a = 3; string s1 = "Tady je nejaky text"; } cout << "Toto je retezec s1: " << s1 << endl << "a promenna a:" << a; cout << s1 + " pridany text"; // Operator + ma prioritu pred << cout << (s1 + " na konec"); // Pouziti zavorek je vsak prehednejsi 14

Vstup do řetězcové proměnné Řetězcovou proměnnou můžeme použít pro čtení vstupu pomocí operátoru >> Při načítání se ignorují počáteční mezery (resp. bílé znaky) začíná se načítat až první nebílý znak Při čtení se tedy vždy načítá pouze jedno slovo, tj. čtou se znaky ze vstupu tak dlouho dokud se nevyskytne bílý znak (mezera, tabelátor, znak konce řádku) #include <iostream> #include <string> using namespace std; int main() { string s; cout << "Zadej text: "; cin >> s; cout << "Nacteny text: " << s << endl; } return 0; 15

Logický typ bool Na rozdíl od C existuje v C++ logický typ bool Proměnná typu bool nabývá hodnot true nebo false // Ukazka pouziti typu bool a hodnot true a false int a = 0, b = 0; bool val = true; //... tady muze byt nejaky kod nastavujici hodnoty promennych a, b if (a < b) val = false; // Take lze napsat nasledujici, je to ale totez jako if (val) if (val == true) a += b; // Do logicke promenne lze ulozit vysledek logickeho vyrazu val = a < b b > 0; if (val) a = b*b; 16

Knihovna g2 Při použití knihovny g2 je třeba při překaldu použít následující parametry kompilátoru: -lg2 -lgd -lx11 (l je zde malé L) Na začátek zdrojového souboru je třeba dát #include <g2.h> #include <g2_x11.h> Čísla barev předávané funkci g2_pen() mají hodnoty 0-26, např. 0 bílá, 1 černá, 3 modrá, 7 zelená, 19 červená, 25 žlutá int dev = 0; dev = g2_open_x11(500, 500); // Otevreni okna g2_set_line_width(dev, 5); // Tloustka cary bude 5 pixelu g2_pen(dev, 1); // Pouzije se barva cislo 1 (cerna) g2_circle(dev, 250, 250, 80); // Kruznice v bode 250, 250 s polomerem 80 cout << "Pro ukonceni programu stisknete Enter!" << endl; cin.get(); cin.get(); g2_close(dev); 17

Dodržujte následující pravidla Pro kompilaci programu používejte nástroj make Na začátek programu nezapomeňte vložit hlavičkové soubory iostream (pro práci se vstupy a výstupy) a string (pro práci s řetězci) a deklaraci using namespace std; Proměnné při deklaraci vždy inicializujte vhodnou hodnotou (zpravidla 0) 18

Cvičení 1. Vytvořte program, který si od uživatele vyžádá dvě celočíslené hodnoty oddělené mezerou a vypíše jejich součet. 1 bod 2. Vytvořte program, který bude v cyklu od uživatele požadovat zadání slov, dokud uživatel nezadá slovo END. Potom vypíše všechna dosud zadaná slova oddělená mezerou (kromě slova END). Program také vypíše počet zadaných slov (bez END). 1 bod 3. Vytvořte program, který vykreslí na obrazovku kružnici pomocí knihovny g2. Program si na začátku vyžádá od uživatele souřadnice středu kružnice (v pixelech), poloměr kružnice (v pixelech) a číslo barvy (1, 3, 7, 19 nebo 25). Potom zobrazí okno a v něm vykreslí kružnici. Kód pro načítání hodnot umístěte do funkce main(), ale kód pro vykreslení kružnice umístěte do samostané funkce, které předáte potřebné hodnoty (tj. souřadnice středu, poloměr, číslo barvy). 2 body 4. Předchozí úlohu modifikujte tak, že barva nebude zadána formou čísla, ale jako text (black, blue, green, red, yellow). nepovinná, 1 bod 19