Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: z - 14 Temmuz 2013, 15:46:40

Başlık: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 14 Temmuz 2013, 15:46:40
Hesap makinesi arayuzu yaziyorum.

Kullanici 1+2*3+4= tuslarina sira ile basmis olsun.

Bu islem 1 + (2*3) + 4 = 11 sonucunu vermelidir.

Bu problemi, basilan tuslari basit bir algoritmayla ikili operandi ve bir operatoru olan basit islemler olarak ele alamiyoruz.

Yani 1+2=3, 3*3=9, 9+4=13 olmuyor.

Bu islemi en az degisken kullanarak yapmak istiyorum.

Konu hakkinda konusmak isteyenler buyursun.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: MrDarK - 14 Temmuz 2013, 15:49:39
Hocam string ifade içersinde operatörleri arayarak yapılamaz mı bu iş ?

Ben olsam oyle yapardım.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: gumush - 14 Temmuz 2013, 15:58:06
Bilgisayardaki hesap meakinesinde 1+2=3, 3*3=9, 9+4=13 seklinde oluyor. Yani tusa basilinca hesapliyor o ana kadarkini , bu sekilde ikili ikili gitmis oluyor..
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: ahmets - 14 Temmuz 2013, 16:21:30
Galiba input'u stack kullanıp "Reverse Polish Notation"a çevirerek yapılıyordu.
http://en.wikipedia.org/wiki/Reverse_Polish_notation (http://en.wikipedia.org/wiki/Reverse_Polish_notation)
http://en.wikipedia.org/wiki/Calculator_input_methods (http://en.wikipedia.org/wiki/Calculator_input_methods)
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: hasankara - 14 Temmuz 2013, 18:14:28
örnek olarak "1+12*34+4" girilirken sırasıyla bir char dizisinin 7 hücresini ascii karakterleri ile doldururuz. entere basıldığında bu dizi hesap fonksiyonuna sokulur.

örnek olarak 12 ile 34 çarpılır sonuç * karakterinin yerine koyulur. bunu call return gibi düşünebilirsin. bu karakter yerine öyle bir karakter ekleyeceksin ki hesap fonksiyonu bu karakteri call komutu gibi algılayacak ve karakterin içerisinde adreslenen ram bölgesindeki veriyi okuyup yıldız yerinde o sayı varmış gibi davranabilecek. 1-2 ve 3-4 karakterlerin bulunduğu hücrelere geciştir komutu niteliğindeki veriyi yükleriz.

hesap fonksiyonu işlem önceliğine göre karakter araması yapar. mesela * ilk arama olur. * ile karşılaştığında bir önceki değer ile bir sonraki değerin sayı olduğu kontrolü yaparız eğer bu koşulu sağlamıyorsa syntax error deriz. koşulu sağlıyorsa bir sonraki aşama olarak, solundaki sayı ile sağındaki sayıyı decimale çevirmek olur, bu biraz zahmetli iş olacak gibi.

** işlemin solundaki sayıyı bulalım
yıldızın bulunduğu hücreden bir önceki hücre ascii verisi ise ascii-decimal dönüştür dgr1 e yükle, komut verisi ise komutu yerine getir, yani call komutu varsa dgr1 e direk adreslenen ram verisini yükletip bu aşama sonlandırılır. yoksa bu aşamada devam edilir.
iki önceki hücreyi ascii-decimal dönüştür 0_9 arasında ise 10^(2-1) katını dgr1 e ekle , üç önceki veriyi ascii_decimal dönüştür 0-9 arasında ise 10^(3-1) katını dgr1 e ekle. dönüşen sayı 0_9 arasında değil durumuyla karşılaşınca soldaki sayıyı hesaplamış olduk bir sonraki aşama olarak sağındaki sayıları hesaplamaya geldi sıra. örnek üzerinden düşünecek olursak dgr1=12 değeri oldu. 10^(3-1) şeklinde yazmamın sebebi tek bir döngü içinde ifade edebilmek için.

**işlemin sağındaki sayıyı bulalım
yıldızın bulunduğu hücreden bir sonraki hücre ascii verisi ise ascii-decimal dönüştür dgr2 e yükle, komut verisi ise komutu yerine getir, yani call komutu varsa dgr1 e direk adreslenen ram verisini yükletip bu aşama sonlandırılır. yoksa bu aşamada devam edilir.
yıldızın bulunduğu hücreden iki sonraki hücreyi ascii_decimal dönüştür 0_9 arasında ise bsmk=2 yükle, üç sonraki hücreyi ascii_decimal dönüştür 0_9 arasında ise bsmk=3 yükle, else gelene kadar döngü bu şekilde ilerliyor. 0_9 arasında olmadığında yani else geldiğinde, dgr2 e yıldızın bulunduğu hücreden bsmk kadar sonraki değerin 10^(bsmk-bsmk) ile çarpılmış halini yüklet, ... 10^(bsmk-(bsmk-1)) çarpılmış halini eklet. döngü bu şekilde bsmk sayısı kadar sürünce dgr2 değerinide elde etmiş oluruz.

dgr1*dgr2 işlemi yapıldıktan sonra * karakterinin bulunduğu hücreye, bulduğumuz işlemin sonucunu kaydettirdiğimiz ram adresinin komut bilgisini yazarız.

işlem yapıldıktan sonra başka * karakteri kalmayana kadar bu işlem sürer. sonra / işlemi için benzer şekilde + için - için ... en son aratılacak başka işlem kalmadığında bu dizide sadece 1 sayı olacak ve diğer değerler geçiştir komut verileri ile dolu olacak. bu sayı sonucumuz olacak.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: MC_Skywalker - 14 Temmuz 2013, 20:00:25
Peki ya kullanıcı 1+2*3+4 işlemini yapmak istiyorsa.

Yani 1ile 2 yi topla 3 le çarp 4 le topla. Bence kullanıcıya () girişi sunulmalı. 1+(2*3)+4 şeklinde giriş yapsın.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 14 Temmuz 2013, 20:11:59
Dediginiz islem gerekiyorsa zaten ( ) kullanilmali. Bahsettigim durum parantez kullanilmamasi durumunda gecerli.

Bir ton kod yazmadan bu isi halletmek istiyorum.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: hasankara - 14 Temmuz 2013, 20:39:47
1+2*3+4 bu işlemi hesaplatmanın yanı sıra kullanıcı ne yapmak istemiş bunu çözümlemek giriyor işin içine bu yüzden kodların şişmesi doğal. dediğim gibi kullanıcı bu şekilde karışık bir dizin girdiğinde ne zaman çarpma ne zaman toplama isteyeceğini bilemediğimiz için önce isteğini kayıt edip daha sonra çözümlemek gerekir.daha sonrasında parantezleri de çözümleyebilen bir yapı haline getirilebilinir.

ancak standart bir hesap makinesi gibi iki değişkeni de kullanıcıdan isteyip yapmak istediği işlemi de isteyip bu şekilde işlem yaptırmak çok daha basit olur.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: Icarus - 14 Temmuz 2013, 21:01:19
Basit bir top down parser yazmanız yeterli, hatta rescusive yapın çok daha kolay olur. Sonra gerekirse iterative çevirin
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 14 Temmuz 2013, 22:10:16
Alıntı yapılan: MrDarK - 14 Temmuz 2013, 15:49:39
Hocam string ifade içersinde operatörleri arayarak yapılamaz mı bu iş ?

Ben olsam oyle yapardım.

Olaylar gercek zamanda gelişecek. Yani bir stringe dizilmiş veriler yok. 1+2*3+4= gibi katakterler sözkonusu değil.

Şu anki durumda, klavyeden basılan nümerik tuşları depolayan bir rutinim var. Bu rutin, ekrana sığdığı sürece gelen nümerik verileri paketliyor.
Eğer ekrana sığmayacak uzunlukta nümerik değerler gelmeye devam ediyorsa yeni gelenleri görmemezlikten geliyor ve + - * / sin cos log vs tuşları bekliyor.

İşte bu noktada öncelik tespit eden rutini devreye girecek ve mevcut verilerle hesap yapılacakmı yoksa bu verilerden bazıları stack'a mı atılacak yorumunu yapacak.


İki adet değişken ve stack array ile bu işi çözecem gibime geldi.

Örnek: 1+2x3-4=

Yeni bir işlem yapıyoruz S=0 yaparak stack indexi sıfırlayalım

var1=1
fonk=+

mantık sonucu

Stack(S)=var1, S=S+1, Stack(S)=fonk, S=S+1

var1=2
fonk=x

yazacagım program diyecekki çarpma işlemi oncelikli

var2=3, var1=var1 fonk var2
var2 = var1, 

Ara işlem bitti. Stackta veri varmı diye bakalım

S sıfırdan faklı olduğuna göre stacta bir şeyler var bakalım neler var

S=S-1, fonk=Stack(S),

Hala S sıfırdan faklı

S=S-1, var1=Stack(S)

var2=var1 fonk var2

gibi bir kod yazayım diyorum. Kimin stack'a atılacağını kimin o an işleneceğini if then mantık silsilesiyle programa yaptırırım diye düşünüyorum.

Düşünce tarzında hata gördüyseniz uyarırsanız sevinirim.


Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: ahmets - 15 Temmuz 2013, 01:13:36
Fikir vermesi için çalışan bir Python kodundan sadece size gerekli bölümleri aldım.
reduce() fonksiyonu içindeki eval(left + operator + right) bölümüne takılmayın. Orasını istediğiniz gibi uygularsınız.
Kodu windows'da test etmek için Python installer http://python.org/ftp/python/3.3.2/python-3.3.2.msi (http://python.org/ftp/python/3.3.2/python-3.3.2.msi) adresinde.


def onClear():
    global erase, text
    opnd, optr = [], []
    text = "0"
    erase = 1           # clear "0" text next

def onOperand(char):
    global erase, text
    if erase:
        text = char
        erase = 0
    else:
        text += char    # else append to opnd

def onOperator(char):
    global erase, text
    shiftOpnd(text)     # push opnd on left
    shiftOptr(char)     # eval exprs to left?
    text = topOpnd()    # push optr, show opnd|result
    print(text)
    erase = 1           # erased on next opnd|'('

def popOpnd():
    value = opnd[-1]                    # pop/return top|last opnd
    opnd[-1:] = []                      # to display and shift next
    return value                        # or x.pop(), or del x[-1]

def topOpnd():
    return opnd[-1]                     # top operand (end of list)

def shiftOpnd(newopnd):                 # push opnd at optr, ')', eval
    opnd.append(newopnd)

def shiftOptr(newoptr):                 # apply ops with <= priority
    while (optr and optr[-1] not in afterMe[newoptr]):
        reduce()
    optr.append(newoptr)                # push this op above result
                                        # optrs assume next opnd erases
def reduce():
    operator       = optr[-1]           # pop top optr (at end)
    [left, right]  = opnd[-2:]          # pop top 2 opnds (at end)
    optr[-1:] = []                      # delete slice in-place
    opnd[-2:] = []
    result = str(eval(left + operator + right))
    if result == None:
        result = left
    opnd.append(result)

def onKeyboard(char):
    global text
    if char != '':
        if char in Operators:
            onOperator(char)
        else:
            if char in Operands:
                onOperand(char)
            else:
                if char == '.':
                    self.onOperand(char)
                if char in 'Ee':        # 2e10, no +/-
                    text += char
                elif char == ' ':
                    onClear()           # spacebar=clear
                elif char == '\b':
                    text = text[:-1]    # backspace


afterMe = {'*': ['+', '-', '='],
           '/': ['+', '-', '='],
           '+': ['='],
           '-': ['='],
           '=': [] }
opnd, optr = [], []
Operators = "+-*/="
Operands  = "abcd0123456789"

erase = 0
text = ""
onClear()

onKeyboard('1')
onKeyboard('+')
onKeyboard('2')
onKeyboard('*')
onKeyboard('3')
onKeyboard('+')
onKeyboard('4')
onKeyboard('=')
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 20 Temmuz 2013, 05:58:14
Bela bir ismis bu hesapmakinesi.

Cok sevdigim eski tip Casio hesap makinesinde

2+-x3= islemi 2x3 anlamina geliyor.

Pespese operator degistirirseniz en son operator kullanilacak demektir.

Bu durumda

2+3+x4=  (2+3) x4  anlamina geliyor.
2+3x+4=  (2+3)+4  anlamina geliyor.

Ara islemlerin sonucu da hesaplanip ekranda gosterileceginden bu ozellikleri birebir saglayacak hesapmakinesi kodlarini yazmak iyice zorlasti.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: RaMu - 20 Temmuz 2013, 07:44:35
casio fx 5500 LA
ve
casio fx-991ES plus
bilimsel hesap makinaları
bu şekildweki yazıma syntax error veriyor,
doğal olarak.

Bence bu tip yazıma izin verilmemeli.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 20 Temmuz 2013, 20:34:03
Elimdeki makineyi (Fx3600P) kurcalayarak makinenin bazi algoritmalarini olusturmaya calisiyorum.

2+3x=11   = 2+ (3x3)

2 + 3 + x = 25 = (2 + 3) x (2 + 3)
2 + 3 -  x = 25 = (2 + 3) x (2 + 3)
2 + 3 x x = 11   
2 + 4 x / = 3

Yorumlariniz neler?
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: RaMu - 20 Temmuz 2013, 20:53:46
2 + 3 x x = 11      = 2 + 3 çarpı 3    = 11
2 + 4 x / = 3         =2 + 4 bölü 4     =  3
olabilir.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 21 Temmuz 2013, 04:55:56
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.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: mistek - 21 Temmuz 2013, 11:12:12
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 :)
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: ttg - 21 Temmuz 2013, 13:50:25
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.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 21 Temmuz 2013, 13:53:45
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 (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]
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 21 Temmuz 2013, 15:40:01
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. 
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: ttg - 21 Temmuz 2013, 23:39:42
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.
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 08 Ağustos 2013, 01:43:48
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?


Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 08 Ağustos 2013, 19:10:55
Bu konuda yorum yapabilecek yokmu?

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

Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 09 Ağustos 2013, 02:35:07
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?
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: RaMu - 09 Ağustos 2013, 02:56:03
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?
Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: z - 09 Ağustos 2013, 03:02:33
Elimdeki hesap makinesi, bahsettiginiz islemlerin sonucunu su sekilde veriyor;

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

Başlık: Ynt: Hesap makinesinde islemlerin oncelik siralamasi
Gönderen: RaMu - 09 Ağustos 2013, 10:22:02
(3-5 mbyte)
http://www.friedemann-seebass.de/dwnld_e.html (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.