VÝUKOVÝ MATERIÁL Identifikační údaje školy
Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vytvořeno Určeno pro Přílohy
Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 CZ.1.07/1.5.00/34.1076 Pro vzdělanější Šluknovsko 32 – Inovace a zkvalitnění výuky prostřednictvím ICT 0207 Mgr. Bc. Jan Škoda Programování VY_32_INOVACE_0207_0203 Operátory Žák si upevní učivo o operátorech v programovacím jazyku C 18. 7. 2013 3. ročník oboru Informační technologie Bez příloh
Metodický list • Učitel: • • • •
Výklad s projekcí elektronického učebního materiálu. Demonstrace v reálném prostředí. Ukázka obecného postupu činností. Monitorování činnosti žáků.
• Žák: • Sleduje výkladovou projekci a demonstraci učitele. • Procvičuje na reálném prostředí softwaru.
c++ Operátory
Operátory • Určitě si pamatujete operátor přiřazení (=). • Dnes se podíváme na matematické operátory, které budete potřebovat při výpočtech. Operátor
Popis
=
operátor přiřazení (a=b; přiřadí proměnné a hodnotu proměnné b)
+,-
sčítání, odčítání (a = 2-1; hodnota a bude 1, a = 2+1; hodnota a bude 3)
*,/
násobení a dělení
%
zbytek po celočíselném dělení
++
inkrementace (zvýší hodnotu o jedna)
--
dekrementace (sníží hodnotu o jedna)
Operátory • • • •
a = 5 + 3; a = b+c; q = b/c; r = b*c;
Dělení • V případe, že jsou dělenec i dělitel reálného typu (typ proměnné schopný ukládat desetinné čísla (double, float)) a výsledek se ukládá také do proměnné reálného typu, potom bude výsledek desetinné číslo. • Jestliže však bude alespoň jedna z těchto proměnných celočíselného typu půjde o celočíselné dělení a výsledek bude celé číslo.
Zbytek po celočíselném dělení • Pomocí tohoto operátora celočíselném dělení. • Např.: a = 6%4; • hodnota a bude 2.
můžete
získat
zbytek
po
Inkrementace a dekrementace • Mezi nejčastější operace patří zvýšení a snížení hodnoty proměnné o jedna. • Proto, abychom nemuseli psát c=c+1; nebo c=c-1; existují operátory inkrementace a dekrementace. • To samé jako c=c+1 udělá i c++, podobně c=c-1 je to samé jako c--. • Oba tyto příkazy zvýší, anebo sníží hodnotu proměnné o jedna.
Prefix a postfix • Inkrementace i dekrementace mají dvě formy, prefixovou a posfixovou. • Prefixová forma vypadá takto: ++c, nebo --c a postfixová c++ a c--. • Rozdíl v obou formách zápisu je v tom, že prefixový operátor se vyhodnocuje před přiřazením, ale postfixový až po něm. • Takže jestliže použijete prefixovou formu, tak se nejprve přičte jednička k proměnné a až potom se uloží (vrátí) její hodnota. • Při postfixové formě se nejprve uloží (vrátí) hodnota proměnné a až potom se zvýší o jedna. • Podívejme se na následující příklad:
Příklad 1.#include
2.using namespace std; 3.int main() 4.{ unsigned short hodnota; //dvě celočíselné proměnné 5.unsigned short hodnotaDva; 6.hodnota = hodnotaDva = 1; //oběma přiřadíme hodnotu 1 7.cout<<"Puvodni hodnota: " << hodnota << ".\n"; //vypíšeme jejich hodnoty 8.cout<<"Puvodni hodnotaDva: " << hodnotaDva << ".\n"; 9.cout<<"Nova hodnota (hodnota++;): " << hodnota++ << ".\n"; //nejprve vrátí hodnotu proměnné, až potom ji zvýší o jedna 10.cout<<"Nova hodnotaDva (++hodnotaDva;): " << ++hodnotaDva << ".\n"; //nejprve zvýší hodnotu proměnné hodnotaDva o jedna, až potom vrátí její hodnotu 11.cout<<"hodnota jeste jednou: " << hodnota << ".\n"; //ješte jednou vypíšeme obě proměnné abyste viděli, že mají obě dvě stejnou hodnotu 12.cout<<"hodnotaDva jeste jednou: " << hodnotaDva << ".\n"; 13.system("PAUSE"); 14.return EXIT_SUCCESS; 15.}
Konstanty • Konstanty jsou "proměnné", kterým se hodnota nedá změnit. • Konstanty jsou vhodné, jednak pro přehlednost a srozumitelnost programu, a také pokud se v našich programech často vyskytuje číslo/čísla, které je/jsou náročné na zapamatování (např. π = 3,1415926535). • V c++ máme dva způsoby jak konstanty definovat.
Definice pomocí #define • Jde o klasickou formu definice konstanty: #define Mesicu 12 • Tento řádek řekne preprocesoru, aby každý text Mesicu v kódu nahradil číslem 12. • Všimněte si, že před názvem není žádný typ, protože preprocesoru je úplně jedno co místo textu Mesicu do kódu vloží. • Fungovalo by například i toto:
Příklad 1.#include 2.#define jmeno "Pavel" 3.using namespace std; 4.int main() 5.{ 6.cout<<jmeno; 7.system("PAUSE"); 8.return EXIT_SUCCESS; 9.} Výstupem je slovo Pavel;
Konstanty • Nepleťte si to však s proměnnými, protože v tomto případe nedojde k žádnému vytvoření proměnné a kdybychom později napsali: jmeno = „Karel"; kompilátor by nám vyhodil chybu (jak ukládat řetězce si povíme později, až budeme rozebírat pole). • V našem případě kompilátor vidí místo řádku cout< < jmeno; už řádek s nahrazením cout< < "Pavel"; protože preprocesor běží před kompilátorem.
Definice pomocí const • Definice proměnné pomocí klíčového slova const vypadá takto: const unsigned short Mesicu = 12; • Výhodou této definice je, že konstanta má přesně daný typ, čímž zabezpečíme, že ji bude kompilátor používat v souladu s jejím typem. • Zamezíte tak vzniku možných chyb a kód se vám bude lehčeji udržovat.
Příklad 1. #include 2. #include 3. using namespace std; 4. int main() 5. { 6. const unsigned short detiVeTride = 32; //Deklarace konstanty s maximálním počtem dětí ve třídě 7. unsigned short deti; //Počet dětí, které chceme do tříd rozmístit 8. unsigned short trid,prebytek; //Proměnné na počet tříd a počet přebývajících dětí 9. cout<<"Zadejte pocet deti: "; 10.cin>>deti; 11.trid = deti/detiVeTride; //Počet tříd 12.prebytek = deti%detiVeTride ; //Nadpočetné deti 13.cout<<"Potrebujete " << trid << " trid a " << prebytek << "deti je navic.\n"; 14.system("PAUSE"); 15.return EXIT_SUCCESS; 16.}
Příklad - rozbor • Jako první si v programu definujeme maximální počet dětí ve třídě, což je konstantní hodnota, proto ji také tak definujeme. • Ještě si vytvoříme proměnné na uložení potřebných hodnot. • Postupujeme načítáním počtu dětí a výpočtem počtu tříd. • Na řádku trid = deti/detiVeTride; jde o celočíselné dělení (protože všechny typy jsou celočíselné), abychom nedostali výsledek, že potřebujeme např.: 2.12 tříd. • Na následujícím řádku zjistíme zbytek po tomto dělení, což představuje počet nezařazených dětí – přebytečných dětí .
Zdroje • BERAN, Martin. Učebnice Borland C: učebnice programování v Borland C 4. generace. Praha: BEN - technická literatura, 1995, 442 s. ISBN 80-238-0304-2. • HEROUT, Pavel. Učebnice jazyka C. 3. vyd. České Budějovice: Kopp, 1994, 269 s. ISBN 80-858-2821-9. • HEROUT, Pavel. Učebnice jazyka C: 2. díl. 1. vyd. České Budějovice: KOPP, 1995, 236 s. ISBN 80-858-2850-2. • SCHILDT, Herbert. Nauč se sám C. Překlad Jiří Grée, Adéla Gréeová. Praha: SoftPress, 2001, 623 s. ISBN 80-864-9713-5.