संरचनात्मक प्रोग्रामिंग के बारे में

गोटो ऑपरेटर के बारे में पोस्ट पर कई टिप्पणियों में एक ही राय व्यक्त की गई है, जो कुछ इस तरह से लगता है: "लेखन कार्यक्रमों के एन वर्षों के लिए मुझे गोटो की कभी आवश्यकता नहीं थी, और मैं भविष्य में भी इसका उपयोग नहीं करने जा रहा हूं।" और वे बिल्कुल सही हैं, संरचना प्रमेय लंबे समय से साबित हो गया है, जो बताता है कि कोई भी सरल कार्यक्रम कार्यात्मक रूप से संरचित कार्यक्रम के समान है जो मूल कार्यक्रम के कार्यों और विधेय का उपयोग करके बना है, साथ ही साथ एक अतिरिक्त काउंटर का उपयोग भी करता है। प्रमाण बहुत संरचित कार्यक्रम को संकलित करने के लिए एल्गोरिथ्म है:
  1. सर्किट के सभी नोड्स की संख्या, जबकि बाईपास ऑर्डर मनमाना है;
  2. सर्किट के सभी आर्क्स की संख्या इस प्रकार है: सर्किट के आउटपुट चाप को नंबर 0 असाइन करें, अन्य सभी को असाइन करें वर्टेक्स की संख्या जिसमें यह आर्क प्रवेश करता है;
  3. स्रोत प्रोग्राम के प्रत्येक कार्यात्मक नोड के लिए संख्या i और आउटपुट चाप j है, इनपुट चाप i की संख्या के साथ एक नया सरल अनुक्रमिक प्रोग्राम Gi बनाएं
  4. संख्या i के साथ प्रत्येक विधेय नोड के लिए, एक नया सरल प्रोग्राम बनाएं
  5. एक प्रोग्राम बनाते हैं जैसे कि एक संरचना के रूप में एक डी-पार्ट के साथ करते हैं जो एल के मूल्यों की जांच करता है।


इसलिए, यदि एक दिन आप कुछ इस तरह लिखते हैं ( गोटो पोस्ट से प्रोग्राम):

if (p1) { f1; goto L3; } L1: if (p2) { L2: f2; L3: f3; goto L1; } else if (p3) { f4; goto L2; } f5; 


बेहतर इस कोड को फिर से लिखना। यह कुछ भी नहीं है कि एक स्मार्ट व्यक्ति ने कहा: "कोड लिखें जैसे कि यह एक हिंसक मनोरोगी के साथ होगा जो जानता है कि आप कहां रहते हैं।" यह देखते हुए कि अधिकांश प्रोग्रामर को गोटो पसंद नहीं है, तो यह प्रासंगिक से अधिक है।

हम प्रमेय का उपयोग करते हैं और संरचनात्मक प्रोग्रामिंग के सिद्धांतों के अनुसार इस कोड को बदलते हैं। सबसे पहले, हम इस एल्गोरिथ्म के एक ब्लॉक आरेख की रचना करते हैं और प्रमेय के अनुसार ब्लॉक और आर्क्स को संख्या देते हैं।

छवि

अब डेडिकेटेड और फंक्शन ब्लॉक के प्रतिस्थापन के साथ लूप डू का निर्माण करें।

छवि

यह एक संरचित कार्यक्रम योजना बन गई, लेकिन इसमें बहुत अधिक मात्रा में है। हम इसे निम्नलिखित एल्गोरिदम के अनुसार बदल देते हैं:
प्रत्येक j> 0 के लिए, हम सभी असाइनमेंट L = j को संबंधित सबरूटीन Gj (L = 1 के लिए सहित) से बदलने का प्रयास करते हैं। यदि L को फिर से मान j असाइन नहीं किया जाएगा, तो आप प्रोग्राम संरचना से चेक L = j (इसके संबंधित निष्पादन शाखा के साथ) को हटा सकते हैं।

छवि

इस योजना का उपयोग करके, आप आसानी से कोड लिख सकते हैं जो संरचनात्मक प्रोग्रामिंग के सिद्धांतों का अनुपालन करता है।

 if p1: f1 f3 l = 3 while l > 0: if p2: f2 f3 elif p3: f4 f2 f3 else: f5 l = 0; 


या झंडे से पूरी तरह से छुटकारा पाएं जैसा कि इगराड ने यहां किया था।

कार्यक्रम के ब्लॉक आरेख को पहले तथाकथित ई-आरेख में परिवर्तित करके एक पुनरावर्ती कोड लिखना भी संभव था।

छवि

कोड:
 def F1(): if p2: F2() elif p3: f4 F2() else: f5 def F2(): f2 F3() def F3(): f3 F1() if p1: f1 F3() else: F1() 


यह देखते हुए कि वास्तविक प्रोग्रामिंग में, कार्यों का प्रदर्शन उनके द्वारा की गई क्रियाओं के अनुसार किया जाता है, यह कोड भी गोटो का उपयोग करते हुए कोड से अधिक पठनीय हो जाता है।

विषय लिखते समय, NSTU "सूचना विज्ञान की पद्धति। संरचनात्मक प्रोग्रामिंग का सिद्धांत और अभ्यास। ”T.A.Shaposhnikova

PS अपने सवालों और सुधारों के लिए धन्यवाद कवक

Source: https://habr.com/ru/post/In114326/


All Articles