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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
chevee
2 / 2 / 1
Регистрация: 27.01.2011
Сообщений: 10
#1

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

21.11.2012, 16:15. Просмотров 810. Ответов 10
Метки нет (Все метки)

Уважаемые! Пошел на курсы учиться С++, но из за завала на работе пропустил много занятий и теперь проблемы с пониманием материала. Если кому либо из Вас не составит трудностей в помощи с решением задач, буду весьма признателен.
Если можно, то распишите все с комментами.. мне нужно понять что там да как))
Спасибо!

Задача 1

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

Задача 2

Реализовать класс Array. В классе должны быть реализованы как минимум 3 конструкто-ра (по умолчанию, копирования, с параметром) и деструктор. Реализовать следующие мето-ды:
• Добавление в конец вектора (реализовать оператором +=);
• Добавление на i-ую позицию массива;
• Добавление в начало массива;
• Метод изменения длины массива;
• Метод изменения i-го элемента массива;
• Удаление последнего элемента массива;
• Удаление i-го элемента массива;
• Удаление первого элемента массива;
• Метод конкатенации двух массивов (реализовать оператором +=). Примечание: в данном случае результат заносятся в переменную, от которой был вызван метод, не в третью переменную!!!
• Реализовать методы ввода/вывода (операторами << и >>);
• Реализовать метод присваивания (=);
• Реализовать метод доступа к элементу массива (оператор []);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2012, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вектор и Массив (C++):

Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W - C++
Помогите с задачками 1.Задан вектор X. Положительные числа переписать в массив Y, а отрицательные в массив W. 2.Определить, сколько...

Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W - C++
Всем привет=) Помогите оформить правильно, фот наработка: for(int i = 0, j = 0, c = 0; i &lt; 20; i++) { if(x &lt; 0) { ...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов - C++
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

Массив и вектор - C++
Не могу понят почему не работает данный код. Точнее оно работало правильно. Но перестал работать. Ввел малозначительные изменение перестал...

Копирование Массив в Вектор - C++
Читаю пример Википедии, там приведен пример, в котором элементы массива копируются в вектор. Для этого используется memcpy, но ниже...

Статический массив(вектор) - C++
Здравствуйте, очень нужна помощь. Сроки уже подходят к концу и нету времени разбираться, потому что еще много долгов, помогите пожалуйста с...

10
ps10n1ck
54 / 48 / 2
Регистрация: 10.11.2010
Сообщений: 132
21.11.2012, 16:44 #2
Посмотри на форуме, уже по-моему неоднократно встречались такие задания. Если не найдешь, вечером сяду напишу, и к утру выложу сюда. Еще возник вопрос, классы должны быть шаблонными или просто под один определенный тип?
0
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
21.11.2012, 16:45 #3
Врядли кто-то это будет просто так делать, банально писанины много. А тем более раз понять нужно. Советую любую книжку вменяемую для чайников.
Изучить нужно темы:
1. Основы создания классов(ну то есть просто как класс описать).
2. Функции.
3. Конструкторы.
4. Перегрузка операторов.
5. Указатели.
6. Связные списки.
7. Шаблоны, если полноценно делать.
Вообще эти примеры могут быть даже в некоторых книгах написаны.
0
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)
}// Конец тела оператора !=
. Можно комбинировать, одни члены описывя сразу, а для других записывая прототипы.
1
chevee
2 / 2 / 1
Регистрация: 27.01.2011
Сообщений: 10
21.11.2012, 17:47  [ТС] #5
Цитата Сообщение от ps10n1ck Посмотреть сообщение
Посмотри на форуме, уже по-моему неоднократно встречались такие задания. Если не найдешь, вечером сяду напишу, и к утру выложу сюда. Еще возник вопрос, классы должны быть шаблонными или просто под один определенный тип?
классы под определенный тип. Спасибо

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
.
Спасибо большое!
0
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);
0
ps10n1ck
54 / 48 / 2
Регистрация: 10.11.2010
Сообщений: 132
22.11.2012, 12:38 #7
сорри, вчера так и не добрался до компа, в течении дня, появится свободное время - сделаю
0
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));
}
Вернуть надо модуль поэлементного произведения, а я, кажется, вернул само поэлементное произведение.
0
ps10n1ck
54 / 48 / 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; // вывести значения первого и пятого элемента массива
могу в принципе и то и другое впихнуть в класс...
0
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
24.11.2012, 01:37 #10
А как код первого выглядит?
0
ps10n1ck
54 / 48 / 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[] - что бы получать значение по индексу
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2012, 14:41
Привет! Вот еще темы с ответами:

Вектор как массив - C++
Смешно конечно, но я именно массив (ну а точнее вектор создать не могу). Ошибка выскакивает только при запуске Цель, записать в вектор...

Закрутить массив в вектор - C++
На паре задали задачу: Закрутить массив в вектор. Написал вот такое решение: Вопрос можно ли как то оптимизировать? ...

массив bool и вектор) - C++
Ребята всем привет) ситуация такая скоро сегодня понадобиться написать такую штуку у нас есть куча bool там их 1000000 значений bool...

Массив: считать строки в вектор - C++
вот моя попытка сделать, но во время выполнения вылетает ошибка #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
25.11.2012, 14:41
Ответ Создать тему
Опции темы

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