Program wykonujący działania na wektorach + klasy i obiekty = [PROBLEM]

0

Witam!
Piszę program który ma wykonywać działania na wektorach (tj. dodawanie, odejmowanie wektorów, mnożenie wektora przez liczbę, iloczyn skalarny i wektorowy).

Stworzyłem już coś takiego:

// wektory.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <assert.h>

using namespace std;

class wektory
{
private:
	int *wektor; // tablica wektor dla liczb całkowitych
	int rozmiar; // rozmiar tablicy wektor
public:
	int dodaj()const; // suma wektorowa
	int odejmij()const; // roznica wektorowa
	int pomnoz_przez_liczbe(int x, int y, int a); // mnozenie wektora przez liczbe
	int il_skalarny()const; // iloczyn skalarny 2 wektorów
	int il_wektorowy()const; // iloczyn wektorowy 2 wektorów



	wektory(int rozmiar) // konstruktor
	{
		assert(rozmiar>=0); // sprawdzenie poprawnosci rozmiaru tablicy ( tablica nie moze byc <= 0)
		wektor = new int[rozmiar]; // dynamiczne tworzenie tablicy liczb calkowitych

	}
	~wektory() // destruktor
	{
		assert(rozmiar!=NULL); // sprawdzenie czy czasem tablica juz nie istnieje
		delete[] wektor; // dynamiczne usuwanie tablicy
	}



};

int wektory::pomnoz_przez_liczbe(int x, int y, int a)
{
	int liczba=0;
	int wek=0;
	int x1=0;
	int y1=0;

	wek = ((a*x1)+(a*y1));
	return wek;

}




int _tmain(int argc, _TCHAR* argv[])
{
	cout << "################################" << endl;
	cout << "DZIALANIE NA WEKTORACH!" << endl;
	cout << "################################" << endl << endl;

	//wspolrzedne dwóch wektorów
	int x1=0;
	int x2=0;
	int y1=0;
	int y2=0;
	//////////////////////////////

	int wybor=0; 
	cout << "--------------------------------------------------------" << endl;
	cout << "1 - Aby dodać 2 wektory" << endl;
	cout << "2 - Aby odjac 2 wektory" << endl;
	cout << "3 - Aby pomnozyc wektor przez liczbe" << endl;
	cout << "4 - Aby obliczyc iloczyn skalarny" << endl;
	cout << "5 - Aby obliczyc iloczyn wektorowy" << endl;
	cout << "6 - Aby wyjsc!" << endl;
	cout << "--------------------------------------------------------" << endl << endl;

	switch(wybor)
	{
	case 1:
		{}
	case 2:
		{}
	case 3:
		{
			int a = 0; // liczba razy która mnozymy wektor
			cout << "Chcesz pomnozyc wektor przez liczbe" << endl;
			cout << "Podaj wspolrzedne wektora x1 i y1: " << endl;
			cin >> x1 >> y1;
			cout << "Podaj liczbe: " << endl;
			cin >> a;
			wektor.pomnoz_przez_liczbe(x1,y1,a);
		}
	case 4:
		{}
	case 5:
		{}
	case 6:
		{
			exit(1);
		}




	}


	system("pause");
	return 0;
}

 

I nie potrafię teraz odwołać się do metody pomnóż przez liczbę().
Konkretnie wywala mi błąd w tej linijce:

wektor.pomnoz_przez_liczbe(x1,y1,a);

"Identifier wektor is "undefined"

Co robie źle? Pewnie gdzieś muszę użyć referencji.

1

nie masz utworzonego obiektu "wektor". Zapomniałeś o deklaracji.

0

No tak faktycznie.
A jak stworzyć taki obiekt?

Bo kombinuje np tak :

wektory vector = new vector;

nazwa_klasy <nazwa_obiektu> = new <nazwa_obiektu> ? tylko to coś wciąż nie działa

1

Przecież masz konstruktor!!! Nawias i parametr jeszcze.

wektory vecotr(7);
0

Czyli w ten sposób tworze 7 obiektów?

yay dziala :*

 // wektory.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <assert.h>

using namespace std;

class wektory
{
private:
	int *wektor; // tablica wektor dla liczb całkowitych
	int rozmiar; // rozmiar tablicy wektor
	int *wsk;
public:
	int dodaj()const; // suma wektorowa
	int odejmij()const; // roznica wektorowa
	int pomnoz_przez_liczbe(int x, int y, int a); // mnozenie wektora przez liczbe
	int il_skalarny()const; // iloczyn skalarny 2 wektorów
	int il_wektorowy()const; // iloczyn wektorowy 2 wektorów



	wektory(int rozmiar) // konstruktor
	{
		assert(rozmiar>=0); // sprawdzenie poprawnosci rozmiaru tablicy ( tablica nie moze byc <= 0)
		wektor = new int[rozmiar]; // dynamiczne tworzenie tablicy liczb calkowitych
		
		
	}
	~wektory() // destruktor
	{
		assert(rozmiar!=NULL); // sprawdzenie czy czasem tablica juz nie istnieje
		delete[] wektor; // dynamiczne usuwanie tablicy
	}

	
	


};

int wektory::pomnoz_przez_liczbe(int x, int y, int a)
{
	int liczba=0;
	int wek=0;
	int x1=0;
	int y1=0;

	wek = ((a*x1)+(a*y1));
	return wek;

}




int _tmain(int argc, _TCHAR* argv[])
{
	cout << "################################" << endl;
	cout << "DZIALANIE NA WEKTORACH!" << endl;
	cout << "################################" << endl << endl;

	//wspolrzedne dwóch wektorów
	int x1=0;
	int x2=0;
	int y1=0;
	int y2=0;
	//////////////////////////////
	
	wektory vector(10);
	int wybor=0; 
	cout << "--------------------------------------------------------" << endl;
	cout << "1 - Aby dodać 2 wektory" << endl;
	cout << "2 - Aby odjac 2 wektory" << endl;
	cout << "3 - Aby pomnozyc wektor przez liczbe" << endl;
	cout << "4 - Aby obliczyc iloczyn skalarny" << endl;
	cout << "5 - Aby obliczyc iloczyn wektorowy" << endl;
	cout << "6 - Aby wyjsc!" << endl;
	cout << "--------------------------------------------------------" << endl << endl;

	cout << "Co chcesz zrobic?" << endl;
	cin >> wybor;

	switch(wybor)
	{
	case 1:
		{}
	case 2:
		{}
	case 3:
		{
			
			int a = 0; // liczba razy która mnozymy wektor
			cout << "Chcesz pomnozyc wektor przez liczbe" << endl;
			cout << "Podaj wspolrzedne wektora x1 i y1: " << endl;
			cin >> x1 >> y1;
			cout << "Podaj liczbe: " << endl;
			cin >> a;
			
			cout << "Wartość nowego wektora wynosi = " << vector.pomnoz_przez_liczbe(x1,y1,a) << endl;
			getchar();
		}
	case 4:
		{}
	case 5:
		{}
	case 6:
		{
			exit(1);
		}




	}


	system("pause");
	return 0;
}

Tylko tak się teraz zastanawiam od czego zależy liczba obiektów które chce utworzyć? Stworzyłem 10 obiektów i wystarczy mi to do moich obliczeń?

1

Nie. Jeden. Ale za to tworzysz w obiekcie 7 elementową tablice intów

0

Aha :) a usuwa się potem taki obiekt? i do następnej funkcji tworzyć nowy?

PS. mam jeszcze jedno pytanie, ale z innej beczki.

Jak zatrzymać zamykanie okna w konsoli aby zobaczyć wynik obliczeń jesli system("pause") i getchar() nie wystarcza?

0

Nie za bardzo rozumiem pytanie. Ten obiekt który stworzyłeś będzie w pamięci przez cały czas trwania programu. A kod który napisałeś jest na tyle "nie ładny", że ciężko mi zrozumieć twoje zamiary chociżby względem tej tablicy...

daj na końcu

cin.ignore();
cin.get();

oraz co najważniejsze zainstaluj code::blocks
http://sourceforge.net/projects/codeblocks/files/Binaries/10.05/Windows/codeblocks-10.05mingw-setup.exe/download

0

Aha.
Wiesz co mamy na polibudzie MSDN i tam mam Visual Studio za darmo i sobie w tym pisze :)

Poprawiam obliczenia bo źle mi liczyło to mnożenie wektora przez liczbe bo ja to sumowalem do 1 wyniku a wynikiem tego działania nie jest liczba tylko nowa współrzędna i właśnie myślę jak wypisać te współrzędne

 // wektory.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <assert.h>

using namespace std;

class wektory
{
private:
	int *wektor; // tablica wektor dla liczb całkowitych
	int rozmiar; // rozmiar tablicy wektor
	int *wsk;
public:
	int dodaj(int x1, int x2, int y1, int y2); // suma wektorowa
	int odejmij()const; // roznica wektorowa
	int pomnoz_przez_liczbe(int x, int y, int a); // mnozenie wektora przez liczbe
	int il_skalarny()const; // iloczyn skalarny 2 wektorów
	int il_wektorowy()const; // iloczyn wektorowy 2 wektorów



	wektory(int rozmiar) // konstruktor
	{
		assert(rozmiar>=0); // sprawdzenie poprawnosci rozmiaru tablicy ( tablica nie moze byc <= 0)
		wektor = new int[rozmiar]; // dynamiczne tworzenie tablicy liczb calkowitych
		
		
	}
	~wektory() // destruktor
	{
		assert(rozmiar!=NULL); // sprawdzenie czy czasem tablica juz nie istnieje
		delete[] wektor; // dynamiczne usuwanie tablicy
	}

	
	


};

int wektory::pomnoz_przez_liczbe(int x, int y, int a)
{
	int liczba=0;
	int wek1=0;
	int wek2=0;
	int x1=0;
	int y1=0;

	wek1 = (a*x1);
	wek2 = (a*y1);
	return wek1, wek2;

}

int wektory::dodaj(int x1, int x2, int y1, int y2)
{
	int w1=0;
	int w2=0;
	

	return 0;
}




int _tmain(int argc, _TCHAR* argv[])
{
	cout << "################################" << endl;
	cout << "DZIALANIE NA WEKTORACH!" << endl;
	cout << "################################" << endl << endl;

	//wspolrzedne dwóch wektorów
	int x1=0;
	int x2=0;
	int y1=0;
	int y2=0;
	//////////////////////////////
	
	wektory vector(10);
	int wybor=0; 
	cout << "--------------------------------------------------------" << endl;
	cout << "1 - Aby dodać 2 wektory" << endl;
	cout << "2 - Aby odjac 2 wektory" << endl;
	cout << "3 - Aby pomnozyc wektor przez liczbe" << endl;
	cout << "4 - Aby obliczyc iloczyn skalarny" << endl;
	cout << "5 - Aby obliczyc iloczyn wektorowy" << endl;
	cout << "6 - Aby wyjsc!" << endl;
	cout << "--------------------------------------------------------" << endl << endl;

	cout << "Co chcesz zrobic?" << endl;
	cin >> wybor;

	switch(wybor)
	{
	case 1:
		{}
	case 2:
		{}
	case 3:
		{
			
			int a = 0; // liczba razy która mnozymy wektor
			cout << "Chcesz pomnozyc wektor przez liczbe" << endl;
			cout << "Podaj wspolrzedne wektora x1 i y1: " << endl;
			cin >> x1 >> y1;
			cout << "Podaj liczbe: " << endl;
			cin >> a;
			
			cout << "Wartosc nowego wektora wynosi = " << vector.pomnoz_przez_liczbe(x1,y1,a) << endl;
			
			cin.ignore();
			cin.get();
		}
	case 4:
		{}
	case 5:
		{}
	case 6:
		{
			exit(1);
		}




	}


	system("pause");
	return 0;
}

Chodzi mi konkretnie o te wypisywanie:

cout << "Wartosc nowego wektora wynosi = " << vector.pomnoz_przez_liczbe(x1,y1,a) << endl;

Jak rozbić te funkcje ,żeby wyświetlić współrzędne nowego wektora?

0
int wektory::pomnoz_przez_liczbe(int x, int y, int a)
{
        int liczba=0;
        int wek1=0;
        int wek2=0;
        int x1=0;
        int y1=0;
 
        wek1 = (a*x1);
        wek2 = (a*y1);
        return wek1, wek2;
 
}

Nie możesz zwrócić dwóch zmiennych int. Możesz zwrócić std::vector z tymi liczbami, możesz przesłać dwie dodatkowe liczby przez referencje"&" i w ten sposób wyłuskać te liczby, ale nie możesz zrobić tego tak:

return wek1, wek2;
0

Aha a jak to wyłuskać przez referencje?

Ja kombinuje z charem:

int wektory::pomnoz_przez_liczbe(int x, int y, int a)
{
int liczba=0;
int wek1=0;
int wek2=0;
int x1=0;
int y1=0;
char nowy_wektor;

wek1 = (a*x1);
wek2 = (a*y1);

nowy_wektor='wek1','wek2';

return nowy_wektor;

}

Ale wyswietla mi nie tak jak chce ;d

sorry jestem początkującym programistą a obiektowość to dla mnie jeszcze abstrakcja:/ temu proszę o pomoc

0

Chodziło mi o taki vector:
http://www.cplusplus.com/reference/stl/vector/
ale musisz zmienić typ zwracany funkcji.
Tu masz o referencjach:
http://pl.wikibooks.org/wiki/C++/Referencje

0

Znam mniej więcej referencje ale nie wiem co masz na myśli z tym vectorem :P
łatwo się mówi o trudniej sie robi ;d

0
#include <iostream>
#include <vector>
using namespace std;
void f(int &x,int &y){
    y=10;
    x=11;
}
vector<int> f(){
    vector<int>tab;
    tab.push_back(10);
    tab.push_back(11);
    return tab;
}
int main(){
    int x,y;
    f(x,y);
    cout<<x<<" "<<y<<"\n\n";
    vector<int>tab=f();
    for(int i=0;i<tab.size();i++)
        cout<<tab[i]<<" ";
    return 0;
}
0

No tak ale nie wiem jak coś takiego zaimplementować do swojego programu bo tu mi już podałeś jakąś gotową klasę wektor a ja musze napisać swoją własną bo czegoś takiego jeszcze nie mieliśmy ;d wciąż myślę jak wyłuskać z tej mojej klasy te 2 współrzędne przy użyciu referencji.

Pozdrawiam

1

Jeśli chcesz wytrzasnąć z funkcji coś przez referencję, to najlepiej zrobić to dokładnie tak, jak wygląda pierwsza funkcja w ostatnim poście kopernika.

Z kolei jeśli potrzebujesz zwrócić tylko 2 zmienne, to tutaj jest analogiczny sposób przekazania tych wartości jak w... drugiej funkcji u kopernika, z tym że zamiast vectora można użyć wbudowanej struktury pair.

#include <iostream>
using namespace std;

pair<int,int> f()
{
	return make_pair(12,11);
}

int main()
{
	pair<int,int> p;
	p=f();
	cout << p.first << ", " << p.second;
};
0

O to co mi napisałeś nawet jest dla mnie zrozumiale O.o ale coś mnie dzisiaj rano natchnęło i podszedłem do problemu troche w inny sposób:

 // vectory.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>

using namespace std;

class WEKTOR
{
private: // wspolrzedne wektorow W1 i W2
	float wsp_x1;
	float wsp_y1;
	float wsp_x2;
	float wsp_y2;
	///////////////////////////////////////

public: 

	void ustaw_w1(int x1, int y1); // ustawianie wspl x-owych
	void ustaw_w2(int x2, int y2); // ustawianie wspl y-owych
	void wyswietl_wspolrzedne_w1(); // wyswietlanie wspolrzednych wektora w1
	void wyswietl_wspolrzedne_w2(); // wyswietlanie wspolrzednych wektora w2

	// funkcje zaprzyjaznione do wykonywania obliczen
	friend WEKTOR suma(WEKTOR a, WEKTOR b);
	friend WEKTOR roznica(WEKTOR a, WEKTOR b);
	friend WEKTOR iloczyn(WEKTOR a, WEKTOR b);
	friend WEKTOR przez_skalar(WEKTOR a, WEKTOR skalar);
	friend WEKTOR il_skalarny(WEKTOR a, WEKTOR b);
	friend WEKTOR il_wektorowy(WEKTOR a, WEKTOR b);
	//////////////////////////////////////////////////
};

void WEKTOR::ustaw_w1(int x1, int y1)
{
	wsp_x1 = x1;
	wsp_y1 = y1;
}

void WEKTOR::ustaw_w2(int x2, int y2)
{
	wsp_x2 = x2;
	wsp_y2 = y2;
}

void WEKTOR::wyswietl_wspolrzedne_w1()
{
	cout << "Wspolrzedne wektora W1[" << wsp_x1 << "," << wsp_y1 <<"]" << endl;
	
}

void WEKTOR::wyswietl_wspolrzedne_w2()
{
	cout << "Wspolrzedne wektora W2[" << wsp_x2 << "," << wsp_y2 <<"]" << endl;
}



WEKTOR suma(WEKTOR a, WEKTOR b)
{
	WEKTOR tymczasowy; // tymczasowy wektor do przechowywania wyniku

	tymczasowy.wsp_x1=a.wsp_x1+b.wsp_x1;
	tymczasowy.wsp_x2=a.wsp_x2+b.wsp_x2;

	tymczasowy.wsp_y1=a.wsp_y1+b.wsp_y1;
	tymczasowy.wsp_y2=a.wsp_y2+b.wsp_y2;

	return tymczasowy;
}


int _tmain(int argc, _TCHAR* argv[])
{
	// tworzenie 2 obiektow klasy wektor
	WEKTOR w1;
	WEKTOR w2;
	///////////////////////////////////wspolrzedne
	int x1=0;
	int x2=0;
	int y1=0;
	int y2=0;
	/////////////////////////////////
	int opcja=0;

	cout << "DZIALANIA NA WEKTORACH" << endl;
	cout << "--------------------------------" << endl << endl;

	cout << "1 - aby dodac" << endl;
	cout << "2 - aby odjac" << endl;
	cout << "3 - aby pomnozyc przez skalar" << endl;
	cout << "4 - aby obliczyc iloczyn skalarny" << endl;
	cout << "5 - aby obliczyc iloczyn wektorowy" << endl;
	cout << "6 - aby wyjsc z programu" << endl;
	cout << "--------------------------------" << endl << endl;

	cout << "Co chcesz zrobic? : " << endl;
	cin >> opcja;

	switch(opcja)
	{
	case 1 : 
		{
			cout << "Podaj wspolrzedne wektora 1 : " << endl;
			cin >> x1 >> y1;
			w1.ustaw_w1(x1,y1);

			cout << "Podaj wspolrzedne wektora 2 : " << endl;
			cin >> x2 >> y2;
			w2.ustaw_w2(x2,y2);

			cout << endl;
			w1.wyswietl_wspolrzedne_w1();
			w2.wyswietl_wspolrzedne_w2();
		
		}
	case 2 : {}
	case 3 : {}
	case 4 : {}
	case 5 : {}
	case 6 : 
		{
			 exit(1);

		}



	}






	system("pause");
	return 0;
}






Tylko teraz myślę czemu wyswietla mi taki jakieś smieci :P

0

Nigdzie nie wstawiasz nic do obiektu w2, a potem nagle chcesz wyświetlić jego współrzędne...

0

Ok teraz smiga :) dzieki bo nie zauważyłem tego

// vectory.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>

using namespace std;

class WEKTOR
{
private: // wspolrzedne wektorow W1 i W2
	float wsp_x1;
	float wsp_y1;
	float wsp_x2;
	float wsp_y2;
	///////////////////////////////////////

public: 

	void ustaw_w1(int x1, int y1); // ustawianie wspl x-owych
	void ustaw_w2(int x2, int y2); // ustawianie wspl y-owych
	void wyswietl_wspolrzedne_w1(); // wyswietlanie wspolrzednych wektora w1
	void wyswietl_wspolrzedne_w2(); // wyswietlanie wspolrzednych wektora w2
	void wyswietl_koniec();

	// funkcje zaprzyjaznione do wykonywania obliczen
	friend WEKTOR suma(WEKTOR a, WEKTOR b);
	friend WEKTOR roznica(WEKTOR a, WEKTOR b);
	friend WEKTOR iloczyn(WEKTOR a, WEKTOR b);
	friend WEKTOR przez_skalar(WEKTOR a, WEKTOR skalar);
	friend WEKTOR il_skalarny(WEKTOR a, WEKTOR b);
	friend WEKTOR il_wektorowy(WEKTOR a, WEKTOR b);
	//////////////////////////////////////////////////
};

void WEKTOR::ustaw_w1(int x1, int y1)
{
	wsp_x1 = x1;
	wsp_y1 = y1;
}

void WEKTOR::ustaw_w2(int x2, int y2)
{
	wsp_x2 = x2;
	wsp_y2 = y2;
}

void WEKTOR::wyswietl_wspolrzedne_w1()
{
	cout << "Wspolrzedne wektora W1[" << wsp_x1 << "," << wsp_y1 <<"]" << endl;
	
}

void WEKTOR::wyswietl_wspolrzedne_w2()
{
	cout << "Wspolrzedne wektora W2[" << wsp_x2 << "," << wsp_y2 <<"]" << endl;
}

void WEKTOR::wyswietl_koniec()
{
	

}

WEKTOR suma(WEKTOR a, WEKTOR b)
{
	WEKTOR tymczasowy; // tymczasowy wektor do przechowywania wyniku

	tymczasowy.wsp_x1=a.wsp_x1+b.wsp_x1;
	tymczasowy.wsp_x2=a.wsp_x2+b.wsp_x2;

	tymczasowy.wsp_y1=a.wsp_y1+b.wsp_y1;
	tymczasowy.wsp_y2=a.wsp_y2+b.wsp_y2;

	return tymczasowy;
}


int _tmain(int argc, _TCHAR* argv[])
{
	// tworzenie 2 obiektow klasy wektor
	WEKTOR w1;
	WEKTOR w2;
	///////////////////////////////////wspolrzedne
	int x1=0;
	int x2=0;
	int y1=0;
	int y2=0;
	/////////////////////////////////
	int opcja=0;

	cout << "DZIALANIA NA WEKTORACH" << endl;
	cout << "--------------------------------" << endl << endl;

	cout << "1 - aby dodac" << endl;
	cout << "2 - aby odjac" << endl;
	cout << "3 - aby pomnozyc przez skalar" << endl;
	cout << "4 - aby obliczyc iloczyn skalarny" << endl;
	cout << "5 - aby obliczyc iloczyn wektorowy" << endl;
	cout << "6 - aby wyjsc z programu" << endl;
	cout << "--------------------------------" << endl << endl;

	cout << "Co chcesz zrobic? : " << endl;
	cin >> opcja;

	switch(opcja)
	{
	case 1 : 
		{
			cout << "A wiec chcesz dodac 2 wektory!" << endl << endl;

			cout << "Podaj wspolrzedne wektora 1 : " << endl;
			cin >> x1 >> y1;
			w1.ustaw_w1(x1,y1);

			cout << "Podaj wspolrzedne wektora 2 : " << endl;
			cin >> x2 >> y2;
			w2.ustaw_w2(x2,y2);

			cout << endl;
			cout << "Bedziesz dodawac 2 wektory o wspolrzednych: " << endl;
			w1.wyswietl_wspolrzedne_w1();
			w2.wyswietl_wspolrzedne_w2();
		
			

			WEKTOR wynikowy;
			wynikowy = suma(w1,w2);
			//cout << wynikowy;

			cin.ignore();
			cin.get();
		};
	case 2 : {}
	case 3 : {}
	case 4 : {}
	case 5 : {}
	case 6 : 
		{
			 exit(1);

		}



	}






	system("pause");
	return 0;
}



 
0

Jeszcze mam tu 1 problem :

 
    case 1 : 
                {
                        cout << "A wiec chcesz dodac 2 wektory!" << endl << endl;
 
                        cout << "Podaj wspolrzedne wektora 1 : " << endl;
                        cin >> x1 >> y1;
                        w1.ustaw_w1(x1,y1);
 
                        cout << "Podaj wspolrzedne wektora 2 : " << endl;
                        cin >> x2 >> y2;
                        w2.ustaw_w2(x2,y2);
 
                        cout << endl;
                        cout << "Bedziesz dodawac 2 wektory o wspolrzednych: " << endl;
                        w1.wyswietl_wspolrzedne_w1();
                        w2.wyswietl_wspolrzedne_w2();
 
 
 
                        WEKTOR wynikowy;
                        wynikowy = suma(w1,w2);
                        //cout << wynikowy;
 
                        cin.ignore();
                        cin.get(); 

Co zrobić ,żeby wyświetlić ten obiekt o nazwie "wynikowy" ,jeśli nie da się strumieniem cout ?

Nie umiem tej sumy poprawnie wyświetlić bo znowu zwraca mi śmieci :(

Dopisałem sobie do tego kolejna funkcje na wyświetlanie:

void WEKTOR::wyswietl_koniec()
{
	cout << "Wspolrzedne nowego wektora to : [" << wsp_x1<< "," << wsp_y1 << "]" << endl;
	
	
} 
 case 1 : 
		{
			cout << "A wiec chcesz dodac 2 wektory!" << endl << endl;

			cout << "Podaj wspolrzedne wektora 1 : " << endl;
			cin >> x1 >> y1;
			w1.ustaw_w1(x1,y1);

			cout << "Podaj wspolrzedne wektora 2 : " << endl;
			cin >> x2 >> y2;
			w2.ustaw_w2(x2,y2);

			cout << endl;
			cout << "Bedziesz dodawac 2 wektory o wspolrzednych: " << endl;
			w1.wyswietl_wspolrzedne_w1();
			w2.wyswietl_wspolrzedne_w2();
		
			

			WEKTOR wynikowy;
			wynikowy = suma(w1,w2);
			wynikowy.wyswietl_koniec();

			cin.ignore();
			cin.get();
		};

No ale wywala mi zle liczby :/ co robie źle? Jest tu jakiś mądry człowiek który rzuci na to okiem?

0

Skoro robisz wektor, to sugerując się Twoją implementacją powinien on w sobie trzymać 4 różne wartości: odpowiednio po 2 współrzędne dla punktu początku i końca. Ty natomiast wczytujesz do wektora 2 wartości, i rozradowany próbujesz na nim operować. Już przemilczę fakt, że ustanawianie takich wartości powinno się realizować poprzez konstruktor...

A wypisywanie obiektu możesz zrobić poprzez przeładowanie operatora << dla strumieni wyjściowych, tak jak tutaj:

ostream& operator<<(ostream& o, const WEKTOR& w)
{
	//operacje w stylu
	o << "cośtam";
	return o;
}
0

Mi chodzi o to ,że mam 2 wektory

W1[x1,y1]
i
W2[x2,y2]

I podczas sumowania stworzylem nowy wektor którego wspolrzedne to suma współrzednych tyhc 2 wyrzej wymienionych wektorów Wynikowy[x1+x2,y1+y2].

tylko nie wiem jak to teraz wyswietlic... z tym operatorem nie umiem

0
Odyn napisał(a)

Mi chodzi o to ,że mam 2 wektory

W1[x1,y1]
i
W2[x2,y2]

To są punkty, nie wektory.

0

To jak mam to poprawić? Bo juz się w tym pogubiłem

0

Z tego co realizujesz sugeruję się, że chcesz robić wektor z punktem początku i końca, a następnie operować na nim.

Najpierw sprecyzuj do końca swój problem, i sposób w jaki chcesz go rozwiązać, bo jak na razie z tego co widzę to nikt do końca nie wie jak to ma wyglądać...

0

Ok przepraszam, postaram się to od początku wyjaśnić.

Więc piszę program który ma wykonywać podstawowe operacje na wektorach.
Ma to być klasa WEKTOR wraz z metodami.

I mój tok rozumowania jest taki:

1)Tworzę 2 wektory, każdy o 2 współrzędnych.
2)Proszę użytkownika o podanie tych współrzędnych z klawiatury.
3)Wyświetlam te współrzędne
4)Następnie chce np w funkcji suma zsumować x-owe współrzędne i y-owe współrzędne i zapisać je do nowego wektora
5)Na końcu chcę ten wektor wyświetlić.

I tak z każdą operacją.

Po prostu teraz zatrzymałem się na etapie wyświetlania tego obiektu który posiada (teoretycznie powinien posiadać) współrzędne nowego wektora.
Z tym ,że zamiast poprawnie sumować współrzędne tych 2 wektorów to wywala mi jakieś dziwne liczby typu [234334,34554654] itp

PS. bo wiem ,że można by było również wpierw policzyć długość każdego wektora i potem go zsumować ale ja to chce na współrzędnych zrobić

sorki ,że Ci tak głowę zawracam bo ta obiektowość daje mi popalić :P

0

Jeśli wektor ma mieć dwie współrzędne, to rozumiem że są to współrzędne początku i końca. To co wyżej próbowałeś tworzyć, to były "wektory" gdzie jednemu określałeś tylko współrzędne początku, a drugiemu tylko współrzędne końca. CZYLI zarówno współrzędne końca pierwszego, jak i współrzędne początku drugiego były śmieciami. Albo wszystko zeruj w domyślnym konstruktorze, albo rób to explicite gdzie indziej.

0

Ale czemu? Skoro stworzyłem 4 zmienne : x1,x2,y1,y2 które stanowią poszczególne punkty wektorów.
Dla 1 wektora przypisalem -> x1 i y1
A dla 2 wektora -> x2 i y2

Po czym poznajesz ,że jeden wektor jest inicjowany od początku a drugi od końca?

0

Ponieważ dla mnie to jedyne logiczne uzasadnienie, dla którego masz 2 funkcje:
ustaw_w1
i
ustaw_w2.

1

Dobra nie zabieram już Twojego cennego czasu. Za bardzo tu namotałem i przestało to być dla mnie czytelne. Ale dziękuje za cierpliwość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1