मैट्रिक्स पीढ़ी कोड बस विफल रहता है, और मुझे नहीं पता कि क्यों

यहां मेरे पास कोड है जो काम नहीं करता है (क्षमा करें अगर यह काफी बुरी तरह स्वरूपित है - कोड ब्लॉक चूसना):

#include 
#include  
#include 
#define m 10

void matrix_gen(int s, int i, int j, double matrix[s][s], int opt_strat[m][m][m]);

for (int u=0; u=0) {
    for (i=9; i>=0; --i) {
        for (j=9; j>=0; --j) {
            if (j>i) {
                continue;
            }
            if (i+j==level) {
                printf("\nSublevel %d,%d\n",i,j);

                s=2*(2*m-i-j);
                double* p = NULL;
                double* p_vector = malloc(s * sizeof *p);
                double* v_vector = malloc(s * sizeof *p);
                double (*matrix)[s] = malloc(sizeof(double[s][s]));
                //double** matrix;
//                  matrix = (double**) malloc(s * sizeof(double*));
//                  for (int i = 0; i < s; i++)
//                      matrix[i] = (double*) malloc(s * sizeof(double));

            /*Use separate functions to define matrix and vector*/

                matrix_gen(s, i, j, matrix, opt_strat);

            /*Print the matrix to check*/

                for (int i=0; i

मुद्दा यह है कि पहले फ़ंक्शन में कोड, जो मैट्रिक्स की प्रविष्टियों को बदलना चाहिए, नहीं! पहला अगर कथन काम करता है, और मुझे परिणामस्वरूप एक पहचान मैट्रिक्स मिलता है, लेकिन सभी हिस्सों और माइनस हिस्सों को हमेशा शून्य दिखाना चाहिए। मैंने सोचा कि शायद (एस/2) + एम-आई जैसे समस्याएं हो सकती हैं (यह मेरा एल्गोरिदम नहीं है! यह एक समूह प्रोजेक्ट है ..) लेकिन इन सभी मानों को मैट्रिक्स प्रविष्टियों के लिए समझना चाहिए। ऐसा लगता है कि कोड सभी को अनदेखा कर रहा है लेकिन पहले अगर कथन है, और मुझे नहीं पता कि क्यों। हम जानते हैं कि ऊपर की प्रक्रिया सही मैट्रिक्स बनाना चाहिए - यह अच्छे परिणामों के साथ पायथन में किया गया है - प्रोग्रामिंग का बड़ा हिस्सा सी में है, इसलिए हमने इसे परिवहन करने की कोशिश की।

क्या कोई गलत हो रहा है, और मैट्रिक्स प्रविष्टियों को बदलने से रोक सकता है? अग्रिम में धन्यवाद।

0
इस कोड का अध्ययन करना और मैन्युअल रूप से त्रुटि का पता लगाना किसी के लिए बहुत कठिन है। कोड के माध्यम से कदम उठाने और गलती खोजने के लिए gdb जैसे डीबगिंग टूल का उपयोग करने का प्रयास करें।
जोड़ा लेखक Don't You Worry Child, स्रोत
@ScottyBauer u और s दोनों को पूर्णांक के रूप में परिभाषित किया गया है, और एस हमेशा भी होता है, इसलिए परिणाम भी एक पूर्णांक होगा ..? (और यदि नहीं, तो एक पूर्णांक के लिए गोल)
जोड़ा लेखक FireGarden, स्रोत
खैर, मैंने इस तरह की एक तुलना की बजाय 2 * u == s की कोशिश की। इसका कोई प्रभाव नहीं पड़ा: /
जोड़ा लेखक FireGarden, स्रोत
चूंकि आमतौर पर लागू फ्लोटिंग-पॉइंट अंकगणितीय सिस्टम (जैसे आईईईई) दोनों 4 और 2 दोनों का प्रतिनिधित्व कर सकते हैं, वैसे ही यह एक दूसरे के विभाजन को उम्मीद करने के लिए उचित है (फ़्लोटिंग- बिंदु) <कोड> 2 । चाहे वह == पूर्णांक 2 है, शायद, एक और मामला है
जोड़ा लेखक High Performance Mark, स्रोत
@ScottyBauer मुझे नहीं पता कि आप किस कंपाइलर का उपयोग कर रहे हैं, लेकिन s/2 जैसे कुछ का सामना करते समय मेरा एक सरल पूर्णांक विभाजन करता है - जैसे सी मानक की आवश्यकता होती है ... s/2.0 एक अलग कहानी होगी, लेकिन जैसा कि उच्च प्रदर्शन चिह्न ने बताया, यहां तक ​​कि यह कोई समस्या नहीं होगी।
जोड़ा लेखक cmaster, स्रोत
एक int को फ़्लोटिंग प्रकार से तुलना करना एक अच्छा विचार नहीं है u == s/2
जोड़ा लेखक Scotty Bauer, स्रोत
हाँ यह एक पूर्णांक के लिए गोल नहीं किया जाएगा। कंपाइलर एक फ़्लोटिंग प्रकार के साथ s/2 को प्रतिस्थापित करेगा। और फ़्लोटिंग प्रकारों में गोलाकार त्रुटियां होती हैं, जबकि s/2 वास्तविक गणित में 4 बराबर हो सकती है, एक फ्लोट इसे 3.99 99 99 के रूप में प्रस्तुत कर सकता है जो स्पष्ट रूप से 4 == 4 जैसा नहीं है।
जोड़ा लेखक Scotty Bauer, स्रोत

1 उत्तर

मुद्दा यह है कि पहले फ़ंक्शन में कोड, जो मैट्रिक्स की प्रविष्टियों को बदलना चाहिए, नहीं!

अपने फ़ंक्शन के अंत से अर्धविराम ; निकालें matrix_gen

void matrix_gen(......, int opt_strat[m][m][m]);
                                               ^Remove this semicolon                                      

इसके बावजूद, आपके कोड के साथ बहुत सी समस्याएं हैं। आपको उन्हें ठीक करना होगा।

0
जोड़ा
सभी समस्याओं का पता लगाने के लिए, मुझे आपके पूरे कोड की समीक्षा करनी होगी। उन्हें ठीक करने में कुछ समय लगेगा लेकिन मैं अपनी सेमेस्टर परीक्षाओं में व्यस्त हूं और मेरे पास ऐसा करने का अधिक समय नहीं है। आशा है कि कोई आपके प्रश्न का उत्तर देगा। शुभकामनाएँ :)
जोड़ा लेखक haccks, स्रोत
..मुझे नहीं पता कि वह वहां क्यों था। मुझे लगता है कि यह सिर्फ एक कीबोर्ड फज या कुछ था, क्योंकि यह मुख्य कोड में नहीं है (और जैसा कि मैंने कोशिश की थी, यह वहां भी संकलित नहीं होता था) उह, क्या अन्य समस्याएं हैं?
जोड़ा लेखक FireGarden, स्रोत