डेटा स्टोरेज

मान लें कि आपने "उपयोगकर्ता शत्रुतापूर्ण" नामक एक कंप्यूटर गेम विकसित किया है जिसमें खिलाड़ी एक जटिल और अमित्र कंप्यूटर इंटरफ़ेस के विरुद्ध प्रतिस्पर्धा करते हैं। अब आपको एक ऐसा प्रोग्राम लिखने की जरूरत है जो पांच साल की अवधि में इस गेम की मासिक बिक्री को ट्रैक करे। या मान लें कि आपको हैकर हीरो ट्रेडिंग कार्ड्स को इन्वेंटरी करने की आवश्यकता है।
बहुत जल्द आप इस निष्कर्ष पर पहुंचेंगे कि जानकारी को स्टोर और प्रोसेस करने के लिए आपको साधारण बुनियादी डेटा प्रकारों से अधिक की आवश्यकता है।
 

सरणी (सूचियां)। परिचय

बड़ी मात्रा में डेटा के साथ काम करना सुविधाजनक बनाने के लिए, कोशिकाओं के एक समूह को एक सामान्य नाम दिया जाता है। कोशिकाओं के ऐसे समूह को सरणी कहा जाता है
ऐरे – यह एक ही प्रकार की मेमोरी सेल्स का एक समूह है, जो अगल-बगल स्थित है और एक सामान्य नाम है। समूह में प्रत्येक सेल की एक अद्वितीय संख्या होती है।

सरणियों के साथ काम करते समय, आपको जानना होगा कि कैसे हल करना है तीन कार्य:
एक्स एक सरणी
के लिए आवश्यक आकार की मेमोरी आवंटित करें एक्स वांछित सेल में डेटा लिखें
एक्स सेल से डेटा पढ़ें


पास्कल में सारणियाँ


पारम्परिक रूप से पास्कल

जैसे स्थिर सरणियों का उपयोग करता है <पूर्व> var a: पूर्णांक की सरणी [1..10];

सरणी की सीमाएं स्थिरांकों द्वारा निर्धारित की जानी चाहिए, और आप प्रोग्राम संचालन के दौरान सरणी का आकार नहीं बदल सकते। लेकिन आप न केवल एक पूर्णांक का एक सूचकांक बना सकते हैं, बल्कि एक चरित्र या प्रगणित प्रकार का भी कह सकते हैं। उदाहरण के लिए, प्रत्येक अक्षर की घटना की गणना करने के लिए, आप एक सरणी का उपयोग कर सकते हैं

<पूर्व> var LettersCount: पूर्णांक की सरणी ['a'..'z'];

और इसके साथ अपने दिल की सामग्री पर काम करें:

<पूर्व> अक्षरगणना['z'] := 1; लेटर्सकाउंट['d'] := लेटर्सकाउंट['d'] + 1;

ऐसी सरणियों के नुकसान ज्ञात हैं: यदि यह पहले से ज्ञात नहीं है कि कितने तत्वों का उपयोग करने की आवश्यकता होगी, तो सरणी के लिए अधिकतम आकार की मेमोरी आवंटित की जाती है। नतीजतन, ज्यादातर मामलों में हम "भविष्य के लिए स्टॉक" करते हैं, और कभी-कभी यह "रिजर्व" पर्याप्त नहीं निकला। इसीलिए ऐसी सरणियों को  स्थैतिक कहा जाता है: उनका आकार स्थिर होता है और उन्हें कार्यक्रम संकलन चरण में सेट किया जाना चाहिए। हालांकि, पास्कल में  गतिशील सरणियाँ होती हैं, जिनका आकार न केवल सेट किया जा सकता है, बल्कि कार्यक्रम के दौरान बदला भी जा सकता है। यह ये सरणियाँ हैं और इनका उपयोग करने के फायदे हैं जिन पर आगे चर्चा की जाएगी।

एक सरणी बनाना

एक सरणी बनाते समय, मेमोरी में स्थान आवंटित किया जाता है (कोशिकाओं की एक निश्चित संख्या) <पूर्व> 1) ऐरे हो सकते हैं केवल तत्वों को सूचीबद्ध करके बनाया गया: <पूर्व> var a: पूर्णांक की सरणी; सेटलेंथ (ए, 3); एक [0] := 1; एक [1] := 2; एक [2] := 3;
2) सरणियों को किसी भी प्रकार के डेटा से बनाया जा सकता है - पूर्णांक या वास्तविक संख्याएँ, वर्ण तार  <पूर्व> वर ए: चार की सरणी; सेटलेंथ (ए, 3); एक [0] := 'ए'; एक [1] := 'ख'; एक [2] := 'सी'; 3) एक सरणी हमेशा "जानता है" आपका आकार।  लंबाई फ़ंक्शन का उपयोग सरणी के आकार को निर्धारित करने के लिए किया जाता है। अक्सर ऐरे के आकार को एक अलग वेरिएबल में स्टोर किया जाता है ताकि प्रोग्राम को एक अलग एरे आकार के साथ काम करने के लिए आसानी से बदला जा सके। उदाहरण: <पूर्व> एन := 10; // चर N में हम सरणी के आकार को संग्रहीत करते हैं सेटलेंथ (ए, एन); // सेट सरणी और आकार एन लेख (लंबाई (ए)); // सरणी का आकार प्रदर्शित करें एक सरणी का आकार कीबोर्ड से सेट किया जा सकता है।

किसी सरणी तत्व को संदर्भित करना

सरणियों की अधिकांश उपयोगिता इस तथ्य से आती है कि इसके तत्वों को व्यक्तिगत रूप से एक्सेस किया जा सकता है।
ऐसा करने का तरीका तत्वों को क्रमांकित करने के लिए एक अनुक्रमणिका का उपयोग करना है।
इंडेक्स एक मान है जो एक विशिष्ट सरणी तत्व की ओर इशारा करता है

याद रखें!
पास्कल में ऐरे की संख्या शून्य से शुरू होती है!

(यह अनिवार्य है — आपको बिल्कुल नए सिरे से शुरू करना चाहिए। यह याद रखना विशेष रूप से महत्वपूर्ण है)

सरणी ए तक पहुँचने के उदाहरण: <पूर्व> x := (A[3] + 5) * A[1] // A[3] और A[1] के मान पढ़ें A[0] := x + 6 // A[0] में नया मान लिखें सरणी तत्वों के साथ काम करने के लिए कार्यक्रम का विश्लेषण करते हैं। <पूर्व> वर मैं: पूर्णांक; ए: पूर्णांकों की सरणी; शुरू     मैं := 1;     सेटलेंथ (ए, 5); // 5 तत्वों की एक सरणी बनाएं      एक [0] := 23; // सरणी के 5 तत्वों में से प्रत्येक के लिए (0 से 4 तक अनुक्रमित)     एक [1] := 12; // एक विशिष्ट मूल्य लिखें     एक [2] := 7;     एक [3] := 43;     एक [4] := 51;     ए [2]: = ए [आई] + 2 * ए [आई - 1] + ए [2 * आई]; // अभिव्यक्ति के परिणाम के लिए सूचकांक 2 के साथ तत्व का मान बदलें     // क्योंकि i = 1, फिर हम प्राप्त अभिव्यक्ति में चर i के मान को प्रतिस्थापित करते हैं     // अगला एक्सप्रेशन  a[2] := a[1] + 2*a[0] + a[2];     राइटलन (ए [2] + ए [4]); अंत।
दौड़ने के परिणामस्वरूप इस कार्यक्रम में अनुक्रमणिका 2 के साथ सरणी के तत्वों के योग का मान और अनुक्रमणिका 4 के बराबर 116 स्क्रीन पर दिखाई देगा। जैसा कि आप उदाहरण से देख सकते हैं, हम सरणी के किसी भी तत्व तक पहुंच सकते हैं . और विभिन्न फ़ार्मुलों का उपयोग करके तत्व की आवश्यक संख्या की गणना भी करें (उदाहरण के लिए, जैसा कि प्रोग्राम A[i-1] या A[2*i] में है, इन मामलों में, तत्वों के सूचकांक की गणना की जाएगी और इस पर निर्भर करेगी i.)
का मान
आइए एक उदाहरण कार्यक्रम देखें <पूर्व> var a: पूर्णांक की सरणी; शुरू     सेटलेंथ (ए, 5);     एक [5] := 5; एक [-1] := 0; अंत।

क्योंकि सरणी 5 तत्वों के साथ घोषित की गई है, इसलिए तत्वों को  0 से 4 तक क्रमांकित किया जाएगा। हम देखते हैं कि 6वीं पंक्ति में कार्यक्रम एक गैर-मौजूद तत्व को संदर्भित करता है а [5] और 7वीं पंक्ति पर भी गैर-मौजूद a[-1]।

यह पता चला है कि कार्यक्रम सरणी की सीमा से परे चला गया
सरणी सीमा से बाहर एक तत्व को एक इंडेक्स के साथ एक्सेस कर रही है जो सरणी में मौजूद नहीं है।
ऐसे मामलों में, प्रोग्राम आमतौर पर रन-टाइम एरर
के साथ क्रैश हो जाता है

 
 

सरणियों के साथ काम करते समय, आपको आमतौर पर सरणी के सभी तत्वों के साथ एक साथ काम करना पड़ता है।
तत्वों के माध्यम से पुनरावृत्ति: हम सरणी के सभी तत्वों को देखते हैं और यदि आवश्यक हो, तो उनमें से प्रत्येक पर कुछ ऑपरेशन करते हैं।
इसके लिए, एक चर के साथ एक लूप का सबसे अधिक उपयोग किया जाता है, जो 0 से N-1 में बदलता है, जहां N सरणी तत्वों की संख्या है।
एन के तहत हम सरणी के वर्तमान आकार पर विचार करेंगे, जो
है N := लंबाई(A) <पूर्व> ... i := 0 से n-1 के लिए शुरू करते हैं // यहाँ हम एक [i] के साथ काम करते हैं अंत; ... निर्दिष्ट लूप में, वेरिएबल i मान 0, 1, 2, ..., N-1 लेगा।  इस प्रकार, लूप के प्रत्येक चरण में, हम संख्या i के साथ सरणी के एक विशिष्ट तत्व तक पहुँचते हैं।
इस प्रकार, यह वर्णन करने के लिए पर्याप्त है कि सरणी a[i] के एक तत्व के साथ क्या किया जाना चाहिए और इन क्रियाओं को ऐसे चक्र के अंदर रखें।

आइए एक प्रोग्राम लिखते हैं जो सरणी को पहले N & nbsp; प्राकृतिक संख्याओं से भरता है, अर्थात, कार्यक्रम के अंत में, सरणी के तत्व समान होने चाहिए <पूर्व> ए [0] = 1 एक [1] = 2 एक [2] = 3 ... ए[एन - 1] = एन पैटर्न को देखना आसान है: किसी सरणी तत्व का मान तत्व के सूचकांक से 1 अधिक होना चाहिए।
लूप इस तरह दिखेगा <पूर्व> for i := 1 to n - 1 do एक [मैं] : = मैं + 1; कार्य पूरा करें.