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 pojmů 3
Předpokládaný obsah cvičení opakování neobjektových vlastností jazyka C++ objektové typy v C++ přetěžování operátorů šablony výjimky dynamická identifikace typů (RTTI) prostory jmen objektové datové proudy standardní šablonová knihovna
Kontaktní informace Místnost: T-044c (vchod přes dveře T-045) Web přednášky: http://tjn.fjfi.cvut.cz/~virius/prednes/cpp1.htm Web cvičení: https://vyuka.vladimirjary.cz/ E-mail: Vladimir.Jary@fjfi.cvut.cz konzultace po předchozí domluvě
Požadavky k zápočtu 1 aktivní účast na cvičení, povoleny 4 neomluvené absence 2 domácí úkoly 3 zápočtový program zadání bude upřesněno v průběhu prosince
Přehled Shrnutí procvičených pojmů 1 2 Shrnutí procvičených pojmů 3
Příkazy Shrnutí procvičených pojmů prázdný příkaz (;) složený příkaz ({}) výrazový příkaz (volání podprogramu, přiřazovací výraz) selekce příkaz if příkaz switch iterace příkaz while příkaz do while příkaz for příkazy pro přenos řízení příkaz return příkaz break příkaz continue příkaz goto
Datové typy Shrnutí procvičených pojmů Základní typy celá čísla se znaménkem (short, int, long) bez znaménka (unsigned short, unsigned, unsigned long) znakové typy (char) racionální čísla (float, double, long double) logické hodnoty (bool, jen C++) typ void Uživatelem definované typy výčtový typ (enum) pole struktury struct unie union
Podprogramy Shrnutí procvičených pojmů význam podprogramů volání podprogramů předávání parametrů hodnotou předávání parametrů odkazem (jen C++) návrat z podprogramu definice, deklarace dopředná deklarace hlavičkové soubory přetěžování funkcí výpustka ukazatel na funkci funkce main
Další dovednosti Shrnutí procvičených pojmů práce s řádkovým překladačem a vývojovým prostředím komentáře dynamická alokace paměti ukazatel operátor new operátor delete preprocesor vkládání souborů podmíněný překlad definice maker práce s knihovnami práce se vstupy a výstupy
Eukleidův algoritmus Zadání Napište program, který pro zadáné celá čísla vypočítá jejich nejmenší společný násobek a největší společný dělitel. Příklad 1: Eukleidův algoritmus Bud te a, b Z, a > b. Potom, dokud je b různé od nuly, opakuj následující kroky: 1 do m ulož zbytek po dělení a číslem b 2 do a přiřad b 3 do b přiřad m Po skončení algoritmu je v proměnné a největší společný dělitel zadaných čísel.
Eukleidův algoritmus Zadání Napište program, který pro zadáné celá čísla vypočítá jejich nejmenší společný násobek a největší společný dělitel. Příklad 1: Eukleidův algoritmus Bud te a, b Z, a > b. Potom, dokud je b různé od nuly, opakuj následující kroky: 1 do m ulož zbytek po dělení a číslem b 2 do a přiřad b 3 do b přiřad m Po skončení algoritmu je v proměnné a největší společný dělitel zadaných čísel.
Řešení 1 int gcd(int a, int b){ 2 int m; 3 while(b!= 0){ 4 m = a % b; 5 a = b; 6 b = m; 7 } 8 return a; 9 } 10 11 int lcf(int a, int b){ 12 return a*b/gcd(a,b); 13 }
Překlad z příkazové řádky GNU Compiler Collection: GNU C++ Compiler: g++ GNU C Compiler: gcc Postup: 1 Překlad: g++ -c eukleid.cpp 2 Linkování: g++ eukleid.o -o eukleid Alternativně: g++ eukleid.cpp -o eukleid Důležité přepínače překlad s podporou pro ladění: -g zapnutí všech varování: -Wall zapnutí optimalizací: -O MinGW
Směnárníkova úloha Příklad 2: směnárníkova úloha Napište program, který vrátí nejmenší počet bankovek a mincí, kterými lze zaplatit účet v zadané hodnotě (v Kč). Např. pro hodnotu 403,-Kč vrátí 2 200 + 1 2 + 1 1.
Řešení 1 const int pocet = 12; 2 int bankovky[] = {5000, 2000, 1000, 3 500, 200, 100, 50, 20, 10, 5, 2, 1}; 4 5 void vyplat(int obnos){ 6 int n; 7 for(int i=0; i < pocet; i++){ 8 n = obnos / bankovky[i]; 9 if(n > 0){ 10 cout << n << "*" << bankovky[i] << endl; 11 obnos = obnos % bankovky[i]; 12 } 13 } 14 }
Shrnutí opakování základních pojmů příkazy datové typy práce s funkcemi seznámení s IDE QtCreator jednoduché příklady Eukleidův algoritmus směnárníkova úloha