अध्याय 9: एरेज (Arrays)

अध्याय 9: एरेज (Arrays)

C प्रोग्रामिंग में, एरेज एक डेटा संरचना है जो समान प्रकार के डेटा तत्वों के संग्रह को एक ही नाम के तहत संग्रहीत करने की अनुमति देती है। एरेज का उपयोग तब किया जाता है जब हमें कई तत्वों को संग्रहीत करने और उन पर एक समान ऑपरेशन्स करने की आवश्यकता होती है। एरेज के साथ काम करना प्रोग्रामिंग को अधिक कुशल और प्रबंधनीय बनाता है। इस अध्याय में, हम एक-आयामी एरे, बहु-आयामी एरे, और एरे के साथ विभिन्न ऑपरेशन्स को समझेंगे।

एक-आयामी एरे (One-Dimensional Arrays): एक-आयामी एरे एक सरल प्रकार का एरे है, जिसमें डेटा तत्वों को एक रेखीय क्रम में संग्रहीत किया जाता है। यह एरे सबसे अधिक उपयोग में आने वाले प्रकार का एरे है और इसे वेक्टर भी कहा जाता है।

बहु-आयामी एरे (Multi-Dimensional Arrays): बहु-आयामी एरे, जैसे कि दो-आयामी एरे (मैट्रिक्स), कई आयामों में डेटा को संग्रहीत करने की अनुमति देते हैं। इसका उपयोग अधिक जटिल डेटा संरचनाओं के लिए किया जाता है, जैसे कि तालिकाओं और मैट्रिसेस।

एरे के साथ ऑपरेशन्स (Operations on Arrays): एरे के साथ विभिन्न प्रकार के ऑपरेशन्स किए जा सकते हैं, जैसे कि एरे तत्वों को असाइन करना, एरे तत्वों को एक्सेस करना, एरे को इटरेट करना, और एरे तत्वों को संशोधित करना। ये ऑपरेशन्स प्रोग्राम को अधिक लचीला और उपयोगकर्ता के अनुकूल बनाते हैं।

इस अध्याय में, हम इन सभी विषयों को विस्तार से समझेंगे और उदाहरणों के माध्यम से उनके उपयोग को जानेंगे।

एक-आयामी एरे (One-Dimensional Arrays)

एक-आयामी एरे एक प्रकार का डेटा संरचना है जो समान प्रकार के कई तत्वों को एक ही नाम के तहत संग्रहीत करने की अनुमति देता है। इसे अक्सर वेक्टर कहा जाता है। एक-आयामी एरे का उपयोग तब किया जाता है जब हमें समान प्रकार के कई तत्वों को एक क्रम में संग्रहीत करने की आवश्यकता होती है।

एरे की घोषणा और प्रारंभिककरण (Array Declaration and Initialization)

एरे की घोषणा करने के लिए, हमें डेटा प्रकार, एरे का नाम, और एरे का आकार निर्दिष्ट करना होता है। एरे का आकार इंगित करता है कि एरे में कितने तत्व हो सकते हैं।

घोषणा:

data_type array_name[array_size];

उदाहरण:

int numbers[5];

यह घोषणा एक numbers नाम का एरे बनाती है, जिसमें 5 संपूर्णांक तत्व संग्रहीत हो सकते हैं।

प्रारंभिककरण:

एरे को घोषित करने के साथ-साथ प्रारंभिककरण भी किया जा सकता है। प्रारंभिककरण करते समय, तत्वों की सूची को {} के अंदर दिया जाता है।

उदाहरण:

int numbers[5] = {1, 2, 3, 4, 5};

एरे तत्वों का एक्सेस (Accessing Array Elements)

एरे के तत्वों को उनकी इंडेक्स संख्या का उपयोग करके एक्सेस किया जा सकता है। C में एरे इंडेक्स 0 से शुरू होते हैं, इसलिए पहले तत्व का इंडेक्स 0 होता है।

उदाहरण:

#include 

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    // एरे के तत्वों का एक्सेस
    printf("First element: %d\n", numbers[0]);
    printf("Second element: %d\n", numbers[1]);

    return 0;
}

एरे के साथ ऑपरेशन्स (Operations on Arrays)

एरे के साथ विभिन्न प्रकार के ऑपरेशन्स किए जा सकते हैं, जैसे कि एरे तत्वों को असाइन करना, एरे को इटरेट करना, और एरे तत्वों को संशोधित करना।

उदाहरण:

#include 

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};

    // एरे के तत्वों को इटरेट करना
    for (int i = 0; i < 5; i++) {
        printf("Element at index %d: %d\n", i, numbers[i]);
    }

    // एरे के तत्व को संशोधित करना
    numbers[2] = 10;
    printf("Modified element at index 2: %d\n", numbers[2]);

    return 0;
}

एरे की सीमाएं (Array Boundaries)

C में एरे की सीमाओं का ध्यान रखना महत्वपूर्ण है। यदि आप एरे की सीमा से बाहर जाकर किसी तत्व को एक्सेस करने का प्रयास करते हैं, तो यह अप्रत्याशित व्यवहार या प्रोग्राम क्रैश का कारण बन सकता है।

उदाहरण:

#include 

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};

    // सही सीमा के भीतर
    printf("Element at index 4: %d\n", numbers[4]);

    // सीमा के बाहर (गलत)
    printf("Element at index 5: %d\n", numbers[5]); // यह गलत है और समस्या का कारण बन सकता है

    return 0;
}

बहु-आयामी एरे (Multi-Dimensional Arrays)

बहु-आयामी एरे एक डेटा संरचना है जो एक से अधिक आयामों में डेटा को संग्रहीत करने की अनुमति देता है। इसका उपयोग जटिल डेटा संरचनाओं, जैसे कि तालिकाओं और मैट्रिसेस को संग्रहीत करने के लिए किया जाता है। सबसे सामान्य प्रकार का बहु-आयामी एरे दो-आयामी एरे होता है।

दो-आयामी एरे की घोषणा और प्रारंभिककरण (Declaration and Initialization of Two-Dimensional Arrays)

दो-आयामी एरे को पंक्तियों (rows) और स्तंभों (columns) के रूप में संग्रहीत किया जाता है। इसकी घोषणा और प्रारंभिककरण निम्नलिखित तरीके से की जाती है।

घोषणा:

data_type array_name[rows][columns];

उदाहरण:

int matrix[3][3];

यह घोषणा एक matrix नाम का दो-आयामी एरे बनाती है, जिसमें 3 पंक्तियाँ और 3 स्तंभ होते हैं।

प्रारंभिककरण:

दो-आयामी एरे को घोषित करने के साथ-साथ प्रारंभिक भी किया जा सकता है। प्रारंभिककरण करते समय, तत्वों की सूची को {} के अंदर पंक्तियों और स्तंभों के अनुसार दिया जाता है।

उदाहरण:

int matrix[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

दो-आयामी एरे के तत्वों का एक्सेस (Accessing Elements of Two-Dimensional Arrays)

दो-आयामी एरे के तत्वों को उनकी पंक्ति और स्तंभ संख्या का उपयोग करके एक्सेस किया जा सकता है।

उदाहरण:

#include <stdio.h>

int main() {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    // दो-आयामी एरे के तत्वों का एक्सेस
    printf("Element at row 1, column 2: %d\n", matrix[0][1]);
    printf("Element at row 3, column 3: %d\n", matrix[2][2]);

    return 0;
}

दो-आयामी एरे के साथ ऑपरेशन्स (Operations on Two-Dimensional Arrays)

दो-आयामी एरे के साथ विभिन्न प्रकार के ऑपरेशन्स किए जा सकते हैं, जैसे कि एरे तत्वों को असाइन करना, एरे को इटरेट करना, और एरे तत्वों को संशोधित करना।

उदाहरण:

#include <stdio.h>

int main() {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    // दो-आयामी एरे के तत्वों को इटरेट करना
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("Element at row %d, column %d: %d\n", i + 1, j + 1, matrix[i][j]);
        }
    }

    // दो-आयामी एरे के तत्व को संशोधित करना
    matrix[1][1] = 10;
    printf("Modified element at row 2, column 2: %d\n", matrix[1][1]);

    return 0;
}

उच्च-आयामी एरे (Higher-Dimensional Arrays)

दो-आयामी एरे के अलावा, C प्रोग्रामिंग में तीन-आयामी और उससे अधिक आयामी एरे भी बनाए जा सकते हैं। इनका उपयोग तब किया जाता है जब हमें और अधिक जटिल डेटा संरचनाओं को संग्रहीत करने की आवश्यकता होती है।

उदाहरण:

int threeD[2][3][4];

यह घोषणा एक तीन-आयामी एरे बनाती है, जिसमें 2 आयाम, 3 पंक्तियाँ, और 4 स्तंभ होते हैं।

 

एरे के साथ ऑपरेशन्स (Operations on Arrays)

एरे के साथ विभिन्न प्रकार के ऑपरेशन्स किए जा सकते हैं, जो हमें डेटा को संग्रहीत, पुनः प्राप्त, संशोधित और प्रबंधित करने की अनुमति देते हैं। इस खंड में, हम एरे के साथ सामान्यतः किए जाने वाले ऑपरेशन्स, जैसे कि एरे तत्वों को असाइन करना, एरे को इटरेट करना, और एरे तत्वों को संशोधित करना, के बारे में जानेंगे।

एरे तत्वों को असाइन करना (Assigning Values to Array Elements)

एरे के तत्वों को इंडेक्स का उपयोग करके असाइन किया जा सकता है। इंडेक्स 0 से शुरू होते हैं और एरे के आकार से एक कम तक जाते हैं।

उदाहरण:

#include <stdio.h>

int main() {
    int numbers[5];

    // एरे तत्वों को असाइन करना
    numbers[0] = 10;
    numbers[1] = 20;
    numbers[2] = 30;
    numbers[3] = 40;
    numbers[4] = 50;

    // एरे के तत्वों को प्रदर्शित करना
    for (int i = 0; i < 5; i++) {
        printf("Element at index %d: %d\n", i, numbers[i]);
    }

    return 0;
}

एरे को इटरेट करना (Iterating Over Arrays)

एरे को इटरेट करना एक सामान्य ऑपरेशन है, जिसमें हम एरे के प्रत्येक तत्व को एक्सेस और प्रोसेस करते हैं। इसके लिए हम अक्सर लूप्स का उपयोग करते हैं।

उदाहरण:

#include <stdio.h>

int main() {
    int numbers[5] = {10, 20, 30, 40, 50};

    // एरे के तत्वों को इटरेट करना
    for (int i = 0; i < 5; i++) {
        printf("Element at index %d: %d\n", i, numbers[i]);
    }

    return 0;
}

एरे तत्वों को संशोधित करना (Modifying Array Elements)

एरे के तत्वों को इंडेक्स का उपयोग करके संशोधित किया जा सकता है। यह प्रक्रिया अन्य वेरिएबल्स के समान होती है।

उदाहरण:

#include <stdio.h>

int main() {
    int numbers[5] = {10, 20, 30, 40, 50};

    // एरे के एक तत्व को संशोधित करना
    numbers[2] = 35;

    // संशोधित एरे के तत्वों को प्रदर्शित करना
    for (int i = 0; i < 5; i++) {
        printf("Element at index %d: %d\n", i, numbers[i]);
    }

    return 0;
}

एरे की लंबाई प्राप्त करना (Getting the Length of an Array)

C में, किसी एरे की लंबाई को मैन्युअल रूप से ट्रैक करना आवश्यक होता है। एरे की लंबाई प्राप्त करने के लिए, हम sizeof ऑपरेटर का उपयोग कर सकते हैं।

उदाहरण:

#include <stdio.h>

int main() {
    int numbers[5] = {10, 20, 30, 40, 50};

    // एरे की लंबाई प्राप्त करना
    int length = sizeof(numbers) / sizeof(numbers[0]);

    printf("Length of the array: %d\n", length);

    return 0;
}

एरे को फ़ंक्शन में पास करना (Passing Arrays to Functions)

एरे को फ़ंक्शन में पास करने के लिए, एरे का नाम और उसकी लंबाई पास करनी होती है। फ़ंक्शन को एरे के सभी तत्वों पर ऑपरेशन करने के लिए डिज़ाइन किया जा सकता है।

उदाहरण:

#include <stdio.h>

// एरे को प्रिंट करने का फ़ंक्शन
void printArray(int arr[], int length) {
    for (int i = 0; i < length; i++) {
        printf("Element at index %d: %d\n", i, arr[i]);
    }
}

int main() {
    int numbers[5] = {10, 20, 30, 40, 50};
    int length = sizeof(numbers) / sizeof(numbers[0]);

    // एरे को फ़ंक्शन में पास करना
    printArray(numbers, length);

    return 0;
}

दो मैट्रिसेज का गुणा करने के लिए 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)

इस प्रोग्राम में, हम दो मैट्रिसेज का गुणा करेंगे और परिणाम को प्रिंट करेंगे।

  1. मैट्रिस गुणा (Matrix Multiplication):
    • सबसे पहले, हम यूज़र से दोनों मैट्रिसेज के रो और कॉलम की संख्या लेते हैं।
    • गुणा तभी संभव है जब पहली मैट्रिक्स की कॉलम की संख्या दूसरी मैट्रिक्स की रो की संख्या के बराबर हो।
    • यदि यह शर्त पूरी नहीं होती है, तो गुणा संभव नहीं है और प्रोग्राम एक त्रुटि संदेश प्रिंट करता है और समाप्त हो जाता है।
  2. मैट्रिक्स इनपुट लेना (Taking Matrix Input):
    • firstMatrix और secondMatrix में यूज़र द्वारा दी गई वैल्यूज़ को स्टोर किया जाता है।
    • इसके लिए for लूप का उपयोग किया गया है, जो मैट्रिक्स के प्रत्येक तत्व को इनपुट के रूप में लेता है।
  3. गुणा फंक्शन (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 मैट्रिक्स में स्टोर किया जाता है।
  1. मैट्रिक्स प्रिंट करना (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


Index