Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

zadatak s operatorom >>

[es] :: C/C++ programiranje :: zadatak s operatorom >>

[ Pregleda: 2327 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

antonija
Antonija Budimir

Član broj: 29581
Poruke: 17
*.sava.sczg.hr



Profil

icon zadatak s operatorom >>18.09.2004. u 13:34 - pre 208 meseci
Pozdrav!
Ja imam problem sa sledecim zadatkom:
#include <iostream>
using namespace std;

class Matrix {
private:
int X1, X2, Y1, Y2;
public:

Matrix(int x1, int x2, int y1, int y2) {
int det = x1 * y2 - x2 * y1;
if (det != 1) {
cout << "Matrica ne pripada modularnoj grupi! " << endl;
exit(1);
}
else {
X1 = x1; X2 = x2; Y1 = y1; Y2 = y2;
};
};

int DajX1() { return X1; };
int DajX2() { return X2; };
int DajY1() { return Y1; };
int DajY2() { return Y2; };

int* operator*(const Matrix &a) {
int* b;
*b = X1 * a.X1 + X2 * a.Y1;
*(b+1) = X1 * a.X2 + X2 * a.Y2;
*(b+2) = Y1 * a.X1 + Y2 * a.Y1;
*(b+3) = Y1 * a.X2 + Y2 * a.Y2;
return b;
};

};

ostream& operator<<(ostream& os, Matrix a) {
int det = a.DajX1()*a.DajY2()-a.DajX2()*a.DajY1();
if ( det = 1) {
return os << "{ { " << a.DajX1() << "," << a.DajX2() << "} { " << a.DajY1() << "," << a.DajY2() << "} }";
}
else {
cout << "Matrica ne pripada modularnoj grupi! " << endl;
exit(1);
};
};

istream& operator>>(istream &is, Matrix &a) {
if (!is) return is;
int x_1, x_2, y_1, y_2, det;
is >> x_1 >> x_2 >> y_1 >> y_2;
det = x_1*y_2-x_2*y_1;
if (!(det = 1)) {
is.clear(ios::failbit);
return is;
}
else {
a = Matrix(x_1, x_2, y_1, y_2);
return is;
};
};

int main() {
Matrix A();
cin >> A;
Matrix M(2, 1, 1, 1);
Matrix N(6, 5, 1, 1);
cout << M << endl;
cout << N << endl;
cout << *M.operator*(N) << endl;
return 0;
}

Kompajler mi javlja gresku kod dela koda:cin >> A. Mozete li mi reci zasto?Hvala unapred!

 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
*.informatik.uni-erlangen.de



+27 Profil

icon Re: zadatak s operatorom >>18.09.2004. u 15:21 - pre 208 meseci
Problem je što prethodna linija Matrix A(); nije definicija novog primerka matrice, već deklaracija funkcije, tj. A u liniji cin >> A; je pokazivač na funkciju. Ispravka bi bila da staviš Matrix A; i definišeš podrazumevani konstruktor za klasu.

Pored toga, ako onaj operator množenja nisi iz nekog posebnog razloga definisala tako, uobičajeno bi bilo nešto poput:

Code:
class Matrix {
...
friend const Matrix operator* (const Matrix &a, const Matrix &b)
{
    return Matrix(a.X1 * b.X1 + a.X2 * b.Y1,
                  a.X1 * b.X2 + a.X2 * b.Y2,
                  a.Y1 * b.X1 + a.Y2 * b.Y1,
                  a.Y1 * b.X2 + a.Y2 * b.Y2);
}
...
};


Pazi i na linije u kojima je det = 1, umesto toga treba det == 1. Možda možeš da uključiš detaljna upozorenja u kompilatoru koji koristiš, tada bi trebalo da te upozori na slične slučajeve.
 
Odgovor na temu

[es] :: C/C++ programiranje :: zadatak s operatorom >>

[ Pregleda: 2327 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.