Komputer, Software
RPN: algoritma, métode jeung conto
RPN sakali ngawangun dasar hiji programmer komputer di dunya. Dinten eta teu jadi ogé dipikawanoh. Ku alatan éta, ilustrasi komik, ngagambarkeun hiji "ngabalikeun" Polandia sosis gulungan luar, masih bisa ngartikeun ku sababaraha programer pangaweruh. Teu kacida alusna ngajelaskeun lulucon, tapi dina hal ieu mah bakal pinuh diyakinkeun.
selapan
Kabéh programer, sarta paling mahasiswa anu akrab jeung pamakéan operator. Contona, nilai ekspresi x + jumlahna keur variabel x jeung y dipaké tambah tanda. dipikawanoh kirang ogé mangrupa kanyataan yén ieu injeuman ti notasi matematik, disebut notasi selapan, kanyataanna, masalah badag pikeun mesin. operator ieu narima sakumaha input dua nilai anu dirékam dina kénca jeung katuhu. Dina programming notasi dipaké optionally kalayan operasi tanda. Contona, x + y bisa ditulis salaku fungsi tina melu (x, y), numana kompiler sarta ahirna ngarobah notasi selapan. Sanajan kitu, sadaya jelema weruh math di teuing alus teu make ungkapan arithmetic, nu ngabentuk jenis internal mini basa ampir unggal basa programming.
rumus penerjemah
Kahiji bener suksés basa programming Fortran geus jadi jadi sakitu legana sabab babasan arithmetic (ie rumus ..) Ieu dirobah (siaran) dina kode, ku kituna nami eta - Rumus Tarjamahan. Saacanna éta, maranéhanana kungsi nulis, contona, narilep dina bentuk fungsi (jeung balikeun (b, c)). Dina masalah COBOL tina ngalaksanakeun Rumus konvérsi otomatis dianggap hésé pisan sabab éta programer kungsi nulis hal kawas Tambahkeun A Ka B Mutliply Ku C.
Anu mungkar jeung anu selapan?
Masalahna, yén operator mibanda pasipatan kayaning precedence na associativity. Kusabab ieu, ngartikeun fungsi selapan janten tugas non-trivial. Contona, multiplication boga precedence luhur batan tambahan atawa pangurangan, nu hartina babasan 2 + 3 * 4 teu sarua jeung jumlah 2 sarta 3, dikali 4, sabab bakal jadi dina kinerja operator ti kénca ka katuhu. Kanyataanna, kalikeun 3 ku 4 sarta nambahan 2. conto ieu illustrates yén itungan babasan selapan mindeng merlukeun parobahan dina urutan tina operator na operands. Sajaba ti éta, éta kudu maké braces kasampak notasi nu leuwih jelas. Contona, (2 + 3) * (4 + 5) teu bisa ditulis tanpa kurung, sabab 2 + 3 * 4 + 5 ngandung harti yén anjeun kedah kalikeun 3 ku 4 sarta nambahan 2 sarta 5.
Urutan nu rék ngitung operator merlukeun lila apal. Kusabab ieu, siswa anu mimiti diajar arithmetic, mindeng meunang hasil salah, sanajan operasi sabenerna anu dipigawé neuleu. Perlu ngajarkeun urutan tina pernyataan Peta ku haté. Heula, peta nu kudu dilaksanakeun dina jero kurung, teras multiplication na division, sarta tungtungna tambahan sarta pangurangan. Tapi aya cara sejen nulis ungkapan matematik sakumaha notasi selapan téh ukur salah sahiji kamungkinan "basa leutik" nu bisa ditambahkeun kana leuwih.
Awalan jeung postfix notasi
Dua sahiji alternatif pang alusna-dipikawanoh nyaéta pikeun ngarekam operator saméméh atawa sanggeus operands na. Éta téh dipikawanoh salaku awalan jeung postfix notasi. Logician Yan Lukasevich nimukeun hiji munggaran dina taun 1920. Anjeunna mukim di Polandia, jadi catetan disebut Polandia. Vérsi Postfix masing-masing disebut Reverse Polandia notasi (ARF). Hijina bédana antara dua padika ieu téh arah nu maca catetan nu (ti kénca ka katuhu atawa ka katuhu pikeun kénca), jadi eta suffices mertimbangkeun di jéntré ukur salah sahijina. Operator OPN ieu ditulis sanggeus operands na. Ku kituna, babasan AB + ngagambarkeun conto RPN keur A + B.
Jumlah taya operands
Kauntungan saharita di notasi téh nya éta summarizes operator n-adic sarta notasi selapan estu ukur gawéna dua operands, t. E. Dupi inherently cocok ukur pikeun operasi binér. Contona, ABC @ teh ekspresi Polandia sabalikna maké tanda triadic nu ngarupakeun nilai maksimum A, B jeung C. Dina hal ieu operator teh tindakan dina kénca ti tilu operand didinya jeung pakait jeung fungsi panggero @ (A, B, C). Lamun coba pikeun nulis @ simbol saperti selapan, kayaning A @ SM atawa hal kawas éta, janten jelas nu eta ngan saukur teu jalan.
The prioritas dirumuskeun ku ordo
RPN boga kaunggulan sejen di yén prioritas ti operator bisa digambarkeun ku urutan tina penampilan maranéhanana. Dina waktu nu sarua pernah kudu braces, sanajan maranehna bisa jadi kaasup salaku operasi karakter pikeun mempermudah konversi ti notasi selapan. Contona, AB + C * - unambiguous sarimbag (A + B) * C, kitu multiplication nu teu bisa diitung dugi ditambah dipigawé, anu méré operand kadua pikeun multiplication. Hartina, lamun diitung AB + C * ku hiji operator dina hiji waktu, urang meunang AB + C * -> (AB +) * C -> (A + B) * C.
algoritma itungan
Operator OPN Sigana sami salaku fungsi nu nyokot salaku alesan dua nilai ditulis dina kénca nya. Sajaba ti éta, nyaéta notasi alam keur dipake dina basa programming, sakumaha tata cara itungan na pakait jeung operasi tumpukan jeung kabutuhan FITML anu ngaleungitkeun. Contona, dina arrester dina ekspresi 5 + 6 * 7 bakal némbongan salaku 5, 6, 7 *, +, sarta eta bisa diitung saukur ku scanning ti kénca ka katuhu jeung nulis nilai dina tumpukan. Iraha tanda umum operasi, dipilih ku unsur luhur 2 tina mémori komputer, operator dipaké tur hasilna balik ka memori. Lamun hasil ahir ekspresi itungan bakal di luhureun tumpukan éta.
Contona:
- S = () 5, 6, 7, *, + 5 disimpen dina tumpukan nu.
- S = (5) 6, 7, *, + 6 disimpen dina tumpukan nu.
- S = (5, 6), 7 *, 7 + nempatkeun tumpukan éta.
- S = (5, 6, 7), * 2 + milih nilai tina tumpukan, pamakéan * sarta nempatkeun hasilna dina tumpukan nu.
- S = (5, 6 * 7) = (5, 42) + 2 nilai dipilih ti tumpukan, nepi ka nerapkeun + teras nahan hasilna dina tumpukan nu.
- S = (5 + 42) = (47) itungan geus réngsé, hasilna disimpen dina luhureun tumpukan éta.
Algoritma ieu bisa dipariksa RPN sababaraha kali, tapi tiap waktu eta bakal bisa dipaké, euweuh urusan kumaha komplek ekspresi arithmetic.
OPN na tumpukan anu raket numbu. Contona kieu mendemonstrasikan cara ngagunakeun mémori keur ngitung nilai tina notasi Polandia sabalikna. Kirang atra mangrupa nu tiasa nganggo tumpukan éta, ngarobah ekspresi selapan baku dina gagal ginjal akut.
Conto basa programming
Pascal RPN sadar kawas ieu (nembongkeun bagian tina program éta).
Maca dina angka na operator di siklus disebut prosedur, nu nangtukeun naha angka atawa tanda anu token operasi. Dina kasus nu pertama, di nilai diteundeun dina tumpukan, sarta kadua dua angka tumpukan luhur pakait Peta anu dipigawé sarta hasilna disimpen.
toktype: = NUM;
baca (s);
lamun c dina [ '+', '-', '*', '/'] lajeng ngawitan
lamun eoln lajeng CN: = '' sejenna baca (CN);
lamun CN = '' lajeng
kasus hiji
'+': Toktype: = nambahkeun; '-': toktype: = sub;
'*': Toktype: = mul; '/': Toktype: = div
ahir
sejenna dimimitian
lamun hiji = '-' lajeng sgn: = -1 sejenna kasalahan: = c <> '+';
kalayan: = CN
ahir
mungkas;
lamun (teu kasalahan) jeung (toktype = NUM) lajeng getnumber;
lamun toktype <> NUM lajeng ngawitan
y = pop; x: = pop;
lamun teu kasalahan lajeng
bisi toktype tina
nambahkeun: z: = x + y; sub: z: = x-y; mul: z: = x * y; div: z: = x / y
ahir
push (z);
C-palaksanaan RPN (ditémbongkeun bagéan program):
pikeun (s = strtok (s, w); s; s = strtok (0, w)) {
a = strtod (s, & e);
lamun (e> s) push (a);
#define rpnop (x) printf ( "% c:", * s), b = pop (), hiji = pop (), push (x)
sejenna lamun (* s == '+') rpnop (a + b);
sejenna lamun (* s == '-') rpnop (a - b);
sejenna lamun (* s == '*') rpnop (a * b);
sejenna lamun (* s == '/') rpnop (a / b);
rpnop #undef
}
implementations hardware
Dina pamadegan poé, nalika téhnologi komputer éta pisan mahal, ieu panginten mangrupakeun ide nu sae pikeun maksa jalma ngagunakeun arresters surge. Dina taun 1960-ies., Salaku ayeuna, ieu mungkin meuli kalkulator, nu dianggo dina notasi Polandia sabalikna. Nambahkeun 2 sarta 3 di antarana kedah asupkeun 2, teras 3, sarta mencet tombol "tambah". Dina glance kahiji, anu operands input pikeun operator nu seemed pajeulit jeung hese nginget, tapi sanggeus bari sabagian anu addicted mun cara kieu pikiran sarta teu bisa ngarti naha batur keukeuh on selapan bodo, nu jadi pajeulit jeung jadi ngan bisa laksana.
parusahaan Burroughs malah ngawangun hiji mainframe, nu teu boga memori sejenna, iwal tumpukan. Hiji-hijina hal anu ngajadikeun mesin - dilarapkeun di algoritma jeung métode RPN kana tumpukan sentral. Sakabéh operasi na anu dianggap salaku operator arresters nu manglaku ka nilai n luhur. Contona, tim nu nyokot Balik deui Alamat ti luhureun tumpukan éta, jeung saterusna. D. The arsitéktur tina mesin saperti éta basajan, tapi teu cukup gancang bersaing jeung arsitéktur leuwih umum. Loba kitu, masih kuciwa kanyataan yén pendekatan sapertos basajan tur elegan pikeun komputasi dimana unggal program éta hiji ekspresi OPN, kapanggih tuluyan na.
Hiji waktu kalkulator kalawan RPN éta populér, sarta sababaraha urang masih masihan aranjeunna leuwih sering dipake tinimbang. Sajaba ti éta, maranéhna ngembangkeun hiji basa tumpukan-berorientasi, kayaning mudik. Dinten ieu saeutik dipaké, tapi masih nostalgia tina urut pamaké Na.
Jadi naon harti guyonan ngeunaan sosis Reverse Polandia?
Lamun urang nganggap yén operator tina sosis, nu notasi selapan, kudu aya dina roll sakumaha dina anjing panas konvensional. The RPN ieu lokasina katuhu dina dua halves meunang therebetween siap sanggeus itungan. Ayeuna datang ka bagian hésé - mustard. Manehna geus aya dina sosis, t. E. Geus diitung salaku operator unary. Hal ieu dipercaya yén mustard Ogé kudu ditémbongkeun salaku uncalculated sahingga kudu dipindahkeun ka katuhu sosis ... Tapi kasebut nyaéta dimungkinkeun, ieu tangtu merlukeun tumpukan badag teuing tina ...
Similar articles
Trending Now