Kezdőoldal » Számítástechnika » Programozás » Mi a hiba ebben a Gauss-elimin...

Amanda88 kérdése:

Mi a hiba ebben a Gauss-elimináló C++ (Visual Studio) programkódban?

Figyelt kérdés

Azt írja ki hibának, hogy mátrix nem lehet referencia. De ha nekem 2 mátrixot kell visszaadnom a mellék-fügvényekből a főfügvényembe, akkor azt csak pointerrel vagy referenciával tudom megoldani, nem? Minden mellék-fügvényből 2 mátrixot kéne visszaadnom...



#include <iostream>

using namespace std;

#include <iomanip>

#include <math.h>


void Megoldasszamolo (int valtozok, double &A[3][3], double &B[3]);

void Egyrehozo (int index, int valtozok, double &A[3][3], double &B[3]);

void Kinullazo (int index, int valtozok, double &A[3][3], double &B[3]);


int main ()

{

int index=0, i, valtozok, l, R, z;

double A[3][3], B[3];


cout<<"Rendezze az egyenleteket ilyen alakra: 2x+3y = 20"<<endl<<endl;

cout<<"Hany valtozos egyenletet szeretne megoldani?"<<endl<<endl;cin>>valtozok;


for (i=1; i<=valtozok; i++)

{

for (l=1; l<=valtozok; l++)

{

cout<<endl<<"Az "<<i<<". egyenletben a(z) "<<l<<". valtozo ennyivel van beszorozva: "<<endl<<endl; cin>>A[i-1][l-1];

cin.get();

}


}

for (i=1; i<=valtozok; i++)

{

cout<<endl<<"Az "<<i<<". egyenletben az egyenlet jobb oldalan levo szam: "<<endl<<endl; cin>>B[i-1];

cin.get();

}

cout<<endl<<endl;


for (i=0; i<valtozok; i++)

{

for (l=0; l<valtozok; l++)

cout<<setw(9)<<A[i][l];


cout<<endl<<endl;

}


for (z=0; z<valtozok; z++)

{

cout<<setw(9)<<B[z];

}

cin.get();

cin.get();


for (R=1; R<=valtozok; R++)

{

Egyrehozo(index, valtozok, &A, &B);

Kinullazo(index, valtozok, &A, &B);

}


Megoldasszamolo(valtozok, &A, &B);


for (i=0; i<valtozok; i++)

cout<<"A valtozok ertekei: "<<B[i]<<endl<<endl;


return 0;

}



void Megoldasszamolo (int valtozok, double &A[3][3], double &B[3])

{

int J, K, R;

double szorzo;


for (J=valtozok; J<=2; J--)

{

for (R=1; R>=J-1; R++)

{

szorzo= A[J-R][J];

for (K=valtozok; K<=1; K--)

A[J-R][K]= A[J-R][K]- A[J][K]* szorzo;


B[J-R]= B[J-R]-B[J]* szorzo;

}

}

}



void Kinullazo (int index, int valtozok, double &A[3][3], double &B[3])

{

int i, K, R;

double vezersor[3];

for (i=0; i>=valtozok; i++)

vezersor[i]= A[index][i];


for (R=index+1; R>=valtozok; R++)

{

if (vezersor[index] !=0)

for (K=1; K>=valtozok; K++)

{

if (K==1)

{

if (A[R][R]==0 || A[R][index]==0)

break;

}

A[R][K]= A[R][K]- vezersor[K];


if (K== valtozok)

B[R]=B[R]-B[index];

}

}

}


void Egyrehozo (int index, int valtozok, double &A[3][3], double &B[3])

{

int K, i, R;

double oszto, tmp[3], tmp2;


for (K=index; K>=valtozok; K++)

if (A[K][index] !=0)

{

oszto= A[K][index];


if (oszto !=1)

{

for (R=index; R>=valtozok; R++)

A[K][R]= A[K][R]/ oszto;


B[K]= B[K]=oszto;

}

}

else

for (R=K+1; R>=valtozok; R++)

{

if (A[R][index]>0)

{

for (i=0; i>=valtozok; i++)

{

tmp[i]= A[K][i];

A[K][i]= A[R][i];

A[R][i]= tmp[i];

}


tmp2= B[K];

B[K]= B[R];

B[R]= tmp2;


oszto= A[K][index];


if (oszto !=1)

{

for (R=index; R>=valtozok; R++)

A[K][R]= A[K][R]/oszto;

B[K]= B[K]/oszto;

break;

}

}

}

}



2013. ápr. 6. 15:57
 1/3 anonim ***** válasza:

"double (&A)[3][3]"

Zárójelbe kell tenni a deklarációban, különben a úgy érti, hogy double referenciákat tartalmazó mátrixot akarsz létrehozni.

Hívásnál pedig nem kell & az A és B elé.

2013. ápr. 6. 16:38
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:

Köszi, ezeket kijavítottam, mostmár végre elindul a program :) Viszont sajnos még az elején elakad, nem tudom miért. És nem tudom hogy kéne megnézni, pontosan hol akad el... Most így néz ki:


#include <iostream>

using namespace std;

#include <iomanip>

#include <math.h>


void Megoldasszamolo (int valtozok, double (&A)[3][3], double (&B)[3]);

void Egyrehozo (int index, int valtozok, double (&A)[3][3], double (&B)[3]);

void Kinullazo (int index, int valtozok, double (&A)[3][3], double (&B)[3]);


int main ()

{

int index=0, i, valtozok, l, R, z;

double A[3][3], B[3];


cout<<"Rendezze az egyenleteket ilyen alakra: 2x+3y = 20"<<endl<<endl;

cout<<"Hany valtozos egyenletet szeretne megoldani?"<<endl<<endl;cin>>valtozok;


for (i=1; i<=valtozok; i++)

{

for (l=1; l<=valtozok; l++)

{

cout<<endl<<"Az "<<i<<". egyenletben a(z) "<<l<<". valtozo ennyivel van beszorozva: "<<endl<<endl; cin>>A[i-1][l-1];

cin.get();

}


}

for (i=1; i<=valtozok; i++)

{

cout<<endl<<"Az "<<i<<". egyenletben az egyenlet jobb oldalan levo szam: "<<endl<<endl; cin>>B[i-1];

cin.get();

}

cout<<endl<<endl;


for (i=0; i<valtozok; i++)

{

for (l=0; l<valtozok; l++)

cout<<setw(9)<<A[i][l];


cout<<endl<<endl;

}


for (z=0; z<valtozok; z++)

{

cout<<setw(9)<<B[z];

}


for (R=1; R<=valtozok; R++)

{

Egyrehozo(index, valtozok, A, B);

Kinullazo(index, valtozok, A, B);

}


Megoldasszamolo(valtozok, A, B);


for (i=0; i<valtozok; i++)

cout<<"A valtozok ertekei: "<<B[i]<<endl<<endl;


return 0;

}



void Megoldasszamolo (int valtozok, double (&A)[3][3], double (&B)[3])

{

int J, K, R;

double szorzo;


for (J=valtozok; J<=2; J--)

{

for (R=1; R>=J-1; R++)

{

szorzo= A[J-R][J];

for (K=valtozok; K<=1; K--)

A[J-R][K]= A[J-R][K]- A[J][K]* szorzo;


B[J-R]= B[J-R]-B[J]* szorzo;

}

}

return;

}



void Kinullazo (int index, int valtozok, double (&A)[3][3], double (&B)[3])

{

int i, K, R;

double vezersor[3];

for (i=0; i>=valtozok; i++)

vezersor[i]= A[index][i];


for (R=index+1; R>=valtozok; R++)

{

if (vezersor[index] !=0)

for (K=1; K>=valtozok; K++)

{

if (K==1)

{

if (A[R][R]==0 || A[R][index]==0)

break;

}

A[R][K]= A[R][K]- vezersor[K];


if (K== valtozok)

B[R]=B[R]-B[index];

}

}

return;

}


void Egyrehozo (int index, int valtozok, double (&A)[3][3], double (&B)[3])

{

int K, i, R;

double oszto, tmp[3], tmp2;


for (K=index; K>=valtozok; K++)

if (A[K][index] !=0)

{

oszto= A[K][index];


if (oszto !=1)

{

for (R=index; R>=valtozok; R++)

A[K][R]= A[K][R]/ oszto;


B[K]= B[K]=oszto;

}

}

else

for (R=K+1; R>=valtozok; R++)

{

if (A[R][index]>0)

{

for (i=0; i>=valtozok; i++)

{

tmp[i]= A[K][i];

A[K][i]= A[R][i];

A[R][i]= tmp[i];

}


tmp2= B[K];

B[K]= B[R];

B[R]= tmp2;


oszto= A[K][index];


if (oszto !=1)

{

for (R=index; R>=valtozok; R++)

A[K][R]= A[K][R]/oszto;

B[K]= B[K]/oszto;

break;

}

}

}

return;

}

2013. ápr. 6. 16:55
 3/3 anonim ***** válasza:
Írogass ki adatokat a függvényekben, és úgy kiderül, hogy mivel van baj.
2013. ápr. 6. 23:02
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!