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 using using using using
System; System.Collections.Generic; System.Linq; System.Text; 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ů
-231 až 231 -1
int cislo; cislo = 42;
long
Celá čísla
64 bitů
-263 až 263 -1
long hodne; hodne = 42L;
float
Desetinná čísla
32 bitů
±1,5×10-45 až ±3,4×1038
float desetinne; desetinne = 4.2F;
double
Desetinná čísla
64 bitů
±5,0×10−324 až ±1,7×10308
double vetsi; vetsi = 4.2;
decimal
Peněžní hodnoty
128 bitů
28 významných číslic
decimal penízky; penízky = 4.2M;
string
Textový řetězec
16 bitů / znak
char
znak
16 bitů
0 až 216 -1
char znak; znak = 'A';
bool
Logická hodnota
8 bitů
true nebo false
bool splneno; splneno = true;
string jmeno; jmeno = "Pepa";
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
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žší
Asociativita
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.