2012-12-11 13 views
5

के रूप में परिवर्तनीय आयामों के साथ 2 डी सरणी पास करना मैंने कोडकेफ़ पर सफल सबमिशन के बीच निम्न कोड देखा है।फ़ंक्शन तर्क

http://www.codechef.com/viewplaintext/1595846

मुझे लगता है कि करने के लिए है कि

float max(int n,int arr[n][n]) 
{....} 

सी में अनुमति नहीं है ++ ('एन' के रूप में एक चर रहा है) का इस्तेमाल किया। MinGW [gcc 4.4] के साथ मेरा CodeBlocks (विंडोज़ पर) संकलन समय त्रुटि देता है। । कि "त्रुटि:। बाध्य सरणी एक पूर्णांक स्थिर नहीं है

फिर कैसे इस तरह के एक समाधान CodeChef के न्यायाधीश द्वारा स्वीकार किया जा सकता है वहाँ किसी विशेष ध्वज कि हमें करने की अनुमति देता है C++ ???

कि संपादित करें: एसी के रूप में स्थिति को दर्शाने वाला लिंक (स्वीकार किए जाते हैं): http://www.codechef.com/viewsolution/1595846

+0

अवैध C++ मेरे लिए की तरह लगता है। – goji

+1

अभिषेक ठाकुर का उत्तर नीचे देखें। यह सबमिशन सी के रूप में चिह्नित किया गया है, सी ++ नहीं, और यह सी में कानूनी होता है (हालांकि मानक सी ++ में नहीं)। – Gorpik

उत्तर

5

आईएसओ सी 99 में परिवर्तनीय-लंबाई स्वचालित सरणी की अनुमति है, और विस्तार के रूप में जीसीसी उन्हें सी 9 0 मोड और सी ++ में स्वीकार करता है। ये सरणी किसी भी अन्य स्वचालित सरणी की तरह घोषित की जाती हैं, लेकिन एक लंबाई के साथ जो निरंतर अभिव्यक्ति नहीं है।

रेफरी: http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

+0

वास्तव में, सबमिशन कहता है कि इसे सी में लागू किया गया है, सी ++ नहीं। तो कोड सी मानक के अनुसार सही है। – Gorpik

+0

धन्यवाद। मैंने सी में एक ही कोड की कोशिश की, जो काम करता था। लेकिन सी ++ के बारे में क्या? यह त्रुटियां दे रहा है। – TheCrazyProgrammer

+0

@TheCrazyProgrammer आपको त्रुटियां हैं क्योंकि यह कानूनी सी है, लेकिन कानूनी C++ नहीं है। सी ++ 98 सी 9 0 का लगभग सख्त सुपरसैट था, लेकिन सी 99 बाद में आया और इस तरह के कुछ अतिरिक्त फीचर्स पेश किए। सी ++ मानक के बाद के संस्करणों ने सी – Gorpik

4

मैं ठीक किया खड़े:। C99 सी के लिए इस अनुमति नहीं है, हालांकि कई compilers अभी तक इसे लागू नहीं है और कुछ शायद कभी नहीं होगा (माइक्रोसॉफ्ट)

पिछला जवाब

या तो पूर्णांक के रूप में आगमन पारित ** या की तरह

template< int N > 
float max(const int (&arr)[N][N]) 
{ ... } 

जो बंद पाठ्यक्रम एन की आवश्यकता है एक संकलन समय स्थिर हो के लिए कुछ का उपयोग करें। सबसे सुरक्षित समाधान एक std :: वेक्टर या किसी अन्य कंटेनर का उपयोग करना होगा जिसमें इसके आकार के बारे में ज्ञान हो।

कुल मिलाकर कोड मेरे लिए बहुत कमजोर लगता है।