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

Вектор и Массив - C++

Восстановить пароль Регистрация
 
chevee
2 / 2 / 1
Регистрация: 27.01.2011
Сообщений: 10
21.11.2012, 16:15     Вектор и Массив #1
Уважаемые! Пошел на курсы учиться С++, но из за завала на работе пропустил много занятий и теперь проблемы с пониманием материала. Если кому либо из Вас не составит трудностей в помощи с решением задач, буду весьма признателен.
Если можно, то распишите все с комментами.. мне нужно понять что там да как))
Спасибо!

Задача 1

Реализовать класс Vector. В классе должны быть реализованы 3 конструктора (по умолчанию, копирования, с параметром) и деструктор. Реализовать методы сложения (+), вычитания (-), скалярного умножения (*), умножения на коэффициент (*) и методы сравнивания(==, !=). Создать методы ввода и вывода вектора. Также необходимо реализовать метод присваивания (=). Реализовать метод расчета нормы вектора и метод нормирования.

Задача 2

Реализовать класс Array. В классе должны быть реализованы как минимум 3 конструкто-ра (по умолчанию, копирования, с параметром) и деструктор. Реализовать следующие мето-ды:
• Добавление в конец вектора (реализовать оператором +=);
• Добавление на i-ую позицию массива;
• Добавление в начало массива;
• Метод изменения длины массива;
• Метод изменения i-го элемента массива;
• Удаление последнего элемента массива;
• Удаление i-го элемента массива;
• Удаление первого элемента массива;
• Метод конкатенации двух массивов (реализовать оператором +=). Примечание: в данном случае результат заносятся в переменную, от которой был вызван метод, не в третью переменную!!!
• Реализовать методы ввода/вывода (операторами << и >>);
• Реализовать метод присваивания (=);
• Реализовать метод доступа к элементу массива (оператор []);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 10.11.2010
Сообщений: 132
21.11.2012, 16:44     Вектор и Массив #2
Посмотри на форуме, уже по-моему неоднократно встречались такие задания. Если не найдешь, вечером сяду напишу, и к утру выложу сюда. Еще возник вопрос, классы должны быть шаблонными или просто под один определенный тип?
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
21.11.2012, 16:45     Вектор и Массив #3
Врядли кто-то это будет просто так делать, банально писанины много. А тем более раз понять нужно. Советую любую книжку вменяемую для чайников.
Изучить нужно темы:
1. Основы создания классов(ну то есть просто как класс описать).
2. Функции.
3. Конструкторы.
4. Перегрузка операторов.
5. Указатели.
6. Связные списки.
7. Шаблоны, если полноценно делать.
Вообще эти примеры могут быть даже в некоторых книгах написаны.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2012, 16:49     Вектор и Массив #4
Цитата Сообщение от chevee Посмотреть сообщение
Задача 1
Реализовать класс Vector. В классе должны быть реализованы 3 конструктора (по умолчанию, копирования, с параметром) и деструктор. Реализовать методы сложения (+), вычитания (-), скалярного умножения (*), умножения на коэффициент (*) и методы сравнивания(==, !=). Создать методы ввода и вывода вектора. Также необходимо реализовать метод присваивания (=). Реализовать метод расчета нормы вектора и метод нормирования.
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
class Vector // заголовок декларации класса, слово "class" ключевое, говорит от том что дальше пойдёт имя класса
{// начало описания класса
 public:// "public:" говорит о том, что дальше пойдут общедоступные члены
  double x, y, z; // Поля класса для хранения компонентов вектора. Объявляются, как просыте переменные
 Vector () // Заголовок конструктора по умолчанию. Конструктор - функция вообще без типа, имя которой совпадает с именем класса. Пустые скобки указывают на умолчание
 {// Начало тела конструктора
  x=0.0;
  y=0.0;
  z=0.0;
 }// Конец тела конструктора
 Vector (Vector &copy) // Заголовок копирующего конструктора. Единственный параметр - объект самого описываемого класса говорит о том, что конструктор копирующий
 {// Начало тела конструктора
  x=copy.x;
  y=copy.y;
  z=copy.z;
 }// Конец тела конструктора
 Vector (double x, double y, double z) // Заголовок конструктора.
 {// Начало тела конструктора
  this->x=x; // так как существует параметр x, то x - параметр x, иначе это было бы поле x, this->x в любом случае - поле x
  y=copy.y;
  z=copy.z;
 }// Конец тела конструктора
 ~Vector() // Заголовок деструктора. Здесь явный деструктор не нужен, так как нет ни динамических членов, ни связанных с объектом данных, с которыми при удалении объекта что то надо делать, поэтому деструктору делать нечего и он будет пустым. Вообще без деструктора класса быть не может, если нет явного, то пустой деструктор создаётся неявно самим компилятором.
 {// Начало тела деструктора
 }// Конец тела деструктора
 Vector operatgor + (Vector right) // Заголовок оператора сложения
 {// Начало тела оператора сложения
  Vector result;
  result.x=x+right.x;
  result.y=y+right.y;
  result.z=z+right.z;
  return result;
 }// Конец тела оператора сложения
 Vector operatgor - (Vector right) // Заголовок оператора вычитания
 {// Начало тела оператора вычитания
  Vector result;
  result.x=x-right.x;
  result.y=y-right.y;
  result.z=z-right.z;
  return result;
 }// Конец тела оператора вычитания
 Vector operatgor * (Vector right) // Заголовок оператора умножения
 {// Начало тела оператора умножения
  Vector result;
  result.x=x*right.x;
  result.y=y*right.y;
  result.z=z*right.z;
  return result;
 }// Конец тела оператора умножения
 Vector operatgor = (Vector copy) // Заголовок оператора присваивания
 {// Начало тела оператора присваивания
  x=copy.x;
  y=copy.y;
  z=copy.z;
  return *this; //Стандартный оператор, просто запомни
 }// Конец тела оператора присваивания
bool operatgor == (Vector right) // Заголовок оператора ==
{// Начало тела оператора ==
 return (x==right.x)&&(y==right.y)&&(z==right.z)
}// Конец тела оператора ==
bool operatgor != (Vector right) // Заголовок оператора !=
{// Начало тела оператора !=
 return (x!=right.x)||(y!=right.y)||(z!=right.z)
}// Конец тела оператора !=
};// Конец описания класса
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
class Vector // заголовок декларации класса, слово "class" ключевое, говорит от том что дальше пойдёт имя класса
{// начало описания класса
 public:// "public:" говорит о том, что дальше пойдут общедоступные члены
  double x, y, z; // Поля класса для хранения компонентов вектора. Объявляются, как просыте переменные
 Vector (); // Прототип конструктора по умолчанию. Конструктор - функция вообще без типа, имя которой совпадает с именем класса. Пустые скобки указывают на умолчание
 Vector (Vector &copy); // Прототип копирующего конструктора. Единственный параметр - объект самого описываемого класса говорит о том, что конструктор копирующий
 Vector (double x, double y, double z); // Прототип конструктора.
 ~Vector(); // Прототип деструктора. Здесь явный деструктор не нужен, так как нет ни динамических членов, ни связанных с объектом данных, с которыми при удалении объекта что то надо делать, поэтому деструктору делать нечего и он будет пустым. Вообще без деструктора класса быть не может, если нет явного, то пустой деструктор создаётся неявно самим компилятором.
 Vector operatgor + (Vector right); // Прототип оператора сложения
 Vector operatgor - (Vector right); // Прототип оператора вычитания
 Vector operatgor * (Vector right); // Прототип оператора умножения
 Vector operatgor = (Vector copy); // Прототип оператора присваивания
 bool operatgor == (Vector right); // Прототип оператора ==
 bool operatgor != (Vector right); // Прототип оператора !=
};// Конец описания класса
Vector::Vector () // Заголовок конструктора по умолчанию. Конструктор - функция вообще без типа, имя которой совпадает с именем класса. Пустые скобки указывают на умолчание
 {// Начало тела конструктора
  x=0.0;
  y=0.0;
  z=0.0;
 }// Конец тела конструктора
Vector::Vector (Vector &copy) // Заголовок копирующего конструктора. Единственный параметр - объект самого описываемого класса говорит о том, что конструктор копирующий
 {// Начало тела конструктора
  x=copy.x;
  y=copy.y;
  z=copy.z;
 }// Конец тела конструктора
Vector::Vector (double x, double y, double z) // Заголовок конструктора.
 {// Начало тела конструктора
  this->x=x; // так как существует параметр x, то x - параметр x, иначе это было бы поле x, this->x в любом случае - поле x
  y=copy.y;
  z=copy.z;
 }// Конец тела конструктора
Vector::~Vector() // Заголовок деструктора. Здесь явный деструктор не нужен, так как нет ни динамических членов, ни связанных с объектом данных, с которыми при удалении объекта что то надо делать, поэтому деструктору делать нечего и он будет пустым. Вообще без деструктора класса быть не может, если нет явного, то пустой деструктор создаётся неявно самим компилятором.
 {// Начало тела деструктора
 }// Конец тела деструктора
Vector Vector::operatgor + (Vector right) // Заголовок оператора сложения
 {// Начало тела оператора сложения
  Vector result;
  result.x=x+right.x;
  result.y=y+right.y;
  result.z=z+right.z;
  return result;
 }// Конец тела оператора сложения
Vector Vector::operatgor - (Vector right) // Заголовок оператора вычитания
 {// Начало тела оператора вычитания
  Vector result;
  result.x=x-right.x;
  result.y=y-right.y;
  result.z=z-right.z;
  return result;
 }// Конец тела оператора вычитания
Vector Vector::operatgor * (Vector right) // Заголовок оператора умножения
 {// Начало тела оператора умножения
  Vector result;
  result.x=x*right.x;
  result.y=y*right.y;
  result.z=z*right.z;
  return result;
 }// Конец тела оператора умножения
Vector Vector::operatgor = (Vector copy) // Заголовок оператора присваивания
 {// Начало тела оператора присваивания
  x=copy.x;
  y=copy.y;
  z=copy.z;
  return *this; //Стандартный оператор, просто запомни
 }// Конец тела оператора присваивания
bool Vector::operatgor == (Vector right) // Заголовок оператора ==
{// Начало тела оператора ==
 return (x==right.x)&&(y==right.y)&&(z==right.z)
}// Конец тела оператора ==
bool Vector::operatgor != (Vector right) // Заголовок оператора !=
{// Начало тела оператора !=
 return (x!=right.x)||(y!=right.y)||(z!=right.z)
}// Конец тела оператора !=
. Можно комбинировать, одни члены описывя сразу, а для других записывая прототипы.
chevee
2 / 2 / 1
Регистрация: 27.01.2011
Сообщений: 10
21.11.2012, 17:47  [ТС]     Вектор и Массив #5
Цитата Сообщение от ps10n1ck Посмотреть сообщение
Посмотри на форуме, уже по-моему неоднократно встречались такие задания. Если не найдешь, вечером сяду напишу, и к утру выложу сюда. Еще возник вопрос, классы должны быть шаблонными или просто под один определенный тип?
классы под определенный тип. Спасибо

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
.
Спасибо большое!
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2012, 18:28     Вектор и Массив #6
Забыл оператор умножения на скаляр.
C++
1
2
3
4
5
6
7
8
Vector Vector::operator * (double right)
{
 Vector result;
 result.x=x*right;
 result.y=y*right;
 result.z=z*right;
 return result;
}
Добавлено через 39 секунд
Прототип
C++
1
Vector operator * (double right);
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 10.11.2010
Сообщений: 132
22.11.2012, 12:38     Вектор и Массив #7
сорри, вчера так и не добрался до компа, в течении дня, появится свободное время - сделаю
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2012, 12:41     Вектор и Массив #8
Кажется немножко не учёл, какой тип должно вернуть произведение векторов. Прототип
C++
1
double operator * (Vector right)
, тело
C++
1
2
3
4
double Vector::operator * (double right)
{
 return sqrt((x*right.x+y*right.y+z*right.z)*(x*right.x+y*right.y+z*right.z));
}
Вернуть надо модуль поэлементного произведения, а я, кажется, вернул само поэлементное произведение.
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 10.11.2010
Сообщений: 132
22.11.2012, 23:03     Вектор и Массив #9
класс Array готов, допишу только комментарии и описание как им пользоваться. Возник еще один вопрос по поводу пункта:
Реализовать методы ввода/вывода (операторами << и >>);
Что тут необходимо? Обучить методы cout и cin (iostream) для распознавания объекта вашего класса
C++
1
2
3
CArray ar;
std::cout << ar; // вывести все значения массива
std::cin >> ar; // заполнить массив значениями
или отдельно сделать что-то типа:
C++
1
2
3
CArray ar;
ar >> 1 >> 2; // установка нулевого и первого элемента массива равным 1 и 2 соответственно
ar << 1 << 5; // вывести значения первого и пятого элемента массива
могу в принципе и то и другое впихнуть в класс...
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
24.11.2012, 01:37     Вектор и Массив #10
А как код первого выглядит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2012, 14:41     Вектор и Массив
Еще ссылки по теме:

C++ Закрутить массив в вектор
C++ Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с произвольным кол-во элементов.
C++ Массив и вектор

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

Или воспользуйтесь поиском по форуму:
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 10.11.2010
Сообщений: 132
25.11.2012, 14:41     Вектор и Массив #11
это в классе:
C++
1
2
3
4
5
6
7
friend ostream& operator<<(ostream& os, CArray& ar);
 
ostream& operator<<(ostream& os, CArray& ar){
for(uint i = 0; i < ar.GetArraysize(); ++i)
os << ar[i];
return os;
}
пользоваться так:
C++
1
2
CArray A();
cout << A;
Добавлено через 7 минут
забыл дописать, что бы такое работало (os << ar[i]), необходимо перегрузить в классе operator[] - что бы получать значение по индексу
Yandex
Объявления
25.11.2012, 14:41     Вектор и Массив
Ответ Создать тему
Опции темы

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