Форум программистов, компьютерный форум CyberForum.ru

Помогите с задачей пожалуйста. Перегрузка операций. - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
SL1M
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
25.03.2008, 14:46     Помогите с задачей пожалуйста. Перегрузка операций. #1
Всем привет! Я новичок в изучении СИ, не могу разобраться как выполнить задачу.
Вариант следующий. Вектор в пятимерном евклидовом пространстве задается пятеркой своих координат. Реализовать:
1. сложение (вычитание) векторов;
2. скалярное произведение векторов;
3. векторное произведение векторов (операция %);
4. умножение вектора на скаляр.



Первые два пунка я вроде еле как выполнил. Да и второй пункт выполнил как-то неправильно, кажется. Хотя в принципе работает... Как реализовать остальное?




Код
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
int s;
class vect {
public:
   vect(int=0,int=0,int=0,int=0,int=0); //Конструктор
   vect operator+(const vect &) const;   //Сложение
   vect operator-(const vect &) const;//Вычитание
   vect operator*(const vect &); //Умножение
   void print() const;//Печать
   private:
   int a,b,c,d,e;
};

//Конструктор:
vect::vect(int a1,int b1,int c1,int d1,int e1)
{
   a = a1;
   b = b1;
   c = c1;
   d = d1;
   e = e1;
}

//Перегруженная операция сложения:
vect vect::operator+(const vect &operand2) const
{
   vect sum;
   sum.a = a + operand2.a;
   sum.b = b + operand2.b;
   sum.c = c + operand2.c;
   sum.d = d + operand2.d;
   sum.e = e + operand2.e;
   return sum;
}

//Перегруженная операция вычитания:
vect vect::operator-(const vect &operand2) const
{
   vect diff;
   diff.a = a - operand2.a;
   diff.b = b - operand2.b;
   diff.c = c - operand2.c;
   diff.d = d - operand2.d;
   diff.e = e - operand2.e;
   return diff;
}

//Перегруженная операция умножения:
vect vect::operator*(const vect &operand2)
{
   vect proizv;
   proizv.a = a * operand2.a;
   proizv.b = b * operand2.b;
   proizv.c = c * operand2.c;
   proizv.d = d * operand2.d;
   proizv.e = e * operand2.e;
   s = proizv.a + proizv.b + proizv.c + proizv.d + proizv.e;
   return proizv,s;
}

//Печать объекта в виде (a,b,c,d,e)
void vect::print() const
{
   cout<<'('<<a<<", "<<b<<", "<<c<<", "<<d<<", "<<e<<')';
}


void main()
{
   vect x(5,6,7,8,9),y(4,3,2,1,7);
   vect z;
   cout<<"\n Vector 1:   ";
   x.print();
   cout<<"\n Vector 2:   ";
   y.print();

   z = x + y;
   cout<<"\n Slozhenie:   ";
   z.print();

   z = x - y;
   cout<<"\n Vichitanie:  ";
   z.print();

   z = x * y;
   cout<<"\n Scalar:   "<<s;
   getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2008, 14:46     Помогите с задачей пожалуйста. Перегрузка операций.
Посмотрите здесь:

C++ Помогите пожалуйста с задачей по BORLAND С++
Расставить приоритеты операций и вычислить значение заданного выражения (Помогите с задачей) C++
C++ Помогите с задачей, пожалуйста! (файлы Си++)
Помогите пожалуйста с легкой задачей на C++. C++
Помогите пожалуйста с задачей c++ C++
C++ Помогите пожалуйста с задачей
C++ Перегрузка операций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8506 / 2173 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 1
25.03.2008, 15:34     Помогите с задачей пожалуйста. Перегрузка операций. #2
а ты теоретически освежи-ка как делаются руками эти операции, тогда и думать будем, как тебе помочь...
SL1M
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
25.03.2008, 19:26  [ТС]     Помогите с задачей пожалуйста. Перегрузка операций. #3
Так. Ну начнем с того, что облазил все конспекты и учебники, нигде не нашел нахождение векторного произведения в 5-ти мерном пространстве. После недолгих поисков гугла нашел следующее:
Векторное произведение. Введем еще одну операцию над векторами. Эта операция существует только в трехмерном векторном пространстве, на плоскости она не определена.
Значит третий пункт отпадает.
SL1M
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
25.03.2008, 19:31  [ТС]     Помогите с задачей пожалуйста. Перегрузка операций. #4
Код
УУмножениевектора на скаляр.

λ-число (скаляр)

ā - вектор λā=с

Произведением λā называется вектор, длинна которого равна |ā|·|λ|, а направление такое же, как и у вектора ā если λ больше 0, и противоположное, если λ меньше 0.

Векторы называются коллиниарными, если они лежат на совпадающих прямых.

Если векторы ā и в коллиниарны (ā№0; в№0), то они пропорциональны, т.е. существует такое положительное или отрицательное число l, что а=lв.

Три вектора называются компланарными, если их можно уложить на одну плоскость.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8506 / 2173 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 1
26.03.2008, 09:27     Помогите с задачей пожалуйста. Перегрузка операций. #5
тогда вопрос, когда это return стал возвращать значения через запятую...
SL1M
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
26.03.2008, 14:09  [ТС]     Помогите с задачей пожалуйста. Перегрузка операций. #6
))) Ну это я так... Это можно не писать в принципе И так S присваивается...
Нет никаких идей как 4-ый пункт выполнить и до ума довести программу?
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8506 / 2173 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 1
26.03.2008, 14:43     Помогите с задачей пожалуйста. Перегрузка операций. #7
ну если это скалярное умножение, то на входе должен быть int, который перемножается на каждый элемент вектора, и потом возвращается новый вектор... если я правильно теорию помню...
SL1M
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
26.03.2008, 16:55  [ТС]     Помогите с задачей пожалуйста. Перегрузка операций. #8
Скалярное произведение векторов A(x1,x2,x3,x4,x5...xn) и B(y1,y2,y3,y4,y5...xn) считается вроде
по формуле S=x1y1+x2y2+x3y3 + ... + xnyn

А ты описал вроде умножение скаляр на вектор (пункт 4), вот только каким это образом в моей программе описать и сделать чтоб работало? Че-то я уже много всего перебробывал, одни ошибочки
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8506 / 2173 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 1
27.03.2008, 10:34     Помогите с задачей пожалуйста. Перегрузка операций. #9
вот что у меня вышло, хотя твой код рабочий был... я просто одну операцию перегрузил... или я что-то не понял...
Код
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#pragma hdrstop
#pragma argsused
class vect {
public:
   vect(int=0,int=0,int=0,int=0,int=0);   
   vect operator+(const vect &) const;   
   vect operator-(const vect &) const;
   vect operator*(const vect &); 
   vect operator*(const int &); 
   void print() const;
   private:
   int a,b,c,d,e;
};
vect::vect(int a1,int b1,int c1,int d1,int e1)
{
   a = a1;
   b = b1;
   c = c1;
   d = d1;
   e = e1;
}
vect vect::operator+(const vect &operand2) const
{
   vect sum;
   sum.a = a + operand2.a;
   sum.b = b + operand2.b;
   sum.c = c + operand2.c;
   sum.d = d + operand2.d;
   sum.e = e + operand2.e;
   return sum;
}
vect vect::operator-(const vect &operand2) const
{
   vect diff;
   diff.a = a - operand2.a;
   diff.b = b - operand2.b;
   diff.c = c - operand2.c;
   diff.d = d - operand2.d;
   diff.e = e - operand2.e;
   return diff;
}
vect vect::operator*(const vect &operand2)
{
   vect proizv;
   proizv.a = a * operand2.a;
   proizv.b = b * operand2.b;
   proizv.c = c * operand2.c;
   proizv.d = d * operand2.d;
   proizv.e = e * operand2.e;
   return proizv;
}
vect vect::operator*(const int &operand2)
{
   vect proizv;
   proizv.a = a * operand2;
   proizv.b = b * operand2;
   proizv.c = c * operand2;
   proizv.d = d * operand2;
   proizv.e = e * operand2;
   return proizv;
}
void vect::print() const
{
   cout<<'('<<a<<", "<<b<<", "<<c<<", "<<d<<", "<<e<<')';
}
int main(int argc, char* argv[])
{
   vect x(5,6,7,8,9),y(4,3,2,1,7);
   vect z;
   int scl = 8;
   cout<<"\n Vector 1:   ";
   x.print();
   cout<<"\n Vector 2:   ";
   y.print();
   z = x + y;
   cout<<"\n Slozhenie:   ";
   z.print();
   z = x - y;
   cout<<"\n Vichitanie:  ";
   z.print();
   z = x * y;
   cout<<"\n Vector*Vector:   ";
   z.print();
   z = x * scl;
   cout<<"\n Scalar1:   ";
   z.print();
   z = y * scl;
   cout<<"\n Scalar1:   ";
   z.print();
   getch();
   return 0;
}
SL1M
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
28.03.2008, 12:17  [ТС]     Помогите с задачей пожалуйста. Перегрузка операций. #10
Спасибо!
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8506 / 2173 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 1
28.03.2008, 12:19     Помогите с задачей пожалуйста. Перегрузка операций. #11
так работает али как?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2008, 18:52     Помогите с задачей пожалуйста. Перегрузка операций.
Еще ссылки по теме:

Помогите пожалуйста с простой задачей C++
ПЕРЕГРУЗКА ОПЕРАЦИЙ C++
C++ Перегрузка операций
Перегрузка операций C++
C++ Перегрузка операций

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SL1M
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
08.04.2008, 18:52  [ТС]     Помогите с задачей пожалуйста. Перегрузка операций. #12
Да, идея эта работает, переписал под себя только, вот что получилось...
Большое спасибо!

Код
[FONT=Aharoni][FONT=Aharoni]#include <vcl.h>[/FONT]
[FONT=Aharoni]#include <conio.h>[/FONT]
[FONT=Aharoni]#include <iostream.h>[/FONT]
[FONT=Aharoni]#include <math.h>[/FONT]
[FONT=Aharoni]#pragma hdrstop[/FONT]
[FONT=Aharoni]#pragma argsused[/FONT]
[FONT=Aharoni]using namespace std;[/FONT]
[FONT=Aharoni]class vect {[/FONT]
[FONT=Aharoni]public:[/FONT]
[FONT=Aharoni]  vect(int=0,int=0,int=0,int=0,int=0);[/FONT]
[FONT=Aharoni]  vect operator+(const vect &);[/FONT]
[FONT=Aharoni]  vect operator-(const vect &);[/FONT]
[FONT=Aharoni]  vect operator*(const int &);[/FONT]
[FONT=Aharoni]  int  operator*(const vect &);[/FONT]
[FONT=Aharoni]  int  operator%(const vect & );[/FONT]
[FONT=Aharoni]  void print();[/FONT]
[FONT=Aharoni]private:[/FONT]
[FONT=Aharoni]  int a,b,c,d,e;[/FONT]
[FONT=Aharoni]};[/FONT]
[FONT=Aharoni]//[/FONT][FONT=Aharoni]Конструктор[/FONT][FONT=Aharoni]:[/FONT]
[FONT=Aharoni]vect::vect(int a1,int b1,int c1,int d1,int e1)[/FONT]
[FONT=Aharoni]{[/FONT]
[FONT=Aharoni]  a = a1;[/FONT]
[FONT=Aharoni]  b = b1;[/FONT]
[FONT=Aharoni]  c = c1;[/FONT]
[FONT=Aharoni]  d = d1;[/FONT]
[FONT=Aharoni]  e = e1;[/FONT]
[FONT=Aharoni]}[/FONT]
[FONT=Aharoni]//Предопределение операции сложения:[/FONT]
[FONT=Aharoni]vect vect::operator+(const vect &opr2)[/FONT]
[FONT=Aharoni]{[/FONT]
[FONT=Aharoni]  vect sum;[/FONT]
[FONT=Aharoni]  sum.a = a + opr2.a;[/FONT]
[FONT=Aharoni]  sum.b = b + opr2.b;[/FONT]
[FONT=Aharoni]  sum.c = c + opr2.c;[/FONT]
[FONT=Aharoni]  sum.d = d + opr2.d;[/FONT]
[FONT=Aharoni]  sum.e = e + opr2.e;[/FONT]
[FONT=Aharoni]  return sum;[/FONT]
[FONT=Aharoni]}[/FONT]
[FONT=Aharoni]//Предопределение операции вычитания:[/FONT]
[FONT=Aharoni]vect vect::operator-(const vect &opr2)[/FONT]
[FONT=Aharoni]{[/FONT]
[FONT=Aharoni]  vect diff;[/FONT]
[FONT=Aharoni]  diff.a = a - opr2.a;[/FONT]
[FONT=Aharoni]  diff.b = b - opr2.b;[/FONT]
[FONT=Aharoni]  diff.c = c - opr2.c;[/FONT]
[FONT=Aharoni]  diff.d = d - opr2.d;[/FONT]
[FONT=Aharoni]  diff.e = e - opr2.e;[/FONT]
[FONT=Aharoni]  return diff;[/FONT]
[FONT=Aharoni]}[/FONT]
[FONT=Aharoni]//Предопределение операции умножения:[/FONT]
[FONT=Aharoni]vect vect::operator*(const int &opr2)[/FONT]
[FONT=Aharoni]{[/FONT]
[FONT=Aharoni]  vect proizv;[/FONT]
[FONT=Aharoni]  proizv.a = a * opr2;[/FONT]
[FONT=Aharoni]  proizv.b = b * opr2;[/FONT]
[FONT=Aharoni]  proizv.c = c * opr2;[/FONT]
[FONT=Aharoni]  proizv.d = d * opr2;[/FONT]
[FONT=Aharoni]  proizv.e = e * opr2;[/FONT]
[FONT=Aharoni]  return proizv;[/FONT]
[FONT=Aharoni]}[/FONT]
[FONT=Aharoni]//[/FONT][FONT=Aharoni]Скалярное произведение векторов:[/FONT]
[FONT=Aharoni]int vect::operator*(const vect &opr2)[/FONT]
[FONT=Aharoni]{[/FONT]
[FONT=Aharoni]  int s=a*opr2.a+b*opr2.b+c*opr2.c+d*opr2.d+e*opr2.e;[/FONT]
[FONT=Aharoni]  return[/FONT][FONT=Aharoni]s[/FONT][FONT=Aharoni];[/FONT]
[FONT=Aharoni]}[/FONT]
[FONT=Aharoni]//Векторное произведение векторов[/FONT][FONT=Aharoni]:[/FONT]
[FONT=Aharoni]int  vect::operator%(const vect &opr2 )[/FONT]
[FONT=Aharoni]{[/FONT]
[FONT=Aharoni]  float x,y,z,p;[/FONT]
[FONT=Aharoni]  x=sqrt(a*a+b*b+c*c+d*d+e*e);[/FONT]
[FONT=Aharoni]  y=sqrt(opr2.a*opr2.a+opr2.b*opr2.b+opr2.c*opr2.c+opr2.d*opr2.d+opr2.e*opr2.e);[/FONT]
[FONT=Aharoni]  z=acos((a*opr2.a+b*opr2.b+c*opr2.c+d*opr2.d+e*opr2.e)/(x*y));[/FONT]
[FONT=Aharoni]  p=x*y*z ;[/FONT]
[FONT=Aharoni]  return p;[/FONT]
[FONT=Aharoni]}[/FONT]
[FONT=Aharoni]//Функция вывода:[/FONT]
[FONT=Aharoni]void vect::print()[/FONT]
[FONT=Aharoni]{[/FONT]
[FONT=Aharoni]  cout<<'('<<a<<", "<<b<<", "<<c<<", "<<d<<", "<<e<<')';[/FONT]
[FONT=Aharoni]}[/FONT]
[FONT=Aharoni]//[/FONT][FONT=Aharoni]Основная программа[/FONT][FONT=Aharoni]:[/FONT]
[FONT=Aharoni]int main()[/FONT]
[FONT=Aharoni]{[/FONT]
[FONT=Aharoni]  SetConsoleCP(1251);[/FONT]
[FONT=Aharoni]  SetConsoleOutputCP(1251);[/FONT]
[FONT=Aharoni]  cout<<"-------------------------\n A-27. [/FONT][FONT=Aharoni]Лаба[/FONT][FONT=Aharoni] 2.[/FONT][FONT=Aharoni] Вариант [/FONT][FONT=Aharoni]1. \n-------------------------\n\n";[/FONT]
[FONT=Aharoni]  vect x(5,6,7,8,9),y(4,3,2,1,7),z;[/FONT]
[FONT=Aharoni]  int scl,t;[/FONT]
[FONT=Aharoni]  float v;[/FONT]
[FONT=Aharoni]  cout<<"\n [/FONT][FONT=Aharoni]Вектор[/FONT][FONT=Aharoni]А[/FONT][FONT=Aharoni]:   ";[/FONT]
[FONT=Aharoni]  x.print();[/FONT]
[FONT=Aharoni]  cout<<"\n [/FONT][FONT=Aharoni]Вектор В [/FONT][FONT=Aharoni]:   ";[/FONT]
[FONT=Aharoni]  y.print();[/FONT]
[FONT=Aharoni]  z = x + y;[/FONT]
[FONT=Aharoni]  cout<<"\n [/FONT][FONT=Aharoni]Сложение[/FONT][FONT=Aharoni]:   ";[/FONT]
[FONT=Aharoni]  z.print();[/FONT]
[FONT=Aharoni]  z = x - y;[/FONT]
[FONT=Aharoni]  cout<<"\n [/FONT][FONT=Aharoni]Вычитание[/FONT][FONT=Aharoni]:  ";[/FONT]
[FONT=Aharoni]  z.print();[/FONT]
[FONT=Aharoni]  t = x * y;[/FONT]
[FONT=Aharoni]cout[/FONT][FONT=Aharoni]<<"\[/FONT][FONT=Aharoni]n[/FONT][FONT=Aharoni]Скалярное произведение:   " <<[/FONT][FONT=Aharoni]t[/FONT][FONT=Aharoni];[/FONT]
[FONT=Aharoni]v = x % y;[/FONT]
[FONT=Aharoni]cout[/FONT][FONT=Aharoni]<<"\[/FONT][FONT=Aharoni]n[/FONT][FONT=Aharoni]Векторное произведение:   " <<[/FONT][FONT=Aharoni]v[/FONT][FONT=Aharoni];[/FONT]
[FONT=Aharoni]cout<<"\n [/FONT][FONT=Aharoni]Введите скаляр[/FONT][FONT=Aharoni]: [/FONT][FONT=Aharoni]";[/FONT]
[FONT=Aharoni]  cin>>scl;[/FONT]
[FONT=Aharoni]  z = x * scl;[/FONT]
[FONT=Aharoni]cout[/FONT][FONT=Aharoni]<<" Умножение вектора А на скаляр:   ";[/FONT]
[FONT=Aharoni]z.print();[/FONT]
[FONT=Aharoni]  z = y * scl;[/FONT]
[FONT=Aharoni]cout[/FONT][FONT=Aharoni]<<"\[/FONT][FONT=Aharoni]n[/FONT][FONT=Aharoni]Умножение вектора В на скаляр:   ";[/FONT]
[FONT=Aharoni]z.print();[/FONT]
[FONT=Aharoni]  getch();[/FONT]
[FONT=Aharoni]  return 0;[/FONT]
[FONT=Aharoni]}[/FONT]
[/FONT]
Только с свойствах окна шрифт на Lucida Console нужно поменять, чтоб русский шрифт нормально отображался.
ПС: Код для Билдера, на остальном пока не умею
Yandex
Объявления
08.04.2008, 18:52     Помогите с задачей пожалуйста. Перегрузка операций.
Ответ Создать тему
Опции темы

Текущее время: 02:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru