vasharal Δημοσ. 6 Ιουλίου 2011 Δημοσ. 6 Ιουλίου 2011 Καλημέρα σε όλους. Εχω μεγάλο πρόβλημα και θέλω τα φώτα σας. Μου έδωσε ο καθηγητης μου έναν αναδρομικό τύπο να τον υλοποιήσω σε c++ και ένω νομίζω ότι βρήκα τον αλγόριθμο που πρέπει παίρνω λάθος αποτελέσματα. Για να σας βάλω στο νόημα ο τύπος είναι ο εξής q(j)=(1/j) * αθροισμα ( a[k]*b[k]*q[j-b[k]] ) το j παίρνει τιμες μέχρι c (c==3 για το παραδειγμα μου)και το k παίρνει τιμες όσο είναι το πλήθος των στοιχείων του πίνακα b. Στον κωδικα θα το καταλάβετε. Εχω έναν πίνακα για τα b και έναν για τα a. Απ'ότι καταλαβαίνω ο τύπος είναι με αναδρομή άλλα δεν σκαμπάζω. Οταν το τρέχω θα πρέπει κανονικα να παρω q[0]=1,q[1]=2,q[2]=2.4 q[3]=2.1333 αλλα τα δυο τελευταια μου τα βγαζει μηδέν. Εχετε καμια ιδέα???? > #include <iostream> main(){ double b[]={1,2}; //b[0]=1 b[1]=2 double a[]={2,0.4}; //a[0]=2 a[1]=0.4 const int c=3; double q[c+1]; q[0]=1; // eks orismou to q[0]==1 cout<<q[0]<<endl; double sum; double qk[2]; //voithitikos pinakas poy kratao ta q[j-bk] int orosq=0; // metavliti poy kratao to j-bk for(int j=1; j<=c; j++) { sum=0; for(int k=1; k<=2; k++) { orosq=(j-b[k-1]); if(orosq<0) qk[k-1]=0; //an q[j-bk] arniko exo miden else if (orosq==0) qk[k-1]=1; //an q[j-bk]==0 exo asso else qk[k-1]=q[orosq]; //allios thelo to q[j-bk] sum+=a[k-1]*b[k-1]*qk[k-1]; }//for k q[j]=(1/j)*sum; cout<<q[j]<<endl; }//for j int delay; cin>>delay; }//main Το τρέχω στην borland 5.02
παπι Δημοσ. 6 Ιουλίου 2011 Δημοσ. 6 Ιουλίου 2011 Στα δυο τελευταια.... χμμ βαλε double j και οχι int (και το step καντο j+=1.f) 1/ >2 = 0 αν εισαι με integers. Ααα και το 1 καντο 1.f ( = 1.f / j ) q(j)=(1/j) * αθροισμα ( a[k]*b[k]*q[j-b[k]] )
vasharal Δημοσ. 6 Ιουλίου 2011 Μέλος Δημοσ. 6 Ιουλίου 2011 Πρώτα να ευχαριστήσω για την αστραπιαία απάντηση.. κι επειτα να ρωτήσω. Κάτι τέτοιο εννοείς? > for(double j=1; j<=c; j+=1.f) { sum=0; for(int k=1; k<=2; k++) { orosq=(j-b[k-1]); if(orosq<0) qk[k-1]=0; //an q[j-bk] arniko exo miden else if (orosq==0) qk[k-1]=1; //an q[j-bk]==0 exo asso else qk[k-1]=q[orosq]; //allios thelo to q[j-bk] sum+=a[k-1]*b[k-1]*qk[k-1]; }//for k q[j]=(1.f / j )*sum; cout<<q[j]<<endl; }//for j μου βγάζει error "illegal use of floating point" στο q[j]=... και στο cout στο τέλος. Γιουπιιιι.. Τα κατάφερα.. Τελικά το μόνο που ηθελε αλλαγη ήταν το q[j]=(1./ j )*sum; Τα υπόλοιπα τα άφησα όπως τα είχα και δούλεψε. Ευχαριστώ πολυ παπί η βοήθεια σου ήταν πολυτιμη. Μου έδειξες πως να σκεφτω. Να σαι καλα.
adamco Δημοσ. 19 Ιουλίου 2011 Δημοσ. 19 Ιουλίου 2011 Εκτός από την εντολή: #include <iostream> στα προγράμματα των ανωτέρων μαθηματικών ας συνηθίσεις να βάζεις και τις εντολές: #include <stio.h> #include <math.h> #include <stdlib.h> Τουλάχιστον στην C++ της Microsoft και στην GNU CC του RedHat Linux αυτές οι εντολές δεν δημιουργούσαν προβλήματα.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.