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

C भाषा में डायनामिक मेमोरी आवंटन का उदाहरण: सरणी में अधिकतम और न्यूनतम


समस्या

डायनामिक मेमोरी आवंटन का उपयोग करके सरणी में अधिकतम और न्यूनतम मान ढूंढना।

एल्गोरिदम

  1. आकार n इनपुट लें
  2. malloc(n * sizeof(int)) से मेमोरी आवंटित करें
  3. max = INT_MIN, min = INT_MAX प्रारंभ करें
  4. लूप में प्रत्येक तत्व पढ़ें और साथ-साथ max/min अपडेट करें
  5. परिणाम प्रिंट करें
  6. free() से मेमोरी मुक्त करें

पूर्ण C प्रोग्राम

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>  // INT_MIN, INT_MAX

int main() {
    int n, *arr, max, min;
    
    printf("सरणी का आकार: ");
    if (scanf("%d", &n) != 1 || n <= 0) {
        printf("अमान्य आकार\n");
        return 1;
    }
    
    // डायनामिक आवंटन
    arr = malloc(n * sizeof(int));
    if (arr == NULL) {
        printf("मेमोरी आवंटन विफल\n");
        return 1;
    }
    
    // प्रारंभिकरण
    max = INT_MIN;  // -2147483648
    min = INT_MAX;  // 2147483647
    
    printf("%d तत्व दर्ज करें:\n", n);
    for (int i = 0; i < n; i++) {
        if (scanf("%d", &arr[i]) != 1) {
            printf("अमान्य इनपुट\n");
            free(arr);
            return 1;
        }
        
        // साथ-साथ max/min अपडेट
        if (arr[i] > max) max = arr[i];
        if (arr[i] < min) min = arr[i];
    }
    
    printf("अधिकतम = %d\n", max);
    printf("न्यूनतम = %d\n", min);
    
    free(arr);
    return 0;
}

आउटपुट

सरणी का आकार: 5
5 तत्व दर्ज करें:
45 12 78 3 99
अधिकतम = 99
न्यूनतम = 3

मूल प्रोग्राम की समस्याएं (सुधार)

  • क्रिटिकल बग: scanf("%d", &n) से पहले malloc(n * ...) कॉल किया गया था! n अनारंभिकृत था → अपरिभाषित व्यवहार।
  • max और min के प्रारंभिक मान गलत थे (हार्डकोडेड -32768/32767 के बजाय INT_MIN/INT_MAX उपयोग करें)
  • कोई इनपुट सत्यापन नहीं
  • free() गायब था

बेहतर संस्करण: फंक्शन में अलग करना


#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

void findMinMax(int *arr, int n, int *min, int *max) {
    *min = INT_MAX;
    *max = INT_MIN;
    for (int i = 0; i < n; i++) {
        if (arr[i] < *min) *min = arr[i];
        if (arr[i] > *max) *max = arr[i];
    }
}

int main() {
    int n, *arr, min, max;
    
    printf("आकार: ");
    if (scanf("%d", &n) != 1 || n <= 0) return 1;
    
    arr = malloc(n * sizeof(int));
    if (!arr) return 1;
    
    printf("तत्व: ");
    for (int i = 0; i < n; i++)
        if (scanf("%d", &arr[i]) != 1) { free(arr); return 1; }
    
    findMinMax(arr, n, &min, &max);
    printf("न्यूनतम: %d, अधिकतम: %d\n", min, max);
    
    free(arr);
    return 0;
}

पॉइंटर अंकगणित संस्करण


for (int i = 0; i < n; i++) {
    int val = *(arr + i);
    if (val > max) max = val;
    if (val < min) min = val;
}

समय और स्थान जटिलता

  • समय: O(n) - एक पास
  • स्थान: O(n) - सरणी के लिए (इनपुट संग्रहीत करने के लिए आवश्यक)
  • अनुकूलन: यदि केवल max/min चाहिए तो सरणी संग्रहीत न करें, सीधे प्रोसेस करें → O(1) स्थान

O(1) स्थान संस्करण


int main() {
    int n, val, max = INT_MIN, min = INT_MAX;
    printf("आकार: "); scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &val);
        if (val > max) max = val;
        if (val < min) min = val;
    }
    printf("अधिकतम: %d, न्यूनतम: %d\n", max, min);
    return 0;  // कोई malloc/free नहीं!
}
  1. C भाषा में प्रोग्राम डेवलपमेंट साइकिल क्या है? C भाषा में प्रोग्राम डेवलपमेंट साइकिल क्या है?

    जब हम किसी प्रोग्रामिंग भाषा का उपयोग करके एक प्रोग्राम विकसित करना चाहते हैं, तो हमें चरणों के एक क्रम का पालन करना होता है। इन चरणों को प्रोग्राम डेवलपमेंट में चरण कहा जाता है।प्रोग्राम डेवलपमेंट लाइफ साइकल चरणों या चरणों का एक समूह है जिसका उपयोग किसी भी प्रोग्रामिंग भाषा में प्रोग्राम विकसित करन

  1. C प्रोग्रामिंग में स्टेटिक मेमोरी एलोकेशन का क्या अर्थ है? C प्रोग्रामिंग में स्टेटिक मेमोरी एलोकेशन का क्या अर्थ है?

    मेमोरी को निम्नलिखित दो तरीकों से एलोकेट किया जा सकता है: स्टेटिक मेमोरी एलोकेशन स्टेटिक वेरिएबल आवंटित स्थान के एक ब्लॉक में परिभाषित होता है, जिसका आकार निश्चित होता है। एक बार एलोकेट होने के बाद, इसे कभी फ्री नहीं किया जा सकता। प्रोग्राम में घोषित वेरिएबल के लिए मेमोरी एलोकेट की जाती है। एड्र

  1. C प्रोग्राम में विभिन्न प्रकार के एक्सप्रेशन्स समझें C प्रोग्राम में विभिन्न प्रकार के एक्सप्रेशन्स समझें

    एक एक्सप्रेशन ऑपरेटर्स और ऑपरेंड्स का संयोजन है जो एक सिंगल वैल्यू में कम हो जाता है। एक ऑपरेशन एक डेटा आइटम पर किया जाता है जिसे ऑपरेंड कहा जाता है। एक ऑपरेटर डेटा पर की जाने वाली ऑपरेशन को इंगित करता है। उदाहरण के लिए, z = 3+2*1 → z = 5 प्राइमरी एक्सप्रेशन्स - यह एक ऑपरेंड है जो एक नाम, कॉन्