C# kalkulačka Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Toxicity
nováček
Příspěvky: 41
Registrován: duben 12
Pohlaví: Muž
Stav:
Offline

C# kalkulačka  Vyřešeno

Příspěvekod Toxicity » 06 úno 2015 16:31

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.

Reklama
Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: leden 15
Bydliště: Krkonoše
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: C# kalkulačka

Příspěvekod satik » 06 úno 2015 16:43

Úplně jednoduše ne.
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index

Toxicity
nováček
Příspěvky: 41
Registrován: duben 12
Pohlaví: Muž
Stav:
Offline

Re: C# kalkulačka

Příspěvekod Toxicity » 06 úno 2015 16:46

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

Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: C# kalkulačka

Příspěvekod domitea » 06 úno 2015 16:54

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...

Toxicity
nováček
Příspěvky: 41
Registrován: duben 12
Pohlaví: Muž
Stav:
Offline

Re: C# kalkulačka

Příspěvekod Toxicity » 06 úno 2015 17:43

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ěď ^^

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: C# kalkulačka

Příspěvekod faraon » 06 úno 2015 17:55

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:
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

gore227
nováček
Příspěvky: 26
Registrován: březen 14
Pohlaví: Muž
Stav:
Offline

Re: C# kalkulačka

Příspěvekod gore227 » 06 úno 2015 18:01

Jenom tak bokem.. V PHP to je na jeden radek:

Kód: Vybrat vše

var vysledek = eval(displej.innerHTML);

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: C# kalkulačka

Příspěvekod CZechBoY » 07 úno 2015 01:37

Nastuduj si precedenční tabulku, teď jsem z toho psal test. :D

gore227: to, co si napsal, je javascript
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host