Δεν εμφανίζει σωστά τα δεδομένα του πίνακα!!

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
ggeo1
Δημοσιεύσεις: 16
Εγγραφή: 08 Νοέμ 2006 18:24

Δεν εμφανίζει σωστά τα δεδομένα του πίνακα!!

Δημοσίευση από ggeo1 » 03 Δεκ 2010 20:17

Καλησπέρα ,

Ο κώδικας χρησιμοποιεί την Gauss-Jordan για να λύσει ένα σύστημα με 2 πίνακες.
Το πρόβλημά μου είναι πως ενώ δηλώνω στην αρχή τα στοιχεία " a[3][2]=-4.031;
a[3][3]=-3.112; "
στην πρώτη εντολή cout ,που απλά τα δείχνω , με εμφανίζει τις τιμές "7.998 και -4.481"!!!!!

Πώς γίνεται αυτό???

Και κατά συνεπεια (αν δεν έχω κάνει και κανένα άλλο λάθος),με βγάζει λάθος αποτέλεσμα.

Κώδικας: Επιλογή όλων

#include <cstdlib>
#include <iostream>
#include <cmath>
#include <cstdio>
#include <iomanip>

using namespace std;

int main&#40;&#41;
&#123;

    double a&#91;3&#93;&#91;3&#93;,x&#91;3&#93;,b&#91;3&#93;;
    double factor;

    a&#91;1&#93;&#91;1&#93;=-0.002;
    a&#91;1&#93;&#91;2&#93;=4.0;
    a&#91;1&#93;&#91;3&#93;=4.0;
    a&#91;2&#93;&#91;1&#93;=-2.0;
    a&#91;2&#93;&#91;2&#93;=2.906;
    a&#91;2&#93;&#91;3&#93;=-5.387;
    a&#91;3&#93;&#91;1&#93;=3.0;
    a&#91;3&#93;&#91;2&#93;=-4.031;  //εδώ δίνω τις τιμές 
    a&#91;3&#93;&#91;3&#93;=-3.112; //όπως και εδώ

    b&#91;1&#93;=7.998;
    b&#91;2&#93;=-4.481;
    b&#91;3&#93;=-4.415;


cout <<setw&#40;30&#41; <<"\nOur matrices are &#58; "<<setw&#40;20&#41;<<"A"<<setw&#40;25&#41;<<"B\n"<<endl;
cout <<setw&#40;30&#41; <<a&#91;1&#93;&#91;1&#93; <<setw&#40;10&#41;<<a&#91;1&#93;&#91;2&#93;<<setw&#40;10&#41;<<a&#91;1&#93;&#91;3&#93;<<setw&#40;15&#41;<<b&#91;1&#93;<<endl;
cout <<setw&#40;30&#41; <<a&#91;2&#93;&#91;1&#93; <<setw&#40;10&#41;<<a&#91;2&#93;&#91;2&#93;<<setw&#40;10&#41;<<a&#91;2&#93;&#91;3&#93;<<setw&#40;15&#41;<<b&#91;2&#93;<<endl;  
cout <<setw&#40;30&#41; <<a&#91;3&#93;&#91;1&#93; <<setw&#40;10&#41;<<a&#91;3&#93;&#91;2&#93;<<setw&#40;10&#41;<<a&#91;3&#93;&#91;3&#93;<<setw&#40;15&#41;<<b&#91;3&#93;<<endl;  //εδώ όμως μου εμφανίζει άλλες!


// zeroing the first column
//-->second line
factor=a&#91;2&#93;&#91;1&#93;/a&#91;1&#93;&#91;1&#93;;
a&#91;2&#93;&#91;1&#93;=a&#91;1&#93;&#91;1&#93;*factor-a&#91;2&#93;&#91;1&#93;;
a&#91;2&#93;&#91;2&#93;=a&#91;1&#93;&#91;2&#93;*factor-a&#91;2&#93;&#91;2&#93;;
a&#91;2&#93;&#91;3&#93;=a&#91;1&#93;&#91;3&#93;*factor-a&#91;2&#93;&#91;3&#93;;
b&#91;2&#93;=b&#91;1&#93;*factor-b&#91;2&#93;;

//-->third line
factor=a&#91;3&#93;&#91;1&#93;/a&#91;1&#93;&#91;1&#93;;
a&#91;3&#93;&#91;1&#93;=a&#91;1&#93;&#91;1&#93;*factor-a&#91;3&#93;&#91;1&#93;;
a&#91;3&#93;&#91;2&#93;=a&#91;1&#93;&#91;2&#93;*factor-a&#91;3&#93;&#91;2&#93;;
a&#91;3&#93;&#91;3&#93;=a&#91;1&#93;&#91;3&#93;*factor-a&#91;3&#93;&#91;3&#93;;
b&#91;3&#93;=b&#91;1&#93;*factor-b&#91;3&#93;;

cout<<setw&#40;30&#41;<<"\nAfter the zeroing of first column &#58;\n"<<endl;
cout <<setw&#40;30&#41; <<a&#91;1&#93;&#91;1&#93; <<setw&#40;10&#41;<<a&#91;1&#93;&#91;2&#93;<<setw&#40;10&#41;<<a&#91;1&#93;&#91;3&#93;<<setw&#40;15&#41;<<b&#91;1&#93;<<endl;
cout <<setw&#40;30&#41; <<a&#91;2&#93;&#91;1&#93; <<setw&#40;10&#41;<<a&#91;2&#93;&#91;2&#93;<<setw&#40;10&#41;<<a&#91;2&#93;&#91;3&#93;<<setw&#40;15&#41;<<b&#91;2&#93;<<endl;
cout <<setw&#40;30&#41; <<a&#91;3&#93;&#91;1&#93; <<setw&#40;10&#41;<<a&#91;3&#93;&#91;2&#93;<<setw&#40;10&#41;<<a&#91;3&#93;&#91;3&#93;<<setw&#40;15&#41;<<b&#91;3&#93;<<endl;


//zeroing the second column
//-->third line
factor=a&#91;3&#93;&#91;2&#93;/a&#91;2&#93;&#91;2&#93;;
a&#91;3&#93;&#91;1&#93;=a&#91;2&#93;&#91;1&#93;*factor-a&#91;3&#93;&#91;1&#93;;
a&#91;3&#93;&#91;2&#93;=a&#91;2&#93;&#91;2&#93;*factor-a&#91;3&#93;&#91;2&#93;;
a&#91;3&#93;&#91;3&#93;=a&#91;2&#93;&#91;3&#93;*factor-a&#91;3&#93;&#91;3&#93;;
b&#91;3&#93;=b&#91;2&#93;*factor-b&#91;3&#93;;

cout <<setw&#40;30&#41;<<"\nAfter zeroing the second column &#58;\n"<<endl;
cout <<setw&#40;30&#41; <<a&#91;1&#93;&#91;1&#93; <<setw&#40;10&#41;<<a&#91;1&#93;&#91;2&#93;<<setw&#40;10&#41;<<a&#91;1&#93;&#91;3&#93;<<setw&#40;15&#41;<<b&#91;1&#93;<<endl;
cout <<setw&#40;30&#41; <<a&#91;2&#93;&#91;1&#93; <<setw&#40;10&#41;<<a&#91;2&#93;&#91;2&#93;<<setw&#40;10&#41;<<a&#91;2&#93;&#91;3&#93;<<setw&#40;15&#41;<<b&#91;2&#93;<<endl;
cout <<setw&#40;30&#41; <<a&#91;3&#93;&#91;1&#93; <<setw&#40;10&#41;<<a&#91;3&#93;&#91;2&#93;<<setw&#40;10&#41;<<a&#91;3&#93;&#91;3&#93;<<setw&#40;15&#41;<<b&#91;3&#93;<<endl;

cout <<setw&#40;50&#41;<<"\nThe matrix has become up triangle "<<endl;

//the solution
x&#91;3&#93;=b&#91;3&#93;/a&#91;3&#93;&#91;3&#93;;
x&#91;2&#93;=&#40;b&#91;2&#93;-a&#91;2&#93;&#91;3&#93;*x&#91;3&#93;&#41;/a&#91;2&#93;&#91;2&#93;;
x&#91;1&#93;=&#40;b&#91;1&#93;-a&#91;1&#93;&#91;2&#93;*x&#91;2&#93;-a&#91;1&#93;&#91;3&#93;*x&#91;3&#93;&#41;/a&#91;1&#93;&#91;1&#93;;

cout <<setw&#40;30&#41;<<"\nThe solution is &#58;\n"<<endl;
cout <<setw&#40;30&#41;<<x&#91;1&#93;<<endl;
cout <<setw&#40;30&#41;<<x&#91;2&#93;<<endl;
cout <<setw&#40;30&#41;<<x&#91;3&#93;<<endl;


   return 0;

    &#125;

Καμιά ιδέα??

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Δεν εμφανίζει σωστά τα δεδομένα του πίνακα!!

Δημοσίευση από dva_dev » 03 Δεκ 2010 20:38

Οταν δηλώνεις έναν πίνακα A[x][y] τα στοιχεία που έχεις είναι:

A[0][0] (το πρώτο στοιχείο, και όχι το Α[1][1]) εώς A[x-1][y-1] (το τελευταίο και όχι Α[x][y]).

Ξεκίνα από αυτό και βλέπεις...

[edit]
Αν έχεις έναν πίνακα και προσπαθείς να προσπελάσεις (διαβάσεις, γράψεις) θέσεις πέρα από το όριο που έχεις δηλώσει, αυτό που θα έχεις είναι δεδομένα που δεν ανήκουν στον πίνακα, αλλά σε κάποιον άλλο.
[/edit]

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Δεν εμφανίζει σωστά τα δεδομένα του πίνακα!!

Δημοσίευση από virxen75 » 03 Δεκ 2010 20:49

αν σε ξεβολευει το γεγονός ότι η C ξεκινά τους πίνακες από το 0

π.χ. double B[3];
B[0]=..
B[1]=...
B[2]=...

B[3]---->δεν υπάρχει

και δεν θες να συμβιβαστείς τότε άλλαξε αυτό

double a[3][3],x[3],b[3];

σε

double a[4][4],x[4],b[4];

τa b[0],a[0][0],x[0]
θα συνεχίζουν να υπάρχουν αλλά εσύ αγνόησε τα.
και όλα τα for που αφορούν τον πίνακα θα ξεκινάνε από το 1

ggeo1
Δημοσιεύσεις: 16
Εγγραφή: 08 Νοέμ 2006 18:24

Δεν εμφανίζει σωστά τα δεδομένα του πίνακα!!

Δημοσίευση από ggeo1 » 03 Δεκ 2010 20:56

Ευχαριστώ βρε παιδιά!
Πώς μου ξέφυγε!Το είχα ξεχάσει εντελώς!
Με έχουν πέσει όλα μαζί και δε ξέρω τι μου γίνεται!
(τώρα μαθαίνω c++ στην ουσία ,είχα ασχοληθεί λίγο παλαιότερα αλλά τώρα αμέσως στα βαθιά!)

Χρησιμοποίησα τελικά το double a[4][4],x[4],b[4];
και όλα δουλεύουν σωστά!

Ευχαριστώ!Είσασταν και πολύ γρήγοροι!

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης