Kompüter, Proqram
RPN: alqoritm, metod və nümunələri
RPN dəfə dünyada kompüter proqramçı əsasını təşkil etmişdir. Bu gün belə də məlum deyil. Buna görə də, komik illüstrasiya, kənarda "əks" Polşa kolbasa rulonlarda təsvir, hələ də bəzi bilikli proqramçılar tərəfindən səhv ola bilər. Çox yaxşı zarafat izah, lakin bu halda tam haqlı olacaq.
infix
Bütün proqramçılar və ən tələbələr operatorları istifadə ilə tanış edir. Məsələn, dəyişənlərin x və y istifadə plus əlamət ifadə x + toplama dəyərlər. Az bu, əslində, maşınlar üçün böyük bir problem deyil, infix notation adlı riyaziyyat notation, borc ki faktdır tanınır. input iki dəyərlər sol və sağ qeyd olunur Bu operator alır. proqramlaşdırma notation əlamətləri əməliyyatları ilə isteğe istifadə olunur. Məsələn, x + y nəhayət compiler və infix notation çevirir olan qat (x, y) funksiyası kimi yazıla bilər. Lakin, hər kəs riyaziyyat demək olar ki, hər bir proqramlaşdırma dili daxili mini-dili bir növ yaratmaq hesab ifadələri istifadə etmək çox yaxşı bilir.
formula tərcüməçi
ilk həqiqətən uğurlu Fortran proqramlaşdırma dili halına gəlmişdir belə əsasən, çünki kodu (yayım) çevrilir hesab ifadə (yəni formula ..), bu beləliklə ad - Formula tərcümə. Bundan əvvəl onlar, məsələn, yazmaq funksiyaları şəklində qatlanmış idi ((və çoxaltmaq b, c)). proqramçılar C By B Mutliply A Add kimi şeylər yazmaq idi, çünki avtomatik dönüşüm formula həyata Cobol problemi çox çətin hesab edilmişdir
Infix səhv nədir?
problem operatorları üstün və associativity kimi xüsusiyyətləri var ki, edir. Çünki bu, infix funksiyası müəyyən qeyri-mənasız məsələ olur. Məsələn, vurma bu soldan sağa operatorların performans olacaq kimi ifadə 2 + 3 * 4 4 vurulur 2 və 3 cəminə bərabər deyil deməkdir əlavə və ya toplama işlemi daha yüksək üstünlük var. Əslində, 4 3 çoxaltmaq və Bu misal infix ifadə hesablanması tez-tez operatorları və operands qaydasında dəyişiklik tələb edir ki, göstərir 2. əlavə edin. Bundan əlavə, daha aydın notation baxmaq aşırma istifadə etmək lazımdır. 2 + 3 * 4 + 5 4 3 çoxaltmaq və 2 və 5 əlavə etmək lazımdır o deməkdir ki, çünki Məsələn, (2 + 3) * (+ 5 4), parantez olmadan yazılı edilə bilməz.
Siz operatorları hesablamaq istədiyiniz sifariş uzun xatırlayıram tələb edir. Çünki bu, tez-tez hesab öyrənmək üçün başlamaq tələbələr faktiki əməliyyatların düzgün həyata olsa da, yanlış nəticələr əldə. Bu əzbər fəaliyyət hesabatlarının sifariş öyrətmək lazımdır. Birincisi, fəaliyyət parantez, sonra vurma və bölmə, və nəhayət əlavə və toplama işlemi həyata keçirilməlidir. Amma infix notation yalnız daha əlavə edə bilərsiniz mümkün "kiçik dildə" biri kimi riyazi ifadələr yazılı bir yol yoxdur.
Müraciət və postfix notation
ən məşhur alternativ iki əvvəl və ya onun operands sonra operator qeyd edir. Onlar prefiks və postfix notation kimi tanınır. Məntiqçi Yan Lukasevich 1920-ci ildə birinci icad. O, Polşada yaşayıb, belə rekord Polşa adlanır. Postfix version sırasıyla Reverse Polish notation (ARF) çağırıb. Bu ətraflı onlardan yalnız biri hesab kifayətdir ki, bu iki üsulları arasında yeganə fərq, (sağ və ya sağ sola soldan) rekord oxumaq üçün istiqamətidir. OPN operatoru operands sonra yazılmışdır. Belə ki, ifadə AB + A + B nümunə RPN təmsil
operands limitsiz sayı
notation dərhal üstünlüyü n-adic operator ümumiləşdirir ki, və infix notation iki operands ilə çalışır ki, yalnız həqiqətən, t. E. yalnız binar əməliyyatlar üçün mahiyyət uyğun var. Məsələn, ABC @ Bu halda A, B və C. maksimum dəyəri var triadic işarəsi istifadə tərs Polşa olduğunu ifadə edərək, operator onun sol 3 operand fəaliyyət göstərir və bir funksiyası zəng @ uyğundur (A, B, C). Əgər belə ki, kimi @ e.ə. və ya bir şey kimi Infix kimi @ simvolu yazmaq üçün cəhd edin, bu, sadəcə iş deyil ki, aydın olur.
əmri verdiyi prioritet
RPN operatorların prioritet onların görünüşü sifarişi ilə təmsil oluna bilər ki, başqa üstünlüyü var. simvol əməliyyatları infix notation dönüşüm asanlaşdırmaq kimi daxil edilə bilər, baxmayaraq ki, eyni zamanda, aşırma lazımdır heç vaxt. Məsələn, AB + C * - birmənalı ekvivalent (A + B) * C, vurma vurma üçün ikinci operand verir ifa Bundan əlavə, qədər hesablanır bilməz. > (AB +) * C - -> (A + B) * C. hesablanmış AB + C * bir-bir operator, biz AB + C * almaq əgər ki,
hesablanması alqoritmi
OPN operator dəlilləri iki dəyərlər onun sol yazılı kimi görür ki, bir funksiyası kimi eyni görünür. onun hesablanması qaydada yığını əməliyyatları uyğundur və təhlil üçün ehtiyac aradan Bundan əlavə, o, proqramlaşdırma dilləri istifadə üçün təbii notation edir. Məsələn, ifadə 5 + 6 * 7 arrester 5, 6, 7 * + kimi görünür, və soldan sağa bu tarama sadəcə hesablanır bilər və bir yığın dəyərlər yazın. kompüter yaddaş yuxarı element 2 tərəfindən seçilmiş əməliyyat ümumi əlaməti, operator istifadə olunur zaman nəticə xatirəsinə döndü. Zaman hesablanması ifadə son nəticə yığını üst olacaq.
Məsələn:
- S = () 5, 6, yığını yerləşdirilmiş 7 * + 5.
- yığını yerləşdirilmiş S = (5) 6, 7, *, + 6.
- S = (5, 6), 7 * 7 + yığını yer.
- S = (5, 6, 7) * 2 + yığını istifadə * dəyərlər seçin və yığını nəticəsində yer.
- S = (5, 6 * 7) = (5, 42) + tətbiq və yığını nəticəsində qoymaq, yığını seçilmiş 2 dəyərlər.
- S = (+ 42 5) = (47) hesablanması başa, nəticə yığını üst saxlanılır.
Bu alqoritm dəfələrlə RPN edə bilərsiniz, lakin hər dəfə necə olursa olsun kompleks hesab ifadə işləyəcək.
OPN və baca yaxından bağlıdır. Bu, misal Reverse Polish notation dəyəri hesablamaq üçün yaddaş istifadə etmək necə nümayiş etdirir. Az Aşkar kəskin böyrək çatışmazlığı standart infix ifadə konvertasiya yığını istifadə edə bilərsiniz ki.
proqramlaşdırma dilləri nümunələri
Bu (proqramın hissəsi göstərir) kimi Pascal RPN həyata keçirilir.
mö'cüzə sayı və ya işarə əməliyyat olub proseduru adlı dövrü, nömrələri və operatorları oxumaq üçün. Birinci halda, yığını saxlanılır dəyəri və iki üst yığını nömrələri müvafiq fəaliyyət ikinci həyata keçirilir və nəticə saxlanılır.
toktype: = num;
(S) oxumaq;
c [ '+', '-' '*', '/'] əgər başlayır
sonra eoln əgər cn = '' başqa oxumaq (cn);
əgər cn = '' sonra
bir işi
'+': Toktype: = əlavə; '-': toktype: = sub;
'*' Toktype: = mul; '/': Toktype: = div
son
başqa başlayır
= -1 başqa səhv:; = c <> '+' - '' sonra SGN a = əgər
ilə: = cn
son
son;
(Səhv) və (toktype = num) sonra getnumber olduqda;
toktype <> num sonra başlamaq əgər
y = pop; x: = pop;
əgər sonra səhv
işi toktype
əlavə edin: z = x + y; sub: z = x-y; mul: z = x * y; div: z = x / y
son
push (z);
C-icra RPN (proqramı göstərilən hissəsi):
{(; S w s = strtok (0) s = strtok (s), w) üçün
a = strtod (s & e);
əgər (e> s) push (a);
# müəyyən rpnop (x) printf ( "% c", * s), b = pop (), a = pop (), push (x)
başqa, əgər (* s == '+') rpnop (a + b);
başqa, əgər (* s == '-') rpnop (a - b);
Başqa (* s == '*') rpnop (a * b) əgər;
başqa, əgər (* s == '/') rpnop (a / b);
#undef rpnop
}
hardware tətbiq
O günlərdə, kompüter texnologiyası çox bahalı idi, bu surge yakalayıcılar istifadə insanları məcbur etmək yaxşı bir fikir idi. 1960-ci illərində. İndi kimi, Reverse Polish notation iş kalkulyatorlar almaq mümkün idi. 2 əlavə etmək üçün və onların 3 2, sonra 3 daxil olmalıdır və "plus" düyməsini basın. İlk baxışdan, operator giriş operands yadda mürəkkəb və çətin görünürdü, lakin bir müddət sonra bəzi düşüncə bu şəkildə asılılığı və başqaları belə mürəkkəb və belə məhduddur axmaq Infix, israr niyə anlaya bilmədim.
Burroughs şirkət hətta yığını istisna olmaqla, başqa heç bir yaddaş idi mainframe inşa. maşın edir, yalnız bir şey - mərkəzi yığını alqoritmləri və üsulları RPN tətbiq. fəaliyyətə bütün yuxarı n dəyərlərə aiddir yakalayıcılar operatorları, hesab edilmişdir. Məsələn, daha ümumi memarlıq ilə rəqabət kifayət qədər sürətli deyil komanda yığını üst qayıt Ünvan aldı və s. D. belə bir maşın memarlıq sadə idi, lakin. Bir çox, lakin hələ də hər proqram OPN ifadə etdi kompüter üçün belə bir sadə və zərif yanaşma, onun davam tapdı ki, təəssüf.
RPN ilə bir dəfə kalkulyatorlar məşhur idi və bəzi insanlar hələ də onlara üstünlük verir. Bundan əlavə, onlar belə dördüncü kimi bir yığın yönümlü dil, inkişaf etmişdir. Bu gün az istifadə, lakin onun keçmiş istifadəçilər hələ nostalji edir.
Belə ki, Reverse Polish kolbasa haqqında mənası zarafatlar nədir?
biz kolbasa operatoru infix notation, bu şərti isti it kimi roll ərzində olmalıdır ki, güman bilər. RPN iki yarıya indirir hesablanması sonra hazır therebetween almaq hüququ yerləşir. İndi çətin hissəsi gəlir - xardal. O t, kolbasa artıq. E. Onsuz unary operator kimi hesablanır. Bu xardal da uncalculated kimi göstərilməlidir və buna görə də kolbasa sağ üçün köçürülüb lazımdır ki, iman ... Amma bu, mümkün deyil, bu çox böyük yığın tələb ...
Similar articles
Trending Now