Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

वेरिएबल-लेंथ सरणियों के उपयोग को प्रदर्शित करने के लिए C प्रोग्राम


मान लीजिए हम एक लाइब्रेरी सिस्टम बनाने के प्रभारी हैं जो लाइब्रेरी में विभिन्न संचालन की निगरानी और क्वेरी करता है। अब हमें तीन अलग-अलग कमांड लागू करने के लिए कहा गया है जो निम्नलिखित करते हैं:

  • कमांड 1 का उपयोग करके, हम शेल्फ x पर y पृष्ठों वाली पुस्तक के सम्मिलन को रिकॉर्ड कर सकते हैं।

  • कमांड 2 का उपयोग करके, हम शेल्फ x पर y-वीं पुस्तक का पृष्ठ नंबर प्रिंट कर सकते हैं।

  • कमांड 3 का उपयोग करके, हम शेल्फ x पर पुस्तकों की संख्या प्रिंट कर सकते हैं।

कमांड्स हमें एक 2D सरणी के रूप में दिए गए हैं इस फॉर्मेट में {कमांड प्रकार, x, y}। यदि कोई y मान नहीं है, तो मान डिफ़ॉल्ट रूप से 0 होगा। हम दिए गए कमांड्स के परिणाम प्रिंट करते हैं।

इसलिए, यदि इनपुट है जैसे शेल्फ की संख्या = 4, क्वेरीज़ = 4, input_arr = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; तो आउटपुट होगा

23 1
कमांड 1 शेल्फ 3 पर 23 पृष्ठों वाली पुस्तक सम्मिलित करता है। कमांड 2 शेल्फ 4 पर 128 पृष्ठों वाली पुस्तक सम्मिलित करता है। कमांड 3 शेल्फ 3 पर पुस्तक 0 का पृष्ठ नंबर प्रिंट करता है। कमांड 4 शेल्फ 3 पर पुस्तकों की संख्या प्रिंट करता है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:

  • b := आकार s की एक नई सरणी
  • p := आकार s की एक नई सरणी
  • i := 0 से आरंभ करें, जब i < s, अपडेट करें (i को 1 से बढ़ाएं), करें:
    • b[i] := 0
    • p[i] := एक नई सरणी
  • loopCount := 0 से आरंभ करें, जब loopCount < q, अपडेट करें (loopCount को 1 से बढ़ाएं), करें:
    • qtype := q_array[loopCount, 0]
    • यदि qtype 1 के समान है, तो:
      • x := q_array[loopCount, 1]
      • y := q_array[loopCount, 2]
      • b[x] := b[x] + 1
      • p[x] := p[x] द्वारा इंगित ऑब्जेक्ट को डिएलोकेट करें और आकार का पॉइंटर लौटाएं
      • b[x]
      • p[x, b[x] - 1] = y
    • अन्यथा जब qtype 2 के समान है, तो:
      • x := q_array[loopCount, 1]
      • y := q_array[loopCount, 2]
      • print(p[x, y])
    • अन्यथा
      • x := q_array[loopCount, 1]
      • print(b[x])
  • यदि b null नहीं है, तो:
    • b द्वारा अधिग्रहित मेमोरी को डिएलोकेट करें
  • i := 0 से आरंभ करें, जब i < s, अपडेट करें (i को 1 से बढ़ाएं), करें:
    • यदि p[i] null नहीं है, तो:
      • p[i] द्वारा अधिग्रहित मेमोरी को डिएलोकेट करें
    • यदि p null नहीं है, तो:
      • p द्वारा अधिग्रहित मेमोरी को डिएलोकेट करें

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

#include <stdio.h> 
#include <stdlib.h> 
void solve(int s, int q, int q_array[][3]) { 
    int* b; 
    int** p; 
    b = (int*)malloc(sizeof(int)*s); 
    p = (int**)malloc(sizeof(int*)*s); 
    for(int i = 0; i < s; i++) 
    { 
        b[i] = 0; 
        p[i] = (int*)malloc(sizeof(int)); 
    } 
    int loopCount; 
    for(loopCount = 0; loopCount < q; loopCount++) 
    { 
        int qtype; 
        qtype = q_array[loopCount][0]; 
        if (qtype == 1) 
        { 
            int x, y; 
            x = q_array[loopCount][1]; 
            y = q_array[loopCount][2]; 
            b[x] += 1; 
            p[x] = realloc(p[x], b[x]*sizeof(int)); 
            p[x][b[x] - 1] = y; 
        } 
        else if (qtype == 2) 
        { 
            int x, y; 
            x = q_array[loopCount][1]; 
            y = q_array[loopCount][2]; 
            printf("%d\n", p[x][y]); 
        } 
        else 
        { 
            int x; 
            x = q_array[loopCount][1]; 
            printf("%d\n", b[x]); 
        } 
    } 
    if (b) 
        free(b); 
    for (int i = 0; i < s; i++) 
        if (p[i]) 
            free(p[i]); 
    if (p) 
        free(p); 
} 
int main() { 
    int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; 
    solve(4, 4, input_arr); 
}

इनपुट

int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; solve(4, 4, input_arr);

आउटपुट

23 1

  1. C प्रोग्राम: जांचें कि सरणी पैलिंड्रोम है या नहीं (पुनरावृत्तीय) C प्रोग्राम: जांचें कि सरणी पैलिंड्रोम है या नहीं (पुनरावृत्तीय)

    पैलिंड्रोम सरणी एक सरणी पैलिंड्रोम है यदि यह आगे और पीछे से समान पढ़ी जाती है। उदाहरण सरणीपैलिंड्रोम? {1, 0, 0, 1}हाँ {1, 2, 3, 4, 5}नहीं {7}हाँ (एकल तत्व) {}हाँ (खाली) {1, 2, 2, 1}हाँ {1, 2, 3, 2, 1}हाँ पुनरावृत्तीय एल्गोरिदम दो पॉइंटर्स: start = 0, end = n-1 जब तक start < end: यदि ar

  1. C प्रोग्राम: आर्मस्ट्रांग नंबर्स (Armstrong Numbers) C प्रोग्राम: आर्मस्ट्रांग नंबर्स (Armstrong Numbers)

    हमें उपयोगकर्ता द्वारा दर्ज संख्या n की जांच करनी है कि यह आर्मस्ट्रांग संख्या है या नहीं। एक आर्मस्ट्रांग संख्या वह है जिसके अंकों को अंकों की संख्या (क्रम) की घात तक बढ़ाकर उनका योग करने पर मूल संख्या प्राप्त होती है। सूत्र: wxyz... = wⁿ + xⁿ + yⁿ + zⁿ + ... एल्गोरिदम START फंक्शन power(a, b): a^b

  1. C/C++ में मल्टीडायमेंशनल ऐरे C/C++ में मल्टीडायमेंशनल ऐरे

    C/C++ में, मल्टीडायमेंशनल ऐरे को सरल शब्दों में ऐरे के ऐरे के रूप में परिभाषित किया जाता है। मल्टीडायमेंशनल ऐरे में डेटा टेबुलर फॉर्म में स्टोर होता है (रो मेजर ऑर्डर में)। निम्नलिखित डायग्राम 3 x 3 x 3 डायमेंशन वाले मल्टीडायमेंशनल ऐरे के लिए मेमोरी आवंटन रणनीति दिखाता है। एल्गोरिदम Begin ऐर