Diskuze: Kalkulačka

C# .NET .NET (C# a Visual Basic) Kalkulačka American English version English version

Avatar
Raiper34
Redaktor
Avatar
Raiper34:

Zdar, mám menší problém, učím sa to podľa tutorov tak že si to najprv prečítam pozorne pozrem a potom to napíšem podľa seba. Bohužiaľ teraz sa mi to akosi nepodarilo, ked som mal vyber intiger tak to fungovalo, akonahle som ho zmenil na char tak nefunguje :/ preco?

tu je kod :(

Console.WriteLine("Vítajte v programe kalkulačka");
           string x = "ano";
           while (x == "ano")
           {
               Console.WriteLine("Zadaj 2 čísla a vyberte operáciu");
               float a;
               while (!float.TryParse(Console.ReadLine(), out a))
                   Console.WriteLine("Neplatné číslo!");
               float b;
               while (!float.TryParse(Console.ReadLine(), out b))
                   Console.WriteLine("Neplatné číslo");
               float c = 0;
               Console.WriteLine("1 - spočítavanie");
               Console.WriteLine("2 - odčítavanie");
               Console.WriteLine("3 násobenie");
               Console.WriteLine("4 - delenie");
               char vyber = Console.ReadKey().KeyChar;
               Console.WriteLine();
               if (vyber == 1)
               {
                   c = a + b;
               }
               if (vyber == 2)
               {
                   c = a - b;
               }
               if (vyber == 3)
               {
                   c = a * b;
               }
               if (vyber == 4)
               {
                   c = a / b;

               }
               if ((vyber < 1) || (vyber > 4))
               {
                   Console.WriteLine("Zadajte platnú operáciu");
               }
               else
               {
                   Console.WriteLine("Vysledok je: " + c);
               }
               Console.WriteLine("PRajete si pokračovať? ano/nie");
               x = Console.ReadLine();
           }
           Console.WriteLine("Ďakujem za vyskúšanie tohoto programu");
           Console.ReadKey();
Odpovědět 26.7.2012 13:46
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
Raiper34
Redaktor
Avatar
Odpovídá na Raiper34
Raiper34:

Aha chapem, tu to nie je int čiže if ((vyber < 1) || (vyber > 4))
{
Console.Write­Line("Zadajte platnú operáciu");

toto mi nebude fungovat

Nahoru Odpovědět 26.7.2012 13:51
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Raiper34
David Čápka:

S charem se pracuje jinak, musíš ho psát do apostrofů ''. Rozsah výběru můžeš buď kontrolovat 4mi podmínkami nebo by to mělo jít např. pomocí contains na poli s prvky '1', '2', '3', '4'

Nahoru Odpovědět 26.7.2012 14:23
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Raiper34
Redaktor
Avatar
Odpovídá na David Čápka
Raiper34:

No mal som iný plán ale keď si mi pripomenul Contains tak sa to zjednoduší :)

Nahoru Odpovědět 26.7.2012 14:32
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
Raiper34
Redaktor
Avatar
Raiper34:

Nedá sa nejako napísať keď mám 5 podmienok a keď sa nestane ani jedna zo 4 tak sa vykoná 5? Robím tento príklad cez podmienky a vedel by som to spraviť keby že tam pridám ešte jednu premenú, ktorá to bude kontorlovať..... ale nie je nejaká ľahšia možnosť, niečo ako píšem v prvom riadku tohoto komentu?

Nahoru Odpovědět 26.7.2012 17:17
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Raiper34
David Čápka:

Jestli se to týká tohoto příkladu, tak na to jsem ti již přeci odpovídal.

Nahoru Odpovědět 26.7.2012 20:21
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Raiper34
Redaktor
Avatar
Odpovídá na David Čápka
Raiper34:

Njn ale ten Contains mi akosi nefunguje :/

Nahoru Odpovědět 26.7.2012 20:47
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
Raiper34
Redaktor
Avatar
Odpovídá na Raiper34
Raiper34:

dávam contains do if

Nahoru Odpovědět 26.7.2012 20:48
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Raiper34
David Čápka:
char[] moznosti = {'1', '2', '3', '4'};
if (moznosti.contains(vyber))
   ...
else
   ...

Já bych to asi řešil nullovatelným typem.

Nahoru Odpovědět 26.7.2012 22:05
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Raiper34
Redaktor
Avatar
Odpovídá na David Čápka
Raiper34:

Diky ale asi som prebiehal, ten char vidím takto poprvý krát :)

Nahoru Odpovědět 26.7.2012 22:36
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
Kit
Redaktor
Avatar
Odpovídá na Raiper34
Kit:

2× kontrolovat stejnou podmínku je značně nekonzistentní. Použij switch a default, případně else if.

Ještě lepší by bylo použití výjimky.

Nahoru Odpovědět 27.7.2012 8:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Však switch v článku je, koukni na poslední zdroják. Raiper chtěl použít podmínky, ty jsou tam někde v předchozím dílu, aby to bylo jednodušší.

Když na to tak koukám, úplně nejjednodušší je si udělat proměnnou a v posledním else té elseif sekvence ji nastavit na false a je to, to mě včera nenapadlo.

Výjimky jsou od tohoto dílu ještě hodně vzdálené :) Dalo by se to také dobře řešit nullovatelným typem výsledku.

Nahoru Odpovědět 27.7.2012 9:04
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Toho switche jsem si samozřejmě všiml. Právě proto mi nebylo jasné, proč tam Raiper cpe if.

Konstrukce if a switch jsou sice většinou zaměnitelné, ale Raiper spíš ukázal, jak to nedělat.

Výsledek nemusí být nastaven na null. Stačí ho nenastavit a pak jen detekovat existenci výsledku.

Nahoru Odpovědět 27.7.2012 9:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Nenastavení výsledku je spíše styl interpretovaných jazyků, v C# to nevnímám jako čisté řešení a muselo by se to dělat přes reflexi, což je overkill.

Nahoru Odpovědět 27.7.2012 10:05
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Možná by to kompiler ani nezkompiloval, je dost citlivý na neinicializované proměnné.

Nahoru Odpovědět 27.7.2012 10:07
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Sám bych to tak také nedělal. Jen jsem uvažoval nad tím, čím by se dalo nahradit použití výjimky. Čistě asi nijak.

Konstrukce

string pokracovat = "ano";
while (pokracovat == "ano")
...

mi také moc čistě nepřipadne, ale pokud chceš zůstat na levelu pro začátečníky, tak moc dalších možností není.

Nahoru Odpovědět 27.7.2012 10:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.