BilgisayarlarYazılım

RPN: algoritma, yöntemler ve örnekler

RPN kez dünyada bir bilgisayar programcısı temelini oluşturmuştur. Bugün o kadar iyi bilinmemektedir. Bu nedenle, komik illüstrasyon, dışarıda bir "ters" Polonya sosis rulo resmeden, hala bazı bilgili programcılar tarafından yanlış anlaşılabilir. Pek iyi şaka açıklamak, ancak bu durumda tamamen haklı olacaktır.

telkin etmek

Tüm programcılar ve çoğu öğrenci operatörlerin kullanımına aşina. Örneğin, değişkenlerin x ve y kullanılan artı işareti için ifade x + toplam değerleri. Az da bu aslında, makineleri için büyük bir sorundur, infix notasyonu olarak adlandırılan matematik notasyonu, ödünç gerçeğidir da bilinir. giriş iki değer sol ve sağ kaydedilir gibi bu operatör alır. Programlamada notasyonu işaretler operasyonları ile isteğe kullandı. Örneğin, x + y de sonunda derleyici ve infix gösterimini dönüştürür kat yeri (x, y) 'in bir fonksiyonu olarak yazılabilir. Ancak, herkes matematik hemen her programlama dilinde iç mini dilin bir tür oluşturmak aritmetik ifadeler kullanmamayı çok iyi bilir.

formül çevirmen

İlk gerçekten başarılı Fortran programlama dili haline gelmiştir böylece büyük ölçüde çünkü kodunda (yayın) dönüştürülür aritmetik ifade (yani formül ..), bunun nedenle adı - FORmula çeviri. Bundan önce de, örneğin, geç işlevler biçiminde katlanmış zorunda ((çoğalırlar b, c)). programcılar C By B Mutliply A ekleyin gibi şeyler yazmak zorunda çünkü otomatik dönüştürme formülü uygulanması COBOL probleminde çok zor kabul edildi

Infix nesi var?

operatorlerden önceliği ve birleşim gibi özelliklere sahip olmasıdır. Bu nedenle, infix fonksiyonunun tanımı önemsiz olmayan bir görev haline gelir. Örneğin, çarpma bu soldan sağa operatörlerin performansında olacaktır ekspresyon 2 + 3 * 4, 4 ile çarpılarak, 2 ve 3 toplamına eşit olmadığı anlamına gelir ekleme ya da çıkarma daha yüksek önceliğe sahiptir. Aslında, 4 ile 3 çarpma ve Bu örnek, çatı ve çatı ifade hesaplanması genellikle operatörler ve işlenen için bir değişikliği gerektirir göstermektedir 2. ekleyin. Buna ek olarak, daha net notasyonu bakmak için parantez kullanmak gerekir. 2 + 3 * 4 + 5 Eğer 4'e 3 çarpın ve 2 ve 5 eklemem gerekiyor demektir çünkü Örneğin, (2 + 3) * (+ 5 4), parantez olmadan yazılamaz.

Eğer operatörlerini hesaplamak istediğiniz düzen uzun hatırlamak gerekir. Bu nedenle, sık sık, aritmetik öğrenmek başlamak öğrencilerin gerçek operasyonlar doğru olarak yapılmasını bile yanlış sonuçlar elde ederler. Ezbere eylem tabloların sırasını öğretmek gereklidir. İlk olarak, hareket parantez, daha sonra çarpma ve bölme, ve son olarak, toplama ve çıkarma gerçekleştirilebilir olmalıdır. Ama infix notasyonu sadece daha eklenebilir mümkün "küçük dil" biri olarak matematiksel ifadeleri yazma başka bir yolu yoktur.

Önek ve postfix gösterimde

en iyi bilinen alternatif İki önce veya işlenenlerinden sonra operatöre kaydetmektir. Onlar önek ve sonek gösterimde olarak bilinir. Mantıkla Yan Lukasevich 1920 yılında ilkini icat etti. O Polonya'da yaşamış, bu nedenle kayıt Lehçe denir. Postfix versiyonu sırasıyla Ters Polonya Notasyonu (ARF) olarak adlandırılan. o ayrıntılı olarak bunlardan sadece birini düşünün yeterlidir böylece bu iki yöntem arasındaki tek fark, (sağa veya sağdan sola soldan) kaydı okumak için yöndür. OPN operatörü işlenenlerinden sonra yazılır. Böylece, ekspresyonu AB + A + B için bir örnek RPN temsil

İşlenenlerin Sınırsız sayıda

gösterimde derhal avantajı n-adic operatörü özetler olması ve infix notasyonu İki işlenen çalışan tek gerçekten t., E. sadece ikili operasyonlar için doğal olarak uygun mudur. Örneğin ABC @ operatörü üç terimin kendisinin sol hareket Bu durumda, A, B ve C maksimum değeri ve bir işlev çağrısı @ tekabül üçlü işareti kullanılarak ters Polonya ekspresyon (A, B, C). Ki böyle bir @ BC veya bir şey olarak Infix gibi @ sembolünü yazmak için denerseniz, bu sadece çalışmaz ortaya çıkıyor.

sipariş verdiği öncelik

RPN operatörlerin öncelik görünüm sıralamasında tarafından temsil edilebilmesi başka avantajı içinde bulunmaktadır. karakterleri işlemleri infix gösterimde dönüşümü kolaylaştırmak için onlar da sisteme dahil edilebilir Aynı zamanda, parantez gerek kalmaz. Örneğin, AB + C * - açık eşdeğer (A + B) * C, çarpma çoğalması için ikinci bir işlenen verir gerçekleştirilen ekleme kadar hesaplanamaz, böylece. > (AB +) ° C - -> (A + B) * C hesaplanan AB + C * her seferinde bir operatör tarafından, biz AB + C * elde Yani, eğer

hesaplama algoritması

OPN operatör argümanlar iki değer onu solda yazıldığı gibi alan bir fonksiyon olarak aynı görünüyor. Bunu hesaplama yöntemi, küme işlemleri için uygun olan ve ayrıştırma için ihtiyaç ortadan kaldırılır Buna ek olarak, bu, programlama dilleri kullanım için doğal bir gösterim olup. Örneğin ekspresyon 5 + 6 * 7 tutucu 5, 6, 7 * + olarak görünür ve soldan sağa doğru bu tarama basitçe hesaplanabilir ve bir yığın değerleri mal. bilgisayar belleği üst eleman 2 tarafından seçilen bir operasyon genel işareti, operatör kullanılır ve her sonucu hafızada döndü. Tüm hesaplama ekspresyonunun sonucudur yığının en olacaktır.

Örneğin:

  • S = () 5, 6, önceden tartılmış 7 *, + 5.
  • tartılmış S = (5) 6, 7, *, + 6.
  • S = (5, 6), 7 *, 7 + yığın yerleştirin.
  • S = (5, 6, 7), * 2 + yığını, kullanım * değerleri seçer ve yığındaki sonucu yer.
  • S = (5, 6 * 7) = (5, 42) + + uygulanır ve yığın sonucu koymak için, yığın seçilen 2 değerleri.
  • S = (+ 42 5) = (47) hesaplama tamamlandığında, sonuç yığının en depolanır.

Bu algoritma defalarca RPN kontrol edilebilir, ancak her seferinde ne kadar karmaşık aritmetik ifade, çalışacaktır.

APN ve yığınlar yakından bağlantılıdır. Bu örnek ters Polonyalı notasyonu değerini hesaplamak için hafızayı nasıl kullanılacağını göstermektedir. Daha az belirgin akut böbrek yetmezliği standart infix ifadesini dönüştürerek, yığın kullanabilir olmasıdır.

Programlama dillerinin örnekleri

Bu (programın bir parçasını gösterir) gibi Pascal RPN fark etti.

belirteç sayı veya imza işlemi olup olmadığını belirler prosedür adı döngüsü, sayılar ve operatörler okunması. İlk durumda, istif halinde depolanır değer ve iki üst yığın numarası karşılık gelen eylem ikinci gerçekleştirilir ve sonuç depolanır.

toktype: = num;

(Ler) okuma;

c [ '+', '-', '*', '/'] o zaman başlar

Daha sonra eoln ise CN: = '' Başka bir okuma (CN);

Eğer CN = '' daha sonra

Bir örneği

'+': Toktype: = ekleyin; '-': toktype: = alt;

'*': Toktype: = mul; '/': Toktype: = div

başka başlayacak

= -1 başka hata:; = C <> '+' - '' o sgn a = halinde

ile: = CN

uç uca gelir;

(Hata) ve (toktype = num) daha sonra getnumber ise;

toktype <> num sonra başlarsanız

y = açılır; X: = açılır;

değilse o zaman hata

vaka toktype

ekleyin: z: = x + y; alt: z: = x-y; mul z: = x * y; div z: = X / Y

itme (Z);

Cı-uygulama RPN (programın gösterilen kısım):

{(; S ağırlık s = strtok (0) s = strtok (s), w) için

a = strtod (s, e)

Eğer (E> s) itme, (a);

#define rpnop (x) Printf ( "% c:" * lar), b = açılır (), a = açılır (), itme (x)

Başka halinde (* s == '+') rpnop (a + b);

Başka halinde (* s == '-') rpnop (A - B);

Başka bir (* s == '*') rpnop (a * b) ise;

Başka halinde (* s == '/') rpnop (a / b);

#undef rpnop

}

donanım yürütülmesi

O günlerde, bilgisayar teknolojisi çok pahalı iken, bu dalgalanma siperleri kullanmaya zorlamak için iyi bir fikir düşünüldü. 1960-ler. Şimdi olduğu gibi, ters Polonyalı gösterimde çalışmak hesap, satın almak mümkündü. 2 eklemek için ve 3 tanesi 2, daha sonra 3 girmelisiniz ve "artı" butonuna basın. İlk bakışta, operatöre giriş operandları hatırlamak karmaşık ve zor görünüyordu, ama bir süre sonra bazı düşünce tarzının bağımlısı ve diğerleri çok karışık ve böylece sınırlıdır aptal Infix, ısrar niye anlayamadık.

Burroughs şirket bile yığını dışında başka hiçbir şey hatırlamıyor bir anabilgisayar, inşa ettiler. makine kılan tek şey - merkezi yığını algoritmalar ve yöntemler RPN uygulanır. faaliyetlerinin tüm üst n değerler için geçerlidir arestörler operatörleri, olarak kabul edildi. Örneğin, daha yaygın mimarileri ile rekabet etmek yeterince hızlı takım yığının tepesinden Dönüş adresini aldı ve böyle devam eder. D. Böyle bir makinenin mimarisi basitti ama. Ancak bunların pek çoğunun hala her program OPN'ye bir ifadesi oldu işlem için böyle bir basit ve şık bir yaklaşım, onun sürdürülmesini bulundu gerçeğini pişmanım.

RPN'de Bir zaman hesap makineleri popüler olduğunu ve bazı insanlar hala onları tercih vermek. Buna ek olarak, bu tür Forth gibi bir yığın odaklı dilleri, geliştirdi. Bugün biraz kullanılmış ama eski kullanıcılardan hala nostaljik.

Yani Ters Polonya sosis hakkında anlam şakalar nedir?

Biz sosis operatörü infix notasyonu, bu geleneksel hot dog olduğu gibi rulo içinde olmalıdır olduğunu varsayarsak. RPN iki yarısı hesaplamada sonra hazır aralannda olsun sağ yer almaktadır. Şimdi zor kısım geliyor - hardal. O t, sosis zaten. E. Zaten tekli operatör olarak hesaplandı. Hardal da uncalculated olarak gösterilmesi gereken ve bu nedenle sosis sağına taşınmış gerektiğine inanılır ... Ama mümkün olduğu, bunun çok büyük yığınını gerektirir ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 tr.atomiyme.com. Theme powered by WordPress.