КомпьютерПрограм хангамж

RPN: алгоритм, арга барил, жишээ

RPN нэг удаа дэлхийн компьютерийн программист үндсийг бий болсон юм. Өнөөдөр энэ нь тийм ч сайн мэддэг байна. Тиймээс комик чимэглэл, гадна "урвуу" Польшийн хиам талх харуулсан, одоо ч зарим нь мэдлэг програм гэхэд ташаа ойлгож болно. Бус, маш сайн онигоо тайлбарлаж, гэхдээ энэ тохиолдолд энэ нь бүрэн үндэслэлтэй байх болно.

infix

Бүх программистууд, хамгийн оюутнууд оператор ашиглах нь мэддэг байна. Жишээ нь, хувьсагч х ба у ашигласан нэмэх тэмдэг илэрхийлэл х + товчлол утга. Бага сайн энэ нь математик тэмдэглэгээ, infix тэмдэглэгээ нэртэй зээл авсан байна гэж үнэндээ машинуудын хувьд том асуудал юм явдал юм мэддэг. Оролтын хоёр утга нь зүүн, баруун дээр бичигдсэн байдаг Энэ оператор хүлээн авна. програмчлалд тэмдэглэгээ шинж тэмдэг үйл ажиллагаатай нэмэлт ашигласан байна. Жишээ нь, X + Y нь хөрвүүлэгч болон эцэст нь infix тэмдэглэгээг хувиргадаг дахин (X, Y) функц байдлаар бичиж болно. Гэсэн хэдий ч, хүн бүр математикийн арифметик илэрхийлэл, бараг бүх програмчлалын хэл дээр дотоод мини хэлний нэг төрлийн бүрдүүлж ашиглах нь тийм ч сайн мэддэг.

томъёо орчуулагч

Эхний үнэхээр амжилттай Fortran програмчлалын хэл болж байна тиймээс ихээхэн учир нь арифметик илэрхийлэл (өөрөөр хэлбэл томъёо ..) Энэ код нь (шууд нэвтрүүлгийг) хөрвүүлэгдсэн, үүнийг эндээс нэр - Формула орчуулга. Үүнээс өмнө тэд жишээ нь, бичих, зүг чиг хэлбэрээр атираат байсан (ба өнөр өтгөн (б, в)). программистууд С гэхэд B Mutliply нь нэмэх гэх мэт зүйлийг бичиж байсан учраас автомат хувиргах томъёо хэрэгжүүлэх COBOL асуудалд маш хэцүү гэж үзэж байсан юм

infix нь буруу гэж юу вэ?

асуудал операторууд зэрэглэлтэй ба associativity зэрэг шинж гэж байна. Ийм учраас infix функцийн тодорхойлолт бус, ердийн ажил болдог. Жишээ нь, үржүүлэх илэрхийлэл 2 + 3 * 4 нь зүүнээс баруун тийш оператор гүйцэтгэхэд байх шиг, 4-өөр үржүүлж 2 ба 3 нийлбэртэй тэнцүү биш байна гэсэн үг гадна, эсвэл хасах илүү давуу байдаг. Үнэн хэрэгтээ, 4, 3 үржүүлж нэмнэ 2. Энэ жишээ нь infix үзэл бодлоо илэрхийлэх эрх тооцоо нь ихэвчлэн операторууд болон operands дарааллаар нь өөрчлөлт шаардлагатай гэдгийг харуулж байна. Үүнээс гадна, энэ нь илүү тодорхой тэмдэглэгээг харах хаалтан ашиглах шаардлагатай байна. Жишээ нь, (2 + 3) * (4 + 5) 2 + 3 * 4 + 5 та 4, 3 үржиж, 2, 5 нэмэх хэрэгтэй гэсэн үг, учир нь хаалтанд ч бичиж чадахгүй байна.

Заримдаа танд оператор тооцох хүсэж байгаа зэрэг нь урт удаан санаж шаарддаг. Учир нь энэ нь ихэвчлэн, арифметик сурч эхлэх оюутнууд бодит үйл ажиллагаа зөв хийж байгаа ч гэсэн буруу үр дүнг авах. Энэ нь зүрх өөр арга тайлангийн дарааллыг заах шаардлагатай. Нэгдүгээрт, үйл ажиллагааны хаалтанд, дараа нь үржүүлэх ба хуваах, эцэст нь гадна ба хасах хийж байх ёстой. Харин infix тэмдэглэгээ нь зөвхөн боломжтой "жижиг хэлээр" илүү нэмж болно нэг юм шиг математик илэрхийлэл бичих өөр нэг арга бий.

Угтвар болон Postfix тэмдэглэгээ

хамгийн сайн мэдэх хувилбаруудын хоёр өмнө нь буюу түүний operands дараа оператор бичиж байна. Тэд угтвар болон Postfix бичлэгээр гэж нэрлэдэг. Сэтгэгч Ян Lukasevich 1920 онд анх удаа нэг нь зохион бүтээсэн. Тэр Польшид амьдарч байсан, тийм болохоор бичлэг Польшийн гэж нэрлэдэг. Postfix хувилбар тус тус Урвуу Польшийн тэмдэглэгээ (ARF) гэж нэрлэдэг. Энэ хоёр аргын зөвхөн ялгаа нь, тийм болохоор энэ нь тэдгээрийн зөвхөн нэгийг нь нарийвчлан авч үзэх нь хангалттай амжилт уншиж (баруун талд буюу баруун зүүн тийш) -д чиглэл юм. OPN оператор нь operands дараа бичигдсэн юм. Тиймээс илэрхийлэл AB + А + В үлгэр жишээ RPN илэрхийлнэ

operands хязгааргүй тоо

бичлэгээр шууд давуу тал нь, энэ нь N-adic оператор нэгтгэн юм infix тэмдэглэгээ үнэхээр зөвхөн хоёр operands хамтран ажилладаг бөгөөд, т. E. зөвхөн хоёртын үйл ажиллагаанд угаасаа тохиромжтой байдаг. Жишээ нь, ABC @ дээд оператор гурван Гишүүн өөрөө зүүн талд үйлдэл Энэ тохиолдолд А, В, С-ийн үнэ цэнэ ба функц дуудлага @ харгалзана triadic тэмдгийг ашиглан урвуу Польшийн илэрхийлэл юм (A, B, C). Та нар гэх мэт шиг нь @ МЭӨ эсвэл ямар нэг infix зэрэг @ тэмдэгийг бичих оролдвол энэ нь зүгээр л ажиллахгүй байгаа гэдэг нь тодорхой болж байна.

тушаалаар өгсөн тэргүүлэх ач холбогдол

RPN операторууд тэргүүлэх нь тэдний гадаад төрхийн тушаалаар илэрхийлж болно гэж өөр нэг давуу тал нь юм. тэмдэгт үйл ажиллагаа infix бичлэгээр нь хувиргалтыг хөнгөвчлөх гэж тэд оруулж болно боловч Үүний зэрэгцээ, хаалтан хэрэгтэй хэзээ ч үгүй. Жишээ нь, AB + C * - хоёрдмол утгагүй тэнцэх (A + B) * С, үржүүлэх үржүүлэх нь хоёр дахь Гишүүн өгдөг гүйцэтгэсэн гадна хүртэл тооцож чадахгүй байгаа болохоор. > (AB +) * C - -> (A + B) * В гэсэн тооцоо AB + C * Нэг удаад нэг оператор, бид AB + C * авах уу, байна

тооцоо алгоритм

OPN оператор нэмэлт өгөгдлүүд нь хоёр утга нь түүний зүүн талд нь бичсэн гэж авдаг функц адил харагдаж байна. Үүнээс гадна, энэ нь түүнийг тооцох арга стек үйл ажиллагаанд нийцэж магадлах шаардлага арилгаж байна гэж, програм хэлээр ашиглах байгалийн тэмдэглэгээ юм. Жишээ нь, үзэл бодлоо чөлөөтэй илэрхийлэх 5 + 6 * 7 arrester 5, 6, 7 *, + харагдах бөгөөд зүүнээс баруун тийш нь хайх зүгээр л тооцож болно болон стек дэх утгыг бичнэ үү. үйл ажиллагааны нийтлэг шинж тэмдэг, компьютерийн санах ой дээд элемент 2 сонгосон, оператор ашиглаж, тухай бүрт нь үр дүн санах ой руу буцаж ирэв. Хэзээ тооцоо үзэл бодлоо илэрхийлэх эцсийн үр дүн нь стекийн орой дээр байх болно.

Жишээ нь:

  • S = () 5, 6, 7, *, + 5 стекийн дээр байрлуулна.
  • S = (5) 6, 7, *, + 6 стекийн дээр байрлуулна.
  • S = (5, 6), 7 * 7 + стекийг байрлуулна.
  • S = (5, 6, 7) * 2 + стек, ашиглах *-аас утгуудыг сонгож, стек дэх үр дүнг байрлуулна.
  • S = (5, 6 * 7) = (5, 42) + + хэрэглэх, стек дэх үр дүнг тавих, стекийн сонгож 2-р утгууд.
  • S = (5 + 42) = (47) тооцоо хийгдэж, үр дүн стекийн орой дээр хадгалагдаж байдаг.

Энэ алгоритм нь дахин дахин RPN шалгаж болно, гэхдээ цаг хугацаа бүрийг энэ нь ямар ч хичнээн нарийн төвөгтэй арифметик үзэл бодлоо чөлөөтэй илэрхийлэх, ажиллах болно.

OPN ба яндан нягт холбоотой байдаг. Энэ жишээ нь урвуу Польшийн бичлэгээр үнэ цэнийг тооцоолох санах ойг хэрхэн ашиглах талаар харуулж байна. Бага илэрхий та бөөрний цочмог дутагдал стандарт infix илэрхийллийг хувиргах, стекийг ашиглаж болох юм.

програмчлалын хэл жишээ

Pascal RPN ойлгосон энэ (хөтөлбөрийн хэсгийг харуулж байна) гэх мэт.

журам гэж нэрлэдэг мөчлөг, токен дугаар, гарын үсэг зурах үйл ажиллагаа эсэхийг тодорхойлдог дахь дугаар, операторууд унших хэрэгтэй. Эхний тохиолдолд, стек дэх хадгалагдсан үнэ цэнэ, хоёр дээд стек тоо зохих арга хэмжээ хоёр дахь хийж байгаа бөгөөд үр дүн нь хадгалагдаж байдаг.

toktype: = МУИС-ийн;

(С) уншиж,

-д в [ '+', '-', '*', '/'] бол дараа нь эхлэх

Дараа нь eoln бол CN: = '' бас уншиж (CN);

Хэрэв CN = '' дараа нь

а хэрэг

'+': Toktype: = нэмж; '-': toktype: = дэд;

'*': Toktype: = MUL; '/': Toktype: = DIV

эцсийн

өөр эхэлнэ

а = уу '-' Дараа нь sgn: = -1 бас алдаа: = C <> '+';

нь: = CN

эцсийн

эцсийн;

(Гэхдээ алдаа) ба (toktype = МУИС) дараа нь getnumber бол;

Хэрэв toktype <> МУИС-ийн дараа эхэлнэ

у = поп; X: = поп;

Дараа нь биш бол алдаа

хэрэг toktype

нэмнэ: Z: = X + Y; Дэд: Z: = X-Y; MUL: Z: = X * Y; DIV: Z: = X / у

эцсийн

түлхэх (Z);

C-хэрэгжилт RPN (хөтөлбөрийн үзүүлсэн хэсэг):

{(;, С с = strtok (0, W) S = strtok (ууд, W)) нь

а = strtod (ууд, & е);

бол (е> -ууд) түлхэх (а);

#define rpnop (X) printf ( "% в:" * S), B = поп (), A = поп (), түлхэх (X)

Өөр уу (* S == '+') rpnop (а + б);

Өөр уу (* S == '-') rpnop (а - б);

өөр (* S == '*') rpnop (а * б) бол;

Өөр уу (* S == '/') rpnop (A / B);

#undef rpnop

}

тоног төхөөрөмжийн шийдлүүд

Тэр үед, хэзээ компьютерийн технологи нь маш үнэтэй байсан, энэ нь сайн санаа өсөлт баривчлагдчын ашиглаж хүмүүсийг хүчээр бодож байна. 1960-аад онд., Одоо байгаагаар, энэ нь боломжтой тооны машин, урвуу Польшийн бичлэгээр ажиллах худалдан авах байсан юм. 2 нэмэхийн тулд, тэдний 3 2, дараа нь 3 оруулах ёстой бөгөөд "нэмэх" товчийг дарна. Өнгөцхөн харвал, операторт оруулах operands санаж төвөгтэй, хүнд хэцүү санагдсан, гэхдээ хэсэг хугацааны дараа зарим нэг сэтгэлгээний энэ замаар донтсон байдаг, бусад нь яагаад тэнэг infix, тийм болохоор хүндрэлтэй байдаг тул хязгаарлагдмал байдаг шаардах ойлгож чадсангүй.

Р. компани ч толгой, стек бусад өөр ямар ч санах юм барьсан. машин болгодог цорын ганц зүйл бол - төв стек нь алгоритм, арга RPN хэрэглэнэ. өөрийн үйл ажиллагааны тухай мэдээлэл баривчлагдчын оператор, дээд н утгуудыг хамаарна гэж үзэж байна. Жишээ нь, баг нь илүү нийтлэг архитектур өрсөлдөх стекийн орой дээрээс буцах хаяг авч, гэх мэт. Д. ийм машин архитектур энгийн байсан ч хурдан нь хангалттай биш. Олон Гэсэн хэдий ч, одоо ч гэсэн хөтөлбөр бүр OPN илэрхийлэл байсан компьютерийн ийм энгийн, дэгжин хандлага, түүний үргэлжлүүлэн олсон гэдгийг харамсч байна.

RPN нь нэг цаг тооны алдартай байсан бөгөөд зарим хүмүүс одоо ч гэсэн тэдэнд давуу эрх өгч байна. Үүнээс гадна, тэд ийм заасны дагуу стек чиглэсэн хэлээр боловсруулсан. Өнөөдөр энэ нь бага зэрэг хэрэглэгддэг, харин түүний хуучин хэрэглэгчдийн хэвээр дурсахуйгаар байна.

Тиймээс Урвуу Польшийн хиам тухай утга шог гэж юу вэ?

Бид хиам оператор, infix тэмдэглэгээ, энэ нэрийн дотор ердийн халуун нохой шиг байх ёстой гэж байгаа бол. RPN баруун хоёр хагас тооцоолох дараа бэлэн therebetween авах оршдог. гич - Одоо хэцүү хэсэг нь ирдэг. Тэр т хиам дээр аль хэдийн байдаг. E. Аль хэдийн unary оператор тооцно. Энэ нь гичийн бас тооцоогүй гэж харуулах ёстой гэж байх учраас хиам баруун руу нүүсэн байх ёстой гэж үздэг ... Гэхдээ энэ нь боломжтой юм, энэ нь хэтэрхий том стекийг шаардлагатай болно ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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