Stránka 1 z 1

C# kalkulačka  Vyřešeno

Napsal: 06 úno 2015 16:31
od Toxicity
Ahoj,
udělal jsem si v C# kalkulačku. Funguje mi tak, že po kliknutí na nějaké číslo nebo operátor se mi přidá to číslo nebo operátor do textboxu. Takže mám v textboxu třeba "1 + 2 * 4 + 8". A chtěl bych se zeptat, zdali jde nějak udělat, že když kliknu na "=", vezme se všechno z textboxu a bude se s tím počítat jako s příkladem. Takže něco jako textBox1.Text = textBox1.Text, ale aby to nevypsalo ten text, ale vypočítalo příklad. Snad někdo pochopí co mám na mysli :D
Předem díky za odpovědi.

Re: C# kalkulačka

Napsal: 06 úno 2015 16:43
od satik
Úplně jednoduše ne.

Re: C# kalkulačka

Napsal: 06 úno 2015 16:46
od Toxicity
Tak nakonec jsem si našel na googlu tohle:

DataTable dt = new DataTable();
var v = dt.Compute(textBox1.Text, "");
textBox1.Text = v.ToString();

Sice netušim co ty funkce dělaj, ale funguje to :D

Re: C# kalkulačka

Napsal: 06 úno 2015 16:54
od domitea
Vím přesně co máš na mysli.. Nicméně to vyžaduje trošku složitější programování využívající formální gramatiku a podobné habaďůry :lol:

Nicméně, když to řeknu ve zkratce. Můžeš celý řetězec "rozsekat" na menší řetězce (čísla přece nejsou jeden znak ;) ) - Tedy by mohla sloužit mezera jako oddělovač:

Kód: Vybrat vše

"1 + 2 * 4 + 8" --> "1" "+" "2" "*" "4" "+" "8"


Nyní máme oddělené řetezce a můžeme s nimi dál pracovat. Další úkol je, jak zjistit, co je číslo a co ne? Existuje mnoho způsobů, ale jeden je relativně jednoduchý. Zkusíme převést řetězec na číslo, pokud je v něm pouze číslo, máme číslo. Pokud jsou v něm nějaké nečíselné znaky, vyhodíme výjimku. Takže už máme čísla a znaky:

Kód: Vybrat vše

"1" "+" "2" "*" "4" "+" "8" --> 1 "+" 2 "*" 4 "+" 8


Když už máš čísla, můžeš je rovnou ukládat někam do pole a pak si s nimi hrát. Nicméně, teď sis trochu hodil klacek pod nohy. Znáš prioritu operátorů? Protože jako první musíš vynásobit 2 a 4 a až pak to sečíst. Jo, to je nevýhoda psaní operátoru mezi čísla. Nciméně s tím si už poradíš.

Kód ode mě nečekej, C# moc neovládám, ale jsou to jen cykly a podmínky. Nečekej v tom žádnou extra sloužitost ;)
Ale aby se neřeklo, tak mám na svém githubu kód zásobníkové kalkulačky, už asi nebude nikdy dodělána.... :-(

EDIT: A já se s tím tady rozepisuju... To je přesně to programování, kterému by ses měl vyvarovat. Použít třídu jako blackbox...

Re: C# kalkulačka

Napsal: 06 úno 2015 17:43
od Toxicity
Jojo, něco podobného mě taky napadlo, že by se po stisknutí tlačítka nepřipsal znak jen do textboxu ale zároveň i do pole, ale pak jsem si uvědomil přesně ten problém co jsi tu napsal, tak mě zajímalo jestli to jde udělat nějak jednodušejc :D
Ale díky za odpověď ^^

Re: C# kalkulačka

Napsal: 06 úno 2015 17:55
od faraon
Ještě by se to dalo udělat o trochu jednodušeji, načítat znak po znaku. Pokud načteš číslici, přidáš jí k proměnné (že máš proměnnou vynásobit deseti a tu číslici přičíst snad říkat nemusím), pokud načteš znaménko, provedeš operaci, pokud načteš konec řádku, zobrazíš výsledek. Jeden cyklus, nic víc.

Jinak to co ty chceš udělat je přesně to, co bych na ZX Spectru z roku 1982 provedl tímhle programem:

Kód: Vybrat vše

10 INPUT t$
20 PRINT VAL t$

Schválně si to vyzkoušej: http://torinak.com/qaop
Zlaté časy :lol:

Re: C# kalkulačka

Napsal: 06 úno 2015 18:01
od gore227
Jenom tak bokem.. V PHP to je na jeden radek:

Kód: Vybrat vše

var vysledek = eval(displej.innerHTML);

Re: C# kalkulačka

Napsal: 07 úno 2015 01:37
od CZechBoY
Nastuduj si precedenční tabulku, teď jsem z toho psal test. :D

gore227: to, co si napsal, je javascript