ЭЭМПрограммалык камсыздоо

RPN: алгоритм, ыкмалары жана мисалдар

RPN бир жолу дүйнөгө бир компьютер программист негизи болгон. Бүгүн ошондой эле белгилүү эмес. Ошондуктан, комикс мисал, сыртында поляк колбаса тасмалардан "кайтарым" көрсөтүлгөн, кээ бир билимдүү боюнча, туура эмес болот. Эмес, өтө эле тамаша түшүндүрүп, бирок бул учурда ал толугу менен акталат.

infix

Бардык программисттер, көпчүлүк студенттер операторлору колдонуу менен тааныш. Мисалы, сөз айкашы х + өзгөрмөлөр X үчүн ролун баалуулуктар жана ж колдонулган плюс белгиси. Бул аз эле чындык белгилүү infix ноталык деп аталган математика жазылып, алынган болсо, чындыгында, машиналар үчүн чоң көйгөй болуп саналат. Бул оператордун киргизүү эки өзгөрмө жана сол боюнча чагылдырылат катары кабыл алат. программалоодо ноталык белгилер ишмердүүлүгү менен учурда колдонулат. Мисалы, X + ж компилятор жана акыры infix белгисин тушуро турган, короодон (X, Y) милдети деп жазылган болот. Ошентсе да, ар бир адам математика дээрлик ар бир программалоо тили ички мини-тилди кандайдыр бир пайда санариптик сөздөрдү колдонуу үчүн эмес, өтө жакшы билет.

формула котормочу

Биринчи чын эле ийгиликтүү Fortran программалоо тили үчүн негизинен, анткени эсеп сөз айкашы (б.а. формула ..) болуп калды, ал кодексине (радио) динин, демек, анын аты - формула котормосу. Буга чейин алар милдеттерин түрүндө бүктөлгөн Мисалы, жазышы керек болчу (жана көп (B, C)). автоматтык кайра тамагын ишке COBOL көйгөйү программисттер B Mutliply үчүн By С А кошуу сыяктуу нерселерди жазышы керек болчу, анткени, өтө оор деп эсептелген

infix берүү эмне үчүн туура эмес?

операторлор кезектүүлүккө жана associativity сыяктуу касиеттери бар маселе болуп саналат. Ушундан улам, infix милдетинин аныктамасы эмес анча маанилүү маселе болуп калат. Мисалы, көбөйтүү сөздөр 2 + 3 + 4 солдон операторлорунун аткаруу да ушундай болот эле, 4-көп, 2 жана 3-суммасына барабар эмес экенин билдирет тышкары же кемитип жогору артыкчылыкка ээ. Чынында эле, 4-3 көбөйүп, 2. кошуу Бул мисал infix сөз эсептөө көп операторлорунун жана operands токтомуна өзгөртүү талап кыларын көрсөтүп турат. Мындан тышкары, ал ачык-айкын белги карап курс пайдалануу зарыл. Мисалы, (2 + 3) * (4 + 5) кашаанын, анткени 5 + 4 + 3 + 2 билдирет жок жазылышы 3 4 жана көбөйүп керек 2 жана 5 кошуу мүмкүн эмес.

Сиз операторлорду эсептей турган тартип узак эстеп талап кылат. Ошондуктан, көп учурда, математиканы үйрөнө баштайт студенттер иш жүзүндө аракеттер туура аткарылган болсо да, туура эмес натыйжа. Ал жүрөгү менен аракет отчеттуулуктун тартибин үйрөтүү зарыл. Биринчиден, иш-аракет кашаанын, анда көбөйтүү жана бөлүү, ошондой эле, акыры, кошуп, кайра кемитип туруп ишке ашырылышы керек. Бирок infix ноталык гана кошсо болот мүмкүн "чакан тилде" бири катары математикалык сөздөрдү жазууда дагы бир жолу бар.

Prefix жана плакаты ноталык

абдан белгилүү ыкмалары эки чейин же анын operands кийин операторун жазуу болуп саналат. Алар приставка жана плакаты белгилер катары белгилүү. Брюнн Ян Lukasevich 1920-жылы биринчи ойлоп тапкан. Ал Poland жашаган, ошондуктан Ыйык Китепте поляк деп аталат. Плакаты версия, тиешелүүлүгүнө жараша, Кайтарым поляк Notation (ARF) деп аталат. Бул эки ыкманын бир гана айырмасы жазууну окуп багыты (сол укугу же солдон чейин), ал алардын бирин гана майда-чүйдөсүнө чейин эске алуу жетиштүү. OPN оператору өзүнүн operands кийин жазылган. Ошентип, сөз айкашы AB + үлгү RPN үчүн + Б. билдирет

operands чексиз саны

белгилердин дароо артыкчылыгы N-АРИС Эксплуатант жана infix ноталык чынында эле эки гана operands менен иштейт деген кыскача айтканда, т. E. экилик иш үчүн гана чындыгында туура келет. Мисалы, ABC @ жогорку наркы жактуу белгини колдонуу менен кайтарым поляк чагылдырылышы болуп саналат жана А, Б жана С Бул учурда оператордун үч коддон өзү сол чыгат жана милдети чакыруу @ туура келет (A, B, C). Эгер, мисалы, ошол эле A @ б.з.ч. же бир нерсе болуп infix, ошондой @ белгиси жазууга аракет болсо, анда ал жөн эле иш эмес, ачык айкын болот.

буйругу менен берилген артыкчылык

RPN операторлорунун артыкчылыктуу көрүнүшү буйругу менен көрсөтүлүшү мүмкүн экенин дагы бир артыкчылыгы бар. Ошол эле учурда, алар каармандардын аракеттер infix белгилер чейин өзгөртүп көмөк катары киргизилиши мүмкүн, бирок эч качан, кесүү керек. Мисалы, AB + C * - бир кылка барабар (А + Б) * C, көбөйтүү көбөйтүү экинчи коддон берет жүзөгө Мындан тышкары, акырына чейин эсептелген мүмкүн эмес болуп калды. Бул эсептелген AB + C * бир убакта бир оператор менен, биз AB алып + C *, эгер болсо -> (AB +) * C -> (А + Б) * 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 жана чакчайып, бири-бири менен тыгыз байланышта. Бул мисал кайтарым Поляк белгилердин наркын эсептей эс кантип колдонууну көрсөтөт. Less ачык Эгер курч бөйрөк оорусуна стандарттык infix сөздөр айландыруу, үймөгүн колдоно алабыз.

программалоо тилдеринин мисалдары

Pascal RPN бул (программасынын бир бөлүгүн көрсөтөт) сыяктуу түшүндүм.

жол-жобосу деп айлампасынын сандарды жана операторлорду окуу үчүн каймана номери же белгиси ишин аныктайт. Биринчи учурда, кабат сакталган балл, эки жогорку чөмөлө сандар тиешелүү иш экинчи жүзөгө ашырылат жана анын натыйжасы сакталат.

toktype: = даана;

окуу (лар);

менен с болсо, [ '+', '-', '*', '/'] кийин башталат

анда eoln болсо CN: = '' башка окуу (CN);

Эгерде CN = '', анда

бир учурда

"+": Toktype: = толукталсын; '-': toktype: = Папканы;

'*': Toktype: = Өтүү; '/': Toktype: = бөлүү

Бир мезгилдин акырына карата

башка башталат

а = болсо, "- десе, анда SGN: = -1 дагы ката: = с <> '+';

менен: = CN

Бир мезгилдин акырына карата

жок;

эгер (ката эмес) жана (toktype = Сан) анан getnumber;

toktype <> Сан кийин башталса, анда

ж = поп; х: = поп;

Эгерде жок болсо, анда ката

иши toktype

кошуу: Z: = х + ж; Папканы: Z: = х-ж; Өтүү: Z: = х + ж; бөлүү: Z: = х / ж

Бир мезгилдин акырына карата

Көтөрүү (Z);

C-ишке ашыруу RPN (программанын көрсөтүлгөн бөлүгү):

үчүн (с = strtok (S, W); с; с = strtok (0, ж)) {

а = strtod (с & е);

эгер (е> с) Көтөрүү (а);

#define rpnop (х) printf ( "% C", с), б = поп (), бир = поп (), Көтөрүү (х)

башка болсо (* с == '+') rpnop (а + б);

башка болсо (* с == '-') rpnop (а - б);

башка болсо (* с == '*') rpnop (а * б);

башка болсо (* с == '/') rpnop (а / б);

#undef rpnop

}

аппараттык колдонулушу

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

Берроуз компания да кабат эске албаганда, эч кандай башка эс болгон ЭЭМдеринде курулган. машинаны кылган жалгыз гана нерсе - борбордук кабат үчүн алгоритмдер жана ыкмалары RPN колдонулат. анын ишмердүүлүгүнүн бардык жогорку н баалуулуктарга тиешелүү өткөрчү операторлору, ошондой эле кабыл алынган. Мисалы, команда кабат чокусунан Return дарек алып, жана башкалар. D. мындай машинанын архитектура жөнөкөй эле, бирок тез көп, архитектор менен атаандаша жетиштүү. Ошентсе да көптөр, ар бир программа OPN көрсөткөн мындай эсептөө үчүн жөнөкөй жана назик мамиле, аны улантууга ашык экенин өкүнүшөт.

RPN менен Бир жолу Эсептегичтер популярдуулукка ээ болду, ал эми кээ бир адамдар, аларга артыкчылык берет. Мындан тышкары, алар, мисалы, чык деп кабат-багытталган тилдерди, иштелип чыккан. Бүгүнкү күндө аз колдонулган, бирок анын мурдагы колдонуучулардан дагы Nostalgic болуп саналат.

Ошентип, Кайтарым поляк колбаса жөнүндө мааниси тамашалары кандай болот?

Биз колбаса оператору, infix карайт, ал шарттуу, хот-дог сыяктуу түрмөк чегинде болушу керек деп ойлойбуз, анда. RPN эсептөөдөн кийин эки жарым даяр алардын ортосундагыларды алууга укугу жайгашкан. Азыр оор бөлүгү бар - сары кычынын данындай. Ал буга чейин колбасы, т. E. Мурунтан эле иштебесе катары эсептелет. Ал сары кычы да uncalculated катары көрсөтүлөт, ошондуктан колбаса укугу кылууга дилгир болушу керек ... Бирок, эгер мүмкүн болсо, бул өтө чоң үймөгүн талап кылат деп айтылып жүрөт ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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