(जावा) लूप स्टेटमेंट के लिए। विशिष्ट कार्य


आइए निम्नलिखित समस्या को हल करने के लिए एक प्रोग्राम लिखने का प्रयास करें:
100 और 500 के बीच सभी पूर्णांकों का योग ज्ञात करें। 

इस समस्या को हल करते समय योग ज्ञात करना कठिन हो जाता है। यदि हम केवल चर s के योग का परिणाम लिखते हैं, उदाहरण के लिए, जैसा

s=100+101+102+103+...+500

रिकॉर्डिंग में ही बहुत समय लगेगा, क्योंकि कंप्यूटर यह नहीं समझ पाएगा कि अंकगणितीय अभिव्यक्ति में दीर्घवृत्त का उपयोग कैसे किया जाए और हमें इस योग में 100 से 500 तक की सभी संख्याएँ लिखनी होंगी। और ऐसे कार्यक्रम का मूल्य नगण्य होगा। खासकर अगर हम अपने नंबर बदलना चाहते हैं और एक अलग रेंज लेना चाहते हैं।

हमें क्या करना चाहिए?

यदि हम उपरोक्त प्रविष्टि पर ध्यान देते हैं, तो हम लगातार "+".
जोड़ का उपयोग करते हैं आप धीरे-धीरे वेरिएबल s में नंबर जोड़ने की कोशिश कर सकते हैं। उदाहरण के लिए, इस संकेतन का उपयोग करना
s=s+i;
हमने यहां क्या किया:
1) दाईं ओर हम अभिव्यक्ति s+i, रखते हैं, अर्थात, हम चर s का मान लेते हैं, जो अब हमारे पास स्मृति में है और मूल्य जोड़ते हैं वेरिएबल का i< to it /strong>
2) बाईं ओर हम चर s का नाम सेट करते हैं, यानी दाईं ओर की गणना का पूरा परिणाम इस चर में संग्रहीत किया जाएगा, इसलिए हम चर के मान को बदल देंगे एस. 

हम अपनी सीमा से नंबर कहां से प्राप्त कर सकते हैं?

100 से 500 तक की संख्याएँ जो हमारी सीमा से संबंधित हैं, एक-एक करके i चर में आनी चाहिए। और यह जाने-माने for
लूप का उपयोग करके किया जा सकता है उदाहरण के लिए, इस प्रकार <पूर्व> एस = 0; // शुरुआत में चर s को रीसेट करना आवश्यक है, ताकि पहले चरण में संख्या 100 को शून्य में जोड़ा जाए, न कि जो स्मृति में है! for (i = 100; i<=500; i++) // लूप का हेडर, जिसमें वेरिएबल i 1 की वृद्धि में अपना मान 100 से 500 में बदलता है एस = एस + मैं; // लूप का शरीर, जिसमें हम धीरे-धीरे बदलते चर i के मान को चर s में जोड़ते हैं // और परिणाम चर एस में वापस संग्रहीत किया जाता है यह समाधान क्रियाओं द्वारा योग की गणना करने के समान है
 s = 0 + 100 = 100
 एस = 100 + 101 = 201
 s = 201 + 102  = 303
वगैरह।

दी गई संख्याओं में अधिकतम संख्या

सशर्त ऑपरेटर का अध्ययन करते समय, हमने कई दर्ज संख्याओं से अधिकतम संख्या ज्ञात करने के विषय को छुआ। समस्या में "अधिकतम चार संख्याएँ" हमने निम्नलिखित एल्गोरिद्म का उपयोग किया:
1. वेरिएबल M को चार वेरिएबल्स में से पहले को वैल्यू असाइन करें;
2. यदि दूसरे वेरिएबल का मान वेरिएबल M के मान से अधिक है, तो वेरिएबल के मान को दूसरे वेरिएबल के मान से बदलें;
3. यदि तीसरे वेरिएबल का मान वेरिएबल M के मान से अधिक है, तो वेरिएबल M के मान को तीसरे वेरिएबल के मान से बदल दें;< बीआर /> 4. यदि चौथे चर का मान M चर के मान से अधिक है, तो चर के मान को चौथे चर के मान से बदल दें।

यह देखा जा सकता है कि प्रत्येक  संख्या (चलो इसे X से निरूपित करते हैं) हमने चर M के साथ तुलना इस प्रकार की:
 
स्यूडोकोड
<पूर्व> इनपुट एक्स अगर (एम <एक्स) तो   एम = एक्स
इस कोड में मुख्य बात यह निर्धारित करना है कि वेरिएबल M का प्रारंभिक मान क्या होगा।
आमतौर पर, अधिकतम या न्यूनतम खोजने की समस्या को हल करते समय, वेरिएबल M का प्रारंभिक मान पहली संख्या के बराबर असाइन किया जाता है।
इस प्रकार, उपरोक्त कोड को संख्याओं की संख्या से 1 गुना कम निष्पादित किया जाना चाहिए (क्योंकि पहली संख्या दर्ज की जानी चाहिए और वेरिएबल M के प्रारंभिक मान के रूप में संग्रहीत की जानी चाहिए)।
यदि हमारे पास कीबोर्ड से सेट की गई संख्याओं की संख्या है (उदाहरण के लिए, वेरिएबल n में), तो हम एक चक्र (2 से n) का उपयोग करके व्यवस्थित कर सकते हैं नंबर वेरिएबल को स्टोर करने के लिए एक ही नंबर।

कार्यक्रम को स्वयं लिखने का प्रयास करें।

अधिकतम सभी में नहीं

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

उदाहरण के लिए, यदि हम अधिकतम नकारात्मक संख्या की तलाश कर रहे हैं, तो डेटा सेट होना: \(\{5, -2, 4, 2, -1, -3\}\ ) हमें अधिकतम के प्रारंभिक मान में संख्या 5 मिलेगी, और यह धनात्मक है और किसी भी ऋणात्मक से अधिक है। और इसलिए हालत X > M हमेशा असत्य होगा।

इसलिए, पिछली समस्या से एल्गोरिदम में ऋणात्मक संख्या के लिए केवल एक चेक जोड़ना पर्याप्त नहीं है, इस तथ्य को भी ध्यान में रखना आवश्यक है कि पहली संख्या आवश्यक शर्त को पूरा नहीं कर सकती है (इस मामले में, नकारात्मक हो ).

आप लूप के अंदर निम्न शर्त जोड़कर इसे ठीक कर सकते हैं:

स्यूडोकोड
<पूर्व> यदि एक्स नकारात्मक है, तो यदि M >= 0 या M < एक्स, फिर एम = एक्स
निर्दिष्ट कोड में,  M >= 0 स्थिति आपको  M = X क्रिया करने की अनुमति देती है, भले ही चर में शुरू में एक मान होता है जो स्पष्ट रूप से बाकी की तुलना में अधिक होता है (हमारे उदाहरण में, मान 5 के बराबर है)।

हम यह भी ध्यान देते हैं कि यदि संख्याओं की श्रेणी ज्ञात है, तो निर्दिष्ट सीमा से न्यूनतम (अधिकतम) संख्या को अधिकतम (न्यूनतम) के प्रारंभिक मान के रूप में लिया जा सकता है।

कार्य

एन नंबर दिए गए हैं। अनुक्रम में दूसरा सबसे बड़ा तत्व खोजें।

यह समस्या दो व्याख्याओं की अनुमति देती है।
उदाहरण के लिए, यदि हमें संख्याओं का एक समूह दिया गया है: \(10\ 15\ 20\ 35\ 14\ 35\ 10\), तो उत्तर क्या होना चाहिए ?
"दूसरा सबसे बड़ा तत्व" के तहत या केवल "दूसरी अधिकतम", को इस रूप में समझा जा सकता है:
1) वह मान जो अंतिम स्थान पर होगा यदि हम गैर-घटते क्रम में सभी मानों को व्यवस्थित (क्रमबद्ध) करते हैं (प्रत्येक अगला एक पिछले एक से अधिक या उसके बराबर है)। फिर संख्याओं के सुविचारित सेट के लिए उत्तर मान 35 होगा;
2) तत्व का मान, जो केवल अधिकतम से अधिक है। तो जवाब है 20।
यदि संख्या के सेट में केवल एक अधिकतम तत्व है (अन्य सभी कम हैं), तो दोनों व्याख्याएं समान हैं, और उत्तर दोनों मामलों के लिए समान होगा, अन्यथा उत्तर अलग होगा।

पहले मामले पर विचार करें (हम एल्गोरिथम स्यूडोकोड).
उत्तर खोजने के लिए, हम दो चरों का उपयोग करेंगे:
1) <कोड>अधिकतम1 -अधिकतम मान (पहला अधिकतम);
2) अधिकतम2 - दूसरा अधिकतम (हमारा उत्तर)।

यदि मूल्यों की सीमा में परिवर्तन ज्ञात है, तो प्रारंभिक मूल्यों के रूप में हम एक संख्या लेते हैं जो स्पष्ट रूप से सीमा की निचली सीमा से कम है (उदाहरण के लिए, -1000 की सीमा के साथ) से 1000 - नंबर लें -1001)
यदि मानों की सीमा अज्ञात है, तो आप पहले दो इनपुट संख्याओं को चर max1 और max2 के प्रारंभिक मानों में लिख सकते हैं, और फिर इनकी तुलना कर सकते हैं दो चर। <पूर्व> इनपुट एन // संख्याओं की संख्या इनपुट ए, बी मैक्स 1 = ए अधिकतम 2 = बी अगर बी > ए, फिर     मैक्स 1 = बी     अधिकतम 2 = ए
अगला, हम अन्य सभी तत्वों पर विचार करते हैं (पहले 2 पहले ही देखे जा चुके हैं, इसलिए हम तीसरे से शुरू करेंगे) <पूर्व> एनसी मैं के लिए 3 से एन इनपुट ए अगर एक > अधिकतम 1 // अधिकतम 1 से अधिक मान था वह max2 = max1 // पूर्व का पहला उच्च दूसरा बन जाता है max1 = a // नया तत्व पहला अधिकतम होगा अन्यथा // अगला तत्व max1 से अधिक नहीं है // इसकी तुलना अधिकतम 2 मान से की जानी चाहिए अगर एक > अधिकतम 2 वह max2 = a // इसे नए मान max2 के रूप में लें // max1 इस मामले में नहीं बदलता है सभी सभी केटीएस
इस एल्गोरिथम को स्वयं लागू करने का प्रयास करें।