From Test-Scratch-Wiki
दोहराएँ () | |
repeat (10)
| |
Category | नियंत्रण |
Type | सी |
दोहराएँ () ब्लॉक एक नियंत्रण ब्लॉक और एक सी ब्लॉक है। इस ब्लॉक के अंदर रखे गए ब्लॉक स्क्रिप्ट को जारी रखने की अनुमति देने से पहले एक निश्चित संख्या में लूप करेंगे।
अगर दशमलव डाला जाता है, तो संख्या को गोल किया जाता है। इसके अलावा, जब कोई ऋणात्मक संख्या या कोई गैर-संख्या इनपुट की जाती है, तो लूप नहीं चलता है, और अगर "इन्फिनिटी" इनपुट की जाती है, तो ब्लॉक हमेशा के लिए चलता है।
इस ब्लॉक में थोड़ी देरी होती है, इसलिए निष्पादन की इष्टतम गति के लिए, सिंगल फ़्रेम ब्लॉक स्टैक का उपयोग किया जाना चाहिए।
उदाहरण उपयोग
चूंकि यह ब्लॉक कोड के टुकड़ों को लूप करता है, इसलिए इसका उपयोग स्थान और समय बचाने के लिए व्यापक रूप से किया जाता है। कुछ सामान्य उपयोग हैं:
- रिपीट () ब्लॉक (और दोहराओ जब तक () ब्लॉक) का उपयोग करके कोड
— को दोहराना बहुत सारी स्क्रिप्टिंग बचा सकता है।
repeat (10) change [variable v] by (1) next costume if <touching (Wall v)?> then erase all broadcast (Reload v) else stamp end
- एनिमेशन
— में प्रत्येक पोशाक परिवर्तन और देरी को अलग-अलग कोड करने के बजाय, रिपीट () ब्लॉक (अगली पोशाक ब्लॉक के साथ) का उपयोग किया जा सकता है। इससे अनावश्यक स्क्रिप्टिंग कम हो सकती है।
repeat (8) wait (0.05) secs next costume
- उदाहरण के लिए, सतत जांच
— एक स्प्राइट लगातार गति कर सकता है और समझ सकता है।
repeat (20) change y by (3) if <touching (edge v)?> then change [color v] effect by (75)
- एक दोहराएँ () ब्लॉक को दूसरे के अंदर रखना "नेस्टिंग" कहलाता है। कुल दोहराव दो repeat () ब्लॉक इनपुट का गुणनफल होगा। इस मामले में, नेस्टेड लूप १० गुणा १०, या १०० डॉट्स बनाते हैं।
set pen size to (2) go to x:(-100) y:(100) repeat (10) repeat (10) pen down pen up change x by (20) end set x to (-100) change y by (-20) end
पुनरावृत्ति
लूप अपने इनपुट स्लॉट में दी गई संख्या के अनुसार बार-बार दोहराएगा। यदि इनपुट पूर्ण संख्या नहीं है, तो इसे निकटतम संख्या में पूर्णांकित किया जाएगा। यदि इनपुट शून्य से कम या बराबर है, या कोई संख्या नहीं है, तो यह इसके अंदर कोई स्क्रिप्ट नहीं चलाएगा। यदि इनपुट अनंत है, तो यह हमेशा के लिए चलेगा।
विलंब
लूप के प्रत्येक पुनरावृत्ति के बाद, अगले पुनरावृत्ति के जारी रहने से पहले १/३० सेकंड या एक फ्रेम की देरी जोड़ी जाती है। इससे एनिमेशन को अधिक सुचारू रूप से चलाने की अनुमति मिलती है। यदि कोई इस देरी को नहीं चाहता है, तो उन्हें टर्बो मोड चालू करना होगा या इसे स्क्रीन रिफ्रेश के बिना चलाने के लिए सेट किए गए कस्टम ब्लॉक के अंदर रखना होगा।
समाधान
इस ब्लॉक को निम्नलिखित कोड के साथ दोहराया जा सकता है:
set [counter v] to (0) set [number of times v] to (. . .::grey) //यह दोहराने की संख्या है if <not<(number of times)<(0)>> then repeat until <(counter) = ([ceiling v] of (number of times) . . . change [counter v] by (1) end end