Moi!
Miten pystyy c# kielessä string yhtälö muuttujassa olevan yhtälön tulos (esim: 1*2) laittamaan double tulos muuttujaan?
kaivat ensimmäisen luvun integeriin, tutkit mikä toimenpide suoritetaan, haet seuraavan luvun integeriin, suoritat laskun sijoittaen double muuttujaan. stringiä voit lukea vaikka silmukassa merkki kerrallaan ja aina kun tulee jotain muuta kuin numeroa niin tiedät laittaa siitä kohti poikki.
Muuten hyvä ohje, mut miten tuo ed. mainittu lause toteutetaan?
Seuraava esimerkki olettaa että yhtälössä on kaksi lukua, joille voidaan suorittaa yhteenlasku, erotus, tulo tai jakolasku. Jos on monimutkaisempia yhtälöitä, niin koodistakin tulee monimutkaisempaa, periaate on kuitenkin suurinpiirtein sama. Virheenkäsittelykin tästä vielä tietysti puuttuu, mutta sitä nyt ei oikein jaksa enää tähän aikaan yöstä kirjoitella... Tämä on muuten sitten ensimmäinen koodinpätkä elämässäni jonka olen kirjoitellut C#:lla!
String yhtalo="10*10"; // tämä yhtälö nyt sitten tulee jostain... int pituus=yhtalo.Length; int i; int ekaLuku=0, tokaLuku=0; for (i=0;i<pituus;i++) // käydään stringi läpi { if (!char.IsNumber(yhtalo,i)) // onko merkki jotain muuta kuin numero { ekaLuku=int.Parse(yhtalo.Substring(0,i)); // nyt tiedetään missä kohti laskutoimituksen merkki on voidaan poistua silmukasta break; } } tokaLuku=int.Parse(yhtalo.Substring(i+1,pituus-i-1)); String toimitus=yhtalo.Substring(i,1); double tulos; switch (toimitus) { case "+": tulos=ekaLuku+tokaLuku; break; case "-": tulos=ekaLuku-tokaLuku; break; case "*": tulos=ekaLuku*tokaLuku; break; case "/": tulos=(double)ekaLuku/(double)tokaLuku; break; } }
Kiitos tuosta!
Vielä yksi kysymys: Miten C# voi formilla olevan napin, esim "tulosta" voisi laittaa toimimaan, kun painaa näppikseltä t kirjainta?
Ja vielä samaan syssyyn, miten TextBoxin ominaisuuksia voisi muuttaa niin, että se ei hyväksyisi ulkoa mitään, eli sen sisältöä käyttäjä ei pystyisi muokkaamaan, vain ohjelma?
Sain tehtyä tuon tekstboxin ominaisuuxien muuttumisen, mutta onko kukaan keksinyt ratkaisua tuohon napin ja näppäimen "bindaamiseen" keskenään?
Luo formille button1 ja buttonille klikkauseventti.
// MainFormin luojafunktio... public MainForm() { // Ensin tämä normaali nappuloiden yms. luonti InitializeComponent(); // Asetetaan KeyDown-eventti this.KeyDown += new KeyEventHandler(this.OnKeyDown); // Näin nähdään näppäimet, vaikka olisi valittuna textbox tms. this.KeyPreview = true; } // Tämä on uusi KeyDownin käsittelijä protected virtual void OnKeyDown(object sender, KeyEventArgs e) { // Jos painettiin T-näppäintä, kutsutaan Button1Click-metodia if (e.KeyCode == Keys.T) Button1Click(this, e); } // Button1Click-metodi void Button1Click(object sender, System.EventArgs e) { // Jos kutsun aiheutti nappi itse (eli sender on button1) if (sender.Equals(this.button1)) this.button1.Text = "Painoit nappia!"; // Jos kutsuja oli joku muu, se tuli varmaan T-nappulasta MainFormilta. else this.button1.Text = "Painoit varmaankin T-nappia."; }
Kiitos, tuo oli loistava koodi. Vielä kun tietäs mitkä on numpädin /*-+ ja enter:in nimi tuossa näppäin listassa?
+ = Keys.Add
- = Keys.Subtract
* = Keys.Multiply
/ = Keys.Divide
Enter = Keys.Enter
Aika loogista, eikö?
Kyllä on, kiitos sulle. Tein tuossa ihan omaksi iloksi pienen laskimen, johon tarviin nuita juttuja.
Aihe on jo aika vanha, joten et voi enää vastata siihen.