Tam Sürümünü Görmek İçin : String
genckamyoncu
08/05/2007, 23:57
C'de
42+12*5/6-5
şeklinde string olarak alınan işlemin sonucunu hesaplama ?
İşlem öncelikleri göz önüne alınacak.
yardımcı olabilirseniz sevinirim.
yer=stringdegeri.IndexOf("+",1,stringdegeri.Length-1);
ilkdeger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
stringdegeri=yedekstr;
yer=stringdegeri.IndexOf("*",1,stringdegeri.Length-1);
ikincideger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
stringdegeri=yedekstr;
yer=stringdegeri.IndexOf("/",1,stringdegeri.Length-1);
ucuncudeger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
stringdegeri=yedekstr;
yer=stringdegeri.IndexOf("-",1,stringdegeri.Length-1);
dorduncudeger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
besincideger=yedekstr;
sonuc=((((ikincideger*ucuncudeger)/dorduncudeger)-besincideger)+birincideger);
genckamyoncu
09/05/2007, 00:13
yer=stringdegeri.IndexOf("+",1,stringdegeri.Length-1);
ilkdeger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
stringdegeri=yedekstr;
yer=stringdegeri.IndexOf("*",1,stringdegeri.Length-1);
ikincideger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
stringdegeri=yedekstr;
yer=stringdegeri.IndexOf("/",1,stringdegeri.Length-1);
ucuncudeger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
stringdegeri=yedekstr;
yer=stringdegeri.IndexOf("-",1,stringdegeri.Length-1);
dorduncudeger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
besincideger=yedekstr;
sonuc=((((ikincideger*ucuncudeger)/dorduncudeger)-besincideger)+birincideger);
Yinede teşekkürler ama
String sadece 5 değerden ibaret değil. Toplam 300 karakter alabilir
Bu tur işlemleri ancak agac yapısıyla yapabilirisiniz...
Degerleri ve işaretleri agaca yerleştirmen lazım...
(isaret *)
|
( isaret + ) ...........
| |
(SagDeger) (SolDeger)
Cok uzun zaman oldu :). hatırlamıyorum...
Not: Parantez işlemlerine dikkat etmek gerekiyor...
Kolay Gelsin...
yer=stringdegeri.IndexOf("+",1,stringdegeri.Length-1);
ilkdeger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
stringdegeri=yedekstr;
yer=stringdegeri.IndexOf("*",1,stringdegeri.Length-1);
ikincideger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
stringdegeri=yedekstr;
yer=stringdegeri.IndexOf("/",1,stringdegeri.Length-1);
ucuncudeger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
stringdegeri=yedekstr;
yer=stringdegeri.IndexOf("-",1,stringdegeri.Length-1);
dorduncudeger=stringdegeri.SubString(0,yer);
yedekstr=stringdegeri.remove(0,yer+1);
besincideger=yedekstr;
sonuc=((((ikincideger*ucuncudeger)/dorduncudeger)-besincideger)+birincideger);
C kodu mu bu? C'yi unutmuşsam çekinmeyin, söyleyin.
bu sorun stack olayıyla çözülür.stack bilmiyorsan bunu en fazla 300 diyorsan 300 karakterli bi char arrayi olarak düşün.yada sadece tek bir string.önce değerler arraye atılır işlem öncelik sırasına görede3 kodda belirtilerek stack ten geri alınarak işlemler yapılır yani senin verdiğin örneğe göre;
42 array e atılır,+ arraye atılır,12 arraye atılır sonra * işareti geldiği için stack e son atılan değer geri alınır(stacktende silinir ve * dan sonraki elemanla çarpılır sonuıç olan 60 stackteki 12 nin alındığı yere yazılır sonra / gelince stack e son atılan 60 alınır / den sonraki 6 ya bölünür sonbuç olan 10, 60 ın alındığı yere yazılır.sonra - stacke atılır en sonda 5 atılır döngü '\0' a kdr olduğu için stackte şimdi * ve / lerden arındırılmış işlem önceliğinin bi önemi olmayan işlem kalır stack te şu vardır ;
42,+,10,-,5 kalır.bunu hangi sırada yapacağımız önemli olmadığı içinde stackten sırayla bir sayı bi operatör kaldığı için basit bir for döngüsüyle sonuca ulaşabilirsiniz.umarım anlatabilmişimdir..iyi çalışmalar..
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.