Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#: c# ja string muuttuja

Sivun loppuun

blackmoor [20.01.2005 22:36:03]

#

Moi!

Miten pystyy c# kielessä string yhtälö muuttujassa olevan yhtälön tulos (esim: 1*2) laittamaan double tulos muuttujaan?

esakom [20.01.2005 22:49:39]

#

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.

blackmoor [21.01.2005 00:29:47]

#

Muuten hyvä ohje, mut miten tuo ed. mainittu lause toteutetaan?

esakom [21.01.2005 02:10:39]

#

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;
				}
		}

blackmoor [21.01.2005 12:46:26]

#

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?

blackmoor [21.01.2005 17:53:53]

#

Sain tehtyä tuon tekstboxin ominaisuuxien muuttumisen, mutta onko kukaan keksinyt ratkaisua tuohon napin ja näppäimen "bindaamiseen" keskenään?

Metabolix [21.01.2005 18:28:33]

#

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.";
}

blackmoor [21.01.2005 18:43:02]

#

Kiitos, tuo oli loistava koodi. Vielä kun tietäs mitkä on numpädin /*-+ ja enter:in nimi tuossa näppäin listassa?

Metabolix [21.01.2005 18:52:49]

#

Lista: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformskeysclasstopic.asp

+ = Keys.Add
- = Keys.Subtract
* = Keys.Multiply
/ = Keys.Divide
Enter = Keys.Enter

Aika loogista, eikö?

blackmoor [21.01.2005 19:01:06]

#

Kyllä on, kiitos sulle. Tein tuossa ihan omaksi iloksi pienen laskimen, johon tarviin nuita juttuja.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta