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

C भाषा में डायनामिक मेमोरी आवंटन से सम और विषम संख्याएँ ढूंढना


समस्या

डायनामिक मेमोरी आवंटन का उपयोग करके संख्याओं के सेट में सम और विषम संख्याओं का योग ज्ञात करना।

एल्गोरिदम

  1. उपयोगकर्ता से तत्वों की संख्या n लें
  2. malloc(n * sizeof(int)) से मेमोरी आवंटित करें
  3. आवंटन सफलता जांचें (NULL जांच)
  4. n संख्याएँ पढ़कर आवंटित मेमोरी में संग्रहीत करें
  5. प्रत्येक संख्या के लिए: यदि सम → even_sum में जोड़ें, अन्यथा odd_sum में
  6. परिणाम प्रिंट करें
  7. free() से मेमोरी मुक्त करें

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

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

int main() {
    int n, *arr, even = 0, odd = 0;
    
    printf("तत्वों की संख्या: ");
    if (scanf("%d", &n) != 1 || n <= 0) {
        printf("अमान्य संख्या\n");
        return 1;
    }
    
    // डायनामिक आवंटन
    arr = malloc(n * sizeof(int));
    if (arr == NULL) {
        printf("मेमोरी आवंटन विफल\n");
        return 1;
    }
    
    // इनपुट
    printf("%d संख्याएँ दर्ज करें:\n", n);
    for (int i = 0; i < n; i++) {
        if (scanf("%d", &arr[i]) != 1) {
            printf("अमान्य इनपुट\n");
            free(arr);
            return 1;
        }
    }
    
    // सम/विषम योग
    for (int i = 0; i < n; i++) {
        if (arr[i] % 2 == 0)
            even += arr[i];
        else
            odd += arr[i];
    }
    
    printf("सम संख्याओं का योग: %d\n", even);
    printf("विषम संख्याओं का योग: %d\n", odd);
    
    free(arr);
    return 0;
}

आउटपुट

तत्वों की संख्या: 5
5 संख्याएँ दर्ज करें:
34 23 12 11 45
सम संख्याओं का योग: 46
विषम संख्याओं का योग: 79

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


// पॉइंटर अंकगणित के साथ
for (int i = 0; i < n; i++) {
    int val = *(arr + i);  // arr[i] के बराबर
    if (val % 2 == 0) even += val;
    else odd += val;
}

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

  • p = malloc(n * sizeof(int)) - n अप्रारंभिकृत था जब malloc कॉल हुआ! scanf के बाद malloc करें
  • कोई इनपुट सत्यापन नहीं
  • exit(0) के बजाय return 1 उपयोग करें (main में)

विस्तार: फंक्शन में अलग करना


void sumEvenOdd(int *arr, int n, int *even, int *odd) {
    *even = *odd = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i] % 2 == 0) *even += arr[i];
        else *odd += arr[i];
    }
}

int main() {
    int n, *arr, even, odd;
    // ... इनपुट और आवंटन ...
    sumEvenOdd(arr, n, &even, &odd);
    // ... प्रिंट और free ...
}
  1. C भाषा में लिंक्ड लिस्ट में एलिमेंट्स इन्सर्ट करना C भाषा में लिंक्ड लिस्ट में एलिमेंट्स इन्सर्ट करना

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

  1. C में स्ट्रिंग को नंबर और नंबर को स्ट्रिंग में बदलना C में स्ट्रिंग को नंबर और नंबर को स्ट्रिंग में बदलना

    दो रूपांतरण फंक्शन्स sscanf(): स्ट्रिंग को नंबर में बदलता है। sprintf(): नंबर को स्ट्रिंग में बदलता है। स्ट्रिंग टू नंबर: sscanf() सिंटैक्स: sscanf(string_name, control_string, &var_list); उदाहरण: तारीख पार्स करना #include <stdio.h> int main() { char a[20] = 02 01 2010; int day, m

  1. - Python प्रोग्राम से सूची में सम और विषम संख्याओं की गिनती

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सूची दी गई है, हमें सूची में सम और विषम संख्याओं की गिनती करने की आवश्यकता है। नीचे चर्चा किए गए तीन तरीके हैं। दृष्टिकोण 1 - ब्रूट-फोर्स दृष्टिकोण का उपयोग करना उदाहरण list1 = [21, 3, 4, 6, 33, 2, 3, 1, 3,