Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2009, 14:38   #1
Наташенька
Пользователь
 
Аватар для Наташенька
 
Регистрация: 20.12.2008
Сообщений: 26
По умолчанию Классы. Реализация понятия вектора в трёхмерном пространстве.

Задача:написать функции умножения вектора на число
(скаляр), функцию сложения двух векторов, функцию скалярного произведения и функцию векторного произведения двух векторов.


Код:
Код:
#include<iostream>
#include<cmath>
#include <cstring>
using namespace std;
class Vektor 
{
private:
	double x, y, z;
public:
	Vektor (double a=0, double b=0, double c=0)
	{x=a;
	y=b;
	z=c;}
void main ();

double get_x () 
{return x;}  
double get_y () 
{return y;}
double get_z () 
{return z;}

void print1(Vektor* p)//po adresy
{
cout<<"("<<p->x<<","<<p->y<<","<<p->z<<")"<<endl;
return;
}
void Sk_umn_V(Vektor *p, double a=1) //Функция скалярного умножения вектора на число
{
	(p->x)=(p->x)*a;
	(p->y)=(p->y)*a;
	(p->z)=(p->z)*a;
	cout<<"Umnozenie vektora na chislo "<<a<<endl;
	print1(p);
cout<<endl;
	return;
}

void print2(const Vektor& V)//po ccylke
{
	cout<<"("<<V.x<<","<<V.y<<","<<V.z<<")"<<endl;
	return ;
}
Vektor Summ_2V (Vektor& v1, Vektor& v2) //Функция суммы двух векторов
{
     
	Vektor R;
	R.x=(v1.x)+(v2.x);
	R.y=(v1.y)+(v2.y);
	R.z=(v1.z)+(v2.z);
	cout<<"Summa dvuh vektorov:"<<endl;
	//v3.print2(v3);
cout<<endl;
	return R;
	}

void print3(Vektor V)//po kopii objyecta
{cout<<"("<<V.x<<","<<V.y<<","<<V.z<<")"<<endl;
return;
}

 void Sk_umn_2V (Vektor v1, Vektor v2) //Функция скалярного произведения двух векторов
{
	double S;
	S=v1.x*v2.x+v1.y*v2.y+v1.z*v2.z;
	cout<<"Skalyarnoe umnozenie vektora v1 i v2 :"<<endl<<S<<endl;
cout<<endl;
	return;
}

void V_umn_2V (Vektor v1, Vektor v2)  //Функция векторного произведения двух векторов
{
	Vektor v3;
	v3.x=v1.y*v2.z-v1.z*v2.y;
	v3.y=v1.x*v2.z-v1.z*v2.x;
	v3.z=v1.x*v2.y-v1.y*v2.x;
	cout<<"Vektornoe umnozenie:"<<endl;
	
	print3(v3);
cout<<endl;
	return;
}

};

void main ()
{

	Vektor v1 (1.2, 2, -3.5);
	Vektor v2 (4.2, -5, 6.5);
	Vektor v3 ;//(-7, 4, 5);
	Vektor R=R.Summ_2V(v1, v2);
   

	cout<<"Koordinaty vektorov:"<<endl;
	v1.print1(&v1);//по адресу
	v2.print2(v2);//по ссылке
	v3.print3(v3);//по копии объекта
	
cout<<endl;
//cout<<v1.get_x()<<endl;
v3.Summ_2V (v1,v2);
R.print2(R);
//v2.Sk_umn_2V (v1, v2);
//v3.V_umn_2V (v1,v2);
//double A;
//A=12.5;
//v1.Sk_umn_V(&v1,A);
return;
}
Помогите ответить на вопрос: как сделать так, чтобы в строке
Vektor R=R.Summ_2V(v1, v2);
использовалось не три параметра (R, v1, v2), а только v1 и v2?

Последний раз редактировалось MaTBeu; 24.04.2009 в 22:52.
Наташенька вне форума Ответить с цитированием
Старый 24.04.2009, 15:18   #2
Lex_IV
Новичок
Джуниор
 
Регистрация: 24.04.2009
Сообщений: 1
По умолчанию

Вопрос поставлен не корректно. В строке
Vektor R=R.Summ_2V(v1, v2);
есть один объект класса Vektor, и функция этого класса с двумя параметрами(v1, v2). Что конкретно требуется изменить, я честно говоря, не понял.
Lex_IV вне форума Ответить с цитированием
Старый 24.04.2009, 15:24   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Вынести эту функцию из класса и объявить её в классе friend'ом, т.е. товарищем
pu4koff вне форума Ответить с цитированием
Старый 24.04.2009, 15:34   #4
Наташенька
Пользователь
 
Аватар для Наташенька
 
Регистрация: 20.12.2008
Сообщений: 26
По умолчанию

Вобщем в функции Vektor Summ_2V (Vektor& v1, Vektor& v2) закрыли печать v3.print2(v3); Надо сделать так, чтобы R печатался в void main
Наташенька вне форума Ответить с цитированием
Старый 24.04.2009, 15:51   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Теперь ниче не понял. Надо, чтобы в main было: vector R = Summ_2V(v1, v2); или чтобы в Summ_2V не создавать локальную переменную R или еще чего?)
pu4koff вне форума Ответить с цитированием
Старый 24.04.2009, 18:05   #6
Наташенька
Пользователь
 
Аватар для Наташенька
 
Регистрация: 20.12.2008
Сообщений: 26
По умолчанию

Как я поняла при присваивании Vektor R=... нужно передать объекту R только два параметра v1 и v2 Может надо по ссылке Vektor R присвоить R из функции суммы Или можно вообще обратиться без присваивания???
Когда в Summ_2V стояла печать было всё понятно!
Наташенька вне форума Ответить с цитированием
Старый 28.04.2009, 10:21   #7
Наташенька
Пользователь
 
Аватар для Наташенька
 
Регистрация: 20.12.2008
Сообщений: 26
По умолчанию

Короче, надо было сделать так:

Код:
Код:
void print2()
{
cout<<"("<<x<<","<<y<<","<<z<<")"<<endl;
}
void Summ_2V (Vektor v1, Vektor v2)
{
x=(v1.x)+(v2.x);
y=(v1.y)+(v2.y);
z=(v1.z)+(v2.z);
}
На примере функций суммы и печати, определённых в классе. В void main пишем:

Код:
Код:
void main ()
{
Vektor R;
R.Summ_2V(v1,v2);
R.print2();
return;}
Т. о. можно воспользоваться ещё одним способом передачи объектов в функцию

Последний раз редактировалось MaTBeu; 28.04.2009 в 21:08.
Наташенька вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что можете посоветовать для более глубокого понятия и изучения Visual C++? Dmitriy_ZDO Visual C++ 1 04.09.2008 13:33
Звук в пространстве. Манжосов Денис :) Помощь студентам 1 02.06.2008 22:39
Без понятия ListBox ! Volkogriz Общие вопросы Delphi 9 31.12.2007 14:28
Прямая в пространстве Neuros1s Общие вопросы Delphi 12 29.06.2007 00:06