C प्रोग्रामिंग में, एरेज एक डेटा संरचना है जो समान प्रकार के डेटा तत्वों के संग्रह को एक ही नाम के तहत संग्रहीत करने की अनुमति देती है। एरेज का उपयोग तब किया जाता है जब हमें कई तत्वों को संग्रहीत करने और उन पर एक समान ऑपरेशन्स करने की आवश्यकता होती है। एरेज के साथ काम करना प्रोग्रामिंग को अधिक कुशल और प्रबंधनीय बनाता है। इस अध्याय में, हम एक-आयामी एरे, बहु-आयामी एरे, और एरे के साथ विभिन्न ऑपरेशन्स को समझेंगे।
एक-आयामी एरे (One-Dimensional Arrays): एक-आयामी एरे एक सरल प्रकार का एरे है, जिसमें डेटा तत्वों को एक रेखीय क्रम में संग्रहीत किया जाता है। यह एरे सबसे अधिक उपयोग में आने वाले प्रकार का एरे है और इसे वेक्टर भी कहा जाता है।
बहु-आयामी एरे (Multi-Dimensional Arrays): बहु-आयामी एरे, जैसे कि दो-आयामी एरे (मैट्रिक्स), कई आयामों में डेटा को संग्रहीत करने की अनुमति देते हैं। इसका उपयोग अधिक जटिल डेटा संरचनाओं के लिए किया जाता है, जैसे कि तालिकाओं और मैट्रिसेस।
एरे के साथ ऑपरेशन्स (Operations on Arrays): एरे के साथ विभिन्न प्रकार के ऑपरेशन्स किए जा सकते हैं, जैसे कि एरे तत्वों को असाइन करना, एरे तत्वों को एक्सेस करना, एरे को इटरेट करना, और एरे तत्वों को संशोधित करना। ये ऑपरेशन्स प्रोग्राम को अधिक लचीला और उपयोगकर्ता के अनुकूल बनाते हैं।
इस अध्याय में, हम इन सभी विषयों को विस्तार से समझेंगे और उदाहरणों के माध्यम से उनके उपयोग को जानेंगे।
एक-आयामी एरे (One-Dimensional Arrays)
एक-आयामी एरे एक प्रकार का डेटा संरचना है जो समान प्रकार के कई तत्वों को एक ही नाम के तहत संग्रहीत करने की अनुमति देता है। इसे अक्सर वेक्टर कहा जाता है। एक-आयामी एरे का उपयोग तब किया जाता है जब हमें समान प्रकार के कई तत्वों को एक क्रम में संग्रहीत करने की आवश्यकता होती है।
एरे की घोषणा और प्रारंभिककरण (Array Declaration and Initialization)
एरे की घोषणा करने के लिए, हमें डेटा प्रकार, एरे का नाम, और एरे का आकार निर्दिष्ट करना होता है। एरे का आकार इंगित करता है कि एरे में कितने तत्व हो सकते हैं।
घोषणा:
उदाहरण:
यह घोषणा एक numbers नाम का एरे बनाती है, जिसमें 5 संपूर्णांक तत्व संग्रहीत हो सकते हैं।
प्रारंभिककरण:
एरे को घोषित करने के साथ-साथ प्रारंभिककरण भी किया जा सकता है। प्रारंभिककरण करते समय, तत्वों की सूची को {} के अंदर दिया जाता है।
उदाहरण:
एरे तत्वों का एक्सेस (Accessing Array Elements)
एरे के तत्वों को उनकी इंडेक्स संख्या का उपयोग करके एक्सेस किया जा सकता है। C में एरे इंडेक्स 0 से शुरू होते हैं, इसलिए पहले तत्व का इंडेक्स 0 होता है।
उदाहरण:
एरे के साथ ऑपरेशन्स (Operations on Arrays)
एरे के साथ विभिन्न प्रकार के ऑपरेशन्स किए जा सकते हैं, जैसे कि एरे तत्वों को असाइन करना, एरे को इटरेट करना, और एरे तत्वों को संशोधित करना।
उदाहरण:
एरे की सीमाएं (Array Boundaries)
C में एरे की सीमाओं का ध्यान रखना महत्वपूर्ण है। यदि आप एरे की सीमा से बाहर जाकर किसी तत्व को एक्सेस करने का प्रयास करते हैं, तो यह अप्रत्याशित व्यवहार या प्रोग्राम क्रैश का कारण बन सकता है।
उदाहरण:
बहु-आयामी एरे (Multi-Dimensional Arrays)
बहु-आयामी एरे एक डेटा संरचना है जो एक से अधिक आयामों में डेटा को संग्रहीत करने की अनुमति देता है। इसका उपयोग जटिल डेटा संरचनाओं, जैसे कि तालिकाओं और मैट्रिसेस को संग्रहीत करने के लिए किया जाता है। सबसे सामान्य प्रकार का बहु-आयामी एरे दो-आयामी एरे होता है।
दो-आयामी एरे की घोषणा और प्रारंभिककरण (Declaration and Initialization of Two-Dimensional Arrays)
दो-आयामी एरे को पंक्तियों (rows) और स्तंभों (columns) के रूप में संग्रहीत किया जाता है। इसकी घोषणा और प्रारंभिककरण निम्नलिखित तरीके से की जाती है।
घोषणा:
उदाहरण:
यह घोषणा एक matrix नाम का दो-आयामी एरे बनाती है, जिसमें 3 पंक्तियाँ और 3 स्तंभ होते हैं।
प्रारंभिककरण:
दो-आयामी एरे को घोषित करने के साथ-साथ प्रारंभिक भी किया जा सकता है। प्रारंभिककरण करते समय, तत्वों की सूची को {} के अंदर पंक्तियों और स्तंभों के अनुसार दिया जाता है।
उदाहरण:
दो-आयामी एरे के तत्वों का एक्सेस (Accessing Elements of Two-Dimensional Arrays)
दो-आयामी एरे के तत्वों को उनकी पंक्ति और स्तंभ संख्या का उपयोग करके एक्सेस किया जा सकता है।
उदाहरण:
दो-आयामी एरे के साथ ऑपरेशन्स (Operations on Two-Dimensional Arrays)
दो-आयामी एरे के साथ विभिन्न प्रकार के ऑपरेशन्स किए जा सकते हैं, जैसे कि एरे तत्वों को असाइन करना, एरे को इटरेट करना, और एरे तत्वों को संशोधित करना।
उदाहरण:
उच्च-आयामी एरे (Higher-Dimensional Arrays)
दो-आयामी एरे के अलावा, C प्रोग्रामिंग में तीन-आयामी और उससे अधिक आयामी एरे भी बनाए जा सकते हैं। इनका उपयोग तब किया जाता है जब हमें और अधिक जटिल डेटा संरचनाओं को संग्रहीत करने की आवश्यकता होती है।
उदाहरण:
यह घोषणा एक तीन-आयामी एरे बनाती है, जिसमें 2 आयाम, 3 पंक्तियाँ, और 4 स्तंभ होते हैं।
एरे के साथ ऑपरेशन्स (Operations on Arrays)
एरे के साथ विभिन्न प्रकार के ऑपरेशन्स किए जा सकते हैं, जो हमें डेटा को संग्रहीत, पुनः प्राप्त, संशोधित और प्रबंधित करने की अनुमति देते हैं। इस खंड में, हम एरे के साथ सामान्यतः किए जाने वाले ऑपरेशन्स, जैसे कि एरे तत्वों को असाइन करना, एरे को इटरेट करना, और एरे तत्वों को संशोधित करना, के बारे में जानेंगे।
एरे तत्वों को असाइन करना (Assigning Values to Array Elements)
एरे के तत्वों को इंडेक्स का उपयोग करके असाइन किया जा सकता है। इंडेक्स 0 से शुरू होते हैं और एरे के आकार से एक कम तक जाते हैं।
उदाहरण:
एरे को इटरेट करना (Iterating Over Arrays)
एरे को इटरेट करना एक सामान्य ऑपरेशन है, जिसमें हम एरे के प्रत्येक तत्व को एक्सेस और प्रोसेस करते हैं। इसके लिए हम अक्सर लूप्स का उपयोग करते हैं।
उदाहरण:
एरे तत्वों को संशोधित करना (Modifying Array Elements)
एरे के तत्वों को इंडेक्स का उपयोग करके संशोधित किया जा सकता है। यह प्रक्रिया अन्य वेरिएबल्स के समान होती है।
उदाहरण:
एरे की लंबाई प्राप्त करना (Getting the Length of an Array)
C में, किसी एरे की लंबाई को मैन्युअल रूप से ट्रैक करना आवश्यक होता है। एरे की लंबाई प्राप्त करने के लिए, हम sizeof ऑपरेटर का उपयोग कर सकते हैं।
उदाहरण:
एरे को फ़ंक्शन में पास करना (Passing Arrays to Functions)
एरे को फ़ंक्शन में पास करने के लिए, एरे का नाम और उसकी लंबाई पास करनी होती है। फ़ंक्शन को एरे के सभी तत्वों पर ऑपरेशन करने के लिए डिज़ाइन किया जा सकता है।
उदाहरण:
दो मैट्रिसेज का गुणा करने के लिए C प्रोग्राम (C Program to Multiply Two Matrices)
कोड (Code)
#include <stdio.h> void multiplyMatrices(int firstMatrix[10][10], int secondMatrix[10][10], int result[10][10], int row1, int col1, int row2, int col2) { for (int i = 0; i < row1; ++i) { for (int j = 0; j < col2; ++j) { result[i][j] = 0; for (int k = 0; k < col1; ++k) { result[i][j] += firstMatrix[i][k] * secondMatrix[k][j]; } } } } void display(int matrix[10][10], int row, int col) { for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { printf("%d ", matrix[i][j]); if (j == col - 1) printf("\n"); } } } int main() { int firstMatrix[10][10], secondMatrix[10][10], result[10][10], row1, col1, row2, col2; printf("Enter rows and columns for the first matrix: "); scanf("%d %d", &row1, &col1); printf("Enter rows and columns for the second matrix: "); scanf("%d %d", &row2, &col2); // Check if multiplication is possible if (col1 != row2) { printf("Error! Column of the first matrix is not equal to row of the second matrix.\n"); return -1; } printf("\nEnter elements of the first matrix:\n"); for (int i = 0; i < row1; ++i) { for (int j = 0; j < col1; ++j) { printf("Enter element a%d%d: ", i + 1, j + 1); scanf("%d", &firstMatrix[i][j]); } } printf("\nEnter elements of the second matrix:\n"); for (int i = 0; i < row2; ++i) { for (int j = 0; j < col2; ++j) { printf("Enter element b%d%d: ", i + 1, j + 1); scanf("%d", &secondMatrix[i][j]); } } multiplyMatrices(firstMatrix, secondMatrix, result, row1, col1, row2, col2); printf("\nResultant matrix:\n"); display(result, row1, col2); return 0; }
कोड और लॉजिक की व्याख्या (Explanation of Code and Logic)
इस प्रोग्राम में, हम दो मैट्रिसेज का गुणा करेंगे और परिणाम को प्रिंट करेंगे।
- मैट्रिस गुणा (Matrix Multiplication):
- सबसे पहले, हम यूज़र से दोनों मैट्रिसेज के रो और कॉलम की संख्या लेते हैं।
- गुणा तभी संभव है जब पहली मैट्रिक्स की कॉलम की संख्या दूसरी मैट्रिक्स की रो की संख्या के बराबर हो।
- यदि यह शर्त पूरी नहीं होती है, तो गुणा संभव नहीं है और प्रोग्राम एक त्रुटि संदेश प्रिंट करता है और समाप्त हो जाता है।
- मैट्रिक्स इनपुट लेना (Taking Matrix Input):
firstMatrix
औरsecondMatrix
में यूज़र द्वारा दी गई वैल्यूज़ को स्टोर किया जाता है।- इसके लिए
for
लूप का उपयोग किया गया है, जो मैट्रिक्स के प्रत्येक तत्व को इनपुट के रूप में लेता है।
- गुणा फंक्शन (Multiplication Function):
void multiplyMatrices(int firstMatrix[10][10], int secondMatrix[10][10], int result[10][10], int row1, int col1, int row2, int col2) { for (int i = 0; i < row1; ++i) { for (int j = 0; j < col2; ++j) { result[i][j] = 0; for (int k = 0; k < col1; ++k) { result[i][j] += firstMatrix[i][k] * secondMatrix[k][j]; } } } }
multiplyMatrices
फंक्शन दो मैट्रिसेज का गुणा करता है।- बाहरी
for
लूप (i) पहली मैट्रिक्स की रो पर चलता है। - मध्य
for
लूप (j) दूसरी मैट्रिक्स की कॉलम पर चलता है। - आंतरिक
for
लूप (k) पहली मैट्रिक्स की कॉलम और दूसरी मैट्रिक्स की रो पर चलता है। - गुणा के परिणाम को
result
मैट्रिक्स में स्टोर किया जाता है।
- मैट्रिक्स प्रिंट करना (Displaying the Matrix):
void display(int matrix[10][10], int row, int col) { for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { printf("%d ", matrix[i][j]); if (j == col - 1) printf("\n"); } } }
display
फंक्शनresult
मैट्रिक्स को प्रिंट करता है।- बाहरी
for
लूप (i) रो पर चलता है। - आंतरिक
for
लूप (j) कॉलम पर चलता है। - प्रत्येक तत्व को प्रिंट करने के बाद, अंतिम कॉलम के बाद एक नई लाइन प्रिंट की जाती है।
इनपुट और आउटपुट (Input and Output)
इनपुट (Input):
Enter rows and columns for the first matrix: 2 3 Enter rows and columns for the second matrix: 3 2 Enter elements of the first matrix: Enter element a11: 1 Enter element a12: 2 Enter element a13: 3 Enter element a21: 4 Enter element a22: 5 Enter element a23: 6 Enter elements of the second matrix: Enter element b11: 7 Enter element b12: 8 Enter element b21: 9 Enter element b22: 10 Enter element b31: 11 Enter element b32: 12
आउटपुट (Output):
Resultant matrix: 58 64 139 154