Zadanie domowe
- Termin: 23:59, 26 listopada 2009r.
- Projekt jest dwuosobowy.
- Sposob oddania: email na adres beata.strack@gmail.com
Tresc zadania
Prosze zaimplementowac klase Vector:
class Vector
{
private:
int wym; //liczba wspolrzednych wektora
double *wsp;
public:
//konstruktory
Vector();
Vector( int, double*);
Vector( Vector&); //konstruktor kopiujacy
//destruktor
~Vector();
double length(); //dlugosc wektora
Vector& operator=(Vector&); //operator przypisania
// ewentualne inne funkcje
};
oraz nastepujace funkcje
double operator*(Vector&, Vector&); //iloczyn skalarny
Vector& operator+(Vector&, Vector&); //suma wektorow
Vector& operator-(Vector&, Vector&); //roznica wektorow
bool operaotr==(Vector&, Vector&); //porownanie wektorow
ostream& operator<<(ostream&, Vector&); //wypisywanie wektora
istream& operator>>(istream&, Vector&); //wczytywanie wektora
Dzialanie poszczegolnych funkcji skladowych jest nastepujace
- Vector().
Konstruktor. Tworzy wektor o jednej wspolrzednej rownej 0
- Vector( int n, double* w).
Konstruktor. Tworzy wektor o dlugosci n, ktorego kolejne wspolrzedne sa rowne elementom tablicy w.in
- Vector( Vector& v).
Konstruktor kopiujacy. Tworzy wektor identyczny z wektorem v
- ~Vector().
Destruktor. Zwalnia pamiec.
- double length().
Zwraca dlugosc wektora (pierwiastek z sumy kwadratow wspolrzednych).
- Vector& operator=(Vector&)
Operator przypisania.
- double operator*(Vector&, Vector&);
Funkacja zwraca iloczyn skalarny dwoch wektorow o tej samej dlugosci. Jesli wektory sa roznej dlugosci funkcja powinna wypisywac komunikat i zwracac wartosc 0.
Funkcja moze zostac zaimplementowana jako funkcja zaprzyjazniona
Uwaga: iloczyn skalarny dwoch wektorow a=(a1, a2, ..., an) oraz b=(b1, b2, ..., bn) to wyrazenie a1*b1+a2*b2+ ... + an*bn
- Vector& operator+(Vector&, Vector&);
Funkcja zwraca sume dwoch wektorow o tej samej dlugosci. Jesli wektory sa roznej dlugosci funkcja powinna wypisywac komunikat.
Moze zostac zaimplementowana jako funkcja zaprzyjazniona.
- Vector& operator-(Vector&, Vector&);
Funkcja zwraca roznice dwoch wektorow o tej samej dlugosci. Jesli wektory sa roznej dlugosci funkcja powinna wypisywac komunikat. Moze zostac zaimplementowana jako funkcja zaprzyjazniona.
- bool operator==(Vector&, Vector&)
Operator porownania dwoch wektorow. Zwraca true, jesli wektory sa identyczne i false w przeciwnym wypadku.
Moze zostac zaimplementowana jako funkcja zaprzyjazniona.
- ostream& operator<<(ostream& out, Vector& v)
Operator wysylania na strumien out - wypisuje wspolrzedne wektora w nawiasach, rozdzielone przecinkami. Moze zostac zaimplementowana jako funkcja zaprzyjazniona.
- istream& operato>>(istream&, Vector&)
Wczytuje do wektora ciag liczb ze strumienia, z ktorych pierwsza to liczba wspolrzednych, a kolejne to wspolrzedne.
Moze zostac zaimplementowana jako funkcja zaprzyjazniona.
Ponizej znajduje sie przykladowa funkcja main
korzystajaca z klasy i funkcji, ktore maja Panstwo zaimplementowac
int main( )
{
Vector v1;
double tab[4];
for(int i = 0; i < 4; i++){
tab[i] = i*i;
} //stworzylismy tablice kwadratow liczb
Vector v2(4, tab); //tworzymy wektor ktorego wspolrzednymi sa elementy wczesniej utworzonej tablicy
cout<< "Dlugosc wektora to: " << v2.lenght();
v1 = v2; //przypisujemy wartosc wektora v2 do v1
Vector v3 = v2; //tworzymy nowy wektor identyczny z v2
cout<< v1 - v2 << v1+ v2; //wypisuje roznice wektorow v1 i v2 oraz sume wektorow v1 i v2
if ( v3 == v2){ //jesli wektory v3 i v2 sa rowne (powinny byc rowne)
Vector v4; //stworz kolejny wektor
cin>> v4; //wczytaj go z klawiatury
cout<< v4 //wypisz wektor v4
}
cout<< v4* v3; //wypisuje iloczyn skalarny wektorow
return 0;
}
Implementacje wszystkich funkcji powinny wykrywac bledy
(np. niemoznosc zaalokowania pamieci) i w razie bledu konczyc program
(np. przez wywolanie funkcji exit). Gdy poznamy mechanim
obslugi wyjatkow, bedziemy mogli zaimplementowac lepsza obsluge
bledow.
Sprawdzanie zadania
Bedziemy oceniac, czy program zachowuje sie
poprawnie, oraz czy klasa Vector zostala zaprogramowana poprawnie
i elegancko.