0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
1

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

25.03.2008, 14:46. Показов 5537. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Я новичок в изучении СИ, не могу разобраться как выполнить задачу.
Вариант следующий. Вектор в пятимерном евклидовом пространстве задается пятеркой своих координат. Реализовать:
1. сложение (вычитание) векторов;
2. скалярное произведение векторов;
3. векторное произведение векторов (операция %);
4. умножение вектора на скаляр.



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




C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#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();
}
0
25.03.2008, 14:46
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2008, 14:46
Ответы с готовыми решениями:

Расставить приоритеты операций и вычислить значение заданного выражения (Помогите с задачей)
Расставить приоритеты операций и вычислить значение заданного выражения, используя форматы машинного представления данных и правила...

Помогите пожалуйста с задачей по BORLAND С++
Создать шаблон функции, выполгяющий сортировку слиянием (Метод Фон Неймана) в массиве. Протестировать шаблон для массивов с элементами...

Помогите пожалуйста с простой задачей
&quot;Составить программу для упорядочения в порядке возрастания элементов однонаправленного списка&quot; Видела уже подобную тему на...

11
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.03.2008, 15:34 2
а ты теоретически освежи-ка как делаются руками эти операции, тогда и думать будем, как тебе помочь...
0
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
25.03.2008, 19:26  [ТС] 3
Так. Ну начнем с того, что облазил все конспекты и учебники, нигде не нашел нахождение векторного произведения в 5-ти мерном пространстве. После недолгих поисков гугла нашел следующее:
Векторное произведение. Введем еще одну операцию над векторами. Эта операция существует только в трехмерном векторном пространстве, на плоскости она не определена.
Значит третий пункт отпадает.
0
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
25.03.2008, 19:31  [ТС] 4
Код
УУмножениевектора на скаляр.

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

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

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

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

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

Три вектора называются компланарными, если их можно уложить на одну плоскость.
0
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
26.03.2008, 09:27 5
тогда вопрос, когда это return стал возвращать значения через запятую...
0
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
26.03.2008, 14:09  [ТС] 6
))) Ну это я так... Это можно не писать в принципе И так S присваивается...
Нет никаких идей как 4-ый пункт выполнить и до ума довести программу?
0
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
26.03.2008, 14:43 7
ну если это скалярное умножение, то на входе должен быть int, который перемножается на каждый элемент вектора, и потом возвращается новый вектор... если я правильно теорию помню...
0
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), вот только каким это образом в моей программе описать и сделать чтоб работало? Че-то я уже много всего перебробывал, одни ошибочки
0
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
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;
}
0
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
28.03.2008, 12:17  [ТС] 10
Спасибо!
0
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
28.03.2008, 12:19 11
так работает али как?
0
0 / 0 / 0
Регистрация: 25.03.2008
Сообщений: 22
08.04.2008, 18:52  [ТС] 12
Да, идея эта работает, переписал под себя только, вот что получилось...
Большое спасибо!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
using namespace std;
class vect {
public:
  vect(int=0,int=0,int=0,int=0,int=0);
  vect operator+(const vect &);
  vect operator-(const vect &);
  vect operator*(const int &);
  int  operator*(const vect &);
  int  operator%(const vect & );
  void print();
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 &opr2)
{
  vect sum;
  sum.a = a + opr2.a;
  sum.b = b + opr2.b;
  sum.c = c + opr2.c;
  sum.d = d + opr2.d;
  sum.e = e + opr2.e;
  return sum;
}
//Предопределение операции вычитания:
vect vect::operator-(const vect &opr2)
{
  vect diff;
  diff.a = a - opr2.a;
  diff.b = b - opr2.b;
  diff.c = c - opr2.c;
  diff.d = d - opr2.d;
  diff.e = e - opr2.e;
  return diff;
}
//Предопределение операции умножения:
vect vect::operator*(const int &opr2)
{
  vect proizv;
  proizv.a = a * opr2;
  proizv.b = b * opr2;
  proizv.c = c * opr2;
  proizv.d = d * opr2;
  proizv.e = e * opr2;
  return proizv;
}
//Скалярное произведение векторов:
int vect::operator*(const vect &opr2)
{
  int s=a*opr2.a+b*opr2.b+c*opr2.c+d*opr2.d+e*opr2.e;
  returns;
}
//Векторное произведение векторов:
int  vect::operator%(const vect &opr2 )
{
  float x,y,z,p;
  x=sqrt(a*a+b*b+c*c+d*d+e*e);
  y=sqrt(opr2.a*opr2.a+opr2.b*opr2.b+opr2.c*opr2.c+opr2.d*opr2.d+opr2.e*opr2.e);
  z=acos((a*opr2.a+b*opr2.b+c*opr2.c+d*opr2.d+e*opr2.e)/(x*y));
  p=x*y*z ;
  return p;
}
//Функция вывода:
void vect::print()
{
  cout<<'('<<a<<", "<<b<<", "<<c<<", "<<d<<", "<<e<<')';
}
//Основная программа:
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  cout<<"-------------------------\n A-27. Лаба 2. Вариант 1. \n-------------------------\n\n";
  vect x(5,6,7,8,9),y(4,3,2,1,7),z;
  int scl,t;
  float v;
  cout<<"\n ВекторА:   ";
  x.print();
  cout<<"\n Вектор В :   ";
  y.print();
  z = x + y;
  cout<<"\n Сложение:   ";
  z.print();
  z = x - y;
  cout<<"\n Вычитание:  ";
  z.print();
  t = x * y;
cout<<"\nСкалярное произведение:   " <<t;
v = x % y;
cout<<"\nВекторное произведение:   " <<v;
cout<<"\n Введите скаляр: ";
  cin>>scl;
  z = x * scl;
cout<<" Умножение вектора А на скаляр:   ";
z.print();
  z = y * scl;
cout<<"\nУмножение вектора В на скаляр:   ";
z.print();
  getch();
  return 0;
}
Только с свойствах окна шрифт на Lucida Console нужно поменять, чтоб русский шрифт нормально отображался.
ПС: Код для Билдера, на остальном пока не умею
0
08.04.2008, 18:52
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2008, 18:52
Помогаю со студенческими работами здесь

Помогите с задачей, пожалуйста! (файлы Си++)
Ну вот. Практикум по Си++. :read: Надо выполнить следующую задачу: Задание: Написать программу, которая читает текстовый файл и...

Помогите пожалуйста с задачей.
Написать программу которая выводит значение функции y=tgx/2.Вывести значение функции на экран с шагом h на отрезке .Значение функции...

Помогите пожалуйста с задачей на массив
Дан массив целых чисел. Получить упорядоченную по возрастанию по-следовательность из чисел, которые встречаются в данном массиве более...

Помогите пожалуйста разобраться с задачей
Что за метод применяется в этой задаче, я ума не приложу, под метод отрицательных масс не подходит, да и под метод симметрии тоже, может...

Помогите пожалуйста с задачей java
Помогите мне пожалуйста у меня вот такое задание! Из положительных елементов массива PQ содержащего елементов N Найти минимальный по...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Ошибка Docker "Got permission denied while trying to connect to the Docker daemon socket at"
hw_wired 14.02.2025
Разработка с использованием Docker может иногда преподносить неожиданные сюрпризы, и одним из самых распространенных камней преткновения становится ошибка с отказом в доступе к демону Docker. . . .
Ошибка "No 'Access-Control-Allow-Origin' header is present on the requested resource"
hw_wired 14.02.2025
При разработке современных веб-приложений нередко сталкиваешься с ошибкой "No 'Access-Control-Allow-Origin' header is present on the requested resource". Эта проблема возникает из-за политики. . .
Как закрыть порт в Linux
hw_wired 14.02.2025
Управление сетевыми портами в Linux - непростая, но важная задача для обеспечения безопасности системы. Каждый открытый порт - это потенциальная уязвимость, через которую злоумышленики могут. . .
Ошибка Angular "Can't bind to 'taskForm' since it isn't a known property of 'form'"
hw_wired 14.02.2025
При разработке веб-приложений на Angular можно столкнуться с ошибкой "Can't bind to '' since it isn't a known property of 'form'". Эта ошибка появляется в консоли браузера когда мы пытаемся. . .
Сообщение Git "Pulling without specifying how to reconcile divergent branches is discouraged"
hw_wired 14.02.2025
При работе с системой контроля версий Git многие разработчики сталкиваются с предупреждающим сообщением "Pulling without specifying how to reconcile divergent branches is discouraged". Это. . .
Как настроить количество пробелов в отступах табов в Visual Studio Code
hw_wired 14.02.2025
Visual Studio Code предоставляет несколько гибких способов настройки табуляции, каждый из которых имеет свои преимущества. Самый простой и наглядный метод - через графический интерфейс настроек, где. . .
Что означает знак восклицания в TypeScript
hw_wired 14.02.2025
TypeScript - удивительный язык программирования, который предоставляет множество возможностей для работы с типами данных. Особый интерес вызывает оператор утверждения ненулевого значения, который. . .
Как свернуть/скрыть секции кода в Visual Studio Code
hw_wired 14.02.2025
Ежедневно мы работам с файлами, содержащими сотни и тысячи строк кода. Навигация по такому объему становится настоящим испытанием, особенно когда нужно быстро найти нужный метод или переменную. . . .
Автоматическое создание файла requirements.tx­t в Python
hw_wired 14.02.2025
Дружелюбная среда для разработки на Python, один из самых широко используемых языков программирования, состоит не только из самого кода, но и целого ряда важных компонентов. И если вы когда-нибудь. . .
Передача переменных окружения в контейнер Docker
hw_wired 14.02.2025
При работе с Docker контейнерами возникает необходимость передать различные настройки и конфигурационные параметры - от строк подключения к базам данных до API ключей. И хотя можно жестко прописать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru