समस्या
डायनामिक मेमोरी आवंटन का उपयोग करके संख्याओं के सेट में सम और विषम संख्याओं का योग ज्ञात करना।
एल्गोरिदम
- उपयोगकर्ता से तत्वों की संख्या
nलें malloc(n * sizeof(int))से मेमोरी आवंटित करें- आवंटन सफलता जांचें (NULL जांच)
nसंख्याएँ पढ़कर आवंटित मेमोरी में संग्रहीत करें- प्रत्येक संख्या के लिए: यदि सम → even_sum में जोड़ें, अन्यथा odd_sum में
- परिणाम प्रिंट करें
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 ...
}