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

Amanda88 kérdése:

Mi a hiba ebben a mátrix sorait rendező C++ programban?

Figyelt kérdés

Azzal van a gond szerintem, hogy cím szerint próbálom átadni a vektort a rendező függvénynek. Ha viszont érték szerint adom át, csak a vektor másolatát módosítja a függvény, nem az eredetit, úgy vettem észre.


Matrix.h:


#include <vector>

#include <iostream>

using namespace std;


class Matrix

{

vector<int> adat;

int sor;

int oszlop;


public:

Matrix(int s=1, int o=1): sor(s), oszlop(o)

{

for (int i=0; i<(sor*oszlop); i++)

{

adat.push_back(0);

}

}


void set_sor(vector<int> v, int s)

{

for (int i=oszlop-1; i>=0; i--)

adat[(((s-1)*oszlop)+(oszlop-i))-1]= v[oszlop-(i+1)]; // a fuggvenynek atadott vektor elemeit ertekul adja a megadott sor elemeinek

}


friend ostream& operator<< (ostream& os, const Matrix &m)

{

for (int i=0; i<(m.sor*m.oszlop); i++)

{

cout<<m.adat[i]<<" ";


if( (i+1) != 0 && m.oszlop != 1)

{

if ((i+1)%(m.oszlop) == 0) /** sortores, ha tobb, mint 1 oszlop van es a sor vegere ert a kiiras */

cout<<endl;

}


else if (m.oszlop == 1)

cout<<endl;

}

return os;

}


void rendez_sorok (vector<int> &v, int eleje, int vege)

{

int i= eleje, j= vege, tmp_vec;

vector<int> tmp(oszlop);

int pivot= v[(eleje+ vege)/2];

vector <vector<int>> sorok;


for (int k=0; k<sor; k++)

{

vector<int> aktualisSor(oszlop);


for(int h=0; h<oszlop; h++)

{

aktualisSor[h]= adat[(k*oszlop)+h];

}

sorok.push_back(aktualisSor);

}


while (i<=j)

{

while (v[i]<pivot)

i++;


while (v[j]>pivot)

j--;


if (i<=j)

{

tmp= sorok[j];

sorok[j]= sorok[i];

sorok[i]= tmp;


tmp_vec=v[j];

v[j]= v[i];

v[i]= tmp_vec;


i++;

j--;

}


if (eleje<j)

rendez_sorok(v,eleje,j);


if (vege>i)

rendez_sorok(v,vege,i);

}

}

};



main.cpp:


#include <vector>

#include <vector>

#include <vector>

#include <vector>

#include <iostream>

#include "Matrix3.h"


using namespace std;


int main()

{

Matrix matrix2(5,6);


vector<int> v1(6,0);

vector<int> v2(6,1);

vector<int> v3(6,2);

vector<int> v4(6,3);

vector<int> v5(6,4);


vector <int> v_sorr(5,0);

v_sorr[0]= 1;

v_sorr[1]= 0;

v_sorr[2]= 2;

v_sorr[3]= 3;

v_sorr[4]= 4;


matrix2.set_sor(v1,1);

matrix2.set_sor(v2,2);

matrix2.set_sor(v3,3);

matrix2.set_sor(v4,4);

matrix2.set_sor(v5,5);


cout<<matrix2<<endl;

cout<<endl;


matrix2.rendez_sorok(&v_sorr[0],0,4);


cout<<matrix2<<endl;


cout<<endl;

system("pause");


return 0;

}



2014. dec. 10. 00:09
 1/2 anonim ***** válasza:

Na most írd le azt is, hogy milyen hibát kaptál, vagy mi nem jó. (Segfault? melyik sorra?)


Egyet tippelek azért:


void rendez_sorok (vector<int> &v, int eleje, int vege) // ez azt jelenti, hogy v-t referencia szerint adod át. Vagyis kap egy v-t, és abba ő beleírhat.


matrix2.rendez_sorok(&v_sorr[0],0,4); // itt meg v[0] címét add meg neki, de ő egy vektort vár, nem pedig memóriacímet. A függvénydeklaráció alapján szerintem itt a helyes szintaktika a & elhagyása lenne, csak simán a vektort adnád neki.


[link]


itt találsz róla leírást.


Talált?

2014. dec. 10. 01:23
Hasznos számodra ez a válasz?
 2/2 anonim ***** válasza:
65%

Hihetetlen, hogy mindenki segítséget kér, hogy mi a rossz, de senki nem képes leírni a hibaüzenetet. :D

Honnan jön ez a sok életképtelen "programozó", valahol gyártják ezeket?

2014. dec. 10. 06:12
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!