Προς το περιεχόμενο

C++ Λάθος αποτελέσματα


vasharal

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα σε όλους. Εχω μεγάλο πρόβλημα και θέλω τα φώτα σας.

Μου έδωσε ο καθηγητης μου έναν αναδρομικό τύπο να τον υλοποιήσω σε 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

Δημοσ.

Στα δυο τελευταια.... χμμ

βαλε 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]] )

Δημοσ.

Πρώτα να ευχαριστήσω για την αστραπιαία απάντηση..

κι επειτα να ρωτήσω. Κάτι τέτοιο εννοείς?

>
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; Τα υπόλοιπα τα άφησα όπως τα είχα και δούλεψε. Ευχαριστώ πολυ παπί η βοήθεια σου ήταν πολυτιμη. Μου έδειξες πως να σκεφτω. Να σαι καλα.

  • 2 εβδομάδες αργότερα...
Δημοσ.

Εκτός από την εντολή:

 

#include <iostream>

 

στα προγράμματα των ανωτέρων μαθηματικών ας συνηθίσεις να βάζεις και τις εντολές:

 

#include <stio.h>

#include <math.h>

#include <stdlib.h>

 

Τουλάχιστον στην C++ της Microsoft και στην GNU CC του RedHat Linux αυτές οι εντολές δεν δημιουργούσαν προβλήματα. :rolleyes:

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...