4 İşlem
-
Bir Windows form açıyorsun. 4 tane sayılar için textbox koyuyorsun. İsimlerini a,b,c,d şeklinde verebilirsin. Bir tane de formül alanı için textbox koyuyorsun. Bir tane çalıştırma için buton ve bir tane de sonucu yazdırmak için label koyuyorsun. Program çalıştırıldığında formül alanına “ (a + b - c) / d “ girip butona bastığımızda sonucu label nesnesine yazıyorsun.
Formül değiştirilip butona basılınca yeni formüle göre yeniden hesaplama yapacak.
Örneğin programa “ ( A + B – C ) / D “ girdisi verildiğinde ve A=16, B=7, C=3, D=4 değerleri verildiğinde sonuç olarak 5 değerini vermeli.
bu işlemi nasıl yapabilirim?
-
aslında çok basit bir şekilde yapılabilir ama parantezler işlem önceliği işi bozuyor değil mi bunun için string karakterleri okuyarak önce paratez var mı yok mu ona
bakarız. İçine ayrı işlem kalanına ayrı işlem yaparak yapılabilir.
--sadece fikir vermek amaçlı denemedim .
-
stack yapısını
infix , prefix , postfix
araştır bunları işine yararlar :)
-
basit bir hesap makinası yazarak bunu çözebilirim. yani o sonucu alırım ama burda hepsini tek bir butanda istiyor. yada diyelimki a+b yi yaptı bu işlemin devamını yani a+b yi c de atsa c-d diye devam etse bu mümkünmü peki? mümkünse nasıl yapabilirim?
-
SinusX bunu yazdı:
-----------------------------stack yapısını
infix , prefix , postfix
araştır bunları işine yararlar :)
-----------------------------araştırıyorum
-
ajan olaydı çakardı cevabı iki dakkada
-
SinusX bunu yazdı:
-----------------------------stack yapısını
infix , prefix , postfix
araştır bunları işine yararlar :)
-----------------------------hocam bunları bilmiyorum ve c# eğitimi almadım. düz mantık giriyorum.
önce buton tıklandığında textboxda parantez arayacak. bulursa "parantez aç (" ve "parantez kapat )" ın arasında kalan yeri alıp işlemleri gerçekleştircek. parantez arası sonuca atıyorum t saysısı diyecek. sonra işlemin geri kalanını çözecek. ve labele yazacak.
işlem çözme kısmı da şöyle ki: her sayı operatöründen sonra gelen 4 işlem işareti için if else gibi bi yapı kullan ona göre de işlemleri yap
umarım açıkca anlatabilmişimdir.
Not: (küçük bi öneri) önce programı parantezsiz şekilde geliştir. sonra paranteze akarsın. hatta daha sonra 2li parantez kullanmayı falan geliştirirsin. soruyu sorana iyi kapak olur ;)
-
http://scriptasylum.com/tutorials/infix_postfix/infix_postfix.html
şöyle bişey buldum bak bide
-
önce string olarka a parantez arasını bul sonra o işlemin sonucu E ye ata E/D yaptır sonucu verir herhadl
-
asiminnesli bunu yazdı:
-----------------------------önce string olarka a parantez arasını bul sonra o işlemin sonucu E ye ata E/D yaptır sonucu verir herhadl
-----------------------------örneğin demiş ama işlem ((3+4)*(5+8))/(6-2)+(3*4) te olabilir
veri yapıları : stack , list , queue
stack mantığı nedir LIFO (last in first out) yani son eklediğini ilk çıkarırsın. stackte 2 tip işlem yaparsın push ve pop, push yığına eleman ekler pop çıkarır.
c# istiyorsun madem bi stack tanımla bi kaç bişey pushla popla bunları bildikten sonra devamını sen halledersin zaten zorlanmadan
Mesaj 22 Temmuz 2012 (Pazar) Saat: 02:55'da SinusX tarafından düzenlendi. -
iqsuz bunu yazdı:
-----------------------------ajan olaydı çakardı cevabı iki dakkada
-----------------------------gördüm konuyuda biraz dağılmıştı mevzuu.
vbasic olaydı bi şekilde yapılırdı ama .net istiyor ;)
text'in her karakteri tek tek kontrol edilir.
selstart'la toplam karakter. mid komutuylada "(" karakteri kontrol edilir.
for i=1 to text1.selstart
if mid(text1.text,1,i)="(" then
a=mid(text1.text,1,i+1)
b=mid(text1.text,1,i+3)
if mid(text1.text,1,i+4)=")" then exit for
c=mid(text1.text,1,i+5)
d=a mid(text1.text,1,i+2) b mid(text1.text,1,i+4)
end if
next i
not: yazdıklarım vbasic 6.0 için. ezberden hatırladığım kadarıyla yazdım. yazım veya mantık hatası olabilir. eksikte olabilr. ama kabataslak böyle bişey olurdu.
Mesaj 22 Temmuz 2012 (Pazar) Saat: 03:08'da ajan1111 tarafından düzenlendi.
