Hesap makinesinde islemlerin oncelik siralamasi

Başlatan z, 14 Temmuz 2013, 15:46:40

z

Eski still hesap makinelerinin tasarimi bela bir ismis.

benim yazdigim makine programinin  bir onceki mesajimda verdigim girdilere iliskin hesapladigi sonuclar asagida;

2+3x=11                2+(3*3)=11
2 + 3 + x = 30       ((2+3) + (2+3)) x 3=30
2 + 3 x x = 29        2+(3*3*3)=29
2 + 4 x / = 6          2+(4x4)/4=6

Her ne kadar uygulamada bu tip girdiler yapmaktan sakinilsa da Casio yu referans almak lazim.

Asagidakiler de Casionun sonuclariydi

2+3x=11   = 2+ (3x3)
2 + 3 + x = 25 = (2 + 3) x (2 + 3)
2 + 3 x x = 11   = 2+(3x3)=11
2 + 4 x / = 3 = 2+(4/4)=3;

Casio pespese operator verilirse son operatoru kullanmis daha oncekini iptal etmis.

Ben ise pespese operatorlerin her birini bir once girilen numerik deger/(hesaplanan sonuc) ile isleme aldim.

Casio 2x=2 derken benimki 4
Casio 2/=2 derken benimki 1 sonucunu uretiyor.
Casio 1++====5 uretirken benimki 4 uretiyor
Casio 1+++====1 uretirken benimki 8 uretiyor

Burada inisiyatif uretici de mi yoksa bir standart varmi merak ediyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mistek

Hocam casio fx991es modelinde eğer operatörün solunda veya sağında sayı yoksa hata veriyor. 2 + 4 x = Syntax error

Farklı bir hesap makinesi daha vardı 15 / 2 = 0 sonucunu veriyordu demek ki insiyatif üreticide :)
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

ttg

Python'da şöyle bir fonksiyon da var, benzeri kodunu yazdığınız dilde de varsa(muhtemelen vardır) uğraşmadan işinizi yapabilirsiniz:

exec("3*10+3/2.5*(10/3)")


Yalnız şu da var, yukarıdaki satır herhangi bir değişkene atama yapmıyor. Onu yaptırmak için:

exec("a = 3*10+3/2.5*(10/3)")


Veri dışarıdan hazır geldiğinde almak için:

veri = "a = 3*10+3/2.5*(10/3)" # örnek veri
exec("a = "+veri) # sonuç a isimli değişkene atanıyor


Kullandığınız dili kullanmak zorunda değilseniz python veya javascript kabuklarında işinizi daha rahat görürsünüz.
İlle yazmanız gerekiyorsa da, bu yöntemle bilimsel hesap makinesini yazmak, her fonksiyonun butonları dahil <100 satır civarı sürüyor. Ayrıca derleyici gibi girilen verinin sözdizimi kontrolüyle de uğraştırmıyor.
4 Buçuk Saatlik Python Eğitimi [Ücretsiz] www.youtube.com/gryyldrm

z

fx991es yeni nesil hesaplayicilardan. Bunlarda kagida kalemle matematik ifade yazar gbi yaziyorsun. Bunun hata vermesi normal. Bunlar dotmatrix ekrana sahip. Natural display falan deniyor.

Eski nesil hesaplayicilar seven segment ekrana sahip.

@ttg amacim gercek zamanli hesaplayaci yapmak.

1+2x4= islemininde, ekranda sonucu= tusuna bastigim anda değil

tuslara bastikca ara sonuclari gormek istiyorum.

Asagidaki dokuman zorluklari guzel ozetlemis.

http://en.wikipedia.org/wiki/Calculator_input_methods

On an immediate execution calculator, depending on which keys are used, and the order in which they are pressed, the result for this calculation can be different. Also, among the calculators, there are differences in the way a given sequence of button presses is interpreted.

On a formula calculator one types in an expression and then presses 'Enter' to evaluate the expression.[1][2][3] There are various systems for typing in an expression: infix, postfix, natural display, etc.

On an immediate execution calculator, the user presses a key for each operation, by pressing keys to calculate all the intermediate results, before the final value is shown.[4][5][6]
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Nihayet yazilimimin Casio hesaplayici gibi davranmasini sagladim.

Aslinda farkliliklar hesaplama rutinininden kaynaklanmiyor.

Hesap makinesinin en onemli yazilim bilesenlerinden birisi klavye yorumlayici,
Digeri display rutini,
Hesaplama rutini,
Ve tabiki yorumlayici (islem oncelik belirleyici),

Numerik veri girildi, operator verildi, gibi flaglar kullanip bu flaglari da gozonune alarak isleme karar vermek, bu flaglari gerekiyorsa silmek gerekiyor. Kisacasi hesap makinesinin nasil davranacagini belirlemek yorumlayiciyi nasil yazacagimizla alakali.

Ancak bu tip kontrol eklentilerinden dolayi bitmis bir projenin yazilimina bakip anlamak cok zor olacak. 
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ttg

Ara sonuç dediğiniz aşama aşama sıralanması (mesela 2*4+3 girildiği anda ekranda hem 8 hem 11 in aynı anda görüntülenmesini istemiyorsanız) değil de tuşa basıldığı ana kadar yapılan işlemlerse :

O iş için hazırlanan görsel arayüzde her yeni bir tuşa basıldığında hesaplayacak fonksiyonun(exec komutunu içeren fonksiyon) tekrar çalışması sağlanabiliyor. Ben telefon rehberi yazarken Google'ın sonuç verdiği gibi anlık göstermesini istemiştim, biraz araştırıp bulmuştum text input class larından birinde vardı.

Tabii yaptığınız iş çok daha ilgi çekici duruyor üzerinde ciddi emek ve isteğe göre özelleştirebilme imkanı var, ben sadece alternatif sunmak istedim.

İyi çalışmalar.
4 Buçuk Saatlik Python Eğitimi [Ücretsiz] www.youtube.com/gryyldrm

z

Casio fx3600p de deniyorum;

5 + =   5 sonucunu veriyor.
5 -  =   5 sonucunu veriyor.
5x  =   25 sonucunu veriyor.
5/=      1 sonucunu veriyor.

Neden boyle bir tasarim yapilmis olabilir?


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Bu konuda yorum yapabilecek yokmu?

Sozkonusu durumun bir hata yada ihmalden degil cok mantikli bir gerekcesi oldugunu dusunuyorum. Ama gerekceyi bulamadim.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Mantigim soyle diyor;

5+= dendiginde + dan sonra veri girmediysen ekranda gorunen degeri kullan. Bu durumda 5+=5+5=10 olur.
Ayni mantikla 5x=5x5=25 olacaktir.

Fakat Casio tasarimcilari 5+=5 buna karsilik 5x=25 uretecek algoritma kurmuslar.

Neden acaba?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

RaMu

Belkide sadece üs alma işlemi için yapmışlardır,
5x=    işlemi > 5 çarpı 5,
5xx=  işlemi >  5çarpı 5 çarpı 5 yapıyorsa,
5 üzeri 2, 5 üzeri 3 gibi birşey yapmışlardır,
böyle bir durum var mı, yoksa 5xx... yazınca hatamı veriyor?

Birde 5-x işlemi yapılabiliyor mu, ne sonuç veriyor?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

Elimdeki hesap makinesi, bahsettiginiz islemlerin sonucunu su sekilde veriyor;

5x=25
5xx=25 (Kac kere x basarsan bas farketmiyor)
5-x=25

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

RaMu

#26
(3-5 mbyte)
http://www.friedemann-seebass.de/dwnld_e.html

Hocam buradaki program elindeki hesap makinasını tam simüle edebiliyor mu?
Ben indirdim deniyorum şuanda yazdıklarınla aynı sonuçları veriyor,
her seferinde şu işleme ne sonuç veriyor diye sormaktansa bu programla dener yazarız aklımızdakileri.

-3x= yapınca sonuç sıfır oluyor, enteresan,
gerçektede böylemi?

Alıntı Yap
Asagidakiler de Casionun sonuclariydi

2+3x=11   = 2+ (3x3)
2 + 3 + x = 25 = (2 + 3) x (2 + 3)
2 + 3 x x = 11   = 2+(3x3)=11
2 + 4 x / = 3 = 2+(4/4)=3;

Casio pespese operator verilirse son operatoru kullanmis daha oncekini iptal etmis.


Hocam buradada şöyle bir durum var herhalde;
casio 3x= işlemini, yani sayı ardından çarpıya basıldığını gördüğü anda girilmiş olan sayıyı çarpmak üzere hafızaya alıyor,
hafızaya aldığı sayı girilen sayı fakat affetmiyor iki farklı sayı gibi çarpıyor,

burada çarpıya iki defa basılırsa 3xx= 3 sayısını daimi hafızaya alıyor,
daha sonra işlem yaparsak 3 ü yine kullanıyor,
misal  3xx=9 yaptı,
sonra 1= dersek sonuç 3,
2= dersek sonuç 6,
3= dersek sonuç 9 ... şeklinde oluyor,
(burada herhangibir işaret ile işlem yapılırsa 3 hafızadan atılıyor, öncelik meselesi herhalde)

ama 3x= dersek yine sonuç 9,
sonra 1= dersek sonuç 1,
2= dersek sonuç 2,
3= dersek sonuç 3, ...
yani  hafızaya almıyor,

aynı şekilde 3xxxx çift çarpı sayısı hafızaya alıyor,
3xxx tek çarpı sayısı hafızaya almıyor.

Bir diğer durum,
eğer
bahsedilen 2 + 3 + x = 25 = (2 + 3) x (2 + 3) işlemi yapılıyorsa,
burada işlem yapılırken, sayıdan sonra + görüldüğü anda sol taraf yapılıyor,
çünkü + varsa işlem önceliği sağda olamaz diye kabul edilmiş,
burada biz artık 2+3+ dan sonra x desekde 2+3 işlemi yapılmıştır,
yukarıdaki çarpı işi yapılır yani işlem 5x= e dönüşmüştür.

Buradada çift çarpı kuralı yine geçerli,
2+3+xx= dersek işlem sonucu 25 ve hafızada 5 sayısı olur,
ardından misal 2= desek sonuç 10 olacaktır.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html