नियंत्रण तालिका: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[File:Control table.png|thumb|220px|यह सरल नियंत्रण तालिका एकल निविष्ट चर के मान के अनुसार क्रमादेश प्रवाह को निर्देशित करती है। प्रत्येक तालिका प्रविष्टि में समानता (अंतर्निहित) और कार्रवाई पंक्ति में प्रदर्शन करने के लिए प्रासंगिक उपनेमिका के लिए परीक्षण करने के लिए एक संभावित निविष्ट मान होता है। यदि सूचक्स समर्थित नहीं हैं, तो उपनेमिका का नाम एक सापेक्ष उपनेमिका संख्या से बदला जा सकता है]]नियंत्रण तालिकाएँ वे तालिकाएँ होती हैं जो नियंत्रण प्रवाह को नियंत्रित करती हैं या कार्यक्रम नियंत्रण में एक प्रमुख भूमिका निभाती हैं। नियंत्रण तालिका की संरचना या सामग्री के बारे में कोई कठोर नियम नहीं हैं - इसकी योग्यता विशेषता केंद्रीय प्रसंस्करण इकाई या [[Index.php?title=दुभाषिया (संगणन)|दुभाषिया (संगणन)]] द्वारा निष्पादन के माध्यम से किसी तरह से प्रवाह को नियंत्रित करने की क्षमता है। ऐसी तालिकाओं के अभिकल्पना को कभी-कभी तालिका-संचालित अभिकल्पना कहा जाता है<ref>''Programs from decision tables'', Humby, E., 2007,Macdonald, 1973 ... Biggerstaff, Ted J. Englewood Cliffs, NJ : Prentice-Hall {{ISBN|0-444-19569-6}}</ref><ref>{{Cite web |url=http://www.dkl.com/wp-content/uploads/2016/05/DataKinetics-Table-Driven-Design.pdf |title=Archived copy |access-date=17 May 2016 |archive-date=10 June 2016 |archive-url=https://web.archive.org/web/20160610160908/http://www.dkl.com/wp-content/uploads/2016/05/DataKinetics-Table-Driven-Design.pdf |url-status=dead }}</ref> (हालांकि यह आमतौर पर सीधे कार्यावधि तालिका के बजाय बाहरी तालिका से स्वचालित रूप से कूट उत्पन्न करने को संदर्भित करता है)। कुछ मामलों में, नियंत्रण तालिकाएँ परिमित-अवस्था मशीन | परिमित-अवस्था-मशीन-आधारित [[Index.php?title=स्वचालित-आधारित क्रमादेशन|स्वचालित-आधारित क्रमादेशन]] के विशिष्ट कार्यान्वयन हो सकती हैं। यदि नियंत्रण तालिका के कई पदानुक्रमित स्तर हैं तो वे [[पदानुक्रमित राज्य मशीन|पदानुक्रमित अवस्था मशीन]] के समतुल्य तरीके से व्यवहार कर सकते हैं<ref>[[UML state machine#Hierarchically nested states]]</ref>
[[File:Control table.png|thumb|220px|यह सरल नियंत्रण तालिका एकल निविष्ट चर के मान के अनुसार क्रमादेश प्रवाह को निर्देशित करती है। प्रत्येक तालिका प्रविष्टि में समानता (अंतर्निहित) और कार्रवाई पंक्ति में प्रदर्शन करने के लिए प्रासंगिक उपनेमिका के लिए परीक्षण करने के लिए एक संभावित निविष्ट मान होता है। यदि सूचक्स समर्थित नहीं हैं, तो उपनेमिका का नाम एक सापेक्ष उपनेमिका संख्या से बदला जा सकता है]]नियंत्रण तालिकाएँ वे तालिकाएँ होती हैं जो नियंत्रण प्रवाह को नियंत्रित करती हैं या कार्यक्रम नियंत्रण में एक प्रमुख भूमिका निभाती हैं। नियंत्रण तालिका की संरचना या सामग्री के बारे में कोई कठोर नियम नहीं हैं - इसकी योग्यता विशेषता केंद्रीय प्रसंस्करण इकाई या [[Index.php?title=दुभाषिया (संगणन)|दुभाषिया (संगणन)]] द्वारा निष्पादन के माध्यम से किसी तरह से प्रवाह को नियंत्रित करने की क्षमता है। ऐसी तालिकाओं के अभिकल्पना को कभी-कभी तालिका-संचालित अभिकल्पना कहा जाता है<ref>''Programs from decision tables'', Humby, E., 2007,Macdonald, 1973 ... Biggerstaff, Ted J. Englewood Cliffs, NJ : Prentice-Hall {{ISBN|0-444-19569-6}}</ref><ref>{{Cite web |url=http://www.dkl.com/wp-content/uploads/2016/05/DataKinetics-Table-Driven-Design.pdf |title=Archived copy |access-date=17 May 2016 |archive-date=10 June 2016 |archive-url=https://web.archive.org/web/20160610160908/http://www.dkl.com/wp-content/uploads/2016/05/DataKinetics-Table-Driven-Design.pdf |url-status=dead }}</ref> (चूंकि यह सामान्यत: सीधे कार्यावधि तालिका के अतिरिक्त बाहरी तालिका से स्वचालित रूप से कूट उत्पन्न करने को संदर्भित करता है)। कुछ स्थितियों में, नियंत्रण तालिकाएँ परिमित-अवस्था मशीन | परिमित-अवस्था-मशीन-आधारित [[Index.php?title=स्वचालित-आधारित क्रमादेशन|स्वचालित-आधारित क्रमादेशन]] के विशिष्ट कार्यान्वयन हो सकती हैं। यदि नियंत्रण तालिका के कई पदानुक्रमित स्तर हैं तो वे [[पदानुक्रमित राज्य मशीन|पदानुक्रमित अवस्था मशीन]] के समतुल्य तरीके से व्यवहार कर सकते हैं<ref>[[UML state machine#Hierarchically nested states]]</ref>
नियंत्रण तालिकाओं में अक्सर [[Index.php?title=सशर्त (क्रमादेशन)|सशर्त (क्रमादेशन)]] या [[Index.php?title=उपनेमिका|उपनेमिका]] [[Index.php?title=संदर्भ (संगणक विज्ञान)|संदर्भ (संगणक विज्ञान)]] के समतुल्य होते हैं, जो आमतौर पर [[संघ सूची]] में उनके सापेक्ष स्तंभ स्थिति से निहित होते हैं। नियंत्रण तालिकाएँ समान आँकड़ा संरचनाओं या क्रमादेश प्रकथन को बार-बार क्रमादेशन करने की आवश्यकता को कम करती हैं। अधिकांश तालिकाओं की द्वि-आयामी प्रकृति क्रमादेश कूट की एक-आयामी प्रकृति की तुलना में उन्हें देखने और अद्यतन करने में आसान बनाती है।
नियंत्रण तालिकाओं में अधिकांशत: [[Index.php?title=सशर्त (क्रमादेशन)|सशर्त (क्रमादेशन)]] या [[Index.php?title=उपनेमिका|उपनेमिका]] [[Index.php?title=संदर्भ (संगणक विज्ञान)|संदर्भ (संगणक विज्ञान)]] के समतुल्य होते हैं, जो सामान्यत: [[संघ सूची]] में उनके सापेक्ष स्तंभ स्थिति से निहित होते हैं। नियंत्रण तालिकाएँ समान आँकड़ा संरचनाओं या क्रमादेश प्रकथन को बार-बार क्रमादेशन करने की आवश्यकता को कम करती हैं। अधिकांश तालिकाओं की द्वि-आयामी प्रकृति क्रमादेश कूट की एक-आयामी प्रकृति की तुलना में उन्हें देखने और अद्यतन करने में आसान बनाती है।


कुछ मामलों में, नियंत्रण तालिकाओं की सामग्री को बनाए रखने के लिए गैर-क्रमादेशक को सौंपा जा सकता है। उदाहरण के लिए, यदि उपयोगकर्ता द्वारा दर्ज किए गए खोज वाक्यांश में एक निश्चित वाक्यांश शामिल है, तो एक तालिका में एक यूआरएल (वेब ​​​​पता) निर्दिष्ट किया जा सकता है जो यह नियंत्रित करता है कि खोज उपयोगकर्ता को कहाँ ले जाया जाता है। यदि वाक्यांश में स्कर्ट(किनारा) है, तो तालिका उपयोगकर्ता को www.shopping.example/catalogs/skirts पर ले जा सकती है, जो कि स्कर्ट उत्पाद सूची पृष्ठ है। (उदाहरण यूआरएल पद्धति में काम नहीं करता है)। क्रमादेशक के बजाय विपणन कर्मी ऐसी तालिका का प्रबंधन कर सकते हैं।
कुछ स्थितियों में, नियंत्रण तालिकाओं की सामग्री को बनाए रखने के लिए गैर-क्रमादेशक को सौंपा जा सकता है। उदाहरण के लिए, यदि उपयोगकर्ता द्वारा दर्ज किए गए खोज वाक्यांश में एक निश्चित वाक्यांश सम्मलित है, तो एक तालिका में एक यूआरएल (वेब ​​​​पता) निर्दिष्ट किया जा सकता है जो यह नियंत्रित करता है कि खोज उपयोगकर्ता को कहाँ ले जाया जाता है। यदि वाक्यांश में स्कर्ट(किनारा) है, तो तालिका उपयोगकर्ता को www.shopping.example/catalogs/skirts पर ले जा सकती है, जो कि स्कर्ट उत्पाद सूची पृष्ठ है। (उदाहरण यूआरएल पद्धति में काम नहीं करता है)। क्रमादेशक के अतिरिक्त विपणन कर्मी ऐसी तालिका का प्रबंधन कर सकते हैं।


== विशिष्ट उपयोग ==
== विशिष्ट उपयोग ==
Line 13: Line 13:
== अधिक उन्नत उपयोग ==
== अधिक उन्नत उपयोग ==
* एक दुभाषिया (संगणन) द्वारा संसाधित [[आभासी मशीन]] के लिए आभासी निर्देशों के रूप में कार्य करना।
* एक दुभाषिया (संगणन) द्वारा संसाधित [[आभासी मशीन]] के लिए आभासी निर्देशों के रूप में कार्य करना।
: [[बाईटकोड|बाईट]] कूट के समान - लेकिन आमतौर पर तालिका संरचना द्वारा निहित संचालन के साथ।
: [[बाईटकोड|बाईट]] कूट के समान - लेकिन सामान्यत: तालिका संरचना द्वारा निहित संचालन के साथ।


== तालिका संरचना ==
== तालिका संरचना ==
तालिकाओं में निश्चित या [[चर लंबाई कोड|चर लंबाई]] कूट के कई आयाम हो सकते हैं और आमतौर पर [[Index.php?title=संगणक मंच|संगणक मंच]] के बीच [[Index.php?title=सॉफ्टवेयर सुवाह्य|सॉफ्टवेयर सुवाह्य]] होती है, जिसके लिए केवल दुभाषिया में बदलाव की आवश्यकता होती है, न कि स्वयं [[कलन विधि]] - जिसका तर्क तालिका संरचना और सामग्री के अंदर अनिवार्य रूप से सन्निहित है। तालिका की संरचना एक [[Index.php?title=बहुघाती (आँकड़ा संरचना)|बहुघाती (आँकड़ा संरचना)]] साहचर्य सरणी के समान हो सकती है, जहां एक आँकड़ा मान (या आँकड़ा मानों का संयोजन) को एक या एक से अधिक कार्यों के लिए योजना बद्ध किया जा सकता है।
तालिकाओं में निश्चित या [[चर लंबाई कोड|चर लंबाई]] कूट के कई आयाम हो सकते हैं और सामान्यत: [[Index.php?title=संगणक मंच|संगणक मंच]] के बीच [[Index.php?title=सॉफ्टवेयर सुवाह्य|सॉफ्टवेयर सुवाह्य]] होती है, जिसके लिए केवल दुभाषिया में बदलाव की आवश्यकता होती है, न कि स्वयं [[कलन विधि]] - जिसका तर्क तालिका संरचना और सामग्री के अंदर अनिवार्य रूप से सन्निहित है। तालिका की संरचना एक [[Index.php?title=बहुघाती (आँकड़ा संरचना)|बहुघाती (आँकड़ा संरचना)]] साहचर्य सरणी के समान हो सकती है, जहां एक आँकड़ा मान (या आँकड़ा मानों का संयोजन) को एक या एक से अधिक कार्यों के लिए योजना बद्ध किया जा सकता है।


=== एक आयामी तालिका ===
=== एक आयामी तालिका ===
शायद इसके सबसे सरल कार्यान्वयन में, एक नियंत्रण तालिका कभी-कभी असंसाधित्र आँकड़ा मान को संबंधित उपनेमिका अंतर्लब (संगणक विज्ञान), सरणी आँकड़ा संरचना या संकेतक (संगणक क्रमादेशन) में असंसाधित्र आँकड़ा मान का सीधे उपयोग करने के लिए सीधे अनुवाद करने के लिए एक आयामी तालिका हो सकती है। सरणी के सूचकांक के रूप में, या पहले से आँकड़ा पर कुछ बुनियादी अंकगणितीय प्रदर्शन करके। यह [[निरंतर समय]] में प्राप्त किया जा सकता है (बिना [[रैखिक खोज]] या [[द्विआधारी खोज]] के एक साहचर्य सरणी पर एक विशिष्ट लुकअप तालिका का उपयोग करके)। अधिकांश [[Index.php?title=संगणक संरचना|संगणक संरचना]] में, इसे दो या तीन [[Index.php?title=मशीन निर्देशों|मशीन निर्देशों]] में पूरा किया जा सकता है - बिना किसी तुलना या प्रस्पंद के। तकनीक को तुच्छ हैश फ़ंक्शन के रूप में जाना जाता है या, जब विशेष रूप से शाखा तालिकाओं के लिए उपयोग किया जाता है, दोहरा प्रेषण।
शायद इसके सबसे सरल कार्यान्वयन में, एक नियंत्रण तालिका कभी-कभी असंसाधित्र आँकड़ा मान को संबंधित उपनेमिका अंतर्लब (संगणक विज्ञान), सरणी आँकड़ा संरचना या संकेतक (संगणक क्रमादेशन) में असंसाधित्र आँकड़ा मान का सीधे उपयोग करने के लिए सीधे अनुवाद करने के लिए एक आयामी तालिका हो सकती है। सरणी के सूचकांक के रूप में, या पहले से आँकड़ा पर कुछ बुनियादी अंकगणितीय प्रदर्शन करके। यह [[निरंतर समय]] में प्राप्त किया जा सकता है (बिना [[रैखिक खोज]] या [[द्विआधारी खोज]] के एक साहचर्य सरणी पर एक विशिष्ट लुकअप तालिका का उपयोग करके)। अधिकांश [[Index.php?title=संगणक संरचना|संगणक संरचना]] में, इसे दो या तीन [[Index.php?title=मशीन निर्देशों|मशीन निर्देशों]] में पूरा किया जा सकता है - बिना किसी तुलना या प्रस्पंद के। तकनीक को तुच्छ हैश फलन के रूप में जाना जाता है या, जब विशेष रूप से शाखा तालिकाओं के लिए उपयोग किया जाता है, दोहरा प्रेषण।
इसके व्यवहार्य होने के लिए, आँकड़ा के सभी संभावित मानों की सीमा छोटी होनी चाहिए (उदाहरण के लिए एक [[ASCII]] या [[EBCDIC|ईबीसीडीआईसी]] वर्ण मान जिसमें [[हेक्साडेसिमल]] '00' - 'FF' की सीमा होती है। यदि वास्तविक सीमा कम होने की गारंटी है इसके अलावा, सरणी को 256 बाइट्स से कम तक छोटा किया जा सकता है)।
इसके व्यवहार्य होने के लिए, आँकड़ा के सभी संभावित मानों की सीमा छोटी होनी चाहिए (उदाहरण के लिए एक [[ASCII]] या [[EBCDIC|ईबीसीडीआईसी]] वर्ण मान जिसमें [[हेक्साडेसिमल]] '00' - 'FF' की सीमा होती है। यदि वास्तविक सीमा कम होने की गारंटी है इसके अतिरिक्त, सरणी को 256 बाइट्स से कम तक छोटा किया जा सकता है)।


'एक-आयामी सरणी का उपयोग करके निरंतर समय में कच्चे ASCII मानों (ए, डी, एम, एस) को नए उपनेमिका सूचकांक (1,4,3,2) में अनुवाद करने की तालिका'
'एक-आयामी सरणी का उपयोग करके निरंतर समय में कच्चे ASCII मानों (ए, डी, एम, एस) को नए उपनेमिका सूचकांक (1,4,3,2) में अनुवाद करने की तालिका'
Line 27: Line 27:
{| class="wikitable" style="text-align:center; "
{| class="wikitable" style="text-align:center; "
|- style="vertical-align:bottom;"
|- style="vertical-align:bottom;"
! [[ASCII]]!! [[Hexadecimal|Hex]] !! सरणी
! [[Index.php?title=एएससीआईआई|ASCII]]!! [[Index.php?title=षोडशाधारी|Hex]]!! Array
|-
|-
| [[Null character|null]] || 00 ||style="background:lightblue;"| 00
| [[Null character|null]] || 00 ||style="background:lightblue;"| 00
Line 57: Line 57:
एक [[शाखा तालिका]] सन्निहित [[मशीन कोड|मशीन]] कूट शाखा (संगणक विज्ञान) की एक-आयामी 'सरणी' है। शाखा/कूद निर्देश एक [[Index.php?title=बहु-मार्ग शाखा|बहु-मार्ग शाखा]] को क्रमादेश लेबल पर प्रभावित करने के लिए जब तुरंत पूर्ववर्ती और अनुक्रमित शाखा द्वारा शाखाबद्ध किया जाता है। यह कभी-कभी एक [[स्विच स्टेटमेंट|स्विच प्रकथन]] को निष्पादित करने के लिए एक [[अनुकूलन संकलक]] द्वारा उत्पन्न होता है - बशर्ते कि निविष्ट श्रेणी छोटी और सघन हो, कुछ अंतराल के साथ (जैसा कि पिछले सरणी उदाहरण द्वारा बनाया गया है) [http://www.netrino.com/node/137 ]।
एक [[शाखा तालिका]] सन्निहित [[मशीन कोड|मशीन]] कूट शाखा (संगणक विज्ञान) की एक-आयामी 'सरणी' है। शाखा/कूद निर्देश एक [[Index.php?title=बहु-मार्ग शाखा|बहु-मार्ग शाखा]] को क्रमादेश लेबल पर प्रभावित करने के लिए जब तुरंत पूर्ववर्ती और अनुक्रमित शाखा द्वारा शाखाबद्ध किया जाता है। यह कभी-कभी एक [[स्विच स्टेटमेंट|स्विच प्रकथन]] को निष्पादित करने के लिए एक [[अनुकूलन संकलक]] द्वारा उत्पन्न होता है - बशर्ते कि निविष्ट श्रेणी छोटी और सघन हो, कुछ अंतराल के साथ (जैसा कि पिछले सरणी उदाहरण द्वारा बनाया गया है) [http://www.netrino.com/node/137 ]।


हालांकि काफी सुसंहत - कई समकक्षों की तुलना में <code>If</code> कथन - शाखा निर्देश में अभी भी कुछ अतिरेक है, क्योंकि शाखा [[opcode]] और स्थिति कूटमास्क शाखा अंतर्लब के साथ दोहराए जाते हैं। इस अतिरेक (कम से कम अन्वायोजन भाषाओं में) को दूर करने के लिए क्रमादेश लेबल्स के लिए केवल अंतर्लब वाली कंट्रोल तालिका का निर्माण किया जा सकता है और फिर भी एक पारंपरिक शाखा तालिका की तुलना में केवल मामूली निष्पादन समय [[Index.php?title=संगणनात्मक उपरिव्यय|संगणनात्मक उपरिव्यय]] की आवश्यकता होती है।
चूंकि काफी सुसंहत - कई समकक्षों की तुलना में <code>If</code> कथन - शाखा निर्देश में अभी भी कुछ अतिरेक है, क्योंकि शाखा [[opcode]] और स्थिति कूटमास्क शाखा अंतर्लब के साथ दोहराए जाते हैं। इस अतिरेक (कम से कम अन्वायोजन भाषाओं में) को दूर करने के लिए क्रमादेश लेबल्स के लिए केवल अंतर्लब वाली कंट्रोल तालिका का निर्माण किया जा सकता है और फिर भी एक पारंपरिक शाखा तालिका की तुलना में केवल मामूली निष्पादन समय [[Index.php?title=संगणनात्मक उपरिव्यय|संगणनात्मक उपरिव्यय]] की आवश्यकता होती है।


=== बहु-आयामी तालिका ===
=== बहु-आयामी तालिका ===
अधिक सामान्यतः, एक नियंत्रण तालिका को एक सत्य तालिका के रूप में या एक मुद्रित [[निर्णय तालिका]] (या कई स्तरों पर निर्णय तालिकाओं के एक पेड़ (आँकड़ा संरचना)) के निष्पादन योग्य (द्विआधारी) कार्यान्वयन के रूप में सोचा जा सकता है। उनमें (अक्सर निहित) प्रस्तावात्मक सूत्र होते हैं, साथ में एक या एक से अधिक संबद्ध 'कार्य' होते हैं। ये क्रियाएं आमतौर पर जेनेरिक या कस्टम-निर्मित उपनेमिका्स द्वारा की जाती हैं जिन्हें अनुदेशांतरक (संगणन) क्रमादेश द्वारा कॉल किया जाता है। इस उदाहरण में दुभाषिया प्रभावी रूप से एक आभासी मशीन के रूप में कार्य करता है, जो नियंत्रण तालिका प्रविष्टियों को 'निष्पादित' करता है और इस प्रकार दुभाषिया के अंतर्निहित कूट की तुलना में उच्च स्तर का अमूर्तता (संगणक विज्ञान) प्रदान करता है।
अधिक सामान्यतः, एक नियंत्रण तालिका को एक सत्य तालिका के रूप में या एक मुद्रित [[निर्णय तालिका]] (या कई स्तरों पर निर्णय तालिकाओं के एक पेड़ (आँकड़ा संरचना)) के निष्पादन योग्य (द्विआधारी) कार्यान्वयन के रूप में सोचा जा सकता है। उनमें (अधिकांशत: निहित) प्रस्तावात्मक सूत्र होते हैं, साथ में एक या एक से अधिक संबद्ध 'कार्य' होते हैं। ये क्रियाएं सामान्यत: जेनेरिक या कस्टम-निर्मित उपनेमिका्स द्वारा की जाती हैं जिन्हें अनुदेशांतरक (संगणन) क्रमादेश द्वारा कॉल किया जाता है। इस उदाहरण में दुभाषिया प्रभावी रूप से एक आभासी मशीन के रूप में कार्य करता है, जो नियंत्रण तालिका प्रविष्टियों को 'निष्पादित' करता है और इस प्रकार दुभाषिया के अंतर्निहित कूट की तुलना में उच्च स्तर का अमूर्तता (संगणक विज्ञान) प्रदान करता है।


भाषा पर निर्भर स्विच प्रकथन के समान पंक्तियों के साथ एक नियंत्रण तालिका का निर्माण किया जा सकता है, लेकिन निविष्ट मानों के संयोजन के लिए परीक्षण की अतिरिक्त संभावना के साथ ([[बूलियन बीजगणित (तर्क)]] शैली [[तार्किक संयोजन]]/तार्किक संयोजन स्थितियों का उपयोग करके) और संभावित रूप से एकाधिक उपनेमिका्स को कॉल करना (इसके बजाय) मूल्यों का सिर्फ एक सेट और 'शाखा से' क्रमादेश लेबल)। (स्विच प्रकथन निर्माण किसी भी मामले में उपलब्ध नहीं हो सकता है, या उच्च स्तरीय भाषाओं ([[उच्च स्तरीय प्रोग्रामिंग भाषा|उच्च स्तरीय क्रमादेशन भाषा]]) में भ्रमित रूप से भिन्न कार्यान्वयन है। नियंत्रण तालिका अवधारणा, तुलनात्मक रूप से, कोई आंतरिक भाषा निर्भरता नहीं है, लेकिन फिर भी इसे अलग तरह से लागू किया जा सकता है। चयनित क्रमादेशन भाषा की उपलब्ध आँकड़ा परिभाषा सुविधाओं के अनुसार।)
भाषा पर निर्भर स्विच प्रकथन के समान पंक्तियों के साथ एक नियंत्रण तालिका का निर्माण किया जा सकता है, लेकिन निविष्ट मानों के संयोजन के लिए परीक्षण की अतिरिक्त संभावना के साथ ([[बूलियन बीजगणित (तर्क)]] शैली [[तार्किक संयोजन]]/तार्किक संयोजन स्थितियों का उपयोग करके) और संभावित रूप से एकाधिक उपनेमिका्स को कॉल करना (इसके अतिरिक्त) मूल्यों का सिर्फ एक सेट और 'शाखा से' क्रमादेश लेबल)। (स्विच प्रकथन निर्माण किसी भी मामले में उपलब्ध नहीं हो सकता है, या उच्च स्तरीय भाषाओं ([[उच्च स्तरीय प्रोग्रामिंग भाषा|उच्च स्तरीय क्रमादेशन भाषा]]) में भ्रमित रूप से भिन्न कार्यान्वयन है। नियंत्रण तालिका अवधारणा, तुलनात्मक रूप से, कोई आंतरिक भाषा निर्भरता नहीं है, लेकिन फिर भी इसे अलग तरह से लागू किया जा सकता है। चयनित क्रमादेशन भाषा की उपलब्ध आँकड़ा परिभाषा सुविधाओं के अनुसार।)


=== तालिका सामग्री ===
=== तालिका सामग्री ===
एक नियंत्रण तालिका अनिवार्य रूप से एक पारंपरिक कार्यक्रम के '[[सार]]' का प्रतीक है, इसकी क्रमादेशन भाषा वाक्यऔर प्लेटफॉर्म पर निर्भर घटकों (जैसे IF/THEN DO.., FOR.., DO WHILE.., SWITCH, GOTO, CALL) और ' संघनित' इसके चर (जैसे निविष्ट 1), मान (जैसे 'A', 'S', 'M' और 'D'), और उपनेमिका पहचान (जैसे 'जोड़ें', 'घटाना,..' या #1, # 2,...). तालिका की संरचना में आमतौर पर शामिल (स्वतः निर्धारित)  तर्कसंगत संक्रिया शामिल होते हैं - जैसे 'समानता के लिए परीक्षण', एक उपनेमिका और 'अगली संक्रिया' करना या स्वतः निर्धारित अनुक्रम का पालन करना (इन्हें क्रमादेश प्रकथन के अंदर स्पष्ट रूप से बताए जाने के बजाय - आवश्यकतानुसार अन्य [[प्रोग्रामिंग प्रतिमान|क्रमादेशन प्रतिमान]] में)।
एक नियंत्रण तालिका अनिवार्य रूप से एक पारंपरिक कार्यक्रम के '[[सार]]' का प्रतीक है, इसकी क्रमादेशन भाषा वाक्यऔर प्लेटफॉर्म पर निर्भर घटकों (जैसे IF/THEN DO.., FOR.., DO WHILE.., SWITCH, GOTO, CALL) और ' संघनित' इसके चर (जैसे निविष्ट 1), मान (जैसे 'A', 'S', 'M' और 'D'), और उपनेमिका पहचान (जैसे 'जोड़ें', 'घटाना,..' या #1, # 2,...). तालिका की संरचना में सामान्यत: सम्मलित (स्वतः निर्धारित)  तर्कसंगत संक्रिया सम्मलित होते हैं - जैसे 'समानता के लिए परीक्षण', एक उपनेमिका और 'अगली संक्रिया' करना या स्वतः निर्धारित अनुक्रम का पालन करना (इन्हें क्रमादेश प्रकथन के अंदर स्पष्ट रूप से बताए जाने के अतिरिक्त - आवश्यकतानुसार अन्य [[प्रोग्रामिंग प्रतिमान|क्रमादेशन प्रतिमान]] में)।


एक बहु-आयामी नियंत्रण तालिका में सामान्य रूप से, न्यूनतम के रूप में, मूल्य / क्रिया जोड़े होते हैं और इसमें अतिरिक्त रूप से निपात और [[Index.php?title=प्रकार तंत्र|प्रकार तंत्र]] की जानकारी हो सकती है, जैसे स्थान, आकार और निविष्ट या निर्गत आँकड़ा का प्रारूप, चाहे [[डेटा रूपांतरण|आँकड़ा रूपांतरण]] (या अन्य कार्यावधि) (कार्यक्रम जीवनचक्र चरण) | कार्यावधि प्रसंस्करण बारीकियाँ) प्रसंस्करण से पहले या बाद में आवश्यक है (यदि पहले से ही फलन में निहित नहीं है)। तालिका में पंक्ति में अन्य मूल्यों के आधार पर निष्पादित होने वाली सामान्य या अनुकूलित [[भाषा आदिम]] या उपनेमिका्स के लिए सरणी अनुक्रमणिका या सापेक्ष या निरपेक्ष सूचक (संगणक क्रमादेशन) शामिल हो सकते हैं या नहीं हो सकते हैं।
एक बहु-आयामी नियंत्रण तालिका में सामान्य रूप से, न्यूनतम के रूप में, मूल्य / क्रिया जोड़े होते हैं और इसमें अतिरिक्त रूप से निपात और [[Index.php?title=प्रकार तंत्र|प्रकार तंत्र]] की जानकारी हो सकती है, जैसे स्थान, आकार और निविष्ट या निर्गत आँकड़ा का प्रारूप, चाहे [[डेटा रूपांतरण|आँकड़ा रूपांतरण]] (या अन्य कार्यावधि) (कार्यक्रम जीवनचक्र चरण) | कार्यावधि प्रसंस्करण बारीकियाँ) प्रसंस्करण से पहले या बाद में आवश्यक है (यदि पहले से ही फलन में निहित नहीं है)। तालिका में पंक्ति में अन्य मूल्यों के आधार पर निष्पादित होने वाली सामान्य या अनुकूलित [[भाषा आदिम]] या उपनेमिका्स के लिए सरणी अनुक्रमणिका या सापेक्ष या निरपेक्ष सूचक (संगणक क्रमादेशन) सम्मलित हो सकते हैं या नहीं हो सकते हैं।


नीचे दी गई तालिका केवल 'निविष्ट1' पर लागू होती है क्योंकि तालिका में कोई विशिष्ट निविष्ट निर्दिष्ट नहीं किया गया है।
नीचे दी गई तालिका केवल 'निविष्ट1' पर लागू होती है क्योंकि तालिका में कोई विशिष्ट निविष्ट निर्दिष्ट नहीं किया गया है।
Line 73: Line 73:
'संरचना द्वारा निहित शर्तें और क्रियाएं'
'संरचना द्वारा निहित शर्तें और क्रियाएं'
::{| class="wikitable"
::{| class="wikitable"
| '''(अंतर्निहित) IF ='''|| '''(अंतर्निहित) निष्पादन'''
| '''(implied) IF ='''|| '''(implied) perform'''
|-
|-
| मान|| क्रिया
| value|| action
|-
|-
| मान|| क्रिया
| value|| action
|}
|}
(मान और क्रिया की इस संपार्श्‍व जोड़ी में अनुवृत्त-संचालित क्रमादेशन, अर्थात् अनुवृत्त-निर्धारण' और 'अनुवृत्त-प्रहस्तन' में समानताएं हैं, लेकिन बिना (आवश्यक रूप से) अनुवृत्त की [[अतुल्यकालिक प्रणाली]] प्रकृति)
(मान और क्रिया की इस संपार्श्‍व जोड़ी में अनुवृत्त-संचालित क्रमादेशन, अर्थात् अनुवृत्त-निर्धारण' और 'अनुवृत्त-प्रहस्तन' में समानताएं हैं, लेकिन बिना (आवश्यक रूप से) अनुवृत्त की [[अतुल्यकालिक प्रणाली]] प्रकृति)


नियंत्रण तालिका के अंदर [[Index.php?title=कूटबद्‍ध|कूटबद्‍ध]] किए जा सकने वाले मानों की विविधता काफी हद तक उपयोग की जाने वाली [[कंप्यूटर भाषा|संगणक भाषा]] पर निर्भर करती है। [[सभा की भाषा]] आँकड़ा प्रकारों के लिए सबसे व्यापक गुंजाइश प्रदान करती है, जिसमें (कार्यों के लिए), सीधे निष्पादन योग्य मशीन कूट का विकल्प शामिल है। आम तौर पर एक नियंत्रण तालिका में निविष्ट के प्रत्येक संभावित मिलान वर्ग के लिए एक संबंधित सूचक के साथ एक क्रिया उपनेमिका के लिए मान होंगे। कुछ भाषाएँ सूचक (संगणक क्रमादेशन) (सीधे) का समर्थन नहीं करने का दावा करती हैं, लेकिन इसके बजाय एक ऐरे आँकड़ा संरचना का समर्थन कर सकती हैं, जिसका उपयोग सशर्त निष्पादन करने के लिए 'आपेक्षिक उपनेमिका संख्या' का प्रतिनिधित्व करने के लिए किया जा सकता है, जिसे तालिका प्रविष्टि में मान द्वारा नियंत्रित किया जाता है ( उदाहरण के लिए एक अनुकूलित स्विच प्रकथन, प्रकथन में उपयोग के लिए - शून्य अंतराल (यानी एक बहुधा शाखा) के साथ अभिकल्पना किया गया)।
नियंत्रण तालिका के अंदर [[Index.php?title=कूटबद्‍ध|कूटबद्‍ध]] किए जा सकने वाले मानों की विविधता काफी हद तक उपयोग की जाने वाली [[कंप्यूटर भाषा|संगणक भाषा]] पर निर्भर करती है। [[सभा की भाषा]] आँकड़ा प्रकारों के लिए सबसे व्यापक गुंजाइश प्रदान करती है, जिसमें (कार्यों के लिए), सीधे निष्पादन योग्य मशीन कूट का विकल्प सम्मलित है। आम तौर पर एक नियंत्रण तालिका में निविष्ट के प्रत्येक संभावित मिलान वर्ग के लिए एक संबंधित सूचक के साथ एक क्रिया उपनेमिका के लिए मान होंगे। कुछ भाषाएँ सूचक (संगणक क्रमादेशन) (सीधे) का समर्थन नहीं करने का दावा करती हैं, लेकिन इसके अतिरिक्त एक ऐरे आँकड़ा संरचना का समर्थन कर सकती हैं, जिसका उपयोग सशर्त निष्पादन करने के लिए 'आपेक्षिक उपनेमिका संख्या' का प्रतिनिधित्व करने के लिए किया जा सकता है, जिसे तालिका प्रविष्टि में मान द्वारा नियंत्रित किया जाता है ( उदाहरण के लिए एक अनुकूलित स्विच प्रकथन, प्रकथन में उपयोग के लिए - शून्य अंतराल (अर्थात एक बहुधा शाखा) के साथ अभिकल्पना किया गया)।


प्रत्येक पंक्ति (या यहां तक ​​​​कि अंतःस्थापित पाठीय प्रलेखन) के ऊपर स्थित टिप्पणियां एक निर्णय तालिका को 'मानव पठनीय' प्रस्तुत कर सकती हैं, यहां तक ​​​​कि 'संघनन डाउन' (कूटलेखन के बाद भी इसकी अनिवार्यता (और अभी भी मोटे तौर पर मूल कार्यक्रम विनिर्देश के साथ - विशेष रूप से अगर एक मुद्रित निर्णय तालिका, प्रत्येक अद्वितीय क्रिया की [[गणना]], कोडलेखन शुरू होने से पहले बनाई जाती है)।
प्रत्येक पंक्ति (या यहां तक ​​​​कि अंतःस्थापित पाठीय प्रलेखन) के ऊपर स्थित टिप्पणियां एक निर्णय तालिका को 'मानव पठनीय' प्रस्तुत कर सकती हैं, यहां तक ​​​​कि 'संघनन डाउन' (कूटलेखन के बाद भी इसकी अनिवार्यता (और अभी भी मोटे तौर पर मूल कार्यक्रम विनिर्देश के साथ - विशेष रूप से यदि एक मुद्रित निर्णय तालिका, प्रत्येक अद्वितीय क्रिया की [[गणना]], कोडलेखन आरंभ होने से पहले बनाई जाती है)।
तालिका प्रविष्टियों में 'इन-फ्लाइट' या बाद के अनुकूलन के लिए कार्यावधि आँकड़े एकत्र करने के लिए वैकल्पिक रूप से काउंटर भी हो सकते हैं
तालिका प्रविष्टियों में 'इन-फ्लाइट' या बाद के अनुकूलन के लिए कार्यावधि आँकड़े एकत्र करने के लिए वैकल्पिक रूप से काउंटर भी हो सकते हैं


== तालिका स्थान ==
== तालिका स्थान ==
नियंत्रण तालिका [[स्थैतिक चर]] भण्डारण में, [[सहायक भंडारण]] पर, जैसे कि एक [[Index.php?title=सरल संचिका|सरल संचिका]] या [[डेटाबेस|आँकड़ाबेस]] पर या वैकल्पिक रूप से आंशिक रूप से या पूरी तरह से मापदंडों से क्रमादेश [[बूटिंग]] समय पर गतिशील रूप से निर्मित हो सकते हैं (जो स्वयं एक तालिका में रह सकते हैं)। इष्टतम दक्षता के लिए, जब दुभाषिया इसका उपयोग करना शुरू करता है तो तालिका स्मृतिवासी होनी चाहिए।
नियंत्रण तालिका [[स्थैतिक चर]] भण्डारण में, [[सहायक भंडारण]] पर, जैसे कि एक [[Index.php?title=सरल संचिका|सरल संचिका]] या [[डेटाबेस|आँकड़ाबेस]] पर या वैकल्पिक रूप से आंशिक रूप से या पूरी तरह से मापदंडों से क्रमादेश [[बूटिंग]] समय पर गतिशील रूप से निर्मित हो सकते हैं (जो स्वयं एक तालिका में रह सकते हैं)। इष्टतम दक्षता के लिए, जब दुभाषिया इसका उपयोग करना आरंभ करता है तो तालिका स्मृतिवासी होनी चाहिए।


== दुभाषिया और उपनेमिका्स ==
== दुभाषिया और उपनेमिका्स ==
दुभाषिया को [[उच्च स्तरीय भाषा]] सहित किसी भी उपयुक्त क्रमादेशन भाषा में लिखा जा सकता है। एक उपयुक्त रूप से अभिकल्पित किया गया [[सामान्य प्रोग्रामिंग|सामान्य क्रमादेशन]] दुभाषिया, जेनेरिक उपनेमिका्स के एक अच्छी तरह से चुने गए सेट के साथ (सबसे अधिक होने वाली भाषा आदिम को संसाधित करने में सक्षम), केवल नए कस्टम उपनेमिका्स के लिए अतिरिक्त पारंपरिक कूटलेखन की आवश्यकता होगी (नियंत्रण तालिका को ही निर्दिष्ट करने के अलावा)। दुभाषिया, वैकल्पिक रूप से, केवल एक पूर्ण एप्लिकेशन क्रमादेश (जैसे मेन प्रस्पंद) के कुछ अच्छी तरह से परिभाषित वर्गों पर लागू हो सकता है और अन्य, 'कम सशर्त', अनुभागों (जैसे क्रमादेश आरंभीकरण, समाप्ति और इसी तरह) पर नहीं।
दुभाषिया को [[उच्च स्तरीय भाषा]] सहित किसी भी उपयुक्त क्रमादेशन भाषा में लिखा जा सकता है। एक उपयुक्त रूप से अभिकल्पित किया गया [[सामान्य प्रोग्रामिंग|सामान्य क्रमादेशन]] दुभाषिया, जेनेरिक उपनेमिका्स के एक अच्छी तरह से चुने गए सेट के साथ (सबसे अधिक होने वाली भाषा आदिम को संसाधित करने में सक्षम), केवल नए कस्टम उपनेमिका्स के लिए अतिरिक्त पारंपरिक कूटलेखन की आवश्यकता होगी (नियंत्रण तालिका को ही निर्दिष्ट करने के अतिरिक्त)। दुभाषिया, वैकल्पिक रूप से, केवल एक पूर्ण एप्लिकेशन क्रमादेश (जैसे मेन प्रस्पंद) के कुछ अच्छी तरह से परिभाषित वर्गों पर लागू हो सकता है और अन्य, 'कम सशर्त', अनुभागों (जैसे क्रमादेश आरंभीकरण, समाप्ति और इसी तरह) पर नहीं।


दुभाषिया को अनावश्यक रूप से जटिल होने की आवश्यकता नहीं है, या एक संकलक लेखक के उन्नत ज्ञान के साथ एक क्रमादेशक द्वारा निर्मित किया जा सकता है, और इसे किसी भी अन्य एप्लिकेशन क्रमादेश के रूप में लिखा जा सकता है - सिवाय इसके कि यह आमतौर पर दक्षता को ध्यान में रखकर बनाया गया है। इसका प्राथमिक कार्य तालिका प्रविष्टियों को निर्देशों के एक सेट के रूप में निष्पादित करना है। नियंत्रण तालिका प्रविष्टियों को पार्स करने की कोई आवश्यकता नहीं है और इसलिए इन्हें, जहां तक ​​संभव हो, 'निष्पादन के लिए तैयार' होने के लिए अभिकल्पित किया जाना चाहिए, जिसके लिए उपयुक्त पंक्ति से अनुदेशांतरक के पहले से ही संकलित जेनेरिक कूट में केवल चरों को जोड़ने की आवश्यकता होती है। . [[निर्देश (कंप्यूटर विज्ञान)|निर्देश (संगणक विज्ञान)]], सिद्धांत रूप में, असीम रूप से [[Index.php?title= विस्तरणीय|विस्तरणीय]] हैं और तालिका के अंदर (संभवतः मनमाने) मूल्यों का गठन करते हैं जो केवल दुभाषिया के लिए सार्थक हैं। दुभाषिया का नियंत्रण प्रवाह सामान्य रूप से प्रत्येक तालिका पंक्ति के अनुक्रमिक प्रसंस्करण द्वारा होता है लेकिन तालिका प्रविष्टियों में विशिष्ट क्रियाओं द्वारा संशोधित किया जा सकता है।
दुभाषिया को अनावश्यक रूप से जटिल होने की आवश्यकता नहीं है, या एक संकलक लेखक के उन्नत ज्ञान के साथ एक क्रमादेशक द्वारा निर्मित किया जा सकता है, और इसे किसी भी अन्य एप्लिकेशन क्रमादेश के रूप में लिखा जा सकता है - सिवाय इसके कि यह सामान्यत: दक्षता को ध्यान में रखकर बनाया गया है। इसका प्राथमिक कार्य तालिका प्रविष्टियों को निर्देशों के एक सेट के रूप में निष्पादित करना है। नियंत्रण तालिका प्रविष्टियों को पार्स करने की कोई आवश्यकता नहीं है और इसलिए इन्हें, जहां तक ​​संभव हो, 'निष्पादन के लिए तैयार' होने के लिए अभिकल्पित किया जाना चाहिए, जिसके लिए उपयुक्त पंक्ति से अनुदेशांतरक के पहले से ही संकलित जेनेरिक कूट में केवल चरों को जोड़ने की आवश्यकता होती है। . [[निर्देश (कंप्यूटर विज्ञान)|निर्देश (संगणक विज्ञान)]], सिद्धांत रूप में, असीम रूप से [[Index.php?title= विस्तरणीय|विस्तरणीय]] हैं और तालिका के अंदर (संभवतः मनमाने) मूल्यों का गठन करते हैं जो केवल दुभाषिया के लिए सार्थक हैं। दुभाषिया का नियंत्रण प्रवाह सामान्य रूप से प्रत्येक तालिका पंक्ति के अनुक्रमिक प्रसंस्करण द्वारा होता है लेकिन तालिका प्रविष्टियों में विशिष्ट क्रियाओं द्वारा संशोधित किया जा सकता है।


इस प्रकार इन स्वैच्छिक मूल्यों को [[Index.php?title=कलन विधि दक्षता|कलन विधि दक्षता]] को ध्यान में रखते हुए अभिकल्पना किया जा सकता है - उन मानों का चयन करके जिन्हें आँकड़ा या [[Index.php?title=फलन सूचक|फलन सूचक]] के लिए प्रत्यक्ष अनुक्रमणिका के रूप में उपयोग किया जा सकता है। विशेष प्लेटफॉर्म/संगणक भाषा के लिए, उन्हें विशेष रूप से शाखा तालिका मानों का उपयोग करके [[निर्देश पथ की लंबाई]] को कम करने के लिए अभिकल्पित किया जा सकता है या कुछ मामलों में जैसे कि [[समय-समय पर संकलन]] अनुभाषक में सीधे निष्पादन योग्य मशीन कूट[[स्निपेट (प्रोग्रामिंग)|स्निपेट (क्रमादेशन)]] (या उनके लिए संकेत)।
इस प्रकार इन स्वैच्छिक मूल्यों को [[Index.php?title=कलन विधि दक्षता|कलन विधि दक्षता]] को ध्यान में रखते हुए अभिकल्पना किया जा सकता है - उन मानों का चयन करके जिन्हें आँकड़ा या [[Index.php?title=फलन सूचक|फलन सूचक]] के लिए प्रत्यक्ष अनुक्रमणिका के रूप में उपयोग किया जा सकता है। विशेष प्लेटफॉर्म/संगणक भाषा के लिए, उन्हें विशेष रूप से शाखा तालिका मानों का उपयोग करके [[निर्देश पथ की लंबाई]] को कम करने के लिए अभिकल्पित किया जा सकता है या कुछ स्थितियों में जैसे कि [[समय-समय पर संकलन]] अनुभाषक में सीधे निष्पादन योग्य मशीन कूट[[स्निपेट (प्रोग्रामिंग)|स्निपेट (क्रमादेशन)]] (या उनके लिए संकेत)।


उपनेमकाओं को या तो उसी भाषा में कूटबद्ध किया जा सकता है जिसमें दुभाषिया स्वयं या किसी अन्य समर्थित क्रमादेश भाषा में (बशर्ते कि उपयुक्त अंतर-भाषा 'कॉल' संधान तंत्र मौजूद हो)। अनुदेशांतरक और/या उपनेमिका्स के लिए भाषा का चुनाव आमतौर पर इस बात पर निर्भर करेगा कि इसे विभिन्न [[प्लेटफार्म (कंप्यूटिंग)|प्लेटफार्म (संगणन)]] में कितना पोर्तालिका होना चाहिए। नियंत्रण तालिका के [[Index.php?title=में सुवाह्यता|में सुवाह्यता]] को बढ़ाने के लिए दुभाषिया के कई संस्करण हो सकते हैं। एक अधीनस्थ नियंत्रण तालिका सूचक वैकल्पिक रूप से 'संक्रिया' पंक्ति में एक उपनेमिका सूचक के लिए स्थानापन्न कर सकता है यदि दुभाषिया इस निर्माण का समर्थन करता है, एक पारंपरिक [[संरचित प्रोग्रामिंग|संरचित क्रमादेशन]] संरचना की नकल करते हुए एक निचले तार्किक स्तर पर एक सशर्त 'मात्रा' का प्रतिनिधित्व करता है।
उपनेमकाओं को या तो उसी भाषा में कूटबद्ध किया जा सकता है जिसमें दुभाषिया स्वयं या किसी अन्य समर्थित क्रमादेश भाषा में (बशर्ते कि उपयुक्त अंतर-भाषा 'कॉल' संधान तंत्र सम्मलित हो)। अनुदेशांतरक और/या उपनेमिका्स के लिए भाषा का चुनाव सामान्यत: इस बात पर निर्भर करेगा कि इसे विभिन्न [[प्लेटफार्म (कंप्यूटिंग)|प्लेटफार्म (संगणन)]] में कितना पोर्तालिका होना चाहिए। नियंत्रण तालिका के [[Index.php?title=में सुवाह्यता|में सुवाह्यता]] को बढ़ाने के लिए दुभाषिया के कई संस्करण हो सकते हैं। एक अधीनस्थ नियंत्रण तालिका सूचक वैकल्पिक रूप से 'संक्रिया' पंक्ति में एक उपनेमिका सूचक के लिए स्थानापन्न कर सकता है यदि दुभाषिया इस निर्माण का समर्थन करता है, एक पारंपरिक [[संरचित प्रोग्रामिंग|संरचित क्रमादेशन]] संरचना की नकल करते हुए एक निचले तार्किक स्तर पर एक सशर्त 'मात्रा' का प्रतिनिधित्व करता है।


== प्रदर्शन विचार ==
== प्रदर्शन विचार ==
पहली नजर में, नियंत्रण तालिकाओं का उपयोग एक कार्यक्रम के संगणनात्मक उपरिव्यय में काफी कुछ जोड़ने के लिए प्रतीत होता है, जिसके लिए 'मूल' क्रमादेशन भाषा के बयानों को निष्पादित करने से पहले एक दुभाषिया प्रक्रिया की आवश्यकता होती है। हालांकि हमेशा ऐसा नहीं होता है। तर्क से निष्पादन योग्य कूटलेखन को अलग (या 'प्रावरण') करके, जैसा कि तालिका में व्यक्त किया गया है, इसे अपने कार्य को सबसे अधिक कुशलता से करने के लिए अधिक आसानी से लक्षित किया जा सकता है। यह एक [[स्प्रेडशीट]] एप्लिकेशन में सबसे स्पष्ट रूप से अनुभव किया जा सकता है - जहां अंतर्निहित स्प्रेडशीट सॉफ़्टवेयर अपने परिणामों को प्रदर्शित करने के लिए पारदर्शी रूप से जटिल तार्किक 'सूत्रों' को सबसे कुशल तरीके से परिवर्तित करता है।
पहली नजर में, नियंत्रण तालिकाओं का उपयोग एक कार्यक्रम के संगणनात्मक उपरिव्यय में काफी कुछ जोड़ने के लिए प्रतीत होता है, जिसके लिए 'मूल' क्रमादेशन भाषा के बयानों को निष्पादित करने से पहले एक दुभाषिया प्रक्रिया की आवश्यकता होती है। चूंकि हमेशा ऐसा नहीं होता है। तर्क से निष्पादन योग्य कूटलेखन को अलग (या 'प्रावरण') करके, जैसा कि तालिका में व्यक्त किया गया है, इसे अपने कार्य को सबसे अधिक कुशलता से करने के लिए अधिक आसानी से लक्षित किया जा सकता है। यह एक [[स्प्रेडशीट]] एप्लिकेशन में सबसे स्पष्ट रूप से अनुभव किया जा सकता है - जहां अंतर्निहित स्प्रेडशीट सॉफ़्टवेयर अपने परिणामों को प्रदर्शित करने के लिए पारदर्शी रूप से जटिल तार्किक 'सूत्रों' को सबसे कुशल तरीके से परिवर्तित करता है।


नीचे दिए गए उदाहरणों को संभावित प्रदर्शन लाभों को स्पष्ट करने के लिए आंशिक रूप से चुना गया है जो न केवल अमूर्तता के अतिरिक्त स्तर के लिए महत्वपूर्ण रूप से क्षतिपूर्ति कर सकते हैं, बल्कि सुधार भी कर सकते हैं - अन्यथा क्या हो सकता था - कम कुशल, कम रखरखाव योग्य और लंबा कूट। यद्यपि दिए गए उदाहरण एक 'निम्न स्तर' समुच्चय भाषा और c (भाषा) के लिए हैं, यह देखा जा सकता है, दोनों ही मामलों में, नियंत्रण तालिका दृष्टिकोण को लागू करने के लिए कूट की बहुत कम पंक्तियों की आवश्यकता होती है और फिर भी बहुत महत्वपूर्ण हासिल कर सकते हैं [[वाचाल]] पारंपरिक क्रमादेश भाषा निर्माण की तुलना में निरंतर समय प्रदर्शन में सुधार, दोहराव वाले स्रोत कूटलेखन को कम करना और सहायता स्पष्टता। इस लेख में तालिकाओं और बहुधा शाखा की दक्षता से संबंधित [[डोनाल्ड नुथ]] द्वारा नियंत्रण तालिका#अंतरालक भी देखें।
नीचे दिए गए उदाहरणों को संभावित प्रदर्शन लाभों को स्पष्ट करने के लिए आंशिक रूप से चुना गया है जो न केवल अमूर्तता के अतिरिक्त स्तर के लिए महत्वपूर्ण रूप से क्षतिपूर्ति कर सकते हैं, बल्कि सुधार भी कर सकते हैं - अन्यथा क्या हो सकता था - कम कुशल, कम रखरखाव योग्य और लंबा कूट। यद्यपि दिए गए उदाहरण एक 'निम्न स्तर' समुच्चय भाषा और c (भाषा) के लिए हैं, यह देखा जा सकता है, दोनों ही स्थितियों में, नियंत्रण तालिका दृष्टिकोण को लागू करने के लिए कूट की बहुत कम पंक्तियों की आवश्यकता होती है और फिर भी बहुत महत्वपूर्ण हासिल कर सकते हैं [[वाचाल]] पारंपरिक क्रमादेश भाषा निर्माण की तुलना में निरंतर समय प्रदर्शन में सुधार, दोहराव वाले स्रोत कूटलेखन को कम करना और सहायता स्पष्टता। इस लेख में तालिकाओं और बहुधा शाखा की दक्षता से संबंधित [[डोनाल्ड नुथ]] द्वारा नियंत्रण तालिका#अंतरालक भी देखें।


== नियंत्रण तालिकाओं के उदाहरण ==
== नियंत्रण तालिकाओं के उदाहरण ==
निम्नलिखित उदाहरण मनमाने हैं (और सादगी के लिए केवल एक निविष्ट पर आधारित हैं), हालांकि लक्षय केवल यह प्रदर्शित करना है कि नियमित क्रमादेश प्रकथन के बजाय तालिकाओं के उपयोग के माध्यम से नियंत्रण प्रवाह को कैसे प्रभावित किया जा सकता है। यह स्पष्ट होना चाहिए कि इस तकनीक को कई निविष्ट से निपटने के लिए आसानी से विस्तारित किया जा सकता है, या तो पंक्ति की संख्या बढ़ाकर या एकाधिक तालिका प्रविष्टियों (वैकल्पिक और/या निपातके साथ) का उपयोग करके। इसी तरह, (पदानुक्रमित) 'सहलग्‍न' नियंत्रण तालिकाओं का उपयोग करके, संरचित क्रमादेशन को पूरा किया जा सकता है (वैकल्पिक रूप से अधीनस्थ नियंत्रण तालिकाओं को उजागर करने में मदद करने के लिए आद्यपर्वतनी का उपयोग करना)।
निम्नलिखित उदाहरण मनमाने हैं (और सादगी के लिए केवल एक निविष्ट पर आधारित हैं), चूंकि लक्षय केवल यह प्रदर्शित करना है कि नियमित क्रमादेश प्रकथन के अतिरिक्त तालिकाओं के उपयोग के माध्यम से नियंत्रण प्रवाह को कैसे प्रभावित किया जा सकता है। यह स्पष्ट होना चाहिए कि इस तकनीक को कई निविष्ट से निपटने के लिए आसानी से विस्तारित किया जा सकता है, या तो पंक्ति की संख्या बढ़ाकर या एकाधिक तालिका प्रविष्टियों (वैकल्पिक और/या निपातके साथ) का उपयोग करके। इसी तरह, (पदानुक्रमित) 'सहलग्‍न' नियंत्रण तालिकाओं का उपयोग करके, संरचित क्रमादेशन को पूरा किया जा सकता है (वैकल्पिक रूप से अधीनस्थ नियंत्रण तालिकाओं को उजागर करने में मदद करने के लिए आद्यपर्वतनी का उपयोग करना)।


CT1 नियंत्रण तालिका का एक उदाहरण है जो एक साधारण लुकअप तालिका है। पहला पंक्ति परीक्षण किए जाने वाले निविष्ट मान का प्रतिनिधित्व करता है (अंतर्निहित 'IF input1 = x' द्वारा) और, यदि TRUE है, तो संबंधित दूसरा पंक्ति ('कार्रवाई') में [[सिस्टम कॉल]] (या [[के लिए जाओ]]) द्वारा निष्पादित करने के लिए एक उपनेमिका पता होता है - स्विच प्रकथन प्रकथन के समान)। वास्तव में, यह वापसी के साथ एक बहुधा शाखा है ([[गतिशील प्रेषण]] का एक रूप)। अंतिम प्रविष्टि स्वतः निर्धारित मामला है जहां कोई मेल नहीं मिला।
CT1 नियंत्रण तालिका का एक उदाहरण है जो एक साधारण लुकअप तालिका है। पहला पंक्ति परीक्षण किए जाने वाले निविष्ट मान का प्रतिनिधित्व करता है (अंतर्निहित 'IF input1 = x' द्वारा) और, यदि TRUE है, तो संबंधित दूसरा पंक्ति ('कार्रवाई') में [[सिस्टम कॉल]] (या [[के लिए जाओ]]) द्वारा निष्पादित करने के लिए एक उपनेमिका पता होता है - स्विच प्रकथन प्रकथन के समान)। वास्तव में, यह वापसी के साथ एक बहुधा शाखा है ([[गतिशील प्रेषण]] का एक रूप)। अंतिम प्रविष्टि स्वतः निर्धारित मामला है जहां कोई मेल नहीं मिला।


'''CT1'''
'''CT1'''
:{| class="wikitable"
:{| class="wikitable"
! input 1!! [[pointer (computer programming)|pointer]]
! input 1!! [[Index.php?title=Index.php?title=pointer (computer programming)|pointer]]
|-
|-
| '''A''' || -->Add
| '''A''' || -->Add
Line 126: Line 126:
आईबीएम/360 (अधिकतम 16Mb एड्रेस श्रेणी) या Z/संरचना के लिए समुच्चय भाषा का उदाहरण
आईबीएम/360 (अधिकतम 16Mb एड्रेस श्रेणी) या Z/संरचना के लिए समुच्चय भाषा का उदाहरण


इस पहले उदाहरण के लिए कूटलेखन में लुकअप को अनुकूलित करने का कोई प्रयास नहीं किया गया है, और इसके बजाय यह एक सरल रेखीय खोज तकनीक का उपयोग करता है - विशुद्ध रूप से अवधारणा को स्पष्ट करने और कम स्रोत पंक्तियों को प्रदर्शित करने के लिए। सभी 256 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूट की लगभग 265 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि कई 'तुलना और शाखा' के लिए सामान्य रूप से लगभग 512 स्रोत पंक्तियों की आवश्यकता होगी ([[बाइनरी फ़ाइल|द्विआधारी संचिका]] का आकार भी लगभग आधा है) , प्रत्येक तालिका प्रविष्टि को 'तत्काल तुलना करें'/शाखा निर्देशों की एक श्रृंखला के लिए लगभग 8 बाइट्स के बजाय केवल 4 बाइट्स की आवश्यकता होती है (बड़े निविष्ट चर के लिए, बचत और भी अधिक होती है)।
इस पहले उदाहरण के लिए कूटलेखन में लुकअप को अनुकूलित करने का कोई प्रयास नहीं किया गया है, और इसके अतिरिक्त यह एक सरल रेखीय खोज तकनीक का उपयोग करता है - विशुद्ध रूप से अवधारणा को स्पष्ट करने और कम स्रोत पंक्तियों को प्रदर्शित करने के लिए। सभी 256 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूट की लगभग 265 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि कई 'तुलना और शाखा' के लिए सामान्य रूप से लगभग 512 स्रोत पंक्तियों की आवश्यकता होगी ([[बाइनरी फ़ाइल|द्विआधारी संचिका]] का आकार भी लगभग आधा है) , प्रत्येक तालिका प्रविष्टि को 'तत्काल तुलना करें'/शाखा निर्देशों की एक श्रृंखला के लिए लगभग 8 बाइट्स के अतिरिक्त केवल 4 बाइट्स की आवश्यकता होती है (बड़े निविष्ट चर के लिए, बचत और भी अधिक होती है)।


  * ------------------ दुभाषिया ------------------------------ --------------*
  * ------------------ interpreter --------------------------------------------*
             LM R14,R0,=A(4,CT1,N) सेट करें R14=4, R15 --> तालिका, और R0 = संख्या। तालिका में प्रविष्टियों की संख्या (एन)
 
   CLC INPUT1,0(R15) का प्रयास करें ********* तालिका प्रविष्टि में मूल्य मिला?
             LM     R14,R0,=A(4,CT1,N)               Set R14=4, R15 --> table, and R0 =no. of entries in table (N)
             कार्रवाई हो * पाश * हाँ, तालिका से उप-दिनचर्या में लोड रजिस्टर सूचक
   TRY      CLC   INPUT1,0(R15)         ********* Found value in table entry ?
             AR R15,R14 * * नहीं, R14 (=4) जोड़कर CT1 में अगली प्रविष्टि की ओर इशारा करें
             BE    ACTION                * loop  * YES, Load register pointer to sub-routine from table
             बीसीटी आर0, कोशिश करें ********* गिनती समाप्त होने तक वापस जाएं, फिर छोड़ें
             AR     R15,R14               *       * NO, Point to next entry in CT1 by adding R14 (=4)
   . स्वतः निर्धारित क्रिया ... तालिका में कोई भी मान मेल नहीं खाता, कुछ और करें
             BCT    R0,TRY                ********* Back until count exhausted, then drop through
             LA R15,4(R15) बिंदु से स्वतः निर्धारित प्रविष्टि (तालिका के अंत से परे)
   .             default action                          ... none of the values in table match, do something else
   कार्रवाई एल R15,0(R15) R15 में सूचक मिलता है, जहां से R15 अंक
             LA     R15,4(R15)                       point to default entry (beyond table end)
             BALR R14, R15 उप-दिनचर्या (कॉल और वापसी) करें
   ACTION  L      R15,0(R15)                       get pointer into R15,from where R15 points
             B END जाओ इस कार्यक्रम को समाप्त करो
             BALR   R14,R15                         Perform the sub-routine ("CALL" and return)
   * ------------------ कंट्रोल तालिका -------------------------------------------- ------------*
             B     END                             go terminate this program
   * | स्वीकार्य ईबीसीडीआईसी या ASCII मानों के इस पंक्ति का परीक्षण '=' चर 'input1' के विरुद्ध किया जाता है
   * ------------------ control table -----------------------------------------*
   * | | यह पंक्ति उपयुक्त उपनेमिका का 3-बाइट पता है
   *                 | this column of allowable EBCDIC or ASCII values is tested '=' against variable 'input1'
   * वि वि
   *                 |     | this column is the 3-byte address of the appropriate subroutine
   CT1 DC C'A', AL3(ADD) कंट्रोल तालिका का स्टार्ट (4 बाइट एंट्री लेंथ)
   *                 v      v
             DC C'S', AL3 (घटाना)
   '''CT1'''      DC     C'A',AL3(ADD)                   START of Control Table (4 byte entry length)
             DC C'M', AL3 (गुणा करें)
             DC     C'S',AL3(SUBTRACT)
             DC C'D', AL3 (डिवाइड)
             DC     C'M',AL3(MULTIPLY)
   N EQU (*-CT1)/4 तालिका में मान्य प्रविष्टियों की संख्या (कुल लंबाई / प्रविष्टि लंबाई)
             DC     C'D',AL3(DIVIDE)
             DC C'?',AL3(स्वतः निर्धारित) स्वतः निर्धारित प्रविष्टि - सभी को पकड़ने के लिए ड्रॉप थ्रू पर उपयोग की जाती है
   N       EQU   (*-CT1)/4                       number of valid entries in table (total length / entry length)
   INPUT1 DS C निविष्ट वेरिएबल इस वेरिएबल में है
             DC     C'?',AL3(DEFAULT)               default entry – used on drop through to catch all
   * ------------------ उप-दिनचर्या ---------------------------- --------------*
   INPUT1   DS     C                               input variable is in this variable
   जोड़ें CSECT उप-दिनचर्या #1 (यहाँ अलग CSECT के रूप में दिखाया गया है लेकिन हो सकता है
   * ------------------ sub-routines ------------------------------------------*
   . वैकल्पिक रूप से इन-लाइन कूटहो)
   ADD      CSECT                                   sub-routine #1 (shown as separate CSECT here but might
   . जोड़ने के लिए निर्देश
   .                                                               alternatively be in-line code)
             बीआर आर14 वापसी
   .           instruction(s) to add
   घटाएँ CSECT उप-दिनचर्या #2
             BR    R14                              return
   . घटाने के लिए निर्देश (ओं)
   SUBTRACT CSECT                                   sub-routine #2
             बीआर आर14 वापसी
   .           instruction(s) to subtract
   . वगैरह..
             BR    R14                              return
   . etc..
उपरोक्त उदाहरण में दुभाषिया के प्रदर्शन में सुधार
उपरोक्त उदाहरण में दुभाषिया के प्रदर्शन में सुधार


Line 166: Line 167:


64 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूट(या कम) की लगभग 85 पंक्तियों की आवश्यकता होती है (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 128 पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है - दूसरी अनुक्रमणिका निकालने के लिए आवश्यक अतिरिक्त 256 बाइट तालिका के बावजूद)।
64 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूट(या कम) की लगभग 85 पंक्तियों की आवश्यकता होती है (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 128 पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है - दूसरी अनुक्रमणिका निकालने के लिए आवश्यक अतिरिक्त 256 बाइट तालिका के बावजूद)।
  * ------------------ दुभाषिया ------------------------------ --------------*
    * ------------------ interpreter --------------------------------------------*
            SR R14,R14 ********* सेट R14=0
  CALC IC R14, INPUT1 * calc * ईबीसीडीआईसी बाइट को R14 के लो ऑर्डर बिट्स (24–31) में डालें
            IC R14, CT1X (R14) * * ईबीसीडीआईसी वैल्यू को तालिका 'CT1X' पर इंडेक्स के रूप में उपयोग करके नया इंडेक्स प्राप्त करें
  FOUND L R15, CT1(R14) ********* इंडेक्स (0,4, 8 आदि) का उपयोग करके उपनेमिका के लिए सूचक प्राप्त करें।
            BALR R14, R15 सब-रूटीन निष्पादित करें (कॉल करें और वापसी या स्वतः निर्धारित)
            B END जाओ इस कार्यक्रम को समाप्त करो
  * --------------- अतिरिक्त ट्रांसलेट तालिका (ईबीसीडीआईसी --> सूचक तालिका INDEX) 256 बाइट्स ----*
  CT1X DC 12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) x'00 के 16 बाइट्स के 12 समान सेट
  * X'00 - x'BF' का प्रतिनिधित्व
            DC AL1(00,'04',00,00,'16',00,00,00,00,00,00,00,00,00,00,00) ..x'C0' - X'CF'
            DC AL1(00,00,00,00,'12',00,00,00,00,00,00,00,00,00,00,00) ..x'D0' - X'DF'
            DC AL1(00,00,'08',00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'E0' - X'EF'
            DC AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'F0' - X'FF'
  * कोडांतरक का उपयोग स्वचालित रूप से सूचकांक मूल्यों की गणना करने और मूल्यों को अधिक उपयोगकर्ता के अनुकूल बनाने के लिए किया जा सकता है
  * (उदाहरण के लिए '04' को उपरोक्त तालिका CT1X में प्रतीकात्मक अभिव्यक्ति 'PADD-CT1' से बदला जा सकता है)
  * संशोधित CT1 (सूचकांक = 00, एकल आयाम, पूर्ण 31 बिट पता होने पर एक स्वतः निर्धारित क्रिया जोड़ा गया)
  'CT1' DC A(स्वतः निर्धारित) इंडेक्स =00 कंट्रोल तालिका का स्टार्ट (4 बाइट एड्रेस कॉन्स्टेंट)
  पीएडीडी डीसी ए (एडीडी) = 04
  पीएसयूबी डीसी ए (घटाना) = 08
  पीएमयूएल डीसी ए (गुणा) =12
  पीडीआईवी डीसी ए (डिवाइड) =16
  * शेष कूटपहले उदाहरण के समान ही रहता है


            SR    R14,R14              *********  Set R14=0
  CALC    IC    R14,INPUT1            * calc  *  put EBCDIC byte into lo order bits (24–31) of R14
            IC    R14,CT1X(R14)        *      *  use EBCDIC value as index on table 'CT1X' to get new index
  FOUND    L      R15,CT1(R14)          *********  get pointer to subroutine using index (0,4, 8 etc.)
            BALR  R14,R15                          Perform the sub-routine ("CALL" and return or Default)
            B      END                              go terminate this program
  * --------------- additional translate table (EBCDIC --> pointer table INDEX)  256 bytes----*
  CT1X    DC    12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)  12 identical sets of 16 bytes of x'00
  *                                                                        representing X'00 – x'BF'
            DC    AL1(00,'''04''',00,00,'''16''',00,00,00,00,00,00,00,00,00,00,00)      ..x'C0' – X'CF'
            DC    AL1(00,00,00,00,'''12''',00,00,00,00,00,00,00,00,00,00,00)      ..x'D0' – X'DF'
            DC    AL1(00,00,'''08''',00,00,00,00,00,00,00,00,00,00,00,00,00)      ..x'E0' – X'EF'
            DC    AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)      ..x'F0' – X'FF'
  * the assembler can be used to automatically calculate the index values and make the values more user friendly
  * (for e.g. '04' could be replaced with the symbolic expression 'PADD-CT1' in table CT1X above)
  * modified CT1 (added a default action when index = 00, single dimension, full 31 bit address)
  '''CT1'''      DC    A(DEFAULT)          index      =00      START of Control Table (4 byte address constants)
  PADD    DC    A(ADD)                          =04
  PSUB    DC    A(SUBTRACT)                    =08
  PMUL    DC    A(MULTIPLY)                    =12
  PDIV    DC    A(DIVIDE)                      =16
  * the rest of the code remains the same as first example
'आगे बेहतर दुभाषिया' (औसत पर पहले उदाहरण की तुलना में '21 गुना कम निष्पादित निर्देश (जहां n> = 64)' और कई तुलनाओं का उपयोग करके 42 गुना कम की आवश्यकता होगी)।
'आगे बेहतर दुभाषिया' (औसत पर पहले उदाहरण की तुलना में '21 गुना कम निष्पादित निर्देश (जहां n> = 64)' और कई तुलनाओं का उपयोग करके 42 गुना कम की आवश्यकता होगी)।


256 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूटया उससे कम की लगभग 280 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ), जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 512 पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है)।
256 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूटया उससे कम की लगभग 280 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ), जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 512 पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है)।


  * ------------------ दुभाषिया ------------------------------ --------------*
    * ------------------ interpreter --------------------------------------------*
            SR R14,R14 ********* सेट R14=0
  CALC IC R14, INPUT1 * calc * ईबीसीडीआईसी बाइट को R14 के लो ऑर्डर बिट्स (24–31) में डालें
            IC R14, CT1X(R14) * * ईबीसीडीआईसी v का उपयोग करेंनई अनुक्रमणिका प्राप्त करने के लिए तालिका 'CT1X' पर अनुक्रमणिका के रूप में alue
            SLL R14,2 * * 'सूचकांक को 4 से गुणा करें (अतिरिक्त निर्देश)'
  FOUND L R15, CT1(R14) ********* इंडेक्स (0,4, 8 आदि) का उपयोग करके उपनेमिका के लिए सूचक प्राप्त करें।
            BALR R14, R15 सब-रूटीन निष्पादित करें (कॉल करें और वापसी या स्वतः निर्धारित)
            B END जाओ इस कार्यक्रम को समाप्त करो
  * --------------- अतिरिक्त ट्रांसलेट तालिका (ईबीसीडीआईसी --> सूचक तालिका INDEX) 256 बाइट्स ----*
  CT1X DC 12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) x'00' के 16 बाइट्स के 12 समान सेट
  * X'00 - x'BF' का प्रतिनिधित्व
            DC AL1(00,'01',00,00,'04',00,00,00,00,00,00,00,00,00,00,00) ..x'C0' - X'CF'
            DC AL1(00,00,00,00,'03',00,00,00,00,00,00,00,00,00,00,00) ..x'D0' - X'DF'
            DC AL1(00,00,'02',00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'E0' - X'EF'
            DC AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'F0' - X'FF'
  * कोडांतरक का उपयोग स्वचालित रूप से सूचकांक मूल्यों की गणना करने और मूल्यों को अधिक उपयोगकर्ता के अनुकूल बनाने के लिए किया जा सकता है
  * (उदाहरण के लिए '01' को उपरोक्त तालिका CT1X में प्रतीकात्मक अभिव्यक्ति 'PADD-CT1/4' से बदला जा सकता है)
  * संशोधित CT1 (इंडेक्स अब 0,1,2,3,4 नहीं 0,4,8,12,16 पर आधारित है, ताकि सभी 256 विविधताओं को अनुमति दी जा सके)
  'CT1' DC A(स्वतः निर्धारित) इंडेक्स =00 कंट्रोल तालिका का स्टार्ट (4 बाइट एड्रेस कॉन्स्टेंट)
  पीएडीडी डीसी ए (एडीडी) = 01
  पीएसयूबी डीसी ए (घटाना) = 02
  पीएमयूएल डीसी ए (गुणा) = 03
  पीडीआईवी डीसी ए (डिवाइड) = 04
  * शेष कूटदूसरे उदाहरण के समान ही रहता है


'[[सी (प्रोग्रामिंग भाषा)|सी (क्रमादेशन भाषा)]] उदाहरण'
            SR    R14,R14              *********  Set R14=0
  CALC    IC    R14,INPUT1            * calc  *  put EBCDIC byte into lo order bits (24–31) of R14
            IC    R14,CT1X(R14)        *      *  use EBCDIC value as index on table 'CT1X' to get new index
            SLL    R14,2                *      *  '''multiply index by 4 (additional instruction)'''
  FOUND    L      R15,CT1(R14)          *********  get pointer to subroutine using index (0,4, 8 etc.)
            BALR  R14,R15                          Perform the sub-routine ("CALL" and return or Default)
            B      END                              go terminate this program
  * --------------- additional translate table (EBCDIC --> pointer table INDEX)  256 bytes----*
  CT1X    DC    12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)  12 identical sets of 16 bytes of x'00'
  *                                                                        representing X'00 – x'BF'
            DC    AL1(00,'''01''',00,00,'''04''',00,00,00,00,00,00,00,00,00,00,00)      ..x'C0' – X'CF'
            DC    AL1(00,00,00,00,'''03''',00,00,00,00,00,00,00,00,00,00,00)      ..x'D0' – X'DF'
            DC    AL1(00,00,'''02''',00,00,00,00,00,00,00,00,00,00,00,00,00)      ..x'E0' – X'EF'
            DC    AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)      ..x'F0' – X'FF'
  * the assembler can be used to automatically calculate the index values and make the values more user friendly
  * (for e.g. '01' could be replaced with the symbolic expression 'PADD-CT1/4' in table CT1X above)
  * modified CT1 (index now based on 0,1,2,3,4  not 0,4,8,12,16 to allow all 256 variations)
  '''CT1'''      DC    A(DEFAULT)          index      =00      START of Control Table (4 byte address constants)
  PADD    DC    A(ADD)                          =01
  PSUB    DC    A(SUBTRACT)                    =02
  PMUL    DC    A(MULTIPLY)                    =03
  PDIV    DC    A(DIVIDE)                      =04
  * the rest of the code remains the same as the 2nd example
'''<nowiki/>'[[सी (प्रोग्रामिंग भाषा)|सी (क्रमादेशन भाषा)]]''' उदाहरण'
सा (क्रमादेशन भाषा) में यह उदाहरण दो तालिकाओं का उपयोग करता है, पहला (CT1) एक सरल रैखिक खोज एक-आयामी लुकअप तालिका है - निविष्ट (x), और दूसरा, संबद्ध तालिका (CT1p) का मिलान करके एक सूचकांक प्राप्त करने के लिए। जाने के लिए लेबल के पतों की एक तालिका है।
सा (क्रमादेशन भाषा) में यह उदाहरण दो तालिकाओं का उपयोग करता है, पहला (CT1) एक सरल रैखिक खोज एक-आयामी लुकअप तालिका है - निविष्ट (x), और दूसरा, संबद्ध तालिका (CT1p) का मिलान करके एक सूचकांक प्राप्त करने के लिए। जाने के लिए लेबल के पतों की एक तालिका है।
<वाक्यविन्यास प्रकाश लैंग = सी>
<वाक्यविन्यास प्रकाश लैंग = सी>
  स्थिर स्थिरांक चार CT1 [] = {, एस, एम, डी}; / * अनुमत निविष्ट मान * /
  static const char CT1[] = { "A",   "S",       "M",       "D" };                         /* permitted input  values */
स्थिर स्थिरांक शून्य *CT1p[] = {&&जोड़ें, &&घटाना, &&गुणा करें, &&विभाजित करें, &&स्वतः निर्धारित}; /* गोटो और स्वतः निर्धारित के लिए लेबल*/
  static const void *CT1p[] = { &&Add, &&Subtract, &&Multiply, &&Divide, &&Default};           /* labels to goto & default*/
for (int i = 0; i < sizeof(CT1); i++) /* ASCII मानों के माध्यम से प्रस्पंद */
  for (int i = 0; i < sizeof(CT1); i++)     /* loop thru ASCII values                                                    */
  {अगर (x==CT1[i]) गोटो *CT1p[i]; } /* मिला --> उपयुक्त लेबल */
 
गोटो *CT1p[i+1]; /* नहीं मिला --> स्वतः निर्धारित लेबल */
    {if (x==CT1[i]) goto *CT1p[i]; }       /* found --> appropriate label                                              */
    goto *CT1p[i+1];                           /* not found --> default label                                              */
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
इसे और अधिक कुशल बनाया जा सकता है यदि एक 256 बाइट तालिका का उपयोग कच्चे ASCII मान (x) को सीधे एक सघन अनुक्रमिक सूचकांक मान में अनुवाद करने के लिए किया जाता है, जिसका उपयोग सीधे CT1p से शाखा के पते का पता लगाने के लिए किया जाता है (अर्थात बाइट-वाइड सरणी के साथ [[सूचकांक मानचित्रण]]) . इसके बाद यह x के सभी संभावित मानों के लिए निरंतर समय में निष्पादित होगा (यदि CT1 p में सूचक के बजाय फलन के नाम शामिल हैं, तो स्विच-जैसी गोटो को समाप्त करते हुए जंप को  गतिक फलन कॉल से बदला जा सकता है - लेकिन अतिरिक्त लागत से प्रदर्शन में कमी फलन [[Index.php?title=प्रबंधन (संगणन)|प्रबंधन (संगणन)]])।
इसे और अधिक कुशल बनाया जा सकता है यदि एक 256 बाइट तालिका का उपयोग कच्चे ASCII मान (x) को सीधे एक सघन अनुक्रमिक सूचकांक मान में अनुवाद करने के लिए किया जाता है, जिसका उपयोग सीधे CT1p से शाखा के पते का पता लगाने के लिए किया जाता है (अर्थात बाइट-वाइड सरणी के साथ [[सूचकांक मानचित्रण]]) . इसके बाद यह x के सभी संभावित मानों के लिए निरंतर समय में निष्पादित होगा (यदि CT1 p में सूचक के अतिरिक्त फलन के नाम सम्मलित हैं, तो स्विच-जैसी गोटो को समाप्त करते हुए जंप को  गतिक फलन कॉल से बदला जा सकता है - लेकिन अतिरिक्त लागत से प्रदर्शन में कमी फलन [[Index.php?title=प्रबंधन (संगणन)|प्रबंधन (संगणन)]])।
<वाक्यविन्यास प्रकाश लैंग = सी>
<वाक्यविन्यास प्रकाश लैंग = सी>
  स्थैतिक स्थिरांक शून्य *CT1p[] = {&&स्वतः निर्धारित, &&जोड़ें, &&घटाना, &&गुणा, &&विभाजित करें};
  static const void *CT1p[] = {&&Default, &&Add, &&Subtract, &&Multiply, &&Divide};
/* नीचे दी गई 256 बाइट तालिका, संबंधित ASCII स्थितियों (A,S,M,D) में मान (1,2,3,4) रखती है, अन्य सभी 0x00 पर सेट हैं */
  /* the 256 byte table, below, holds values (1,2,3,4), in corresponding ASCII positions (A,S,M,D), all others set to 0x00 */
स्थिर स्थिरांक चार CT1x [] = {
 
  static const char CT1x[]={
             '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
             '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
             '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00','\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
             '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00','\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
Line 248: Line 251:
             '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
             '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
             '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00'};
             '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00'};
/ * निविष्ट वर्ण (x) के मान की परवाह किए बिना, निम्न कूटनिरंतर समय में निष्पादित होगा * /
  /* the following code will execute in constant time, irrespective of the value of the input character (x)                   */
मैं = CT1x (एक्स); /* तालिका CT1x से सही उपनेमका अनुक्रमणिका निकालें इसके ASCII मान का प्रारंभ में एक अनुक्रमणिका के रूप में उपयोग करके */
 
गोटो *CT1p[i]; /* गोटो (इस पर स्विच करें) इंडेक्स से संबंधित लेबल (0=स्वतः निर्धारित, 1=जोड़ें, 2=घटाना,) - CT1p देखें */
  i = CT1x(x);           /* extract the correct subroutine index from table CT1x using its ASCII value as an index initially  */
  goto *CT1p[i];         /* goto (Switch to) the label corresponding to the index (0=default, 1=Add, 2=Subtract,.) - see CT1p */
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


Line 257: Line 261:
''''CT2'''<nowiki/>'
''''CT2'''<nowiki/>'
:{| class="wikitable"
:{| class="wikitable"
! निविष्ट1!! '''subr #'''
! input 1!! '''subr #'''
|-
|-
| '''A''' || '''1'''
| '''A''' || '''1'''
Line 272: Line 276:
:: CT2P सूचक सरणी
:: CT2P सूचक सरणी
::{| class="wikitable"
::{| class="wikitable"
! सूचक सरणी!!
! '''pointer array'''!!
|-
|-
| '''-->default'''
| '''-->default'''
Line 286: Line 290:
| '''-->?other'''
| '''-->?other'''
|}
|}
बहु-आयामी नियंत्रण तालिकाओं का निर्माण किया जा सकता है (अर्थात अनुकूलित) जो उपरोक्त उदाहरणों की तुलना में 'अधिक जटिल' हो सकता है जो कई निविष्ट पर कई स्थितियों के लिए परीक्षण कर सकता है या कुछ मिलान मानदंडों के आधार पर एक से अधिक 'कार्रवाई' कर सकता है। एक 'कार्रवाई' में एक अन्य अधीनस्थ नियंत्रण तालिका में सूचक शामिल हो सकता है। नीचे दिए गए सरल उदाहरण में एक अतिरिक्त पंक्ति (लघु अक्षर निविष्ट को संभालने के लिए) के रूप में निहित 'OR' शर्त शामिल है, हालांकि इस उदाहरण में, इसे निर्दिष्ट करते हुए प्रत्येक लघु अक्षर वर्णों के लिए एक अतिरिक्त प्रविष्टि होने से समान रूप से नियंत्रित किया जा सकता है। ऊपरी केस वर्णों के समान उपनेमिका पहचानकर्ता)। प्रत्येक निविष्ट के लिए वास्तविक कार्यावधि अनुवृत्तओं की गणना करने के लिए एक अतिरिक्त पंक्ति भी शामिल है।
बहु-आयामी नियंत्रण तालिकाओं का निर्माण किया जा सकता है (अर्थात अनुकूलित) जो उपरोक्त उदाहरणों की तुलना में 'अधिक जटिल' हो सकता है जो कई निविष्ट पर कई स्थितियों के लिए परीक्षण कर सकता है या कुछ मिलान मानदंडों के आधार पर एक से अधिक 'कार्रवाई' कर सकता है। एक 'कार्रवाई' में एक अन्य अधीनस्थ नियंत्रण तालिका में सूचक सम्मलित हो सकता है। नीचे दिए गए सरल उदाहरण में एक अतिरिक्त पंक्ति (लघु अक्षर निविष्ट को संभालने के लिए) के रूप में निहित 'OR' शर्त सम्मलित है, चूंकि इस उदाहरण में, इसे निर्दिष्ट करते हुए प्रत्येक लघु अक्षर वर्णों के लिए एक अतिरिक्त प्रविष्टि होने से समान रूप से नियंत्रित किया जा सकता है। ऊपरी केस वर्णों के समान उपनेमिका पहचानकर्ता)। प्रत्येक निविष्ट के लिए वास्तविक कार्यावधि अनुवृत्तओं की गणना करने के लिए एक अतिरिक्त पंक्ति भी सम्मलित है।


''''CT3'''<nowiki/>'
''''CT3'''<nowiki/>'
:{| class="wikitable"
:{| class="wikitable"
! निविष्ट 1!!एकांतर!! '''subr #'''!! '''संख्या'''  
! input 1!!alternate!! '''subr #'''!! '''count'''
|-
|-
| '''A''' ||'''a'''|| '''1'''|| '''0'''
| '''A''' ||'''a'''|| '''1'''|| '''0'''
Line 302: Line 306:
| '''?''' ||'''?'''|| '''0'''|| '''0'''
| '''?''' ||'''?'''|| '''0'''|| '''0'''
|}
|}
नियंत्रण तालिका प्रविष्टियाँ तब [[प्रक्रियात्मक भाषा]]ओं में सशर्त बयानों के समान होती हैं, लेकिन महत्वपूर्ण रूप से, बिना वास्तविक (भाषा पर निर्भर) सशर्त बयान (यानी निर्देश) मौजूद होते हैं (सामान्य कूट दुभाषिया में भौतिक रूप से होता है जो तालिका प्रविष्टियों को संसाधित करता है, तालिका में ही - जो केवल अपनी संरचना और मूल्यों के माध्यम से क्रमादेश तर्क का प्रतीक है)।
नियंत्रण तालिका प्रविष्टियाँ तब [[प्रक्रियात्मक भाषा]]ओं में सशर्त बयानों के समान होती हैं, लेकिन महत्वपूर्ण रूप से, बिना वास्तविक (भाषा पर निर्भर) सशर्त बयान (अर्थात निर्देश) सम्मलित होते हैं (सामान्य कूट दुभाषिया में भौतिक रूप से होता है जो तालिका प्रविष्टियों को संसाधित करता है, तालिका में ही - जो केवल अपनी संरचना और मूल्यों के माध्यम से क्रमादेश तर्क का प्रतीक है)।


इस तरह की तालिकाओं में, जहां समान तालिका प्रविष्टियों की एक श्रृंखला संपूर्ण तर्क को परिभाषित करती है, एक तालिका प्रविष्टि संख्या या सूचक प्रभावी रूप से अधिक पारंपरिक कार्यक्रमों में [[कार्यक्रम गणक]] की जगह ले सकता है और एक 'कार्रवाई' में रीसेट किया जा सकता है, जिसे इसमें भी निर्दिष्ट किया गया है। तालिका प्रविष्टि। नीचे दिए गए उदाहरण (सीटी4) से पता चलता है कि पिछली तालिका को विस्तारित करने के लिए, 'अगली' प्रविष्टि (और/या 'परिवर्तन प्रवाह' (शाखा (संगणक विज्ञान)) उपनेमका शामिल करने के लिए) एक [[प्रोग्राम लूप|क्रमादेश प्रस्पंद]] बना सकता है (यह उदाहरण वास्तव में नहीं है इस तरह की नियंत्रण तालिका बनाने का सबसे कुशल तरीका लेकिन, ऊपर दिए गए पहले उदाहरणों से एक क्रमिक 'विकास' का प्रदर्शन करके, दिखाता है कि व्यवहार को संशोधित करने के लिए अतिरिक्त पंक्ति का उपयोग कैसे किया जा सकता है।) पाँचवाँ पंक्ति दर्शाता है कि एक से अधिक क्रियाएँ शुरू की जा सकती हैं एकल तालिका प्रविष्टि - इस मामले में प्रत्येक प्रविष्टि के सामान्य प्रसंस्करण के बाद की जाने वाली कार्रवाई ('-' मान का अर्थ है 'कोई शर्त नहीं' या 'कोई कार्रवाई नहीं')।
इस तरह की तालिकाओं में, जहां समान तालिका प्रविष्टियों की एक श्रृंखला संपूर्ण तर्क को परिभाषित करती है, एक तालिका प्रविष्टि संख्या या सूचक प्रभावी रूप से अधिक पारंपरिक कार्यक्रमों में [[कार्यक्रम गणक]] की जगह ले सकता है और एक 'कार्रवाई' में रीसेट किया जा सकता है, जिसे इसमें भी निर्दिष्ट किया गया है। तालिका प्रविष्टि नीचे दिए गए उदाहरण (सीटी4) से पता चलता है कि पिछली तालिका को विस्तारित करने के लिए, 'अगली' प्रविष्टि (और/या 'परिवर्तन प्रवाह' (शाखा (संगणक विज्ञान)) उपनेमका सम्मलित करने के लिए) एक [[प्रोग्राम लूप|क्रमादेश प्रस्पंद]] बना सकता है (यह उदाहरण वास्तव में नहीं है इस तरह की नियंत्रण तालिका बनाने का सबसे कुशल तरीका लेकिन, ऊपर दिए गए पहले उदाहरणों से एक क्रमिक 'विकास' का प्रदर्शन करके, दिखाता है कि व्यवहार को संशोधित करने के लिए अतिरिक्त पंक्ति का उपयोग कैसे किया जा सकता है।) पाँचवी पंक्ति दर्शाती है कि एक से अधिक क्रियाएँ आरंभ की जा सकती हैं एकल तालिका प्रविष्टि - इस मामले में प्रत्येक प्रविष्टि के सामान्य प्रसंस्करण के बाद की जाने वाली कार्रवाई ('-' मान का अर्थ है 'कोई शर्त नहीं' या 'कोई कार्रवाई नहीं')।


स्ट्रक्चर्ड क्रमादेशन या स्ट्रक्चर्ड क्रमादेशन | गोटो-लेस कोड, ('[[लूप करते समय करें|प्रस्पंद करते समय करें]]' या 'प्रस्पंद के लिए' निर्माण के समतुल्य को शामिल करते हुए), उपयुक्त रूप से अभिकल्पना किए गए और 'इंडेंटेड' नियंत्रण तालिका संरचनाओं के साथ भी समायोजित किया जा सकता है।
संरचित क्रमादेशन या संरचित क्रमादेशन | गोटो-लेस कूट, ('[[लूप करते समय करें|प्रस्पंद करते समय करें]]' या 'प्रस्पंद के लिए' निर्माण के समतुल्य को सम्मलित करते हुए), उपयुक्त रूप से अभिकल्पना किए गए और 'दंतुरित' नियंत्रण तालिका संरचनाओं के साथ भी समायोजित किया जा सकता है।


'सीटी4' (निविष्ट1 और प्रक्रिया को पढ़ने के लिए एक पूर्ण 'क्रमादेश', '' मिलने तक दोहराता है)
'सीटी4' (निविष्ट1 और प्रक्रिया को पढ़ने के लिए एक पूर्ण 'क्रमादेश', 'E' मिलने तक दोहराता है)
:{| class="wikitable"
:{| class="wikitable"
! input 1!!alternate!! '''subr #'''!! '''count'''!! '''jump'''
! input 1!!alternate!! '''subr #'''!! count!! jump
|-
|-
| '''-''' ||'''-'''|| '''5'''|| '''0''' || '''-'''
| '''-''' ||'''-'''|| '''5'''|| '''0''' || '''-'''
Line 330: Line 334:
:: CT4P सूचक सरणी
:: CT4P सूचक सरणी
::{| class="wikitable"
::{| class="wikitable"
! [[pointer (computer programming)|pointer]] [[Array data structure|array]]!!
! pointer array!!
|-
|-
| '''-->Default'''
| '''-->Default'''
Line 350: Line 354:




=== तालिका-संचालित रेटिंग ===
=== तालिका-संचालित सन्‍निर्धारण ===
[[दूरसंचार रेटिंग]] के विशेषज्ञ क्षेत्र में (किसी विशेष कॉल की लागत निर्धारित करने से संबंधित),
[[दूरसंचार रेटिंग|दूरसंचार सन्‍निर्धारण]] के विशेषज्ञ क्षेत्र में (किसी विशेष कॉल की लागत निर्धारित करने से संबंधित),
तालिका-संचालित रेटिंग तकनीक उन अनुप्रयोगों में नियंत्रण तालिकाओं के उपयोग को दर्शाती है जहां बाजार की शक्तियों के कारण नियम बार-बार बदल सकते हैं। कई मामलों में गैर-क्रमादेशक द्वारा अल्प सूचना पर शुल्क निर्धारित करने वाली तालिकाओं को बदला जा सकता है।<ref>Carl Wright, Service Level Corpo. (2002) ''[http://www.servicelevel.net/rating_matters/newsletters/issue12.htm Program Code Based vs. Table-driven vs. Rule-Based Rating]'', Rating Matters issue n. 12,  13 November 2002 {{ISSN|1532-1886}}</ref><ref>Brian E. Clauser, Melissa J. Margolis, Stephen G. Clyman, Linette P. Ross (1997) ''[https://www.jstor.org/stable/1435350 Development of Automated Scoring Algorithms for Complex Performance Assessments: A Comparison of Two Approaches]'' Journal of Educational Measurement, Vol. 34, No. 2 (Summer, 1997), pp. 141–161</ref>
तालिका-संचालित सन्‍निर्धारण तकनीक उन अनुप्रयोगों में नियंत्रण तालिकाओं के उपयोग को दर्शाती है जहां बाजार की शक्तियों के कारण नियम बार-बार बदल सकते हैं। कई स्थितियों में गैर-क्रमादेशक द्वारा अल्प सूचना पर शुल्क निर्धारित करने वाली तालिकाओं को बदला जा सकता है।<ref>Carl Wright, Service Level Corpo. (2002) ''[http://www.servicelevel.net/rating_matters/newsletters/issue12.htm Program Code Based vs. Table-driven vs. Rule-Based Rating]'', Rating Matters issue n. 12,  13 November 2002 {{ISSN|1532-1886}}</ref><ref>Brian E. Clauser, Melissa J. Margolis, Stephen G. Clyman, Linette P. Ross (1997) ''[https://www.jstor.org/stable/1435350 Development of Automated Scoring Algorithms for Complex Performance Assessments: A Comparison of Two Approaches]'' Journal of Educational Measurement, Vol. 34, No. 2 (Summer, 1997), pp. 141–161</ref>
यदि एल्गोरिदम दुभाषिया में पूर्व-निर्मित नहीं हैं (और इसलिए तालिका में रखी गई अभिव्यक्ति की अतिरिक्त रनटाइम व्याख्या की आवश्यकता होती है), इसे तालिका-संचालित रेटिंग के बजाय नियम-आधारित रेटिंग के रूप में जाना जाता है (और इसके परिणामस्वरूप काफी अधिक ओवरहेड की खपत होती है)।
यदि कलन विधि दुभाषिया में पूर्व-निर्मित नहीं हैं (और इसलिए तालिका में रखी गई अभिव्यक्ति की अतिरिक्त रनटाइम व्याख्या की आवश्यकता होती है), इसे तालिका-संचालित सन्‍निर्धारण के अतिरिक्त नियम-आधारित सन्‍निर्धारण के रूप में जाना जाता है (और इसके परिणामस्वरूप काफी अधिक उपरिव्यय की खपत होती है)।


=== स्प्रेडशीट ===
=== स्प्रेडशीट ===
एक स्प्रेडशीट आँकड़ा शीट को दो आयामी नियंत्रण तालिका के रूप में माना जा सकता है, जिसमें गैर-खाली सेल अंतर्निहित स्प्रेडशीट क्रमादेश (दुभाषिया) के आँकड़ा का प्रतिनिधित्व करती हैं। सूत्र वाली कोशिकाओं को आमतौर पर एक समान चिह्न के साथ उपसर्ग किया जाता है और केवल एक विशेष प्रकार के आँकड़ा निविष्ट को निर्दिष्ट किया जाता है जो अन्य संदर्भित कोशिकाओं के प्रसंस्करण को निर्धारित करता है - दुभाषिया के अंदर नियंत्रण प्रवाह को बदलकर। यह अंतर्निहित दुभाषिया से सूत्रों का बाहरीकरण है जो स्पष्ट रूप से दोनों स्प्रैडशीट्स की पहचान करता है, और उपरोक्त उद्धृत नियम आधारित रेटिंग उदाहरण गैर क्रमादेशक द्वारा नियंत्रण तालिकाओं के उपयोग के आसानी से पहचाने जाने योग्य उदाहरण हैं।
एक स्प्रेडशीट आँकड़ा शीट को दो आयामी नियंत्रण तालिका के रूप में माना जा सकता है, जिसमें गैर-खाली सेल अंतर्निहित स्प्रेडशीट क्रमादेश (दुभाषिया) के आँकड़ा का प्रतिनिधित्व करती हैं। सूत्र वाली कोशिकाओं को सामान्यत: एक समान चिह्न के साथ उपसर्ग किया जाता है और केवल एक विशेष प्रकार के आँकड़ा निविष्ट को निर्दिष्ट किया जाता है जो अन्य संदर्भित कोशिकाओं के प्रसंस्करण को निर्धारित करता है - दुभाषिया के अंदर नियंत्रण प्रवाह को बदलकर। यह अंतर्निहित दुभाषिया से सूत्रों का बाहरीकरण है जो स्पष्ट रूप से दोनों स्प्रैडशीट्स की पहचान करता है, और उपरोक्त उद्धृत नियम आधारित सन्‍निर्धारण उदाहरण गैर क्रमादेशक द्वारा नियंत्रण तालिकाओं के उपयोग के आसानी से पहचाने जाने योग्य उदाहरण हैं।


== क्रमादेशन प्रतिमान ==
== क्रमादेशन प्रतिमान ==
यदि नियंत्रण तालिका तकनीक को किसी विशेष क्रमादेशन प्रतिमान से संबंधित कहा जा सकता है, तो निकटतम सादृश्य ऑटोमेटा-आधारित क्रमादेशन या रिफ्लेक्शन (संगणक विज्ञान) हो सकता है। चिंतनशील ([[मेटाप्रोग्रामिंग|मेटाक्रमादेशन]] का एक रूप - चूंकि तालिका प्रविष्टियों को दुभाषिया के व्यवहार को 'संशोधित' करने के लिए कहा जा सकता है)। हालाँकि दुभाषिया स्वयं, और उपनेमिका्स, किसी भी उपलब्ध प्रतिमानों या यहाँ तक कि मिश्रण का उपयोग करके क्रमादेश किया जा सकता है। तालिका स्वयं अनिवार्य रूप से असंसाधित्र आँकड़ा मानों का संग्रह हो सकती है जिसे संकलित करने की भी आवश्यकता नहीं होती है और बाहरी स्रोत से पढ़ा जा सकता है (विशिष्ट, प्लेटफ़ॉर्म निर्भर, अधिक दक्षता के लिए सीधे मेमोरी सूचक्स का उपयोग करके कार्यान्वयन को छोड़कर)।
यदि नियंत्रण तालिका तकनीक को किसी विशेष क्रमादेशन प्रतिमान से संबंधित कहा जा सकता है, तो निकटतम सादृश्य स्वचल प्ररूप-आधारित क्रमादेशन या मीमांसा (संगणक विज्ञान) हो सकता है। चिंतनशील ([[मेटाप्रोग्रामिंग|मेटाक्रमादेशन]] का एक रूप - चूंकि तालिका प्रविष्टियों को दुभाषिया के व्यवहार को 'संशोधित' करने के लिए कहा जा सकता है)। हालाँकि दुभाषिया स्वयं, और उपनेमिका, किसी भी उपलब्ध प्रतिमानों या यहाँ तक कि मिश्रण का उपयोग करके क्रमादेश किया जा सकता है। तालिका स्वयं अनिवार्य रूप से असंसाधित्र आँकड़ा मानों का संग्रह हो सकती है जिसे संकलित करने की भी आवश्यकता नहीं होती है और बाहरी स्रोत से पढ़ा जा सकता है (विशिष्ट, प्लेटफ़ॉर्म निर्भर, अधिक दक्षता के लिए सीधे मेमोरी सूचक्स का उपयोग करके कार्यान्वयन को छोड़कर)।


== बाइटकोड/वर्चुअल मशीन निर्देश सेट == के अनुरूप
 
एक बहु-आयामी नियंत्रण तालिका में वर्चुअल मशीन पर चलने वाले बाइटकूटके लिए कुछ अवधारणात्मक समानताएं होती हैं, जिसमें एक प्लेटफॉर्म निर्भर अनुदेशांतरक (संगणन)| दुभाषिया कार्यक्रम आमतौर पर वास्तविक निष्पादन करने के लिए आवश्यक होता है (जो मोटे तौर पर तालिका सामग्री द्वारा सशर्त रूप से निर्धारित होता है)। एक सामान्य मध्यवर्ती 'निर्देश सेट' बनाने के उद्देश्य से हाल ही में [[सामान्य मध्यवर्ती भाषा]] (CIL) के लिए कुछ वैचारिक समानताएँ भी हैं जो प्लेटफ़ॉर्म से स्वतंत्र हैं (लेकिन CIL के विपरीत, अन्य भाषाओं के लिए एक सामान्य संसाधन के रूप में उपयोग किए जाने का कोई दिखावा नहीं है) . [[पी-कोड मशीन|पी-कूटमशीन]] | पी-कूटको भी एक समान लेकिन पहले के कार्यान्वयन के रूप में माना जा सकता है, जिसकी उत्पत्ति 1966 तक हुई थी।
== बाईटकूट / आभासी मशीन अनुदेश सेट के अनुरूप ==
एक बहु-आयामी नियंत्रण तालिका में आभासी मशीन पर चलने वाले बाइट कूट के लिए कुछ अवधारणात्मक समानताएं होती हैं, जिसमें एक प्लेटफॉर्म निर्भर अनुदेशांतरक (संगणन)| दुभाषिया कार्यक्रम सामान्यत: वास्तविक निष्पादन करने के लिए आवश्यक होता है (जो मोटे तौर पर तालिका सामग्री द्वारा सशर्त रूप से निर्धारित होता है)। एक सामान्य मध्यवर्ती 'निर्देश सेट' बनाने के उद्देश्य से हाल ही में [[सामान्य मध्यवर्ती भाषा]] (सीआईएल) के लिए कुछ वैचारिक समानताएँ भी हैं जो प्लेटफ़ॉर्म से स्वतंत्र हैं (लेकिन सीआईएल के विपरीत, अन्य भाषाओं के लिए एक सामान्य संसाधन के रूप में उपयोग किए जाने का कोई दिखावा नहीं है) . [[पी-कोड मशीन|पी-कूट मशीन]] | पी-कूट को भी एक समान लेकिन पहले के कार्यान्वयन के रूप में माना जा सकता है, जिसकी उत्पत्ति 1966 तक हुई थी।


== निर्देश लाने ==
== निर्देश लाने ==
जब क्रमादेश प्रवाह को निर्धारित करने के लिए एक बहु-आयामी नियंत्रण तालिका का उपयोग किया जाता है, तो सामान्य हार्डवेयर [[कार्यक्रम गणक]] फ़ंक्शन को पहले (या अगली) तालिका प्रविष्टि के लिए एक सूचक (संगणक क्रमादेशन) के साथ प्रभावी ढंग से अनुकरण किया जाता है या इसके लिए एक सरणी अनुक्रमणिका। निर्देश प्राप्त करने में उस तालिका प्रविष्टि में आँकड़ा को डीकूटकरना शामिल है - आवश्यक रूप से पहले प्रविष्टि के सभी या कुछ आँकड़ा को कॉपी किए बिना। क्रमादेशन लैंग्वेज जो सूचक (संगणक क्रमादेशन) का उपयोग करने में सक्षम हैं, उनका दोहरा फायदा है कि कम संगणनात्मक ओवरहेड शामिल है, सामग्री तक पहुँचने और निष्पादन के बाद अगली तालिका प्रविष्टि को इंगित करने के लिए काउंटर को आगे बढ़ाने में। अगले 'निर्देश' पते (यानी तालिका प्रविष्टि) की गणना किसी भी चरण में [[प्रोग्राम लूप्स|क्रमादेश प्रस्पंद्स]] और शाखा (संगणक विज्ञान) निर्देशों की अनुमति देने वाली प्रत्येक व्यक्तिगत तालिका प्रविष्टि की वैकल्पिक अतिरिक्त क्रिया के रूप में भी की जा सकती है।
जब क्रमादेश प्रवाह को निर्धारित करने के लिए एक बहु-आयामी नियंत्रण तालिका का उपयोग किया जाता है, तो सामान्य हार्डवेयर [[कार्यक्रम गणक]] फलन को पहले (या अगली) तालिका प्रविष्टि के लिए एक सूचक (संगणक क्रमादेशन) के साथ प्रभावी ढंग से अनुकरण किया जाता है या इसके लिए एक सरणी अनुक्रमणिका। निर्देश प्राप्त करने में उस तालिका प्रविष्टि में आँकड़ा को डी कूट करना सम्मलित है - आवश्यक रूप से पहले प्रविष्टि के सभी या कुछ आँकड़ा को अनुकरण किए बिना। क्रमादेशन भाषा जो सूचक (संगणक क्रमादेशन) का उपयोग करने में सक्षम हैं, उनका दोहरा फायदा है कि कम संगणनात्मक उपरिव्यय सम्मलित है, सामग्री तक पहुँचने और निष्पादन के बाद अगली तालिका प्रविष्टि को इंगित करने के लिए काउंटर को आगे बढ़ाने में। अगले 'निर्देश' पते (अर्थात तालिका प्रविष्टि) की गणना किसी भी चरण में [[प्रोग्राम लूप्स|क्रमादेश प्रस्पंद्स]] और शाखा (संगणक विज्ञान) निर्देशों की अनुमति देने वाली प्रत्येक व्यक्तिगत तालिका प्रविष्टि की वैकल्पिक अतिरिक्त क्रिया के रूप में भी की जा सकती है।


== निगरानी नियंत्रण तालिका निष्पादन ==
== निगरानी नियंत्रण तालिका निष्पादन ==
[[डिबगिंग]] उद्देश्यों, हॉट स्पॉट (संगणक विज्ञान) का पता लगाने, [[कोड कवरेज़|कूटकवरेज़]] विश्लेषण और वास्तविक क्रमादेश प्रवाह के पूर्ण या आंशिक ट्रेस को रिकॉर्ड करने के लिए दुभाषिया कार्यक्रम वैकल्पिक रूप से क्रमादेश काउंटर (और निर्देश प्रकार के आधार पर अन्य प्रासंगिक विवरण) को सहेज सकता है। [[रूपरेखा (कंप्यूटर प्रोग्रामिंग)|रूपरेखा (संगणक क्रमादेशन)]] (ऊपर CT3 और CT4 के उदाहरण देखें)।
[[डिबगिंग]] उद्देश्यों, हॉट स्पॉट (संगणक विज्ञान) का पता लगाने, [[Index.php?title=कूट समावेशन|कूट समावेशन]] विश्लेषण और वास्तविक क्रमादेश प्रवाह के पूर्ण या आंशिक ट्रेस को रिकॉर्ड करने के लिए दुभाषिया कार्यक्रम वैकल्पिक रूप से क्रमादेश काउंटर (और निर्देश प्रकार के आधार पर अन्य प्रासंगिक विवरण) को सहेज सकता है। [[रूपरेखा (कंप्यूटर प्रोग्रामिंग)|रूपरेखा (संगणक क्रमादेशन)]] (ऊपर CT3 और CT4 के उदाहरण देखें)।


== लाभ ==
== लाभ ==
* स्पष्टता - [[तालिका (सूचना)]] सर्वव्यापी संगणन है और आम जनता द्वारा भी [[स्वाभाविक]] रूप से [[समझ]]जाती है (विशेषकर [[उपयोगकर्ता गाइड]] में दोष निदान तालिकाएँ)
* स्पष्टता - [[तालिका (सूचना)]] सर्वव्यापी संगणन है और आम जनता द्वारा भी [[स्वाभाविक]] रूप से [[Index.php?title=समझी|समझी]] जाती है (विशेषकर [[उपयोगकर्ता गाइड]] में दोष निदान तालिकाएँ)
* सुवाह्य - 100% भाषा स्वतंत्र (और प्लेटफ़ॉर्म स्वतंत्र - दुभाषिया को छोड़कर) के लिए अभिकल्पना किया जा सकता है
* सुवाह्य - 100% भाषा स्वतंत्र (और प्लेटफ़ॉर्म स्वतंत्र - दुभाषिया को छोड़कर) के लिए अभिकल्पना किया जा सकता है
* लचीलापन - या तो भाषा आदिम या [[सबरूटीन्स|उपनेमिका्स]] को पारदर्शी रूप से निष्पादित करने की क्षमता और समस्या के अनुरूप कस्टम अभिकल्पना किया जाना
* लचीलापन - या तो भाषा आदिम या [[Index.php?title=उपनेमिका|उपनेमिका]] को पारदर्शी रूप से निष्पादित करने की क्षमता और समस्या के अनुरूप कस्टम अभिकल्पना किया जाना
* सघनता - तालिका आमतौर पर साथ-साथ स्थिति/क्रिया जोड़ी दिखाती है (सामान्य प्लेटफ़ॉर्म/भाषा कार्यान्वयन निर्भरताओं के बिना), जिसके परिणामस्वरूप अक्सर
* सघनता - तालिका सामान्यत: साथ-साथ स्थिति/क्रिया जोड़ी दिखाती है (सामान्य प्लेटफ़ॉर्म/भाषा कार्यान्वयन निर्भरताओं के बिना), जिसके परिणामस्वरूप अधिकांशत:
** द्विआधारी फाइल - निर्देशों के कम दोहराव के माध्यम से आकार में कमी
** द्विआधारी फाइल - निर्देशों के कम दोहराव के माध्यम से आकार में कमी
** स्रोत कूटसंचिका - कई सशर्त बयानों के उन्मूलन के माध्यम से आकार में कमी आई है
** स्रोत कूटसंचिका - कई सशर्त बयानों के उन्मूलन के माध्यम से आकार में कमी आई है
** बेहतर क्रमादेश लोड (या डाउनलोड) गति
** बेहतर क्रमादेश भार (या अधोभार) गति
* रख-रखाव - तालिका अक्सर बनाए रखने के लिए आवश्यक स्रोत लाइनों की संख्या को कम करते हैं v। कई तुलनाएँ
* रख-रखाव - तालिका अधिकांशत: बनाए रखने के लिए आवश्यक स्रोत लाइनों की संख्या को कम करते हैं v। कई तुलनाएँ
* संदर्भ की लोकैलिटी - सुसंहत तालिका स्ट्रक्चर के परिणामस्वरूप कैश में शेष तालिका (संगणन)
* संदर्भ की संस्थिति - सुसंहत तालिका संरचना के परिणामस्वरूप कैशे में शेष तालिका (संगणन)
* कूटपुन: उपयोग - दुभाषिया आमतौर पर पुन: प्रयोज्य होता है। बार-बार इसे ठीक उसी तकनीक का उपयोग करके नए क्रमादेशन कार्यों के लिए आसानी से अनुकूलित किया जा सकता है और तालिका परिभाषाओं द्वारा नियंत्रित, 'ऑर्गेनिक रूप से' बन सकता है, वास्तव में, आजमाए हुए और परखे हुए उपनेमिका्स की एक मानक लाइब्रेरी।
* कूटपुन: उपयोग - दुभाषिया सामान्यत: पुन: प्रयोज्य होता है। बार-बार इसे ठीक उसी तकनीक का उपयोग करके नए क्रमादेशन कार्यों के लिए आसानी से अनुकूलित किया जा सकता है और तालिका परिभाषाओं द्वारा नियंत्रित, 'संघटित रूप से' बन सकता है, वास्तव में, आजमाए हुए और परखे हुए उपनेमिका की एक मानक लाइब्रेरी।
* एल्गोरिथम दक्षता - प्रणालीगत अनुकूलन संभव। दुभाषिया में कोई भी प्रदर्शन सुधार आमतौर पर इसका उपयोग करने वाले सभी अनुप्रयोगों में सुधार करता है (ऊपर 'CT1' में उदाहरण देखें)।
* कलन विधि दक्षता - प्रणालीगत अनुकूलन संभव। दुभाषिया में कोई भी प्रदर्शन सुधार सामान्यत: इसका उपयोग करने वाले सभी अनुप्रयोगों में सुधार करता है (ऊपर 'CT1' में उदाहरण देखें)।
* एक्स्टेंसिबल - नया 'निर्देश' जोड़ा जा सकता है - केवल दुभाषिया का विस्तार करके
* विस्तरणीय - नया 'निर्देश' जोड़ा जा सकता है - केवल दुभाषिया का विस्तार करके
* अनुदेशांतरक को एप्लिकेशन क्रमादेश की तरह लिखा जा सकता है
* अनुदेशांतरक को एप्लिकेशन क्रमादेश की तरह लिखा जा सकता है
वैकल्पिक रूप से:-
वैकल्पिक रूप से:-
* दुभाषिया तालिका के अंदर एकत्र किए गए रनटाइम [[सॉफ्टवेयर मीट्रिक]] का उपयोग करके [[आत्मनिरीक्षण]] और आत्म [[अनुकूलन (कंप्यूटर विज्ञान)|अनुकूलन (संगणक विज्ञान)]] हो सकता है (CT3 और CT4 देखें - प्रविष्टियों के साथ जिन्हें समय-समय पर अवरोही गणना द्वारा क्रमबद्ध किया जा सकता है)। दुभाषिया वैकल्पिक रूप से कार्यावधि पर एकत्रित मेट्रिक्स से गतिशील रूप से सबसे कुशल लुकअप तकनीक का चयन कर सकता है (उदाहरण के लिए सरणी का आकार, मानों की श्रेणी, क्रमबद्ध या अवर्गीकृत)
* दुभाषिया तालिका के अंदर एकत्र किए गए कार्यावधि [[Index.php?title=सॉफ्टवेयर मीट्रिक(मिति)|सॉफ्टवेयर मीट्रिक(मिति)]] का उपयोग करके [[आत्मनिरीक्षण]] और आत्म [[अनुकूलन (कंप्यूटर विज्ञान)|अनुकूलन (संगणक विज्ञान)]] हो सकता है (CT3 और CT4 देखें - प्रविष्टियों के साथ जिन्हें समय-समय पर अवरोही गणना द्वारा क्रमबद्ध किया जा सकता है)। दुभाषिया वैकल्पिक रूप से कार्यावधि पर एकत्रित मेट्रिक्स से गतिशील रूप से सबसे कुशल लुकअप तकनीक का चयन कर सकता है (उदाहरण के लिए सरणी का आकार, मानों की श्रेणी, क्रमबद्ध या अवर्गीकृत)
* गतिशील प्रेषण - सामान्य कार्यों को पहले से लोड किया जा सकता है और स्मृति उपयोग को कम करने के लिए केवल पहली मुठभेड़ पर कम सामान्य कार्य प्राप्त किए जा सकते हैं। इसे प्राप्त करने के लिए इन-तालिका [[memoization]] को नियोजित किया जा सकता है।
* गतिशील प्रेषण - सामान्य कार्यों को पहले से लोड किया जा सकता है और स्मृति उपयोग को कम करने के लिए केवल पहली मुठभेड़ पर कम सामान्य कार्य प्राप्त किए जा सकते हैं। इसे प्राप्त करने के लिए इन-तालिका [[Index.php?title=ज्ञापन|ज्ञापन]] को नियोजित किया जा सकता है।
* दुभाषिया में अंतर्निहित डिबगिंग, ट्रेस और मॉनिटर विशेषताएं हो सकती हैं - जिसे फिर परीक्षण या 'लाइव' मोड के अनुसार चालू या बंद किया जा सकता है
* दुभाषिया में अंतर्निहित डिबगिंग, ट्रेस और निरीक्षण विशेषताएं हो सकती हैं - जिसे फिर परीक्षण या 'लाइव' मोड के अनुसार चालू या बंद किया जा सकता है
* नियंत्रण तालिकाओं को 'ऑन-द-फ्लाई' (कुछ उपयोगकर्ता निविष्ट के अनुसार या मापदंडों से) बनाया जा सकता है और फिर दुभाषिया द्वारा निष्पादित किया जा सकता है (शब्दशः कूटके निर्माण के बिना)।
* नियंत्रण तालिकाओं को 'ऑन-द-फ्लाई' (कुछ उपयोगकर्ता निविष्ट के अनुसार या मापदंडों से) बनाया जा सकता है और फिर दुभाषिया द्वारा निष्पादित किया जा सकता है (शब्दशः कूट के निर्माण के बिना)।


== नुकसान ==
== नुकसान ==
* प्रशिक्षण की आवश्यकता - एप्लिकेशन क्रमादेशक आमतौर पर सामान्य समाधान तैयार करने के लिए प्रशिक्षित नहीं होते हैं
* प्रशिक्षण की आवश्यकता - एप्लिकेशन क्रमादेशक सामान्यत: सामान्य समाधान तैयार करने के लिए प्रशिक्षित नहीं होते हैं
निम्नलिखित मुख्य रूप से बहु-आयामी तालिकाओं में उनके उपयोग पर लागू होते हैं, न कि पहले चर्चा की गई एक-आयामी तालिकाओं पर।
निम्नलिखित मुख्य रूप से बहु-आयामी तालिकाओं में उनके उपयोग पर लागू होते हैं, न कि पहले चर्चा की गई एक-आयामी तालिकाओं पर।
* संगणनात्मक ओवरहेड - [[अप्रत्यक्ष (प्रोग्रामिंग)|अप्रत्यक्ष (क्रमादेशन)]] के अतिरिक्त स्तर की वजह से आभासी निर्देशों की 'व्याख्या' के कारण कुछ वृद्धि हुई है (हालांकि यह आमतौर पर एक अच्छी तरह से अभिकल्पना किए गए सामान्य दुभाषिया द्वारा ऑफसेट से अधिक हो सकता है जो कुशल प्रत्यक्ष अनुवाद, खोज और का पूरा लाभ उठाता है। सशर्त परीक्षण तकनीकें जिनका अन्यथा उपयोग नहीं किया जा सकता है)
* संगणनात्मक उपरिव्यय - [[अप्रत्यक्ष (प्रोग्रामिंग)|अप्रत्यक्ष (क्रमादेशन)]] के अतिरिक्त स्तर की वजह से आभासी निर्देशों की 'व्याख्या' के कारण कुछ वृद्धि हुई है (चूंकि यह सामान्यत: एक अच्छी तरह से अभिकल्पित किए गए सामान्य दुभाषिया द्वारा अंतर्लब से अधिक हो सकता है जो कुशल प्रत्यक्ष अनुवाद, खोज और का पूरा लाभ उठाता है। सशर्त परीक्षण तकनीकें जिनका अन्यथा उपयोग नहीं किया जा सकता है।
* कॉम्पलेक्स [[अभिव्यक्ति (प्रोग्रामिंग)|अभिव्यक्ति (क्रमादेशन)]] को हमेशा आँकड़ा तालिका प्रविष्टियों में तुलना उद्देश्यों के लिए सीधे उपयोग नहीं किया जा सकता है
* संमिश्र [[अभिव्यक्ति (प्रोग्रामिंग)|अभिव्यक्ति (क्रमादेशन)]] को हमेशा आँकड़ा तालिका प्रविष्टियों में तुलना उद्देश्यों के लिए सीधे उपयोग नहीं किया जा सकता है
:(इन 'मध्यवर्ती मूल्यों' की गणना एक उपनेमिका के अंदर पहले से की जा सकती है और उनके मूल्यों को सशर्त तालिका प्रविष्टियों में संदर्भित किया जाता है। वैकल्पिक रूप से, एक उपनेमिका पूर्ण जटिल सशर्त परीक्षण (बिना शर्त 'कार्रवाई' के रूप में) और, सेटिंग करके कर सकता है इसके परिणाम के रूप में एक [[सत्य बिट]], फिर अगली तालिका प्रविष्टि में इसका परीक्षण किया जा सकता है। [[संरचित कार्यक्रम प्रमेय]] देखें)
:(इन 'मध्यवर्ती मूल्यों' की गणना एक उपनेमिका के अंदर पहले से की जा सकती है और उनके मूल्यों को सशर्त तालिका प्रविष्टियों में संदर्भित किया जाता है। वैकल्पिक रूप से, एक उपनेमिका पूर्ण जटिल सशर्त परीक्षण (बिना शर्त 'कार्रवाई' के रूप में) और, व्यवस्थापन करके कर सकता है इसके परिणाम के रूप में एक [[सत्य बिट]], फिर अगली तालिका प्रविष्टि में इसका परीक्षण किया जा सकता है। [[संरचित कार्यक्रम प्रमेय]] देखें)


== उद्धरण ==
== उद्धरण ==
Line 412: Line 417:


== यह भी देखें ==
== यह भी देखें ==
* ऑटोमेटा-आधारित क्रमादेशन
* स्वचल प्ररूप-आधारित क्रमादेशन
*आँकड़ाबेस-केंद्रित संरचना
*आँकड़ाबेस-केंद्रित संरचना
* [[डेटा-संचालित परीक्षण|आँकड़ा-संचालित परीक्षण]]
* [[डेटा-संचालित परीक्षण|आँकड़ा-संचालित परीक्षण]]
Line 419: Line 424:
*कीवर्ड चालित परीक्षण
*कीवर्ड चालित परीक्षण
* सूचक (संगणक क्रमादेशन)
* सूचक (संगणक क्रमादेशन)
* स्विच प्रकथन - एकल निविष्ट चर के आधार पर कई लेबल (क्रमादेशन लैंग्वेज) में से किसी एक के लिए बहुधा ब्रांचिंग
* स्विच प्रकथन - एकल निविष्ट चर के आधार पर कई लेबल (क्रमादेशन लैंग्वेज) में से किसी एक के लिए बहुधा शाखा
* [[थ्रेडेड कोड]]
* [[Index.php?title=थ्रेडेड कूट|थ्रेडेड कूट]]
* थ्रेडेड कूट# टोकन थ्रेडिंग
* थ्रेडेड कूट# टोकन थ्रेडिंग


Line 449: Line 454:
* [http://msdn.microsoft.com/en-us/library/aa561913%28v=bts.20%29.aspx MSDN:Trigger-Based Event Processing]
* [http://msdn.microsoft.com/en-us/library/aa561913%28v=bts.20%29.aspx MSDN:Trigger-Based Event Processing]
* [http://c2.com/cgi/wiki?ControlTable Control Table in c2.com]
* [http://c2.com/cgi/wiki?ControlTable Control Table in c2.com]
[[Category: नियंत्रण प्रवाह|*]] [[Category: संकलक निर्माण]] [[Category: संकलक संरचनाएं]]


[[Category: Machine Translated Page]]
[[Category:Created On 17/02/2023]]
[[Category:Created On 17/02/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with maths render errors]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:नियंत्रण प्रवाह|*]]
[[Category:संकलक निर्माण]]
[[Category:संकलक संरचनाएं]]

Latest revision as of 11:56, 24 April 2023

यह सरल नियंत्रण तालिका एकल निविष्ट चर के मान के अनुसार क्रमादेश प्रवाह को निर्देशित करती है। प्रत्येक तालिका प्रविष्टि में समानता (अंतर्निहित) और कार्रवाई पंक्ति में प्रदर्शन करने के लिए प्रासंगिक उपनेमिका के लिए परीक्षण करने के लिए एक संभावित निविष्ट मान होता है। यदि सूचक्स समर्थित नहीं हैं, तो उपनेमिका का नाम एक सापेक्ष उपनेमिका संख्या से बदला जा सकता है

नियंत्रण तालिकाएँ वे तालिकाएँ होती हैं जो नियंत्रण प्रवाह को नियंत्रित करती हैं या कार्यक्रम नियंत्रण में एक प्रमुख भूमिका निभाती हैं। नियंत्रण तालिका की संरचना या सामग्री के बारे में कोई कठोर नियम नहीं हैं - इसकी योग्यता विशेषता केंद्रीय प्रसंस्करण इकाई या दुभाषिया (संगणन) द्वारा निष्पादन के माध्यम से किसी तरह से प्रवाह को नियंत्रित करने की क्षमता है। ऐसी तालिकाओं के अभिकल्पना को कभी-कभी तालिका-संचालित अभिकल्पना कहा जाता है[1][2] (चूंकि यह सामान्यत: सीधे कार्यावधि तालिका के अतिरिक्त बाहरी तालिका से स्वचालित रूप से कूट उत्पन्न करने को संदर्भित करता है)। कुछ स्थितियों में, नियंत्रण तालिकाएँ परिमित-अवस्था मशीन | परिमित-अवस्था-मशीन-आधारित स्वचालित-आधारित क्रमादेशन के विशिष्ट कार्यान्वयन हो सकती हैं। यदि नियंत्रण तालिका के कई पदानुक्रमित स्तर हैं तो वे पदानुक्रमित अवस्था मशीन के समतुल्य तरीके से व्यवहार कर सकते हैं[3]

नियंत्रण तालिकाओं में अधिकांशत: सशर्त (क्रमादेशन) या उपनेमिका संदर्भ (संगणक विज्ञान) के समतुल्य होते हैं, जो सामान्यत: संघ सूची में उनके सापेक्ष स्तंभ स्थिति से निहित होते हैं। नियंत्रण तालिकाएँ समान आँकड़ा संरचनाओं या क्रमादेश प्रकथन को बार-बार क्रमादेशन करने की आवश्यकता को कम करती हैं। अधिकांश तालिकाओं की द्वि-आयामी प्रकृति क्रमादेश कूट की एक-आयामी प्रकृति की तुलना में उन्हें देखने और अद्यतन करने में आसान बनाती है।

कुछ स्थितियों में, नियंत्रण तालिकाओं की सामग्री को बनाए रखने के लिए गैर-क्रमादेशक को सौंपा जा सकता है। उदाहरण के लिए, यदि उपयोगकर्ता द्वारा दर्ज किए गए खोज वाक्यांश में एक निश्चित वाक्यांश सम्मलित है, तो एक तालिका में एक यूआरएल (वेब ​​​​पता) निर्दिष्ट किया जा सकता है जो यह नियंत्रित करता है कि खोज उपयोगकर्ता को कहाँ ले जाया जाता है। यदि वाक्यांश में स्कर्ट(किनारा) है, तो तालिका उपयोगकर्ता को www.shopping.example/catalogs/skirts पर ले जा सकती है, जो कि स्कर्ट उत्पाद सूची पृष्ठ है। (उदाहरण यूआरएल पद्धति में काम नहीं करता है)। क्रमादेशक के अतिरिक्त विपणन कर्मी ऐसी तालिका का प्रबंधन कर सकते हैं।

विशिष्ट उपयोग

अधिक उन्नत उपयोग

  • एक दुभाषिया (संगणन) द्वारा संसाधित आभासी मशीन के लिए आभासी निर्देशों के रूप में कार्य करना।
बाईट कूट के समान - लेकिन सामान्यत: तालिका संरचना द्वारा निहित संचालन के साथ।

तालिका संरचना

तालिकाओं में निश्चित या चर लंबाई कूट के कई आयाम हो सकते हैं और सामान्यत: संगणक मंच के बीच सॉफ्टवेयर सुवाह्य होती है, जिसके लिए केवल दुभाषिया में बदलाव की आवश्यकता होती है, न कि स्वयं कलन विधि - जिसका तर्क तालिका संरचना और सामग्री के अंदर अनिवार्य रूप से सन्निहित है। तालिका की संरचना एक बहुघाती (आँकड़ा संरचना) साहचर्य सरणी के समान हो सकती है, जहां एक आँकड़ा मान (या आँकड़ा मानों का संयोजन) को एक या एक से अधिक कार्यों के लिए योजना बद्ध किया जा सकता है।

एक आयामी तालिका

शायद इसके सबसे सरल कार्यान्वयन में, एक नियंत्रण तालिका कभी-कभी असंसाधित्र आँकड़ा मान को संबंधित उपनेमिका अंतर्लब (संगणक विज्ञान), सरणी आँकड़ा संरचना या संकेतक (संगणक क्रमादेशन) में असंसाधित्र आँकड़ा मान का सीधे उपयोग करने के लिए सीधे अनुवाद करने के लिए एक आयामी तालिका हो सकती है। सरणी के सूचकांक के रूप में, या पहले से आँकड़ा पर कुछ बुनियादी अंकगणितीय प्रदर्शन करके। यह निरंतर समय में प्राप्त किया जा सकता है (बिना रैखिक खोज या द्विआधारी खोज के एक साहचर्य सरणी पर एक विशिष्ट लुकअप तालिका का उपयोग करके)। अधिकांश संगणक संरचना में, इसे दो या तीन मशीन निर्देशों में पूरा किया जा सकता है - बिना किसी तुलना या प्रस्पंद के। तकनीक को तुच्छ हैश फलन के रूप में जाना जाता है या, जब विशेष रूप से शाखा तालिकाओं के लिए उपयोग किया जाता है, दोहरा प्रेषण। इसके व्यवहार्य होने के लिए, आँकड़ा के सभी संभावित मानों की सीमा छोटी होनी चाहिए (उदाहरण के लिए एक ASCII या ईबीसीडीआईसी वर्ण मान जिसमें हेक्साडेसिमल '00' - 'FF' की सीमा होती है। यदि वास्तविक सीमा कम होने की गारंटी है इसके अतिरिक्त, सरणी को 256 बाइट्स से कम तक छोटा किया जा सकता है)।

'एक-आयामी सरणी का उपयोग करके निरंतर समय में कच्चे ASCII मानों (ए, डी, एम, एस) को नए उपनेमिका सूचकांक (1,4,3,2) में अनुवाद करने की तालिका'

(इस उदाहरण के लिए श्रेणी में अंतराल '..' के रूप में दिखाए गए हैं, जिसका अर्थ है 'अगली पंक्ति तक सभी हेक्स मान'। पहले दो पंक्ति सरणी का हिस्सा नहीं हैं)

ASCII Hex Array
null 00 00
.. .. 00
@ 40 00
A 41 01
.. .. 00
D 44 04
.. .. 00
M 4D 03
.. .. 00
S 53 02

स्वचल प्ररूप-आधारित क्रमादेशन और छद्म संवादात्मक लेनदेन प्रसंस्करण में, यदि अलग-अलग क्रमादेश स्टेट्स की संख्या कम है, तो मुख्य क्रमादेश प्रस्पंद के पूरे प्रवाह को कुशलतापूर्वक निर्देशित करने के लिए एक घने अनुक्रम नियंत्रण चर का उपयोग किया जा सकता है।

सभी निविष्ट संभावनाओं को संभालने के लिए - केवल 256 विभिन्न निर्गत मानों की अनुमति देते हुए एक दो बाइट असंसाधित्र आँकड़ा मान के लिए 65,536 बाइट्स के न्यूनतम तालिका आकार की आवश्यकता होगी। हालाँकि, यह प्रत्यक्ष अनुवाद तकनीक एक (रिश्तेदार) उपनेमिका संकेतक के लिए एक पर्याप्त तीव्र अभिगम स्मृति और रूपांतरण प्रदान करती है, यदि अनुमानी,पर्याप्त तीव्र अभिगम स्मृति के साथ मिलकर इसके उपयोग की अनुमति देता है।

शाखा तालिका

एक शाखा तालिका सन्निहित मशीन कूट शाखा (संगणक विज्ञान) की एक-आयामी 'सरणी' है। शाखा/कूद निर्देश एक बहु-मार्ग शाखा को क्रमादेश लेबल पर प्रभावित करने के लिए जब तुरंत पूर्ववर्ती और अनुक्रमित शाखा द्वारा शाखाबद्ध किया जाता है। यह कभी-कभी एक स्विच प्रकथन को निष्पादित करने के लिए एक अनुकूलन संकलक द्वारा उत्पन्न होता है - बशर्ते कि निविष्ट श्रेणी छोटी और सघन हो, कुछ अंतराल के साथ (जैसा कि पिछले सरणी उदाहरण द्वारा बनाया गया है) [1]

चूंकि काफी सुसंहत - कई समकक्षों की तुलना में If कथन - शाखा निर्देश में अभी भी कुछ अतिरेक है, क्योंकि शाखा opcode और स्थिति कूटमास्क शाखा अंतर्लब के साथ दोहराए जाते हैं। इस अतिरेक (कम से कम अन्वायोजन भाषाओं में) को दूर करने के लिए क्रमादेश लेबल्स के लिए केवल अंतर्लब वाली कंट्रोल तालिका का निर्माण किया जा सकता है और फिर भी एक पारंपरिक शाखा तालिका की तुलना में केवल मामूली निष्पादन समय संगणनात्मक उपरिव्यय की आवश्यकता होती है।

बहु-आयामी तालिका

अधिक सामान्यतः, एक नियंत्रण तालिका को एक सत्य तालिका के रूप में या एक मुद्रित निर्णय तालिका (या कई स्तरों पर निर्णय तालिकाओं के एक पेड़ (आँकड़ा संरचना)) के निष्पादन योग्य (द्विआधारी) कार्यान्वयन के रूप में सोचा जा सकता है। उनमें (अधिकांशत: निहित) प्रस्तावात्मक सूत्र होते हैं, साथ में एक या एक से अधिक संबद्ध 'कार्य' होते हैं। ये क्रियाएं सामान्यत: जेनेरिक या कस्टम-निर्मित उपनेमिका्स द्वारा की जाती हैं जिन्हें अनुदेशांतरक (संगणन) क्रमादेश द्वारा कॉल किया जाता है। इस उदाहरण में दुभाषिया प्रभावी रूप से एक आभासी मशीन के रूप में कार्य करता है, जो नियंत्रण तालिका प्रविष्टियों को 'निष्पादित' करता है और इस प्रकार दुभाषिया के अंतर्निहित कूट की तुलना में उच्च स्तर का अमूर्तता (संगणक विज्ञान) प्रदान करता है।

भाषा पर निर्भर स्विच प्रकथन के समान पंक्तियों के साथ एक नियंत्रण तालिका का निर्माण किया जा सकता है, लेकिन निविष्ट मानों के संयोजन के लिए परीक्षण की अतिरिक्त संभावना के साथ (बूलियन बीजगणित (तर्क) शैली तार्किक संयोजन/तार्किक संयोजन स्थितियों का उपयोग करके) और संभावित रूप से एकाधिक उपनेमिका्स को कॉल करना (इसके अतिरिक्त) मूल्यों का सिर्फ एक सेट और 'शाखा से' क्रमादेश लेबल)। (स्विच प्रकथन निर्माण किसी भी मामले में उपलब्ध नहीं हो सकता है, या उच्च स्तरीय भाषाओं (उच्च स्तरीय क्रमादेशन भाषा) में भ्रमित रूप से भिन्न कार्यान्वयन है। नियंत्रण तालिका अवधारणा, तुलनात्मक रूप से, कोई आंतरिक भाषा निर्भरता नहीं है, लेकिन फिर भी इसे अलग तरह से लागू किया जा सकता है। चयनित क्रमादेशन भाषा की उपलब्ध आँकड़ा परिभाषा सुविधाओं के अनुसार।)

तालिका सामग्री

एक नियंत्रण तालिका अनिवार्य रूप से एक पारंपरिक कार्यक्रम के 'सार' का प्रतीक है, इसकी क्रमादेशन भाषा वाक्यऔर प्लेटफॉर्म पर निर्भर घटकों (जैसे IF/THEN DO.., FOR.., DO WHILE.., SWITCH, GOTO, CALL) और ' संघनित' इसके चर (जैसे निविष्ट 1), मान (जैसे 'A', 'S', 'M' और 'D'), और उपनेमिका पहचान (जैसे 'जोड़ें', 'घटाना,..' या #1, # 2,...). तालिका की संरचना में सामान्यत: सम्मलित (स्वतः निर्धारित) तर्कसंगत संक्रिया सम्मलित होते हैं - जैसे 'समानता के लिए परीक्षण', एक उपनेमिका और 'अगली संक्रिया' करना या स्वतः निर्धारित अनुक्रम का पालन करना (इन्हें क्रमादेश प्रकथन के अंदर स्पष्ट रूप से बताए जाने के अतिरिक्त - आवश्यकतानुसार अन्य क्रमादेशन प्रतिमान में)।

एक बहु-आयामी नियंत्रण तालिका में सामान्य रूप से, न्यूनतम के रूप में, मूल्य / क्रिया जोड़े होते हैं और इसमें अतिरिक्त रूप से निपात और प्रकार तंत्र की जानकारी हो सकती है, जैसे स्थान, आकार और निविष्ट या निर्गत आँकड़ा का प्रारूप, चाहे आँकड़ा रूपांतरण (या अन्य कार्यावधि) (कार्यक्रम जीवनचक्र चरण) | कार्यावधि प्रसंस्करण बारीकियाँ) प्रसंस्करण से पहले या बाद में आवश्यक है (यदि पहले से ही फलन में निहित नहीं है)। तालिका में पंक्ति में अन्य मूल्यों के आधार पर निष्पादित होने वाली सामान्य या अनुकूलित भाषा आदिम या उपनेमिका्स के लिए सरणी अनुक्रमणिका या सापेक्ष या निरपेक्ष सूचक (संगणक क्रमादेशन) सम्मलित हो सकते हैं या नहीं हो सकते हैं।

नीचे दी गई तालिका केवल 'निविष्ट1' पर लागू होती है क्योंकि तालिका में कोई विशिष्ट निविष्ट निर्दिष्ट नहीं किया गया है।

'संरचना द्वारा निहित शर्तें और क्रियाएं'

(implied) IF = (implied) perform
value action
value action

(मान और क्रिया की इस संपार्श्‍व जोड़ी में अनुवृत्त-संचालित क्रमादेशन, अर्थात् अनुवृत्त-निर्धारण' और 'अनुवृत्त-प्रहस्तन' में समानताएं हैं, लेकिन बिना (आवश्यक रूप से) अनुवृत्त की अतुल्यकालिक प्रणाली प्रकृति)

नियंत्रण तालिका के अंदर कूटबद्‍ध किए जा सकने वाले मानों की विविधता काफी हद तक उपयोग की जाने वाली संगणक भाषा पर निर्भर करती है। सभा की भाषा आँकड़ा प्रकारों के लिए सबसे व्यापक गुंजाइश प्रदान करती है, जिसमें (कार्यों के लिए), सीधे निष्पादन योग्य मशीन कूट का विकल्प सम्मलित है। आम तौर पर एक नियंत्रण तालिका में निविष्ट के प्रत्येक संभावित मिलान वर्ग के लिए एक संबंधित सूचक के साथ एक क्रिया उपनेमिका के लिए मान होंगे। कुछ भाषाएँ सूचक (संगणक क्रमादेशन) (सीधे) का समर्थन नहीं करने का दावा करती हैं, लेकिन इसके अतिरिक्त एक ऐरे आँकड़ा संरचना का समर्थन कर सकती हैं, जिसका उपयोग सशर्त निष्पादन करने के लिए 'आपेक्षिक उपनेमिका संख्या' का प्रतिनिधित्व करने के लिए किया जा सकता है, जिसे तालिका प्रविष्टि में मान द्वारा नियंत्रित किया जाता है ( उदाहरण के लिए एक अनुकूलित स्विच प्रकथन, प्रकथन में उपयोग के लिए - शून्य अंतराल (अर्थात एक बहुधा शाखा) के साथ अभिकल्पना किया गया)।

प्रत्येक पंक्ति (या यहां तक ​​​​कि अंतःस्थापित पाठीय प्रलेखन) के ऊपर स्थित टिप्पणियां एक निर्णय तालिका को 'मानव पठनीय' प्रस्तुत कर सकती हैं, यहां तक ​​​​कि 'संघनन डाउन' (कूटलेखन के बाद भी इसकी अनिवार्यता (और अभी भी मोटे तौर पर मूल कार्यक्रम विनिर्देश के साथ - विशेष रूप से यदि एक मुद्रित निर्णय तालिका, प्रत्येक अद्वितीय क्रिया की गणना, कोडलेखन आरंभ होने से पहले बनाई जाती है)। तालिका प्रविष्टियों में 'इन-फ्लाइट' या बाद के अनुकूलन के लिए कार्यावधि आँकड़े एकत्र करने के लिए वैकल्पिक रूप से काउंटर भी हो सकते हैं

तालिका स्थान

नियंत्रण तालिका स्थैतिक चर भण्डारण में, सहायक भंडारण पर, जैसे कि एक सरल संचिका या आँकड़ाबेस पर या वैकल्पिक रूप से आंशिक रूप से या पूरी तरह से मापदंडों से क्रमादेश बूटिंग समय पर गतिशील रूप से निर्मित हो सकते हैं (जो स्वयं एक तालिका में रह सकते हैं)। इष्टतम दक्षता के लिए, जब दुभाषिया इसका उपयोग करना आरंभ करता है तो तालिका स्मृतिवासी होनी चाहिए।

दुभाषिया और उपनेमिका्स

दुभाषिया को उच्च स्तरीय भाषा सहित किसी भी उपयुक्त क्रमादेशन भाषा में लिखा जा सकता है। एक उपयुक्त रूप से अभिकल्पित किया गया सामान्य क्रमादेशन दुभाषिया, जेनेरिक उपनेमिका्स के एक अच्छी तरह से चुने गए सेट के साथ (सबसे अधिक होने वाली भाषा आदिम को संसाधित करने में सक्षम), केवल नए कस्टम उपनेमिका्स के लिए अतिरिक्त पारंपरिक कूटलेखन की आवश्यकता होगी (नियंत्रण तालिका को ही निर्दिष्ट करने के अतिरिक्त)। दुभाषिया, वैकल्पिक रूप से, केवल एक पूर्ण एप्लिकेशन क्रमादेश (जैसे मेन प्रस्पंद) के कुछ अच्छी तरह से परिभाषित वर्गों पर लागू हो सकता है और अन्य, 'कम सशर्त', अनुभागों (जैसे क्रमादेश आरंभीकरण, समाप्ति और इसी तरह) पर नहीं।

दुभाषिया को अनावश्यक रूप से जटिल होने की आवश्यकता नहीं है, या एक संकलक लेखक के उन्नत ज्ञान के साथ एक क्रमादेशक द्वारा निर्मित किया जा सकता है, और इसे किसी भी अन्य एप्लिकेशन क्रमादेश के रूप में लिखा जा सकता है - सिवाय इसके कि यह सामान्यत: दक्षता को ध्यान में रखकर बनाया गया है। इसका प्राथमिक कार्य तालिका प्रविष्टियों को निर्देशों के एक सेट के रूप में निष्पादित करना है। नियंत्रण तालिका प्रविष्टियों को पार्स करने की कोई आवश्यकता नहीं है और इसलिए इन्हें, जहां तक ​​संभव हो, 'निष्पादन के लिए तैयार' होने के लिए अभिकल्पित किया जाना चाहिए, जिसके लिए उपयुक्त पंक्ति से अनुदेशांतरक के पहले से ही संकलित जेनेरिक कूट में केवल चरों को जोड़ने की आवश्यकता होती है। . निर्देश (संगणक विज्ञान), सिद्धांत रूप में, असीम रूप से विस्तरणीय हैं और तालिका के अंदर (संभवतः मनमाने) मूल्यों का गठन करते हैं जो केवल दुभाषिया के लिए सार्थक हैं। दुभाषिया का नियंत्रण प्रवाह सामान्य रूप से प्रत्येक तालिका पंक्ति के अनुक्रमिक प्रसंस्करण द्वारा होता है लेकिन तालिका प्रविष्टियों में विशिष्ट क्रियाओं द्वारा संशोधित किया जा सकता है।

इस प्रकार इन स्वैच्छिक मूल्यों को कलन विधि दक्षता को ध्यान में रखते हुए अभिकल्पना किया जा सकता है - उन मानों का चयन करके जिन्हें आँकड़ा या फलन सूचक के लिए प्रत्यक्ष अनुक्रमणिका के रूप में उपयोग किया जा सकता है। विशेष प्लेटफॉर्म/संगणक भाषा के लिए, उन्हें विशेष रूप से शाखा तालिका मानों का उपयोग करके निर्देश पथ की लंबाई को कम करने के लिए अभिकल्पित किया जा सकता है या कुछ स्थितियों में जैसे कि समय-समय पर संकलन अनुभाषक में सीधे निष्पादन योग्य मशीन कूटस्निपेट (क्रमादेशन) (या उनके लिए संकेत)।

उपनेमकाओं को या तो उसी भाषा में कूटबद्ध किया जा सकता है जिसमें दुभाषिया स्वयं या किसी अन्य समर्थित क्रमादेश भाषा में (बशर्ते कि उपयुक्त अंतर-भाषा 'कॉल' संधान तंत्र सम्मलित हो)। अनुदेशांतरक और/या उपनेमिका्स के लिए भाषा का चुनाव सामान्यत: इस बात पर निर्भर करेगा कि इसे विभिन्न प्लेटफार्म (संगणन) में कितना पोर्तालिका होना चाहिए। नियंत्रण तालिका के में सुवाह्यता को बढ़ाने के लिए दुभाषिया के कई संस्करण हो सकते हैं। एक अधीनस्थ नियंत्रण तालिका सूचक वैकल्पिक रूप से 'संक्रिया' पंक्ति में एक उपनेमिका सूचक के लिए स्थानापन्न कर सकता है यदि दुभाषिया इस निर्माण का समर्थन करता है, एक पारंपरिक संरचित क्रमादेशन संरचना की नकल करते हुए एक निचले तार्किक स्तर पर एक सशर्त 'मात्रा' का प्रतिनिधित्व करता है।

प्रदर्शन विचार

पहली नजर में, नियंत्रण तालिकाओं का उपयोग एक कार्यक्रम के संगणनात्मक उपरिव्यय में काफी कुछ जोड़ने के लिए प्रतीत होता है, जिसके लिए 'मूल' क्रमादेशन भाषा के बयानों को निष्पादित करने से पहले एक दुभाषिया प्रक्रिया की आवश्यकता होती है। चूंकि हमेशा ऐसा नहीं होता है। तर्क से निष्पादन योग्य कूटलेखन को अलग (या 'प्रावरण') करके, जैसा कि तालिका में व्यक्त किया गया है, इसे अपने कार्य को सबसे अधिक कुशलता से करने के लिए अधिक आसानी से लक्षित किया जा सकता है। यह एक स्प्रेडशीट एप्लिकेशन में सबसे स्पष्ट रूप से अनुभव किया जा सकता है - जहां अंतर्निहित स्प्रेडशीट सॉफ़्टवेयर अपने परिणामों को प्रदर्शित करने के लिए पारदर्शी रूप से जटिल तार्किक 'सूत्रों' को सबसे कुशल तरीके से परिवर्तित करता है।

नीचे दिए गए उदाहरणों को संभावित प्रदर्शन लाभों को स्पष्ट करने के लिए आंशिक रूप से चुना गया है जो न केवल अमूर्तता के अतिरिक्त स्तर के लिए महत्वपूर्ण रूप से क्षतिपूर्ति कर सकते हैं, बल्कि सुधार भी कर सकते हैं - अन्यथा क्या हो सकता था - कम कुशल, कम रखरखाव योग्य और लंबा कूट। यद्यपि दिए गए उदाहरण एक 'निम्न स्तर' समुच्चय भाषा और c (भाषा) के लिए हैं, यह देखा जा सकता है, दोनों ही स्थितियों में, नियंत्रण तालिका दृष्टिकोण को लागू करने के लिए कूट की बहुत कम पंक्तियों की आवश्यकता होती है और फिर भी बहुत महत्वपूर्ण हासिल कर सकते हैं वाचाल पारंपरिक क्रमादेश भाषा निर्माण की तुलना में निरंतर समय प्रदर्शन में सुधार, दोहराव वाले स्रोत कूटलेखन को कम करना और सहायता स्पष्टता। इस लेख में तालिकाओं और बहुधा शाखा की दक्षता से संबंधित डोनाल्ड नुथ द्वारा नियंत्रण तालिका#अंतरालक भी देखें।

नियंत्रण तालिकाओं के उदाहरण

निम्नलिखित उदाहरण मनमाने हैं (और सादगी के लिए केवल एक निविष्ट पर आधारित हैं), चूंकि लक्षय केवल यह प्रदर्शित करना है कि नियमित क्रमादेश प्रकथन के अतिरिक्त तालिकाओं के उपयोग के माध्यम से नियंत्रण प्रवाह को कैसे प्रभावित किया जा सकता है। यह स्पष्ट होना चाहिए कि इस तकनीक को कई निविष्ट से निपटने के लिए आसानी से विस्तारित किया जा सकता है, या तो पंक्ति की संख्या बढ़ाकर या एकाधिक तालिका प्रविष्टियों (वैकल्पिक और/या निपातके साथ) का उपयोग करके। इसी तरह, (पदानुक्रमित) 'सहलग्‍न' नियंत्रण तालिकाओं का उपयोग करके, संरचित क्रमादेशन को पूरा किया जा सकता है (वैकल्पिक रूप से अधीनस्थ नियंत्रण तालिकाओं को उजागर करने में मदद करने के लिए आद्यपर्वतनी का उपयोग करना)।

CT1 नियंत्रण तालिका का एक उदाहरण है जो एक साधारण लुकअप तालिका है। पहला पंक्ति परीक्षण किए जाने वाले निविष्ट मान का प्रतिनिधित्व करता है (अंतर्निहित 'IF input1 = x' द्वारा) और, यदि TRUE है, तो संबंधित दूसरा पंक्ति ('कार्रवाई') में सिस्टम कॉल (या के लिए जाओ) द्वारा निष्पादित करने के लिए एक उपनेमिका पता होता है - स्विच प्रकथन प्रकथन के समान)। वास्तव में, यह वापसी के साथ एक बहुधा शाखा है (गतिशील प्रेषण का एक रूप)। अंतिम प्रविष्टि स्वतः निर्धारित मामला है जहां कोई मेल नहीं मिला।

CT1

input 1 pointer
A -->Add
S -->Subtract
M -->Multiply
D -->Divide
? -->Default

अन्य आँकड़ा मानों के साथ आँकड़ा संरचनाओं के अंदर सूचक्स का समर्थन करने वाली क्रमादेशन भाषाओं के लिए, उपरोक्त तालिका (CT1) का उपयोग नियंत्रण प्रवाह को तालिका से मिलान मूल्य के अनुसार एक उपयुक्त उपनेमिका के लिए निर्देशित करने के लिए किया जा सकता है (अन्यथा इंगित करने के लिए पंक्ति के बिना, समानता मान ली गई है)।

आईबीएम/360 (अधिकतम 16Mb एड्रेस श्रेणी) या Z/संरचना के लिए समुच्चय भाषा का उदाहरण

इस पहले उदाहरण के लिए कूटलेखन में लुकअप को अनुकूलित करने का कोई प्रयास नहीं किया गया है, और इसके अतिरिक्त यह एक सरल रेखीय खोज तकनीक का उपयोग करता है - विशुद्ध रूप से अवधारणा को स्पष्ट करने और कम स्रोत पंक्तियों को प्रदर्शित करने के लिए। सभी 256 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूट की लगभग 265 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि कई 'तुलना और शाखा' के लिए सामान्य रूप से लगभग 512 स्रोत पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है) , प्रत्येक तालिका प्रविष्टि को 'तत्काल तुलना करें'/शाखा निर्देशों की एक श्रृंखला के लिए लगभग 8 बाइट्स के अतिरिक्त केवल 4 बाइट्स की आवश्यकता होती है (बड़े निविष्ट चर के लिए, बचत और भी अधिक होती है)।

 * ------------------ interpreter --------------------------------------------*
           LM     R14,R0,=A(4,CT1,N)               Set R14=4, R15 --> table, and R0 =no. of entries in table (N)
  TRY      CLC    INPUT1,0(R15)         *********  Found value in table entry ?
           BE     ACTION                * loop  *  YES, Load register pointer to sub-routine from table
           AR     R15,R14               *       *  NO, Point to next entry in CT1 by adding R14 (=4)
           BCT    R0,TRY                *********  Back until count exhausted, then drop through
  .             default action                          ... none of the values in table match, do something else
           LA     R15,4(R15)                       point to default entry (beyond table end)
  ACTION   L      R15,0(R15)                       get pointer into R15,from where R15 points
           BALR   R14,R15                          Perform the sub-routine ("CALL" and return)
           B      END                              go terminate this program
  * ------------------ control table -----------------------------------------*
  *                 | this column of allowable EBCDIC or ASCII values is tested '=' against variable 'input1'
  *                 |      | this column is the 3-byte address of the appropriate subroutine
  *                 v      v
  CT1      DC     C'A',AL3(ADD)                    START of Control Table (4 byte entry length)
           DC     C'S',AL3(SUBTRACT)
           DC     C'M',AL3(MULTIPLY)
           DC     C'D',AL3(DIVIDE)
  N        EQU    (*-CT1)/4                        number of valid entries in table (total length / entry length)
           DC     C'?',AL3(DEFAULT)                default entry – used on drop through to catch all
  INPUT1   DS     C                                input variable is in this variable
  * ------------------ sub-routines ------------------------------------------*
  ADD      CSECT                                   sub-routine #1 (shown as separate CSECT here but might
  .                                                                alternatively be in-line code)
  .            instruction(s) to add
           BR     R14                              return
  SUBTRACT CSECT                                   sub-routine #2
  .            instruction(s) to subtract
           BR     R14                              return
  . etc..

उपरोक्त उदाहरण में दुभाषिया के प्रदर्शन में सुधार

उपरोक्त उदाहरण में चयन करने के लिए, औसत निर्देश पथ की लंबाई (उपनेमिका कूट को छोड़कर) '4n/2 +3' है, लेकिन इसे आसानी से कम किया जा सकता है, जहां n = 1 से 64, एक रैखिक समय के लिए शून्य तुलना के साथ '5' की पथ लंबाई के साथ, यदि अपरिष्कृत ईबीसीडीआईसी आँकड़ा से CT1 के लिए एक सीधा सूचकांक बनाने के लिए पहली बार 256 बाइट अनुवाद तालिका का उपयोग किया जाता है। जहाँ n = 6, यह तब केवल 3 अनुक्रमिक तुलना और शाखा निर्देशों के बराबर होगा। हालाँकि, जहाँ n <= 64, औसतन इसे कई तुलनाओं का उपयोग करने की तुलना में लगभग 13 गुना कम निर्देशों की आवश्यकता होगी। जहां n = 1 से 256, औसतन यह लगभग 42 गुना कम निर्देशों का उपयोग करेगा - चूंकि, इस मामले में, एक अतिरिक्त निर्देश की आवश्यकता होगी (सूचकांक को 4 से गुणा करने के लिए)।

'बेहतर दुभाषिया' (ऊपर दिए गए उदाहरण की तुलना में औसतन '26 गुना कम निष्पादित निर्देश' तक, जहां n = 1 से 64 और कई तुलनाओं का उपयोग करके 13 गुना कम की आवश्यकता होगी)।

64 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूट(या कम) की लगभग 85 पंक्तियों की आवश्यकता होती है (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 128 पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है - दूसरी अनुक्रमणिका निकालने के लिए आवश्यक अतिरिक्त 256 बाइट तालिका के बावजूद)।

   * ------------------ interpreter --------------------------------------------*
           SR     R14,R14               *********  Set R14=0
  CALC     IC     R14,INPUT1            * calc  *  put EBCDIC byte into lo order bits (24–31) of R14
           IC     R14,CT1X(R14)         *       *  use EBCDIC value as index on table 'CT1X' to get new index
  FOUND    L      R15,CT1(R14)          *********  get pointer to subroutine using index (0,4, 8 etc.)
           BALR   R14,R15                          Perform the sub-routine ("CALL" and return or Default)
           B      END                              go terminate this program
  * --------------- additional translate table (EBCDIC --> pointer table INDEX)  256 bytes----*
  CT1X     DC     12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)   12 identical sets of 16 bytes of x'00
  *                                                                        representing X'00 – x'BF'
           DC     AL1(00,04,00,00,16,00,00,00,00,00,00,00,00,00,00,00)      ..x'C0' – X'CF'
           DC     AL1(00,00,00,00,12,00,00,00,00,00,00,00,00,00,00,00)      ..x'D0' – X'DF'
           DC     AL1(00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00)      ..x'E0' – X'EF'
           DC     AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)      ..x'F0' – X'FF'
  * the assembler can be used to automatically calculate the index values and make the values more user friendly
  * (for e.g. '04' could be replaced with the symbolic expression 'PADD-CT1' in table CT1X above)
  * modified CT1 (added a default action when index = 00, single dimension, full 31 bit address)
  CT1      DC     A(DEFAULT)          index       =00      START of Control Table (4 byte address constants)
  PADD     DC     A(ADD)                          =04
  PSUB     DC     A(SUBTRACT)                     =08
  PMUL     DC     A(MULTIPLY)                     =12
  PDIV     DC     A(DIVIDE)                       =16
  * the rest of the code remains the same as first example

'आगे बेहतर दुभाषिया' (औसत पर पहले उदाहरण की तुलना में '21 गुना कम निष्पादित निर्देश (जहां n> = 64)' और कई तुलनाओं का उपयोग करके 42 गुना कम की आवश्यकता होगी)।

256 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूटया उससे कम की लगभग 280 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ), जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 512 पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है)।

    * ------------------ interpreter --------------------------------------------*
           SR     R14,R14               *********  Set R14=0
  CALC     IC     R14,INPUT1            * calc  *  put EBCDIC byte into lo order bits (24–31) of R14
           IC     R14,CT1X(R14)         *       *  use EBCDIC value as index on table 'CT1X' to get new index
           SLL    R14,2                 *       *  multiply index by 4 (additional instruction)
  FOUND    L      R15,CT1(R14)          *********  get pointer to subroutine using index (0,4, 8 etc.)
           BALR   R14,R15                          Perform the sub-routine ("CALL" and return or Default)
           B      END                              go terminate this program
  * --------------- additional translate table (EBCDIC --> pointer table INDEX)  256 bytes----*
  CT1X     DC     12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)   12 identical sets of 16 bytes of x'00'
  *                                                                        representing X'00 – x'BF'
           DC     AL1(00,01,00,00,04,00,00,00,00,00,00,00,00,00,00,00)      ..x'C0' – X'CF'
           DC     AL1(00,00,00,00,03,00,00,00,00,00,00,00,00,00,00,00)      ..x'D0' – X'DF'
           DC     AL1(00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00)      ..x'E0' – X'EF'
           DC     AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)      ..x'F0' – X'FF'
  * the assembler can be used to automatically calculate the index values and make the values more user friendly
  * (for e.g. '01' could be replaced with the symbolic expression 'PADD-CT1/4' in table CT1X above)
  * modified CT1 (index now based on 0,1,2,3,4  not 0,4,8,12,16 to allow all 256 variations)
  CT1      DC     A(DEFAULT)          index       =00      START of Control Table (4 byte address constants)
  PADD     DC     A(ADD)                          =01
  PSUB     DC     A(SUBTRACT)                     =02
  PMUL     DC     A(MULTIPLY)                     =03
  PDIV     DC     A(DIVIDE)                       =04
  * the rest of the code remains the same as the 2nd example

'सी (क्रमादेशन भाषा) उदाहरण' सा (क्रमादेशन भाषा) में यह उदाहरण दो तालिकाओं का उपयोग करता है, पहला (CT1) एक सरल रैखिक खोज एक-आयामी लुकअप तालिका है - निविष्ट (x), और दूसरा, संबद्ध तालिका (CT1p) का मिलान करके एक सूचकांक प्राप्त करने के लिए। जाने के लिए लेबल के पतों की एक तालिका है। <वाक्यविन्यास प्रकाश लैंग = सी>

 static const char  CT1[] = {  "A",   "S",        "M",        "D" };                          /* permitted input  values */
 static const void *CT1p[] = { &&Add, &&Subtract, &&Multiply, &&Divide, &&Default};           /* labels to goto & default*/
 for (int i = 0; i < sizeof(CT1); i++)      /* loop thru ASCII values                                                    */
   {if (x==CT1[i]) goto *CT1p[i]; }       /* found --> appropriate label                                               */
   goto *CT1p[i+1];                           /* not found --> default label                                               */

</वाक्यविन्यास हाइलाइट> इसे और अधिक कुशल बनाया जा सकता है यदि एक 256 बाइट तालिका का उपयोग कच्चे ASCII मान (x) को सीधे एक सघन अनुक्रमिक सूचकांक मान में अनुवाद करने के लिए किया जाता है, जिसका उपयोग सीधे CT1p से शाखा के पते का पता लगाने के लिए किया जाता है (अर्थात बाइट-वाइड सरणी के साथ सूचकांक मानचित्रण) . इसके बाद यह x के सभी संभावित मानों के लिए निरंतर समय में निष्पादित होगा (यदि CT1 p में सूचक के अतिरिक्त फलन के नाम सम्मलित हैं, तो स्विच-जैसी गोटो को समाप्त करते हुए जंप को गतिक फलन कॉल से बदला जा सकता है - लेकिन अतिरिक्त लागत से प्रदर्शन में कमी फलन प्रबंधन (संगणन))। <वाक्यविन्यास प्रकाश लैंग = सी>

static const void *CT1p[] = {&&Default, &&Add, &&Subtract, &&Multiply, &&Divide};
 /* the 256 byte table, below, holds values (1,2,3,4), in corresponding ASCII positions (A,S,M,D), all others set to 0x00 */
 static const char CT1x[]={
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00','\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x01', '\x00', '\x00', '\x04', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x03', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x02', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x03', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
            '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00'};
 /* the following code will execute in constant time, irrespective of the value of the input character (x)                    */
 i = CT1x(x);            /* extract the correct subroutine index from table CT1x using its ASCII value as an index initially  */
 goto *CT1p[i];          /* goto (Switch to) the label corresponding to the index (0=default, 1=Add, 2=Subtract,.) - see CT1p */

</वाक्यविन्यास हाइलाइट>

नीचे दिया गया अगला उदाहरण बताता है कि कैसे एक समान प्रभाव उन भाषाओं में प्राप्त किया जा सकता है जो आँकड़ा संरचनाओं में सूचक परिभाषाओं का समर्थन नहीं करती हैं लेकिन एक उपनेमका के लिए अनुक्रमित शाखाओं का समर्थन करती हैं - एक (शून्य-आधारित संख्यािंग|0-आधारित) के अंदर निहित ) उपनेमिका सूचक्स की सरणी। तालिका (CT2) का उपयोग इंडेक्स (दूसरे पंक्ति से) को सूचक पंक्ति (CT2P) में निकालने के लिए किया जाता है। यदि सूचक सरणियों का समर्थन नहीं किया जाता है, तो स्विच प्रकथन या समतुल्य का उपयोग क्रमादेश लेबल्स के अनुक्रम में से एक में नियंत्रण प्रवाह को बदलने के लिए किया जा सकता है (उदाहरण: केस0, केस1, केस2, केस3, केस4) जो या तो सीधे निविष्ट को संसाधित करते हैं, या अन्यथा इससे निपटने के लिए उपयुक्त उपनेमका (स्वतः निर्धारित, जोड़ें, घटाएं, गुणा या विभाजित करें,..) पर कॉल करें (वापसी के साथ)।

'CT2'

input 1 subr #
A 1
S 2
M 3
D 4
? 0

उपरोक्त उदाहरणों की तरह, वास्तव में तालिका लुकअप का उपयोग किए बिना संभावित ASCII निविष्ट मानों (A, S, एम, D या अज्ञात) को सूचक सरणी इंडेक्स में अनुवाद करना संभव है, लेकिन यहां स्थिरता के लिए तालिका के रूप में दिखाया गया पहला उदाहरण है।

CT2P सूचक सरणी
pointer array
-->default
-->Add
-->Subtract
-->Multiply
-->Divide
-->?other

बहु-आयामी नियंत्रण तालिकाओं का निर्माण किया जा सकता है (अर्थात अनुकूलित) जो उपरोक्त उदाहरणों की तुलना में 'अधिक जटिल' हो सकता है जो कई निविष्ट पर कई स्थितियों के लिए परीक्षण कर सकता है या कुछ मिलान मानदंडों के आधार पर एक से अधिक 'कार्रवाई' कर सकता है। एक 'कार्रवाई' में एक अन्य अधीनस्थ नियंत्रण तालिका में सूचक सम्मलित हो सकता है। नीचे दिए गए सरल उदाहरण में एक अतिरिक्त पंक्ति (लघु अक्षर निविष्ट को संभालने के लिए) के रूप में निहित 'OR' शर्त सम्मलित है, चूंकि इस उदाहरण में, इसे निर्दिष्ट करते हुए प्रत्येक लघु अक्षर वर्णों के लिए एक अतिरिक्त प्रविष्टि होने से समान रूप से नियंत्रित किया जा सकता है। ऊपरी केस वर्णों के समान उपनेमिका पहचानकर्ता)। प्रत्येक निविष्ट के लिए वास्तविक कार्यावधि अनुवृत्तओं की गणना करने के लिए एक अतिरिक्त पंक्ति भी सम्मलित है।

'CT3'

input 1 alternate subr # count
A a 1 0
S s 2 0
M m 3 0
D d 4 0
? ? 0 0

नियंत्रण तालिका प्रविष्टियाँ तब प्रक्रियात्मक भाषाओं में सशर्त बयानों के समान होती हैं, लेकिन महत्वपूर्ण रूप से, बिना वास्तविक (भाषा पर निर्भर) सशर्त बयान (अर्थात निर्देश) सम्मलित होते हैं (सामान्य कूट दुभाषिया में भौतिक रूप से होता है जो तालिका प्रविष्टियों को संसाधित करता है, तालिका में ही - जो केवल अपनी संरचना और मूल्यों के माध्यम से क्रमादेश तर्क का प्रतीक है)।

इस तरह की तालिकाओं में, जहां समान तालिका प्रविष्टियों की एक श्रृंखला संपूर्ण तर्क को परिभाषित करती है, एक तालिका प्रविष्टि संख्या या सूचक प्रभावी रूप से अधिक पारंपरिक कार्यक्रमों में कार्यक्रम गणक की जगह ले सकता है और एक 'कार्रवाई' में रीसेट किया जा सकता है, जिसे इसमें भी निर्दिष्ट किया गया है। तालिका प्रविष्टि नीचे दिए गए उदाहरण (सीटी4) से पता चलता है कि पिछली तालिका को विस्तारित करने के लिए, 'अगली' प्रविष्टि (और/या 'परिवर्तन प्रवाह' (शाखा (संगणक विज्ञान)) उपनेमका सम्मलित करने के लिए) एक क्रमादेश प्रस्पंद बना सकता है (यह उदाहरण वास्तव में नहीं है इस तरह की नियंत्रण तालिका बनाने का सबसे कुशल तरीका लेकिन, ऊपर दिए गए पहले उदाहरणों से एक क्रमिक 'विकास' का प्रदर्शन करके, दिखाता है कि व्यवहार को संशोधित करने के लिए अतिरिक्त पंक्ति का उपयोग कैसे किया जा सकता है।) पाँचवी पंक्ति दर्शाती है कि एक से अधिक क्रियाएँ आरंभ की जा सकती हैं एकल तालिका प्रविष्टि - इस मामले में प्रत्येक प्रविष्टि के सामान्य प्रसंस्करण के बाद की जाने वाली कार्रवाई ('-' मान का अर्थ है 'कोई शर्त नहीं' या 'कोई कार्रवाई नहीं')।

संरचित क्रमादेशन या संरचित क्रमादेशन | गोटो-लेस कूट, ('प्रस्पंद करते समय करें' या 'प्रस्पंद के लिए' निर्माण के समतुल्य को सम्मलित करते हुए), उपयुक्त रूप से अभिकल्पना किए गए और 'दंतुरित' नियंत्रण तालिका संरचनाओं के साथ भी समायोजित किया जा सकता है।

'सीटी4' (निविष्ट1 और प्रक्रिया को पढ़ने के लिए एक पूर्ण 'क्रमादेश', 'E' मिलने तक दोहराता है)

input 1 alternate subr # count jump
- - 5 0 -
E e 7 0 -
A a 1 0 -
S s 2 0 -
M m 3 0 -
D d 4 0 -
? ? 0 0 -
- - 6 0 1
CT4P सूचक सरणी
pointer array
-->Default
-->Add
-->Subtract
-->Multiply
-->Divide
-->Read Input1
-->Alter flow
-->End


तालिका-संचालित सन्‍निर्धारण

दूरसंचार सन्‍निर्धारण के विशेषज्ञ क्षेत्र में (किसी विशेष कॉल की लागत निर्धारित करने से संबंधित), तालिका-संचालित सन्‍निर्धारण तकनीक उन अनुप्रयोगों में नियंत्रण तालिकाओं के उपयोग को दर्शाती है जहां बाजार की शक्तियों के कारण नियम बार-बार बदल सकते हैं। कई स्थितियों में गैर-क्रमादेशक द्वारा अल्प सूचना पर शुल्क निर्धारित करने वाली तालिकाओं को बदला जा सकता है।[4][5] यदि कलन विधि दुभाषिया में पूर्व-निर्मित नहीं हैं (और इसलिए तालिका में रखी गई अभिव्यक्ति की अतिरिक्त रनटाइम व्याख्या की आवश्यकता होती है), इसे तालिका-संचालित सन्‍निर्धारण के अतिरिक्त नियम-आधारित सन्‍निर्धारण के रूप में जाना जाता है (और इसके परिणामस्वरूप काफी अधिक उपरिव्यय की खपत होती है)।

स्प्रेडशीट

एक स्प्रेडशीट आँकड़ा शीट को दो आयामी नियंत्रण तालिका के रूप में माना जा सकता है, जिसमें गैर-खाली सेल अंतर्निहित स्प्रेडशीट क्रमादेश (दुभाषिया) के आँकड़ा का प्रतिनिधित्व करती हैं। सूत्र वाली कोशिकाओं को सामान्यत: एक समान चिह्न के साथ उपसर्ग किया जाता है और केवल एक विशेष प्रकार के आँकड़ा निविष्ट को निर्दिष्ट किया जाता है जो अन्य संदर्भित कोशिकाओं के प्रसंस्करण को निर्धारित करता है - दुभाषिया के अंदर नियंत्रण प्रवाह को बदलकर। यह अंतर्निहित दुभाषिया से सूत्रों का बाहरीकरण है जो स्पष्ट रूप से दोनों स्प्रैडशीट्स की पहचान करता है, और उपरोक्त उद्धृत नियम आधारित सन्‍निर्धारण उदाहरण गैर क्रमादेशक द्वारा नियंत्रण तालिकाओं के उपयोग के आसानी से पहचाने जाने योग्य उदाहरण हैं।

क्रमादेशन प्रतिमान

यदि नियंत्रण तालिका तकनीक को किसी विशेष क्रमादेशन प्रतिमान से संबंधित कहा जा सकता है, तो निकटतम सादृश्य स्वचल प्ररूप-आधारित क्रमादेशन या मीमांसा (संगणक विज्ञान) हो सकता है। चिंतनशील (मेटाक्रमादेशन का एक रूप - चूंकि तालिका प्रविष्टियों को दुभाषिया के व्यवहार को 'संशोधित' करने के लिए कहा जा सकता है)। हालाँकि दुभाषिया स्वयं, और उपनेमिका, किसी भी उपलब्ध प्रतिमानों या यहाँ तक कि मिश्रण का उपयोग करके क्रमादेश किया जा सकता है। तालिका स्वयं अनिवार्य रूप से असंसाधित्र आँकड़ा मानों का संग्रह हो सकती है जिसे संकलित करने की भी आवश्यकता नहीं होती है और बाहरी स्रोत से पढ़ा जा सकता है (विशिष्ट, प्लेटफ़ॉर्म निर्भर, अधिक दक्षता के लिए सीधे मेमोरी सूचक्स का उपयोग करके कार्यान्वयन को छोड़कर)।


बाईटकूट / आभासी मशीन अनुदेश सेट के अनुरूप

एक बहु-आयामी नियंत्रण तालिका में आभासी मशीन पर चलने वाले बाइट कूट के लिए कुछ अवधारणात्मक समानताएं होती हैं, जिसमें एक प्लेटफॉर्म निर्भर अनुदेशांतरक (संगणन)| दुभाषिया कार्यक्रम सामान्यत: वास्तविक निष्पादन करने के लिए आवश्यक होता है (जो मोटे तौर पर तालिका सामग्री द्वारा सशर्त रूप से निर्धारित होता है)। एक सामान्य मध्यवर्ती 'निर्देश सेट' बनाने के उद्देश्य से हाल ही में सामान्य मध्यवर्ती भाषा (सीआईएल) के लिए कुछ वैचारिक समानताएँ भी हैं जो प्लेटफ़ॉर्म से स्वतंत्र हैं (लेकिन सीआईएल के विपरीत, अन्य भाषाओं के लिए एक सामान्य संसाधन के रूप में उपयोग किए जाने का कोई दिखावा नहीं है) . पी-कूट मशीन | पी-कूट को भी एक समान लेकिन पहले के कार्यान्वयन के रूप में माना जा सकता है, जिसकी उत्पत्ति 1966 तक हुई थी।

निर्देश लाने

जब क्रमादेश प्रवाह को निर्धारित करने के लिए एक बहु-आयामी नियंत्रण तालिका का उपयोग किया जाता है, तो सामान्य हार्डवेयर कार्यक्रम गणक फलन को पहले (या अगली) तालिका प्रविष्टि के लिए एक सूचक (संगणक क्रमादेशन) के साथ प्रभावी ढंग से अनुकरण किया जाता है या इसके लिए एक सरणी अनुक्रमणिका। निर्देश प्राप्त करने में उस तालिका प्रविष्टि में आँकड़ा को डी कूट करना सम्मलित है - आवश्यक रूप से पहले प्रविष्टि के सभी या कुछ आँकड़ा को अनुकरण किए बिना। क्रमादेशन भाषा जो सूचक (संगणक क्रमादेशन) का उपयोग करने में सक्षम हैं, उनका दोहरा फायदा है कि कम संगणनात्मक उपरिव्यय सम्मलित है, सामग्री तक पहुँचने और निष्पादन के बाद अगली तालिका प्रविष्टि को इंगित करने के लिए काउंटर को आगे बढ़ाने में। अगले 'निर्देश' पते (अर्थात तालिका प्रविष्टि) की गणना किसी भी चरण में क्रमादेश प्रस्पंद्स और शाखा (संगणक विज्ञान) निर्देशों की अनुमति देने वाली प्रत्येक व्यक्तिगत तालिका प्रविष्टि की वैकल्पिक अतिरिक्त क्रिया के रूप में भी की जा सकती है।

निगरानी नियंत्रण तालिका निष्पादन

डिबगिंग उद्देश्यों, हॉट स्पॉट (संगणक विज्ञान) का पता लगाने, कूट समावेशन विश्लेषण और वास्तविक क्रमादेश प्रवाह के पूर्ण या आंशिक ट्रेस को रिकॉर्ड करने के लिए दुभाषिया कार्यक्रम वैकल्पिक रूप से क्रमादेश काउंटर (और निर्देश प्रकार के आधार पर अन्य प्रासंगिक विवरण) को सहेज सकता है। रूपरेखा (संगणक क्रमादेशन) (ऊपर CT3 और CT4 के उदाहरण देखें)।

लाभ

  • स्पष्टता - तालिका (सूचना) सर्वव्यापी संगणन है और आम जनता द्वारा भी स्वाभाविक रूप से समझी जाती है (विशेषकर उपयोगकर्ता गाइड में दोष निदान तालिकाएँ)
  • सुवाह्य - 100% भाषा स्वतंत्र (और प्लेटफ़ॉर्म स्वतंत्र - दुभाषिया को छोड़कर) के लिए अभिकल्पना किया जा सकता है
  • लचीलापन - या तो भाषा आदिम या उपनेमिका को पारदर्शी रूप से निष्पादित करने की क्षमता और समस्या के अनुरूप कस्टम अभिकल्पना किया जाना
  • सघनता - तालिका सामान्यत: साथ-साथ स्थिति/क्रिया जोड़ी दिखाती है (सामान्य प्लेटफ़ॉर्म/भाषा कार्यान्वयन निर्भरताओं के बिना), जिसके परिणामस्वरूप अधिकांशत:
    • द्विआधारी फाइल - निर्देशों के कम दोहराव के माध्यम से आकार में कमी
    • स्रोत कूटसंचिका - कई सशर्त बयानों के उन्मूलन के माध्यम से आकार में कमी आई है
    • बेहतर क्रमादेश भार (या अधोभार) गति
  • रख-रखाव - तालिका अधिकांशत: बनाए रखने के लिए आवश्यक स्रोत लाइनों की संख्या को कम करते हैं v। कई तुलनाएँ
  • संदर्भ की संस्थिति - सुसंहत तालिका संरचना के परिणामस्वरूप कैशे में शेष तालिका (संगणन)
  • कूटपुन: उपयोग - दुभाषिया सामान्यत: पुन: प्रयोज्य होता है। बार-बार इसे ठीक उसी तकनीक का उपयोग करके नए क्रमादेशन कार्यों के लिए आसानी से अनुकूलित किया जा सकता है और तालिका परिभाषाओं द्वारा नियंत्रित, 'संघटित रूप से' बन सकता है, वास्तव में, आजमाए हुए और परखे हुए उपनेमिका की एक मानक लाइब्रेरी।
  • कलन विधि दक्षता - प्रणालीगत अनुकूलन संभव। दुभाषिया में कोई भी प्रदर्शन सुधार सामान्यत: इसका उपयोग करने वाले सभी अनुप्रयोगों में सुधार करता है (ऊपर 'CT1' में उदाहरण देखें)।
  • विस्तरणीय - नया 'निर्देश' जोड़ा जा सकता है - केवल दुभाषिया का विस्तार करके
  • अनुदेशांतरक को एप्लिकेशन क्रमादेश की तरह लिखा जा सकता है

वैकल्पिक रूप से:-

  • दुभाषिया तालिका के अंदर एकत्र किए गए कार्यावधि सॉफ्टवेयर मीट्रिक(मिति) का उपयोग करके आत्मनिरीक्षण और आत्म अनुकूलन (संगणक विज्ञान) हो सकता है (CT3 और CT4 देखें - प्रविष्टियों के साथ जिन्हें समय-समय पर अवरोही गणना द्वारा क्रमबद्ध किया जा सकता है)। दुभाषिया वैकल्पिक रूप से कार्यावधि पर एकत्रित मेट्रिक्स से गतिशील रूप से सबसे कुशल लुकअप तकनीक का चयन कर सकता है (उदाहरण के लिए सरणी का आकार, मानों की श्रेणी, क्रमबद्ध या अवर्गीकृत)
  • गतिशील प्रेषण - सामान्य कार्यों को पहले से लोड किया जा सकता है और स्मृति उपयोग को कम करने के लिए केवल पहली मुठभेड़ पर कम सामान्य कार्य प्राप्त किए जा सकते हैं। इसे प्राप्त करने के लिए इन-तालिका ज्ञापन को नियोजित किया जा सकता है।
  • दुभाषिया में अंतर्निहित डिबगिंग, ट्रेस और निरीक्षण विशेषताएं हो सकती हैं - जिसे फिर परीक्षण या 'लाइव' मोड के अनुसार चालू या बंद किया जा सकता है
  • नियंत्रण तालिकाओं को 'ऑन-द-फ्लाई' (कुछ उपयोगकर्ता निविष्ट के अनुसार या मापदंडों से) बनाया जा सकता है और फिर दुभाषिया द्वारा निष्पादित किया जा सकता है (शब्दशः कूट के निर्माण के बिना)।

नुकसान

  • प्रशिक्षण की आवश्यकता - एप्लिकेशन क्रमादेशक सामान्यत: सामान्य समाधान तैयार करने के लिए प्रशिक्षित नहीं होते हैं

निम्नलिखित मुख्य रूप से बहु-आयामी तालिकाओं में उनके उपयोग पर लागू होते हैं, न कि पहले चर्चा की गई एक-आयामी तालिकाओं पर।

  • संगणनात्मक उपरिव्यय - अप्रत्यक्ष (क्रमादेशन) के अतिरिक्त स्तर की वजह से आभासी निर्देशों की 'व्याख्या' के कारण कुछ वृद्धि हुई है (चूंकि यह सामान्यत: एक अच्छी तरह से अभिकल्पित किए गए सामान्य दुभाषिया द्वारा अंतर्लब से अधिक हो सकता है जो कुशल प्रत्यक्ष अनुवाद, खोज और का पूरा लाभ उठाता है। सशर्त परीक्षण तकनीकें जिनका अन्यथा उपयोग नहीं किया जा सकता है।
  • संमिश्र अभिव्यक्ति (क्रमादेशन) को हमेशा आँकड़ा तालिका प्रविष्टियों में तुलना उद्देश्यों के लिए सीधे उपयोग नहीं किया जा सकता है
(इन 'मध्यवर्ती मूल्यों' की गणना एक उपनेमिका के अंदर पहले से की जा सकती है और उनके मूल्यों को सशर्त तालिका प्रविष्टियों में संदर्भित किया जाता है। वैकल्पिक रूप से, एक उपनेमिका पूर्ण जटिल सशर्त परीक्षण (बिना शर्त 'कार्रवाई' के रूप में) और, व्यवस्थापन करके कर सकता है इसके परिणाम के रूप में एक सत्य बिट, फिर अगली तालिका प्रविष्टि में इसका परीक्षण किया जा सकता है। संरचित कार्यक्रम प्रमेय देखें)

उद्धरण

Multiway branching is an important programming technique which is all too often replaced by an inefficient sequence of if tests. Peter Naur recently wrote me that he considers the use of tables to control program flow as a basic idea of computer science that has been nearly forgotten; but he expects it will be ripe for rediscovery any day now. It is the key to efficiency in all the best compilers I have studied.

— Donald Knuth, Structured Programming with go to Statements

There is another way to look at a program written in interpretative language. It may be regarded as a series of subroutine calls, one after another. Such a program may in fact be expanded into a long sequence of calls on subroutines, and, conversely, such a sequence can usually be packed into a coded form that is readily interpreted. The advantage of interpretive techniques are the compactness of representation, the machine independence, and the increased diagnostic capability. An interpreter can often be written so that the amount of time spent in interpretation of the code itself and branching to the appropriate routine is negligible

— Donald Knuth, The Art of Computer Programming Volume 1, 1997, page 202

The space required to represent a program can often be decreased by the use of interpreters in which common sequences of operations are represented compactly. A typical example is the use of a finite-state machine to encode a complex protocol or lexical format into a small table

— Jon Bentley, Writing Efficient Programs

Jump tables can be especially efficient if the range tests can be omitted. For example, if the control value is an enumerated type (or a character) then it can only contain a small fixed range of values and a range test is redundant provided the jump table is large enough to handle all possible values

— David.A. SPULER, Compiler Code Generation for Multiway Branch Statements as a Static Search Problem

Programs must be written for people to read, and only incidentally for machines to execute.

— "Structure and Interpretation of Computer Programs", preface to the first edition, Abelson & Sussman

Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious.

— "The Mythical Man-Month: Essays on Software Engineering", Fred Brooks


यह भी देखें

  • स्वचल प्ररूप-आधारित क्रमादेशन
  • आँकड़ाबेस-केंद्रित संरचना
  • आँकड़ा-संचालित परीक्षण
  • निर्णय तालिका
  • परिमित अवस्था मशीन
  • कीवर्ड चालित परीक्षण
  • सूचक (संगणक क्रमादेशन)
  • स्विच प्रकथन - एकल निविष्ट चर के आधार पर कई लेबल (क्रमादेशन लैंग्वेज) में से किसी एक के लिए बहुधा शाखा
  • थ्रेडेड कूट
  • थ्रेडेड कूट# टोकन थ्रेडिंग

टिप्पणियाँ

  1. Programs from decision tables, Humby, E., 2007,Macdonald, 1973 ... Biggerstaff, Ted J. Englewood Cliffs, NJ : Prentice-Hall ISBN 0-444-19569-6
  2. "Archived copy" (PDF). Archived from the original (PDF) on 10 June 2016. Retrieved 17 May 2016.{{cite web}}: CS1 maint: archived copy as title (link)
  3. UML state machine#Hierarchically nested states
  4. Carl Wright, Service Level Corpo. (2002) Program Code Based vs. Table-driven vs. Rule-Based Rating, Rating Matters issue n. 12, 13 November 2002 ISSN 1532-1886
  5. Brian E. Clauser, Melissa J. Margolis, Stephen G. Clyman, Linette P. Ross (1997) Development of Automated Scoring Algorithms for Complex Performance Assessments: A Comparison of Two Approaches Journal of Educational Measurement, Vol. 34, No. 2 (Summer, 1997), pp. 141–161


संदर्भ


बाहरी संबंध