កុំព្យូទ័រផ្នែកទន់

RPN: ក្បួនដោះស្រាយ, វិធីសាស្រ្តនិងឧទាហរណ៍

RPN ពេលដែលបង្កើតឡើងមូលដ្ឋាននៃអ្នកសរសេរកម្មវិធីកុំព្យូទ័រនៅក្នុងពិភពលោកនេះ។ នាពេលបច្ចុប្បន្ននេះវាត្រូវបានគេស្គាល់យ៉ាងល្អមិនមាន។ ដូច្នេះការបង្ហាញកំប្លែង, តំណាងមួយ "បញ្ច្រាស" វិលសាច់ក្រកប៉ូឡូញនៅខាងក្រៅនៅតែអាចត្រូវបានយល់ច្រឡំដោយអ្នកសរសេរកម្មវិធីដែលមានចំណេះដឹងមួយចំនួន។ មិនល្អពន្យល់រឿងកំប្លែង, ប៉ុន្តែនៅក្នុងករណីនេះវានឹងត្រូវបានរាប់ជាសុចរិតយ៉ាងពេញលេញ។

infix

អ្នកសរសេរកម្មវិធីទាំងអស់និងសិស្សនិស្សិតភាគច្រើនស៊ាំជាមួយការប្រើប្រាស់ប្រតិបត្តិករនេះ។ ឧទាហរណ៍តម្លៃកន្សោម x + ប្រមាណវិធីបូកសម្រាប់អថេរ x និង y សញ្ញាបូកដែលបានប្រើ។ គេស្គាល់តិចគឺថាល្អនេះត្រូវបានខ្ចីពីកំណត់គណិតវិទ្យា, ហៅកំណត់ infix នៅក្នុងការពិតគឺជាបញ្ហាធំសម្រាប់ម៉ាស៊ីននេះ។ ប្រតិបត្តិករនេះបានទទួលជាការបញ្ចូលតម្លៃពីរត្រូវបានកត់ត្រាទុកនៅខាងឆ្វេងនិងខាងស្ដាំ។ នៅក្នុងកម្មវិធីការកំណត់ដែលបានប្រើស្រេចចិត្តជាមួយនឹងប្រតិបត្ដិការមានគស្ញ។ ឧទាហរណ៍ x + y ដែលអាចត្រូវបានសរសេរជាមុខងារមួយនៃដង (x, y) ដែលចងក្រងនិងទីបំផុតបានបម្លែងកំណត់ infix ។ ទោះយ៉ាងណាអ្នករាល់គ្នាដឹងគណិតវិទ្យាគឺជាការល្អផងដែរមិនឱ្យប្រើកន្សោមនព្វន្ធ, ដែលបង្កើតប្រភេទនៃភាសាខ្នាតតូចមួយនៅស្ទើរតែផ្ទៃក្នុងភាសាសរសេរកម្មវិធីជារៀងរាល់។

អ្នកបកប្រែរូបមន្ត

ភាសាសរសេរកម្មវិធី Fortran ទទួលបានជោគជ័យពិតជាលើកដំបូងនេះបានក្លាយទៅជាដូច្នេះភាគច្រើនដោយសារកន្សោមនព្វន្ធ (ឧរូបមន្ត .. ) វាបានបម្លែង (ចាក់ផ្សាយ) ក្នុងកូដនេះ, ហេតុនេះឈ្មោះរបស់វា - ការបកប្រែរូបមន្ត។ មុនពេលដែលពួកគេបានសរសេរ, ឧទាហរណ៍, បត់ក្នុងសំណុំបែបបទនៃមុខងារនេះ (និងគុណ (b, c)) ។ ក្នុងបញ្ហានៃការអនុវត្តរូបមន្ត COBOL ដោយស្វ័យប្រវត្តិត្រូវបានគេចាត់ទុកថាជាការបម្លែងយ៉ាងខ្លាំងដោយសារតែការសរសេរកម្មវិធីការលំបាកដែលបានសរសេរអ្វីដែលដូចជាបន្ថែមដើម្បីខ Mutliply ដោយ C.

អ្វីដែលខុសនឹង infix?

បញ្ហានេះគឺ, ថាប្រតិបត្តិករនេះមានលក្ខណៈសម្បត្តិដូចជាអាទិភាពនិងសមាគម។ ដោយសារតែនេះ, និយមន័យនៃមុខងារភារកិច្ចក្លាយជា infix មិនមែនជារឿងតូចតាច។ ឧទាហរណ៍គុណមានអាទិភាពខ្ពស់ជាងការបន្ថែមឬដក, ដែលមានន័យថាការបញ្ចេញមតិបាន 2 + 3 * 4 គឺមិនស្មើនឹងផលបូកនៃ 2 និង 3 គុណ 4, ដូចដែលវានឹងមាននៅក្នុងការសម្តែងរបស់ប្រតិបត្តិករដែលបានមកពីឆ្វេងទៅស្តាំ។ នៅក្នុងការពិត, គុណ 3 4 និងបន្ថែម 2. ឧទាហរណ៍នេះបង្ហាញថាការគណនានៃការបញ្ចេញមតិ infix នេះជាញឹកញាប់តម្រូវឱ្យមានការផ្លាស់ប្តូរនៅក្នុងលំដាប់នៃប្រតិបត្តិករនិងអង្គមួយ។ លើសពីនេះទៀតវាគឺជាការចាំបាច់ក្នុងការប្រើដង្កៀបដើម្បីរកមើលការកំណត់ច្បាស់លាស់បន្ថែមទៀត។ ឧទាហរណ៍ (2 + 3) * (4 + 5) មិនអាចត្រូវបានសរសេរដោយគ្មានក្រចកនោះទេព្រោះបាន 2 + 3 * 4 5 មានន័យថាអ្នកត្រូវការគុណ 3 4 និងបន្ថែម 2 និង 5 ។

លំដាប់ដែលអ្នកចង់គណនាប្រតិបត្តិករដែលតម្រូវឱ្យមានការចងចាំជាយូរមកហើយ។ ដោយសារតែនេះនិស្សិតដែលបានចាប់ផ្តើមរៀននព្វន្ធជាញឹកញាប់ទទួលបានលទ្ធផលខុស, បើទោះបីជាប្រតិបត្ដិការពិតប្រាកដនោះត្រូវបានអនុវត្តឱ្យបានត្រឹមត្រូវ។ វាគឺជាការចាំបាច់ដើម្បីបង្រៀនគោលបំណងនៃសេចក្តីថ្លែងការណ៍សកម្មភាពដោយបេះដូង។ ជាដំបូង, សកម្មភាពនេះត្រូវតែត្រូវបានអនុវត្តនៅក្នុងវង់ក្រចកបន្ទាប់មកគុណនិងចែកហើយចុងក្រោយបូកនិងការដក។ ប៉ុន្តែមិនមានវិធីមួយទៀតសរសេរកន្សោមគណិតវិទ្យាជាអ្នកតំណាង infix គឺគ្រាន់តែជាផ្នែកមួយនៃការដែលអាចធ្វើបាន "ភាសាតូច" ដែលអាចត្រូវបានបន្ថែមទៅកាន់តែច្រើន។

កំណត់បុព្វបទនិង postfix

ពីរនាក់នៃជម្រើសច្រើនបំផុតល្បីនេះគឺដើម្បីកត់ត្រាប្រតិបត្តិករមុនឬបន្ទាប់ពីអង្គការរបស់ខ្លួន។ ពួកគេត្រូវបានគេស្គាល់ថាជាការកំណត់បុព្វបទនិង postfix ។ អ្នកតក្កវិទ្យាយ៉ា Lukasevich បានបង្កើតជាលើកដំបូងក្នុងឆ្នាំ 1920 មួយ។ គាត់បានរស់នៅក្នុងប្រទេសប៉ូឡូញ, ដូច្នេះកំណត់ត្រាត្រូវបានគេហៅថាប៉ូឡូញ។ កំណែ postfix រៀងគ្នាគេហៅថាបញ្ច្រាសប៉ូឡូញកំណត់ (ARF) ។ ភាពខុសគ្នាតែមួយគត់រវាងវិធីសាស្រ្តទាំងពីរនេះជាទិសដៅដែលនៅក្នុងការអានកំណត់ត្រា (ពីឆ្វេងទៅស្តាំឬស្តាំទៅឆ្វេង) ដូច្នេះវាគ្រប់គ្រាន់ដើម្បីពិចារណានៅក្នុងការលម្អិតតែមួយរបស់ពួកគេ។ ប្រតិបត្តិករ OPN ត្រូវបានសរសេរបន្ទាប់ពីអង្គការរបស់ខ្លួន។ ដូច្នេះការបញ្ចេញមតិប់ AB + + តំណាងឱ្យឧទាហរណ៍មួយ RPN សម្រាប់ A + ខ

ចំនួនដែលគ្មានដែនកំណត់នៃអង្គ

អត្ថប្រយោជន៍នៃការជូនដំណឹងជាបន្ទាន់គឺថាវាសង្ខេបប្រតិបត្តិករ n-adic និងការកំណត់ infix គឺគ្រាន់តែជាដំណើរការជាមួយអង្គទាំងពីរមិនបាន។ អ៊ីតើថិសមរម្យសម្រាប់តែប្រតិបត្ដិការប្រព័ន្ធគោលពីរ។ ឧទាហរណ៍អង្គការ ABC @ គឺជាការបញ្ចេញមតិប៉ូឡូញបញ្ច្រាសដោយប្រើសញ្ញា triadic ដែលមានតម្លៃអតិបរមានៃ A, B និង C. ក្នុងករណីនេះប្រតិបត្តិករដើរតួនាទីនៅខាងឆ្វេងនៃសញ្ញាប្រមាណវិធីទាំងបីដោយខ្លួនវាផ្ទាល់និងត្រូវគ្នាទៅនឹងការហៅមុខងារ @ (A, B, C) ។ ប្រសិនបើអ្នកព្យាយាមដើម្បីសរសេរជានិមិត្តសញ្ញាដែលជា infix @ នេះដូចជាការ @ មុនគឬអ្វីមួយដូចនោះ, វាបានក្លាយទៅជាច្បាស់ណាស់ថាវាគ្រាន់តែមិនធ្វើការ។

អាទិភាពដែលបានផ្ដល់ឱ្យដោយការបញ្ជាទិញនេះ

RPN មានអត្ថប្រយោជន៍ផ្សេងទៀតនៅក្នុងអាទិភាពនៃការប្រតិបត្តិករដែលនេះអាចត្រូវបានតំណាងដោយលំដាប់នៃរូបរាងរបស់ពួកគេ។ នៅពេលជាមួយគ្នានេះមិនត្រូវការរ៉ាត់, បើទោះបីជាពួកគេអាចត្រូវបានរួមបញ្ចូលជាប្រតិបត្ដិការដើម្បីជួយសម្រួលដល់ការបម្លែងតួអក្សរដែលតំណាង infix នេះពី។ ឧទាហរណ៍ប់ AB + C * - តំលៃស្មើពិតប្រាកដ (a + b) * C, ដូច្នេះគុណដែលមិនអាចត្រូវបានគណនារហូតដល់ការបន្ថែមសម្តែងដែលបានផ្តល់នូវសញ្ញាប្រមាណវិធីទីពីរសម្រាប់គុណ។ នោះគឺប្រសិនបើគណនាប់ AB + C * ដោយប្រតិបត្តិករមួយនៅពេលមួយដែលយើងទទួលបានប់ AB + C * -> (AB បាន + +) * គ -> (a + b) * C.

ក្បួនដោះស្រាយការគណនា

ប្រតិបត្តិករ OPN មើលទៅដូចគ្នាជាមុខងារដែលត្រូវចំណាយពេលជាអាគុយម៉ង់តម្លៃពីរដែលបានសរសេរនៅខាងឆ្វេងរបស់នាង។ លើសពីនេះទៀតវាគឺជាការកំណត់ធម្មជាតិសម្រាប់ប្រើប្រាស់នៅក្នុងភាសាសរសេរកម្មវិធី, ដែលជាលក្ខណៈនៃការគណនារបស់ខ្លួនទាក់ទងទៅនឹងប្រតិបត្ដិការជង់និងតម្រូវការសម្រាប់ញែកត្រូវបានលុប។ ឧទាហរណ៍ការចាប់ខ្លួនក្នុងការបញ្ចេញមតិ 5 6 7 នឹងលេចឡើងជា 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: = លេខ;

អាន (s បាន);

ប្រសិនបើមានគក្នុង [ '+', '-', '*', '/'] បន្ទាប់មកចាប់ផ្តើម

ប្រសិនបើ eoln បន្ទាប់មក cn: => <ផ្សេងទៀតអាន (CN);

ប្រសិនបើ CN = '' បន្ទាប់មក

ករណីនៃការ

'+': Toktype: = បន្ថែម; '-': toktype: = អនុ;

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

ចុងបញ្ចប់

ផ្សេងទៀតចាប់ផ្តើម

ប្រសិនបើ = '-' បន្ទាប់មក sgn: = -1 កំហុសផ្សេងទៀត: = គ <> '+';

ជាមួយ: = CN

ចុងបញ្ចប់

បញ្ចប់;

ប្រសិនបើការ (មិនមានកំហុស) និង (toktype = NUM) បន្ទាប់មក getnumber;

ប្រសិនបើ toktype <> លេខបន្ទាប់មកចាប់ផ្តើ

y = ប៉ុប; x: = ប៉ុប;

ប្រសិនបើមិនមានកំហុសនោះមក

ករណី toktype នៃ

បន្ថែម: z: x + y =; អនុ: z = x-y; MUL: z = x * y; div: z = x / y

ចុងបញ្ចប់

ការជំរុញ (z);

C-ការអនុវត្ត RPN (បានបង្ហាញនៅផ្នែកមួយនៃកម្មវិធីនេះ):

សម្រាប់ការ (s = strtok (s បាន, w); s បាន; s បាន = strtok (0, w)) {

មួយ = strtod (s បាន & អ៊ី);

ប្រសិនបើការ (ង> s) បានជំរុញឱ្យមាន (មួយ);

#define rpnop (X) printf ( "% c:", * s) ខ = ប៉ុប () ដែលជា = ប៉ុប (), ការជំរុញ (X)

ផ្សេងទៀតប្រសិនបើ (* របស់ == '+') rpnop (a + b);

ផ្សេងទៀតប្រសិនបើ (* s បាន == '-') rpnop (ក - ខ);

ផ្សេងទៀតប្រសិនបើ (* របស់ == '*') rpnop (មួយ * ខ);

ផ្សេងទៀតប្រសិនបើ (* s បាន == '/') rpnop (ក / ខ);

rpnop #undef

}

ការប្រតិបត្តិផ្នែករឹង

នៅគ្រានោះនៅពេលដែលបច្ចេកវិទ្យាកុំព្យូទ័រគឺមានតម្លៃថ្លៃខ្លាំងណាស់, វាត្រូវបានគេគិតថាជាគំនិតល្អក្នុងការបង្ខំមនុស្សឱ្យប្រើការចាប់ខ្លួនការកើនឡើង។ ក្នុងឆ្នាំ 1960 ក្ដី។ , ដូចជាពេលបច្ចុប្បន្ននេះវាគឺអាចធ្វើទៅបានដើម្បីទិញម៉ាស៊ីនគិតលេខដែលធ្វើការនៅក្នុងការកំណត់ប៉ូឡូញបញ្ច្រាស។ ដើម្បីបន្ថែម 2 និងទី 3 នៃពួកគេត្រូវតែបញ្ចូល 2, បន្ទាប់មក 3, និងចុច "បូក" ប៊ូតុង។ នៅ glance ដំបូងអង្គបញ្ចូលឱ្យក្រុមហ៊ុនប្រតិបត្តិករនេះហាក់ដូចជាមានភាពស្មុគស្មាញនិងការលំបាកក្នុងការចងចាំប៉ុន្តែបន្ទាប់ពីខណៈពេលដែលមួយចំនួនមានការញៀននឹងវិធីនៃការគិតនេះហើយមិនអាចយល់ពីហេតុអ្វីបានជាអ្នកដទៃទៀតទទូចលើ infix ឆោតល្ងង់ដែលមានភាពស្មុគស្មាញដូច្នេះហើយដូច្នេះត្រូវបានកំណត់។

ក្រុមហ៊ុន Burroughs សូម្បីតែកសាងឡើង mainframe មួយដែលមិនមានការចងចាំផ្សេងទៀតលើកលែងតែជង់។ រឿងតែមួយគត់ដែលធ្វើឱ្យម៉ាស៊ីន - អនុវត្តក្បួនដោះស្រាយនិងវិធីសាស្រ្ត RPN ទៅជង់កណ្តាល។ ប្រតិបត្តិការរបស់ខ្លួនទាំងអស់ត្រូវបានគេចាត់ទុកថាជាប្រតិបត្តិករចាប់ខ្លួន, ដែលអនុវត្តទៅតម្លៃ n ខាងលើ។ ឧទាហរណ៍ក្រុមនេះបានយកអាសយដ្ឋានត្រឡប់ពីកំពូលនៃជង់នេះហើយដូច្នេះនៅលើ។ ឃស្ថាបត្យកម្មបែបម៉ាស៊ីនមួយនេះគឺមានលក្ខណៈសាមញ្ញប៉ុន្តែមិនលឿនគ្រប់គ្រាន់ដើម្បីប្រកួតប្រជែងជាមួយស្ថាបត្យកម្មទូទៅបន្ថែមទៀត។ ជាច្រើនទោះជាយ៉ាងណានៅតែមានការសោកស្តាយជាការពិតថាដូចជាវិធីសាស្រ្តសាមញ្ញនិងស្រស់ស្អាតដើម្បីឱ្យកុំព្យូទ័រដែលជាកន្លែងដែលគ្រប់កម្មវិធីទាំងអស់គឺជាកន្សោមនៃ OPN បានរកឃើញការបន្តរបស់ខ្លួន។

មួយម៉ាស៊ីនគិតលេខពេលវេលាជាមួយនឹង RPN បានគេពេញនិយមនិងមានមនុស្សមួយចំនួននៅតែផ្តល់ឱ្យពួកគេនូវចំណូលចិត្ត។ លើសពីនេះទៀតពួកគេបានបង្កើតជាភាសាដែលតម្រង់ជង់ដូចជាចេញ។ សព្វថ្ងៃនេះវាត្រូវបានគេប្រើតិចតួចប៉ុន្តែនៅតែអាឡោះអាល័យពីអតីតអ្នកប្រើប្រាស់របស់ខ្លួន។

ដូច្នេះអ្វីដែលជារឿងកំប្លែងអត្ថន័យអំពីសាច់ក្រកបញ្ច្រាសប៉ូឡូញ?

ប្រសិនបើយើងសន្មត់ថាប្រតិបត្តិករនៃសាច់ក្រកដែលជាតំណាង infix នេះវាគួរតែមាននៅក្នុងរមៀលដូចជានៅក្នុងសត្វឆ្កែក្តៅធម្មតា។ RPN នេះមានទីតាំងស្ថិតនៅខាងស្ដាំនៅក្នុងខ្សែការពារពីរទទួលបានត្រៀមខ្លួនជាស្រេចបន្ទាប់ពីការគណនា therebetween ។ ឥឡូវនេះបានមកដែលជាផ្នែកមួយមានការលំបាក - mustard ។ នាងគឺរួចហើយនៅលើសាច់ក្រកនេះ, t, ។ អ៊ីបានគណនារួចទៅហើយថាជាប្រតិបត្តិករប្រមាណវិធីមួយអង្គមួយ។ វាត្រូវបានគេជឿថាល្អិតគួរតែត្រូវបានបង្ហាញថាជា uncalculated ហើយដូច្នេះគួរតែត្រូវបានផ្លាស់ទីទៅខាងស្ដាំនៃសាច់ក្រកនេះ ... ប៉ុន្តែវាគឺអាចធ្វើទៅបាន, នេះនឹងតម្រូវឱ្យជង់ធំពេកនៃការ ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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