Seminář z IVT Proměnné a operátory Slovanské gymnázium Olomouc 11. září 2014 Tomáš Kühr
Jazyk C# Vysokoúrovňový objektově orientovaný programovací jazyk Vyvinutý firmou Microsoft zároveň s platformou.net Framework Později schválený standardizačními komisemi ECMA a ISO Silně inspirován jazyky C, C++ a Java Vývojové prostředí MS Visual Studio (MS Visual C#), aktuálně 2013 Vhodný k tvorbě Konzolových nástrojů Formulářových aplikací Databázových programů Webových aplikací a služeb Softwaru pro mobilní zařízení Zdroje informací: John Sharp: Microsoft Visual C# krok za krokem, Computer press. Mnoho tutoriálů na webu: http://csharp.aspone.cz/codes/tutorial/seznamtutorial.aspx http://www.itnetwork.cz/c-sharp-zaklady-navody-tutorialy-zdrojove-kody-ke-stazeni http://projektysipvz.gytool.cz/projektysipvz/default.aspx?uid=1
Kolik pracovníků Microsoftu je potřeba k výměně žárovky?
Kolik pracovníků Microsoftu je potřeba k výměně žárovky? Žádný. Prohlásí tmu za standard.
Jak vzniká program? Kompilované jazyky Výhody: Rychlost Nepřístupnost zdrojového kódu Snadné ladění (některých druhů) chyb Nevýhody: Závislost na platformě Nemožnost editace kódu Obtížnější správa paměti
Jak vzniká program? Interpretované jazyky Výhody: Přenositelnost Jednodušší vývoj Snadná editace (i za běhu programu) Nevýhody: Rychlost Zranitelnost Chyby se projeví až po spuštění programu
Jak vzniká program? Jazyky s virtuálním strojem Výhody: Snadné odhalení (některých druhů) chyb Stabilita Jednoduchý vývoj Rozumná rychlost Zabezpečený (skrytý) zdrojový kód Přenositelnost
Základní struktura kódu using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; /* * Tento program nic nedělá, * jen pozdraví celý náš svět. */ namespace HelloWorld { class Program { // hlavní metoda (funkce) programu static void Main(string[] args) { // sem budeme (zatím) psát celý náš program Console.WriteLine("Ahoj světe!"); // napíše "Ahoj světe!" do konzole } } }
Několik poznámek k syntaxi C# rozlišuje velká a malá písmena (case sensitivity) system System SYSTÉM C# ignoruje většinu bílých znaků (mezer, tabulátorů, odřádkování) (2*pi*r*(r+v)) = ( 2 * pi * r * (r+v) ) ale naopak "Ahoj světe!" "Ahoj int cislo; intcislo; světe!" Příkazy jsou ukončeny středníkem povrch = ( 2 * pi * r * (r+v) ); Console.WriteLine("Ahoj světe!");
Proměnná Pojmenované místo v paměti Lze v ní uchovávat 1 hodnotu Předem daného datového typu Vytvoření proměnné: typ identifikátor; typ identifikátor = hodnota; Příklady: int cislo; double desetinnecislo = 3.14; string text = "Ahoj"; bool logickahodnota = false;
Identifikátor proměnné Jedinečný v rámci daného namespace Může obsahovat písmena, číslice a podtržítko Musí začínat písmenem nebo podtržítkem Identifikátor by měl být smysluplný Program častěji čteme než píšeme! obsah = pi * polomer * polomer; vs. xyz = ahoj * abc * abc; Nedoporučuji používat háčky a čárky Doporučuje se používat tzv. velbloudí notaci double polomerkruznice; double pi = 3.14; string jmenohlavnihouzivatelevaplikaci;
Základní datové typy Typ Popis Velikost Rozsah Příklad int Celá čísla 32 bitů -2 31 až 2 31-1 int cislo; cislo = 42; long Celá čísla 64 bitů -2 63 až 2 63-1 long hodne; hodne = 42L; float Desetinná čísla 32 bitů ±1,5 10-45 až ±3,4 10 38 double Desetinná čísla 64 bitů ±5,0 10 324 až ±1,7 10 308 decimal Peněžní hodnoty 128 bitů 28 významných číslic string Textový řetězec 16 bitů / znak float desetinne; desetinne = 4.2F; double vetsi; vetsi = 4.2; decimal penízky; penízky = 4.2M; string jmeno; jmeno = "Pepa"; char znak 16 bitů 0 až 2 16-1 char znak; znak = 'A'; bool Logická hodnota 8 bitů true nebo false bool splneno; splneno = true;
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ů (vstupů) Některé operátory mají i tzv. vedlejší efekt Příklady výrazů s operátory: a+b (binární sčítání) a-b (binární odčítání) -a (unární mínus) a<=b (binární menší nebo rovno) a-- (unární dekrementace) prumer = (a+b)/2; (přiřazení, sčítání a dělení v 1 výrazu)
Priorita a asociativita operátorů Priorita určuje pořadí, ve kterém se operátory vyhodnocují Znáte ji vlastně už z matematiky 1 + 2 / 3 + 4 =? Vyhodnocování výrazu lze ovlivnit použitím (kulatých) závorek (1 + 2) / (3 + 4) 1 + (2 / 3 + 4) (1 + 2) / 3 + 4 Asociativita udává směr, ve kterém se vyhodnocují binární operátory se stejnou prioritou Zleva nebo zprava 1 2 3 4 =? Opět lze ovlivnit závorkami ((1 2) -3) 4 (1 2) (3 4) 1 (2 (3 4))
Aritmetické operátory Unární operátory + a Binární operátory +,, * a / s obvyklým významem Asociativita zleva Příklady: stejnecislo = +cislo; opacnecislo = -cislo; delka = vetsi - mensi; prumer = (prvni + druhy + treti) / 3; obsah = 2 * pi *polomer * polomer; Binární operátor % pro určení zbytku po celočíselném dělení (modulo) Příklad: int delenec = 13, delitel=5, podil, zbytek; podil = delenec / delitel; zbytek = delenec % delitel;
Aritmetické operátory Pozor na typy operandů Pokud jsou všechny operandy celočíselné, je i výsledek celočíselný Jinak je výsledek reálné číslo Například při dělení toto může ovlivnit i hodnotu výsledku int cislo = 15; double polovina; polovina = cislo / 2; Spojování řetězců + string prvni = "Ahoj"; string druhy = "Kamaráde"; string spojeni = prvni + " " + druhy + "!";
Zvláštní číselné hodnoty Reprezentovatelné v desetinných datových typech Nekonečno (Infinity, kladné i záporné) double plusnekonecno = 1.0/0.0; double minusnekonecno = -5.0/0.0; Není číslo (NaN, Not a Number) double nesmysl = 0.0/0.0;
Přiřazení Pomocí operátoru = Zápis ve tvaru identifikatorpromenne = JakykoliVyraz Příklady použití cislo = 15; druhecislo = 2*cislo; Vedlejší efekt do proměnné uvedené vlevo uloží výsledek výrazu vpravo Asociativní zprava první = druhy = treti = 42; (první = (druhy = (treti = 42))); Další přiřazovací operátory += -= *= /= %= atd. Význam cislo += 5; cislo = cislo+5;
Inkrementace a dekrementace Aritmetické operátory, které v matematice nemáme Mají vedlejší efekt Inkrementace (++) zvyšuje hodnotu operandu o 1 cislo++; cislo+=1; cislo = cislo+1; Dekrementace (--) snižuje hodnotu operandu o 1 cislo--; cislo-=1; cislo = cislo-1; Mohou být v tzv. prefixovém nebo postfixovém tvaru Prefixové a postfixové použití se odlišuje výsledkem int vysledek1, vysledek2; int cislo = 5; vysledek1 = cislo++; vysledek2 = ++cislo; Nedoporučuji používat přiřazení, inkrementaci a dekrementaci ve složitějších výrazech! y = (x++ - 5 + (z = y - 2));
Podmínkové operátory Operátory pro porovnávání < > <= >= == (rovná se)!= (nerovná se) Binární operátory Výsledkem je logická hodnota Příklady: prvni >= druhe + treti cislo!= - cislo dalsicislo == cislo + 10 Typické chibyčki: prvni >= druhe >= treti 10 < cislo <= 20
Logické operátory Slouží pro konstrukci složitějších podmínek K dispozici máme operátory konjunkce (a zároveň) && disjunkce (nebo) negace! Asociativita zleva Příklady: (10 < cislo) && (cislo <= 20) (cislo <= 10) (20 < cislo)!((10 < cislo) && (cislo <= 20)) a b a && b a b!a true true true true false true false false true false false true false true true false false false false true
Líné vyhodnocování Při vyhodnocování logických operátorů (konjunkce a disjunkce) se vyhodnocuje pouze část výrazu nezbytná pro určení výsledné pravdivostní hodnoty Příklady: (2 < 1) && (10 < cislo/0) (10 < cislo) && (cislo <= 20) (10 < 12) cokoli (10 < cislo) (cislo <= 0) Obzvláště zde tak platí doporučení neschovávat do složitějších podmínek operátory s vedlejším efektem (přiřazení, inkrementace, dekrementace).
Přehled operátorů Skupina Operátory Priorita Asociativita Unární ++ -- + -! nejvyšší Multiplikativní * / % zleva doprava Aditivní + - zleva doprava Relační < > <= >= zleva doprava Rovnost ==!= zleva doprava Logické "a" && zleva doprava Logické "nebo" zleva doprava Přiřazení = += -= *=... nejnižší zprava doleva
Výstup do konzole Zápis a posunutí na další řádek: Console.WriteLine("Jakýkoli text..."); Console.WriteLine(jakakoliPromenna); Console.WriteLine(2+cislo); Zápis bez skoku na další řádek: Console.Write("Jakýkoli text..."); Console.Write(jakakoliPromenna); Console.Write(2+cislo); Vkládání hodnot do textu: Console.Write("Jmeno:{0}\nPrijmeni:{1}\nVek{2}", "Pavel", "Novak", 25); Console.Write("{0} {2} a {1} {2} jsou bratři.", "Pavel", "Petr", "Novák");
Čtení dat přes konzoli Načítá se vždy textový řetězec string prectenytext; prectenytext = Console.ReadLine(); Pokud chceme načíst jiný datový typ, je to mírně komplikovanější int cislo; string text; text = Console.ReadLine(); cislo = Int32.Parse(text); double cislo; string text; text = Console.ReadLine(); cislo = Double.Parse(text); Další datové typy podobně
Cvičení 1 Ve vývojovém prostředí Visual Studio si vytvořte novou konzolovou aplikaci v jazyce C# a napište do konzole pozdrav světu Postup: 1. V hlavní nabídce aplikace v položce Soubor klikněte na Nový projekt. 2. Zvolte Visual C# a Konzolová aplikace. 3. Vyberte adresář, ve kterém se má nový projekt vytvořit. Doporučuji si třeba vytvořit nějaký adresář na ploše. 4. Zvolte si nějaký smysluplný název projektu (např. AhojSvete, HelloWolrd ). 5. Klikněte na tlačítko OK. 6. Doplňte program dle zadání. 7. Program spustíte kliknutím na Spustit bez ladění (CTRL+F5) v části Ladit v hlavní nabídce vývojového prostředí.
Chlap vytáhne cigaretu z krabičky, dá ji do úst a zapálí. Dívka mu na to odpoví: Co to děláš, ty nevidíš, že na krabičce je varování, že kouření vážně poškozuje zdraví? Chlap odpoví: Lásko, já jsem programátor. My na warningy kašlem, nás zajímají jenom errory.
Cvičení 2 Vyzkoušejte si vytvořit několik proměnných různých datových typů, vložte do nich nějaké hodnoty a vypište si je co nejlépe do konzole. Poté si zkuste načítat hodnoty až za běhu programu pomocí jejich zadávání do konzole.
Cvičení 3 Vytvořte program, který spočítá objem a povrch válce. O potřebné údaje o konkrétním válci požádejte uživatele programu. Výsledné hodnoty pak vypište uživateli do konzole. Nápověda: Hodnotu Ludolfova čísla π lze získat pomocí Math.PI.