Proměnné

3. díl - Proměnné

David Kitner       05.10.2010       C#, .NET       22536 zobrazení

V dnešním díle si vysvětlíme pojem proměnné, řekneme si, jaké typy proměnných existují, a ukážeme si, jak s proměnnými pracovat.

Co je proměnná

Proměnná je místo vyhrazené v paměti, které si pojmenujeme a můžeme do něj vkládat určitá data nebo je číst. Jak takovou proměnnou vytvořit? Stačí napsat typ proměnné a její název a ukončit středníkem.

V praxi deklarace proměnné vypadá takto: int cislo;

Klíčové slovo int je jen zkrácený zápis skutečného typu System.Int32, který je určen pro ukládání celých čísel. Datový typ určuje, kolik paměti se má pro data vyhradit, a zároveň určuje, o jaký typ dat půjde tzn. do proměnné typu Int32 text neuložíte. Slovo cislo je pak název naší proměnné. Název proměnné může obsahovat čísla, písmena a podtržítko, nesmí začínat číslem.

V C# záleží na velikosti písmen v názvech, tudíž můžete mít vedle sebe proměnné s názvem Cislo a cislo. Deklarace proměnné je příkaz, jako každý jiný, tudíž se ukončuje středníkem.

Samotná proměná by nám byla k ničemu, a proto si do ní vložíme nějaká data. Konstrukce cislo = 6; přiřadí do proměnné cislo hodnotu 6. Pokud v proměnné nějaká hodnota již byla, bude přepsána.

Do proměnné cislo jsme uložili číslo v tomto případě šestku. Celé se to dá napsat jako jeden příkaz: int cislo = 6; Tím proměnnou rovnou nadeklarujeme a naplníme daty.

Přehled nejzákladnějších datových typů

Datový typ Použití Rozsah Konverzní funkce
int Celá čísla -2147483648 až 2147483647 Convert.ToInt16(hodnota); Convert.ToInt32(hodnota); Convert.ToInt64(hodnota);
string Text 2147483648 Convert.ToString(hodnota); hodnota.ToString;
bool Ano / Ne true nebo false Convert.ToBoolean(hodnota);
double Desetinná čísla cca 15 platných číslic Convert.ToDouble(hodnota);

Konverzní funkce slouží k převedení typu proměnné na nějaký jiný konkrétní typ. Uvedu příklad:

 string text = textBox1.Text;
double cislo = Convert.ToDouble(text);

Máme proměnnou text typu string, do proměnné uložíme obsah komponenty TextBox (uživatel musí zadat do TextBoxu číslo, tento postup můžeme využít např. při tvorbě kalkulačky).

Dále zde máme proměnou cislo typu double. Tuto proměnou použijeme jako úložiště převedené hodnoty.

Pokud jsou čísla uloženy v proměnné typu string nelze s nimi provádět početní operace, řekneme si proč.

 string cislo;
string cislo2;
cislo =
"5";
cislo2 =
"6" ;
textBox1.Text = cislo + cislo2;

V kódu máme dvě proměnné cislo a cislo2, obě proměnné jsou typu string. Do cislo uložíme číslo 5 a do cislo2 číslo 6. Tím, že dáme součet těchto dvou proměnných, nedosáhneme výsledku 11, ale čísla 56. Je tomu tak proto, že operátorem + se k sobě také připojují textové řetězce. Aby fungoval jako sčítání, je nutné používat ho na číselné datové typy.

Pokud bychom chtěli čísla v proměnných cislo a cislo2 sečíst, museli bychom je nejprve převést na nějaký číselný typ, tj. double (desetinné číslo) nebo int (celé číslo).

 int a = Convert.ToInt32(cislo);
int b = Convert.ToInt32(cislo2);
int vysledek = a + b;
textBox1.Text = Convert.ToString(vysledek);

Jak je vidět z příkladu, text na hodnotu int můžeme převést funkcí Convert.ToInt32. Protože vlastnost Text komponenty textBox1 je opět typu string, nelze do ní přiřadit přímo proměnnou vysledek, protože ta je vypu int. Musíme tedy číslo funkcí Convert.ToString převést.

Převést cokoliv (nejen číslo) na string jde také přímo tak, že na tom zavoláme funkci ToString.

 textBox1.Text = vysledek.ToString();

Celý předchozí kód by se dal sepsat na jeden řádek bez pomocných proměnných, například takto:

 textBox1.Text = (Convert.ToInt32(cislo) + Convert.ToInt32(cislo2)).ToString();

Všimněte si, že jsme výraz Convert.ToInt32(cislo) + Convert.ToInt32(cislo2) dali celý do závorky a za tuto závorku jsme dali .ToString(). Šlo by také tento výraz předat jako parametr do funkce Convert.ToString:

 textBox1.Text = Convert.ToString(Convert.ToInt32(cislo) + Convert.ToInt32(cislo2));

Takto spojené výrazy mohou ale být dost složité a nepřehledné, takže je lepší řešit to přes novou proměnnou, do které dáme mezivýsledek.

Spojování řetězců

Operátor + neslouží pouze k aritmetickým operacím, ale lze s ním i spojovat textové řetězce, jak jsme si již řekli v předchozí ukázce.

 string text = "Vítejte na ";
MessageBox.Show(text + "www.vbnet.cz");

Pokud tento kód dáme do procedury události nějakého tlačítka, zobrazí se nám text Vítejte na www.vbnet.cz.

Dostupnost proměnné

Při programování přesně záleží, kde danou proměnnou nadeklarujeme. Dle těchto kritérií rozlišujeme lokální proměnné a členské proměnné.

Lokální proměnná se deklaruje vždy v nějaké metodě, kde ji zrovna potřebujeme.

Tato proměnná se dá používat pouze v té metodě, kde byla nadeklarována. Proměnná se vytvoří vždy, když je metoda zavolána. Platnost této proměnné končí po provedení všech příkazů v metodě, jakmile tedy metoda skončí, proměnná zanikne.

Členská proměnná musí být deklarována uvnitř třídy nebo struktury (co to je si vysvětlíme v dalších dílech). Pro teď nám stačí vědět, že vše, co je uvnitř bloku class Form1 { } je třída a pokud uvnitř tohoto bloku nadeklarujeme proměnnou, bude platit pro celý náš formulář. Tato proměnná se vytvoří při vytvoření formuláře a zanikne po jeho zavření.

Aritmetické operátory

V jazyce C# lze využívat aritmetické operátory, pomocí nichž provádíme základní početní operace. Nyní si ukážeme o které jde.

 

Operátor Funkce Příklad
+ sčítání 4 + 5 = 9
- odčítání 4 – 5 = -1
* násobení 4 * 5 = 20
/ dělení 4 / 5 = 0.8
% zbytek po dělení 12 % 7 = 5

První čtyři operátory jsou myslím jasné, jediná odlišnost od normální matematiky, kterou známe, je použití hvězdičky pro násobení a lomítka pro dělení. Zastavíme se u operátoru % (říká se mu modulo), díky tomuto operátoru se dostaneme ke zbytku po dělení. Například číslo 12 / 7 = 1, zbytek činí číslo 5. Tím pádem 12 % 7 = 5.

Kalkulačka se základními funkcemi

Nyní, když umíme pracovat s proměnnými, si ukážeme, jak napsat jednoduchou kalkulačku. Zapněme si tedy vývojové prostředí C# a vytvořte nový projekt Windows Forms Application. Na formulář přidáme 3 textová pole (komponenta TextBox) a 5 tlačítek (komponenta Button). Poslednímu textovému poli (textBox3) nastavme v okně vlastností vlastnost ReadOnly na True.

Tímto krokem zamezíme uživateli vkládat data do textBoxu3, protože do tohoto pole budeme vypisovat výsledek. U komponent Button změňme vlastnost Text tak, aby v ní nic nebylo.

Náš program bude fungovat tak, že do polí textBox1 a textBox2 uživatel napíše nějaké číslo a následně klikne na tlačítko s požadovanou operací. Do komponenty textBox3 se nám vypíše výsledek.

Sčítání

Nyní dvakrát klepněte na tlačítko se znaménkem +. Zobrazí se nám okno s kódem, do kterého napíšeme, co se stane, když uživatel klepne na toto tlačítko. Jak jsem již zmínil, do textBox1 a textBox2 se budou vkládat čísla. Jenomže komponenta textBox pracuje s typem string (textové řetězce). Jak jsme si již řekli, pokud chceme využívat matematiku v programech, musíme použít typ proměnné Int32 nebo double. Musíme použít konverzní funkce, převedeme typ string na double a při vypisování výsledku zase zpět z double na string.

 double a = Convert.ToDouble(textBox1.Text);
double b = Convert.ToDouble(textBox2.Text);
double c = a + b;
textBox3.Text =
Convert.ToString(c);

Vytvořili jsme tedy dvě proměnné a a b, do kterých ukládáme převedený obsah z textBoxů. Proměnná c obsahuje součet proměnných a a b. Na posledním řádku převádíme výsledek z typu double na string, protože textBox pracuje pouze s typem string.

Tímto jsme vyřešili sčítaní. Odčítaní a další funkce jsou obdobné, stačí vždy vytvořit událostní proceduru tlačítka a vložit do ní kód se změněným znaménkem. Můžete je tedy snadno dopsat sami. Můžete si vyzkoušet, co se stane, když zkusíme vydělit nulou.

Závěrem

V příštím díle si řekneme, co jsou to podmínky.

 

hodnocení článku

1 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Všechny díly tohoto seriálu

 

 

 

Nový příspěvek

 

Diskuse: Proměnné

Ahoj autore. Jsem začátečník, co se týče C sharpu... tak se řídím tvým návodem a když se chci podívat na konečnou práci pomocí F5, zadám číslice a stisku například odčítání, naskočí mi: http://i.imgur.com/hnjij.png ... díky za rady

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A píšete tam celé číslo nebo desetiné ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chtělo by to ošetřit vyjimkami, ale samozřejmě chápu, že je to příklad pro začátečníky :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chystají se dalšlí díly? Nebo je tento seriál u konce?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jo jsou rozpracovane.....

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

to sou teda rozpracovane pekne dlouho, skoda... :-(

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Koukám, hledám další díly a ric pic furt nic...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím,

když do vstupu napíšeš např.: "15,4", tak to je oki, ale "15.4" je špatně.

Pokud to chceš ošetřit

...

try

{

vstupy

}

catch

{

MessageBox.Show("špatný formát");

}

...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné

Tak to vypadá, že seriál skončil dříve, nežli opravdu začal. Ostatně jako většina internetových tutoriálů. Není nad to koupit si kloudnou učebnici (papírovou knížku). Žádný vydavatel totiž nevydá nic od čeho jsou napsány teprve tři kapitolys tím že další budou autorem dodány později ;-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné

porad hledam osetreni cisel at mi to nespadne a uz jsem doufala ze to nadju. doctu clanek a nic :( totalne nevim co s tim :D

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné

Ahoj

Prosím vás, kde najdu ve Visual Studiu Panel s Events ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Už jsem to našel.

Mimochodem, kdy se tak plánuje publikace dalšího článku ?

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Clanek bud nebude nebo to bude mega clanek :D :D

Mirexx

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Proměnné

Muzu se zepta jestly bude dalsi dil popripade kdy?

Dekuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bude, pracuju na něm.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné

Ahoj

Tak se po dlouhé době zase hlásím :) .Potřeboval bych pomocí s následujícím kódem :

        static void Main(string[] args)
        {
            Console.WriteLine("VÍTEJTE V PROGRAMU - PRÁCE SE SOUBOREM");

            Console.WriteLine("\nZadejte text, který chcete do souboru uložit :");
              string text = Console.ReadLine();

            StreamWriter soubor = new StreamWriter("Database.txt");
              soubor.WriteLine(text);
            soubor.Close();

            Console.WriteLine("\n\nText v uloženém souboru");
            StreamReader zapis = new StreamReader("Database.txt");
            while (zapis != null)
            {
                Console.WriteLine(zapis.ReadLine());
            }
            zapis.Close();

            Console.Read();
        }

Nevím, proč, ale text, který zadám se mi nechce uložit.Mohl by mi prosím někdo pomoci ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omlouvám se, už jsem na to přišel, musí tam být :

FileStream soubor2 = new FileStream("Database.txt", FileMode.Open, FileAccess.ReadWrite);
......
FileStream soubor2 = new FileStream("Database.txt", FileMode.Create, FileAccess.ReadWrite);

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné

Ahoj

Abych začal pěkně, tak díky za super (jak jinak :D) článek.Je to skvěle napsané.

A dále, chci se zeptat, jak to vypadá s dalším článkem.Já samozdřejmě chápu vaši situaci, jak to máte s tím časem a klidně na tento příspěvek namusíš ani odpovídat, ale i přesto by mě to zajímalo, jak to s dalším článkem vypadá.

Zatím

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ahoj,

další článek připravuju, jinak sem rád, že se ti článek líbí.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback