KomputerLunak

RPN: algoritma, cara lan conto

RPN yen kawangun basis saka Programmer komputer ing donya. Dina iku wis ora patiya kondhang. Mulane, ilustrasi komik, ingkang nggambaraken "malik" Polandia sosis nggulung njaba, isih bisa misunderstood dening sawetara programer pinter. Ora banget uga nerangake guyon, nanging ing kasus iki bakal kebak sabdho.

infix

Kabeh programer, lan paling mahasiswa sing menowo nggunakake operator. Contone, angka expression x + summation kanggo variabel x lan y digunakake plus tandha. dikenal kurang uga kasunyatan sing iki dijupuk saka seratan matématika, disebut notasi infix, ing kasunyatan, iku masalah amba kanggo mesin. operator ditampa minangka input loro nilai sing direkam ing sisih kiwa lan tengen. Ing program seratan digunakake optionally karo operasi pratandha. Contone, x + y bisa ditulis minangka fungsi saka melu (x, y), kang compiler lan pungkasanipun ngowahi seratan infix. Nanging, everyone mangerténi math banget apik ora nggunakake ungkapan aritmetika, kang mbentuk jenis internal mini-basa ing meh saben programming language.

rumus translator

Pisanan tenan sukses programming language Fortran wis dadi umumé amarga expression aritmetika (IE rumus ..) Iku diowahi (Broadcast) ing kode, Empu jeneng iku - Formula Translation. Sadurunge sing, padha kanggo nulis, contone, lempitan ing wangun fungsi (lan Multiply (b, c)). Ing masalah COBOL saka penerapan rumus konversi otomatis iki dianggep angel amarga ing programer wis nulis iku kaya Tambah Kanggo B Mutliply Miturut C.

Apa salah karo infix?

Masalah iku, sing operator kudu kayata precedence lan associativity. Amarga iki, definisi fungsi infix dadi tugas sangat. Contone, ping, wis precedence luwih saka tambahan utawa suda, kang tegese ing expression 2 + 3 * 4 ora padha kanggo jumlah saka 2 lan 3, ping pingan dening 4, kang bakal ing kinerja saka operator saka kiwa menyang tengen. Ing kasunyatan, Multiply 3 4 lan nambah 2. Contone nggambaraké sing pitungan expression infix mbutuhake owah-owahan ing urutan operator lan operands. Kajaba iku, iku perlu nggunakake penyonggo kanggo katon seratan luwih cetha. Contone, (2 + 3) * (4 + 5) ora bisa ditulis tanpa kurung, amarga 2 + 3 * 4 + 5 tegese sampeyan kudu Multiply 3 4 lan nambah 2 lan 5.

Ing urutan sing pengin ngetung operator mbutuhake dawa elinga. Amarga iki, murid sing miwiti sinau aritmetika, kerep njaluk asil salah, malah yen operasi nyata sing dileksanakake bener. Sampeyan perlu kanggo mulang urutan statements tumindak dening manah. First, tumindak kudu digawa metu ing kurung, banjur ping lan divisi, lan pungkasanipun ugi suda. Nanging ana cara liya nulis ungkapan matématis seratan infix mung salah siji saka bisa "basa cilik" sing bisa ditambahake kanggo liyane.

Ater-ater lan postfix seratan

Two saka alternatif paling kondhang kanggo ngrekam operator sadurunge utawa sawise operands sawijining. Kutha iki dikenal minangka ater-ater lan postfix seratan. Logician Yan Lukasevich nemokke siji ing taun 1920. Dheweke urip ing Polandia, supaya rekaman diarani Polandia. versi Postfix, mungguh, disebut Reverse Polandia Notasi (Arf). Bentenipun mung antarane loro-cara iku arah kang kanggo maca rekaman (saka kiwa menyang tengen utawa tengen ngiwa), supaya suffices kanggo nimbang ing rinci mung siji mau. Operator OPN ditulis sawise operands sawijining. Mangkono, ing expression AB + nggantosi conto RPN kanggo A + B.

Unlimited Jumlah operands

Ing kauntungan langsung saka seratan iku ngringkes operator n-adic lan seratan infix punika saestu mung dianggo karo loro operands, t. E. Apa sipate cocok mung kanggo operasi binar. Contone, ABC @ punika expression Polandia kuwalik nggunakake tandha triadic kang angka maksimum A, B, lan C. Ing kasus iki operator tumindak ing kiwa telu operand dhewe lan cocok kanggo fungsi telpon @ (A, B, C). Yen nyoba kanggo nulis @ simbol minangka infix, kayata A @ SM utawa kaya sing, iku dadi langit sing mung ora bisa.

Prioritas diwenehi dening urutan

RPN wis liyane kauntungan ing prioritas saka operator bisa dituduhake dening supaya katon. Sanalika ora perlu penyonggo, sanajan padha bisa uga minangka operasi karakter kanggo nggampangake Zu seratan infix. Contone, AB + C * - unambiguous padha (A + B) * C, supaya pingan ora bisa diwilang nganti Kajaba dileksanakake, kang menehi operand liya kanggo pingan. Sing, yen etung AB + C * dening siji operator ing wektu, kita njaluk AB + C * -> (AB +) * C -> (A + B) * C.

algoritma pitungan

Operator OPN katon padha minangka fungsi sing njupuk minangka bantahan loro nilai ditulis ing kiwa. Kajaba iku, iku seratan alam dienggo ing basa program, kaya adaté pitungan sawijining cocok kanggo operasi tumpukan lan perlu kanggo parsing wis ngilangi. Contone, ing arrester ing expression 5 + 6 * 7 bakal katon minangka 5, 6, 7 *, +, lan iku bisa diwilang mung dening mindhai saka kiwa menyang tengen lan nulis angka ing tumpukan. Kapan tandha umum saka operasi, dipilih dening unsur ndhuwur 2 saka memori komputer, operator digunakake lan asil bali kanggo memori. Nalika asil pungkasan ing expression pitungan bakal ing ndhuwur tumpukan.

Contone:

  • S = () 5, 6, 7, *, + 5 diselehake ing tumpukan.
  • S = (5) 6, 7, *, + 6 diselehake ing tumpukan.
  • S = (5, 6), 7 *, 7 + nyeleh tumpukan.
  • S = (5, 6, 7), * 2 + milih angka saka tumpukan, nggunakake * lan nyeleh asil ing tumpukan.
  • S = (5, 6 * 7) = (5, 42) + 2 nilai milih saka tumpukan, kanggo aplikasi + lan sijine asil ing tumpukan.
  • S = (5 + 42) = (47) pitungan wis rampung, asil wis disimpen ing ndhuwur tumpukan.

algoritma iki bisa dicenthang RPN bola-bali, nanging saben wektu iku bisa, ora prakara cara Komplek ekspresi aritmetika.

OPN lan tumpukan sing rapet disambung. Contone nduduhake carane nggunakake memori kanggo ngetung angka kang ing seratan Polandia kuwalik. Kurang cetha sing bisa nggunakake tumpukan, nindakake expression infix standar ing ngenani babagan ginjel Gagal leukemia.

Conto basa program

Pascal RPN temen maujud kaya iki (nuduhake bagean program).

Kanggo maca angka lan operator ing siklus disebut prosedur, kang nemtokake apa nomer utawa tandha koin operasi. Yen mengkono, nilai disimpen ing tumpukan, lan liya saka nomer loro tumpukan ndhuwur cocog ajeg dileksanakake lan asil wis disimpen.

toktype: = num;

maca (s);

yen c ing [ '+', '-', '*', '/'] banjur miwiti

yen eoln banjur cn: = '' liya maca (cn);

yen cn = '' banjur

cilik saka

'+': Toktype: = nambah; '-': toktype: = sub;

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

pungkasan

liya miwiti

menawa = '-' banjur LGK: = -1 liya kesalahan: = c <> '+';

karo: = cn

pungkasan

mungkasi;

yen (ora salah) lan (toktype = num) banjur getnumber;

yen toktype <> num banjur miwiti

y = pop; x: = pop;

yen ora kesalahan banjur

cilik toktype saka

nambah: z: = x + y; sub: z: = x-y; mul: z: = x * y; div: z: = x / y

pungkasan

push (z);

C-implementasine RPN (ditampilake bagéan saka program):

kanggo (s = strtok (s, w); s; s = strtok (0, w)) {

a = strtod (s, & e);

yen (e> s) push (a);

#define rpnop (x) printf ( "% c:", * s), b = pop (), a = pop (), push (x)

liya yen (* s == '+') rpnop (a + b);

liya yen (* s == '-') rpnop (a - b);

liya yen (* s == '*') rpnop (a * b);

liya yen (* s == '/') rpnop (a / b);

rpnop #undef

}

nindakake hardware

Ing dina sing, nalika teknologi komputer banget larang, iki panginten apike kanggo meksa wong nggunakake arresters mundhak. Ing taun 1960-ies., Minangka saiki, iku bisa kanggo tuku kalkulator, kang bisa ing seratan Polandia kuwalik. Kanggo nambah 2 lan 3 saka wong-wong mau kudu ngetik 2, banjur 3, banjur pencet tombol "plus". Ing kawitan marketing, ing operands input kanggo operator ketoke rumit lan angel kanggo elinga, nanging sawise nalika sawetara sing ketagihan kanggo cara iki saka pikiran lan ora ngerti sebabe wong nandheske ing infix bodho, kang dadi rumit lan diwatesi.

perusahaan Burroughs malah mbangun mainframe, kang wis ora memori liyane, kajaba tumpukan. Ing bab mung sing ndadekake mesin - Applied kalkulus lan cara RPN menyang tumpukan tengah. Kabeh sawijining operasi iki dianggep minangka operator arresters, kang ditrapake kanggo angka n ndhuwur. Contone, tim njupuk Bali Address saka ndhuwur tumpukan, lan ing. D. Arsitèktur mesin kuwi ora prasaja, nanging ora cukup cepet kanggo saingan karo arsitektur liyane umum. Akeh, Nanging, isih Getun kasunyatan sing pendekatan kuwi prasaja lan elegan kanggo komputerisasi ngendi saben program iki ekspresi OPN, ketemu tutugan sawijining.

Siji wektu kalkulator karo RPN padha populer, lan sawetara wong isih menehi wong pilihan. Kajaba iku, padha gawe basa tumpukan-oriented, kayata Kémah. Dina iku sethitik digunakake, nanging isih wangsulane Lasirin saka mantan pangguna kang.

Dadi apa makna Lawakan babagan sosis Reverse Polish?

Yen kita nganggep yen operator saka sosis, notasi infix, iku kudu ing muter kaya ing asu panas conventional. The RPN dumunung ing tengen loro halves njaluk therebetween siap sawise pitungan. Saiki rawuh ing sisih angel - sawi. Dheweke wis ing sosis, t. E. Wis diwilang minangka operator unary. Punika pitados bilih sawi ngirim uga dituduhake minangka uncalculated lan Mulane kudu dipindhah menyang tengen sosis ... Nanging bisa, iki bakal mbutuhake tumpukan banget akeh ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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