एल्गोरिद्म और प्रोग्राम
एल्गोरिद्म साफ़ चरणों की सूची है जो किसी समस्या को हल करती है। प्रोग्राम वह एल्गोरिद्म है जिसे इस तरह लिखा गया हो कि कंप्यूटर या रोबोट चला सके। ब्लॉक प्रोग्रामिंग में हर आदेश एक रंगीन ब्लॉक है; ब्लॉक ईंटों की तरह जुड़ते हैं, इसलिए वर्तनी की गलती (syntax error) नहीं होती।
बने हुए प्रोग्राम को बदलना: उसे चलाइए, देखिए कहाँ गड़बड़ है, एक ब्लॉक बदलिए, फिर चलाइए। एक बार में एक ही चीज़ बदलिए ताकि पता चले किस बदलाव से ठीक हुआ या बिगड़ा। इस आदत को डीबग करना कहते हैं।
क्रम: ब्लॉक एक के बाद एक चलते हैं
सबसे सरल प्रोग्राम क्रम (sequence) है: ब्लॉक 1, फिर ब्लॉक 2, फिर ब्लॉक 3। क्रम मायने रखता है। 'आगे, फिर मुड़ो' और 'मुड़ो, फिर आगे' एक जैसे नहीं हैं। 3D में वही ब्लॉक अलग क्रम में रखने पर रोबोट दूसरे खाने पर पहुँचता है।
लूप और नेस्टेड लूप
लूप अपने अंदर के ब्लॉक दोहराता है। '4 बार दोहराओ [आगे 2, दाएँ मुड़ो]' वर्ग बनाता है। यह आठ ब्लॉक लिखने से छोटा है और सुधारना भी आसान: 2 को एक बार बदलिए, चार बार नहीं।
नेस्टेड लूप एक लूप के अंदर दूसरा लूप है। उदाहरण: 3 बार दोहराओ [ 4 बार दोहराओ [आगे 2, दाएँ मुड़ो], आगे 4 ] तीन वर्ग एक कतार में बनाता है। बाहरी लूप के हर चक्कर में भीतरी लूप पूरा चलता है, इसलिए भीतरी ब्लॉक 3 x 4 = 12 बार चलते हैं।
एक के बाद एक कई लूप भी आम हैं: पहला लूप वर्ग बनाए, दूसरा त्रिभुज।
चर (वेरिएबल)
चर एक नाम वाला डिब्बा है जिसमें बदलने वाला मान रहता है, जैसे कदम, स्कोर या जान। ब्लॉक: कदम को 1 करो, कदम में 1 जोड़ो, और कदम का मान दिखाने वाला गोल ब्लॉक।
उदाहरण: कदम = 1; 4 बार दोहराओ [आगे (कदम), दाएँ मुड़ो, कदम में 1 जोड़ो]। रोबोट 1, 2, 3, 4 खाने चलता है और सर्पिल बनाता है।
शर्त, घटना और सेंसर
शर्त तय करती है कि क्या करना है: अगर आगे दीवार है तो दाएँ मुड़ो, नहीं तो आगे चलो। सवाल के दो ही जवाब होते हैं: सही या गलत।
घटना वह है जो स्क्रिप्ट शुरू करे: हरा झंडा, कोई कुंजी, बटन, संदेश। घटना का इंतज़ार करने वाले प्रोग्राम घटना-आधारित कहलाते हैं।
सेंसर दुनिया को मापता है (दूरी, रोशनी, स्पर्श, तापमान)। एक्चुएटर दुनिया में कुछ करता है (मोटर, बत्ती, बज़र)। रोबोट का प्रोग्राम चक्र में चलता है: सेंसर पढ़ो, शर्त से तय करो, एक्चुएटर चलाओ। जैसे रेखा पर चलने वाला रोबोट हर सेकंड 50 बार रोशनी का सेंसर पढ़कर मोटर घुमाता है।
सिस्टम का व्यवहार सुधारने के लिए उसे परखिए, कोई ऐसा मामला खोजिए जहाँ वह फेल होता है (दीवार नई जगह है) और उसके लिए शर्त जोड़िए।
कस्टम ब्लॉक और उपप्रोग्राम
कस्टम ब्लॉक (उपप्रोग्राम, फ़ंक्शन) ब्लॉकों के समूह को नाम देता है। वर्ग को एक बार '4 बार दोहराओ [आगे 2, दाएँ मुड़ो]' के रूप में बनाइए, फिर कहीं भी इस्तेमाल कीजिए। वर्ग में सुधार करें तो हर जगह सुधर जाता है। कस्टम ब्लॉक में इनपुट भी हो सकता है, जैसे वर्ग (आकार)।
क्यों काम का है? प्रोग्राम छोटा, गलतियाँ कम और पढ़ना आसान: 'वर्ग, चलो, वर्ग' साफ़ बताता है रोबोट क्या कर रहा है।
मुख्य सूत्र और परिभाषाएँ
- प्रोग्राम = क्रम + लूप + शर्त (+ चर)
- नेस्टेड लूप: भीतरी ब्लॉक बाहरी गिनती x भीतरी गिनती बार चलते हैं
- 'n बार दोहराओ [ b ब्लॉक ]' = n x b ब्लॉक चलते हैं
- रोबोट चक्र: महसूस करो -> तय करो -> करो
हल किए गए उदाहरण
1. '4 बार दोहराओ [आगे 2, दाएँ 90 डिग्री मुड़ो]' कौन-सा आकार बनाता है?
2 खाने की भुजा वाला वर्ग। चार भुजाएँ, चार बार 90 डिग्री दाएँ मुड़ना = 360 डिग्री, इसलिए रोबोट वहीं लौटता है जहाँ से चला था।
2. '3 बार दोहराओ [ 4 बार दोहराओ [आगे 1, दाएँ मुड़ो], आगे 3 ]' में कितने 'आगे' ब्लॉक चलेंगे?
भीतरी लूप: 4 आगे, 3 बार चला = 12। 'आगे 3' के 3 ब्लॉक और। कुल 15 आगे ब्लॉक (12 + 3)।
3. कदम = 1; 4 बार दोहराओ [आगे (कदम), दाएँ मुड़ो, कदम में 1 जोड़ो]। रोबोट कुल कितने खाने चलेगा?
कदम के मान 1, 2, 3, 4 होंगे। कुल = 1 + 2 + 3 + 4 = 10 खाने।
4. रोबोट हमेशा दोहराता है: अगर आगे दीवार तो दाएँ मुड़ो, नहीं तो आगे। वह दीवार की ओर मुँह करके शुरू करता है। पहले क्या करेगा?
वह दाएँ मुड़ेगा, क्योंकि सेंसर कहता है आगे दीवार = सही। फिर दोबारा जाँचेगा; अब आगे दीवार न हो तो आगे चलेगा।
5. एक प्रोग्राम 8 ब्लॉक से एक के बाद एक दो वर्ग बनाता है। कस्टम ब्लॉक से उसे छोटा कीजिए।
कस्टम ब्लॉक 'वर्ग' = 4 बार दोहराओ [आगे 2, दाएँ मुड़ो] (3 ब्लॉक)। फिर मुख्य प्रोग्राम सिर्फ़ 'वर्ग, आगे 3, वर्ग' (3 ब्लॉक)। छोटा और सुधारना आसान।
6. रोबोट झंडे पर रुके, आगे न निकल जाए। कौन-से ब्लॉक जोड़ेंगे?
झंडा पहचानने के लिए सेंसर (रंग या दूरी) और शर्त: अगर झंडा दिखे तो रुको, नहीं तो आगे, यह सब एक लूप के अंदर।
आम गलतियाँ
- जो ब्लॉक लूप के अंदर होना चाहिए, उसे बाहर रख देना। देखिए कौन-से ब्लॉक लूप के आकार के अंदर दबे हैं।
- चर को बदलना भूल जाना। कदम कभी नहीं बदला तो सर्पिल की जगह वर्ग ही बनेगा।
- 'दाएँ मुड़ो' (जगह पर घूमना) और 'दाएँ खिसको' (सरकना) को एक समझना।
- मान लेना कि रोबोट आपकी बात समझता है। वह ब्लॉक का शब्दशः पालन करता है, इसलिए एक-एक ब्लॉक परखिए और सुधारिए।