मेरे पास एक त्वरित है और मैं प्रश्न मान रहा हूं लेकिन मुझे ऑनलाइन कुछ भी नहीं मिला है।

एक अहस्ताक्षरित चार सरणी में तत्वों के औसत की गणना कैसे करें? या इसे और अधिक पसंद करते हैं, एक अहस्ताक्षरित चार पर संचालन करते हैं?

2
Everton 10 फरवरी 2011, 07:08
4
क्या आप जानते हैं कि डेटा सेट का औसत कैसे लिया जाता है? क्या आप सरणियों की अवधारणा को समझते हैं? क्या आप सरणियों के साथ काम करने के लिए वाक्य रचना को समझना चाहते हैं? क्या आप इसे सी या सी ++ में करना चाहते हैं? (C और C++ अलग-अलग भाषाएं हैं। आपको प्रत्येक के लिए अलग-अलग उत्तर मिलेंगे। [c] और [c++] टैग समान नहीं हैं!)
 – 
In silico
10 फरवरी 2011, 07:10

3 जवाब

सबसे बढ़िया उत्तर

अंकगणितीय संचालन unsigned char पर ठीक काम करते हैं, हालांकि आप कभी-कभी इस तथ्य से आश्चर्यचकित हो सकते हैं कि C में अंकगणित हमेशा int को बढ़ावा देता है।

सी ++ की मानक टेम्पलेट लाइब्रेरी में,

#include <numeric>
template<class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);

unsigned char arr[] के योग की गणना करने के लिए, आप accumulate(arr, arr + sizeof(arr) / sizeof(arr[0]), 0) का उपयोग कर सकते हैं। (0 यहाँ एक int है। आपको किसी भिन्न प्रकार का उपयोग करना अधिक उपयुक्त लग सकता है।)

एसटीएल के बिना, यह तुच्छ रूप से एक लूप के साथ गणना की जाती है।

औसत लंबाई (sizeof(arr) / sizeof(arr[0])) से विभाजित योग है।

1
ephemient 10 फरवरी 2011, 07:17
मैं एक अहस्ताक्षरित चार मान कैसे रख सकता हूं? मान लें कि योग += unSignedCharArray[i][j]. राशि का प्रकार क्या है?
 – 
Everton
10 फरवरी 2011, 08:10
@Everton: मेरा पूरा समाधान देखें। योग एक int प्रकार के चर में संग्रहीत है!
 – 
Nawaz
10 फरवरी 2011, 08:21
क्या आप मुझे दिखा सकते हैं कि एसटीएल के बिना कैसे कार्यान्वित किया जाए? मैं एक नौसिखिया हूँ और इससे मुझे बहुत मदद मिलेगी! शुक्रिया!
 – 
Everton
10 फरवरी 2011, 10:49

सी ++ 03 और सी ++ 0x:

#include <numeric>

int count = sizeof(arr)/sizeof(arr[0]);
int sum = std::accumulate<unsigned char*, int>(arr,arr + count,0);
double average = (double)sum/count;

ऑनलाइन डेमो : http://www.ideone.com/2YXaT


सी ++ 0x केवल (लैम्ब्डा का उपयोग करके)

#include <algorithm>

int sum = 0;
std::for_each(arr,arr+count,[&](int n){ sum += n; });
double average = (double)sum/count;

ऑनलाइन डेमो : http://www.ideone.com/IGfht

5
Nawaz 10 फरवरी 2011, 09:06

किसी भी चीज़ की तरह के बारे में, आप उन्हें जोड़ते हैं और गिनती से विभाजित करते हैं। अतिप्रवाह से बचने के लिए, आप आमतौर पर गणित करते समय उन्हें किसी बड़ी चीज़ में बदलना चाहेंगे। यदि (जैसा कि सामान्य है) आप एक फ़्लोटिंग पॉइंट परिणाम चाहते हैं, तो आप सभी गणित को फ़्लोटिंग पॉइंट पर भी करना चाहेंगे।

1
Jerry Coffin 10 फरवरी 2011, 07:11
2
सभी गणित को फ्लोटिंग पॉइंट के रूप में करने की आवश्यकता नहीं है। जब तक आप राशि पूरी नहीं कर लेते, तब तक आप रूपांतरित होने की प्रतीक्षा कर सकते हैं। यदि आपके पूर्णांक 32-बिट हैं, तो आपको अतिप्रवाह का कोई मौका पाने के लिए 24MB सरणी की आवश्यकता होगी, इसलिए मुझे लगता है कि योग को unsigned int में रखना पूरी तरह से उचित है।
 – 
R.. GitHub STOP HELPING ICE
10 फरवरी 2011, 07:20
(और यदि अतिप्रवाह का मौका है, तो आपको सटीक रूप से नुकसान के कारण फ़्लोटिंग पॉइंट के साथ कोड प्राप्त करने में कठिनाई होगी!)
 – 
R.. GitHub STOP HELPING ICE
10 फरवरी 2011, 07:21
@ आर .: हां, जैसा कि कहा गया है, नौकरी के लिए, 32-बिट int के पास पर्याप्त होने का एक बहुत अच्छा मौका है - लेकिन, 1) यह हमेशा नहीं होगा, और 2) ऐसा करना अपेक्षाकृत< है /i> नाजुक, इसलिए (उदाहरण के लिए) इनपुट प्रकार में मामूली बदलाव "ज्ञात कार्य" कोड को तोड़ सकता है। एक समय फ़्लोटिंग पॉइंट का उपयोग करना इतना महंगा था कि जब भी संभव हो, इससे बचने लायक था, लेकिन यह बदल गया है। वास्तव में, कुछ सीपीयू अब डेटा को एफपी में परिवर्तित करके, ऑपरेशन करके, परिणाम को एक पूर्णांक में परिवर्तित करके कुछ पूर्णांक संचालन करते हैं। स्पष्ट रूप से ऐसे मामले में, FP का उपयोग करना कोई बड़ी समस्या नहीं है...
 – 
Jerry Coffin
10 फरवरी 2011, 11:34
यदि और कुछ नहीं है, तो आपको यह स्पष्ट करने की आवश्यकता है कि आपका मतलब double है, float नहीं, क्योंकि float में अतिप्रवाह की समस्या अधिक होगी (बड़ी संख्या में तत्वों के बाद, लगभग 32k, जोड़े जाते हैं) , और तत्वों को जोड़ने से योग नहीं बदलेगा!) जिनका पता लगाना कठिन है और उनके आसपास काम करना कठिन है। IMO, किसी भी समय फ्लोटिंग पॉइंट का उपयोग करके आप वास्तव में नहीं चाहते हैं कि इसका शब्दार्थ एक बहुत बड़ी प्रोग्रामिंग त्रुटि है जो आपको तब तक काटती है जब तक कि आप संख्यात्मक विश्लेषण के विशेषज्ञ न हों।
 – 
R.. GitHub STOP HELPING ICE
10 फरवरी 2011, 13:36