С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 10

Упрощение(или скорее усложнение) класса вектор

15.10.2018, 22:03. Показов 1724. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такая задача и код к ней есть, только вот проблема, на Code Gear Rad Studio 9 Builder он не работает из за некоторых методов, которые появились сравнительно недавно.

Вот сам код:
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
class Vector
{
public:
    float x;
    float y;
    float z;
    Vector()noexcept:Vector(0,0,0){}
    Vector(float ax, float ay, float az) noexcept:x(ax), y(ay), z(az){}
    ~Vector() = default;
    Vector operator+(const Vector other)const noexcept{
        return Vector(x+other.x, y+other.y, z+other.z);
    }
    float operator%(const Vector other)const noexcept{
        return x*other.x + y*other.y + z*other.z;
    }
    Vector operator*(const Vector other)const noexcept{
        float rx = y*other.z - z*other.y;
        float ry = z*other.x - x*other.z;
        float rz = x*other.y - y*other.x;
        return Vector(rx, ry, rz);
    }
};
int main()
{
    Vector a(1,2,3); 
    Vector b(2,5,7);
    Vector c = (a+b)*b;
    float f = a%b;
}
Как его переделать под Builder, что бы не использовать noexcept и иже с ними. При этом не нарушая тз?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.10.2018, 22:03
Ответы с готовыми решениями:

Скорее жив или скорее мертв
Здравствуйте. Есть такая машина : ЦП - Intel Celeron g530 2.4ghz...

Скорее жив чем мертв или наоборот?
Первый раз обращаюсь на форум за помощью, во-общем дело обстоит так, решил спустя 3 года почистить свой ноут, выдул из кулера много пыли...

Упрощение кода программы путём создания библиотек .dll класса
Здравствуйте, на днях написал программу, код хоть и длинный, но суть проблемы не в этом. В общем, суть программы в том, чтобы переводить...

27
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
15.10.2018, 22:09
Цитата Сообщение от FedorFomin Посмотреть сообщение
что бы не использовать noexcept и иже с ними
Тут кроме noexcept и default деструктора больше ничего и нет.
Можете их безболезненно удалить.

Добавлено через 1 минуту
А, есть еще delegating constructor.
Замените на
C++
1
2
Vector() : x(), y(), z() 
{}
0
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 10
15.10.2018, 22:39  [ТС]
Ошибок убавилось вдвое, но остались нюансы. Почему то до сих пор считает, что f не задействован и какая то неизвестная мне ошибка.
Вложение 972802
Как это исправить?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
15.10.2018, 22:45
Цитата Сообщение от FedorFomin Посмотреть сообщение
Почему то до сих пор считает, что f не задействован
Это нормальное предупреждение. Он же у вас правда нигде не используется.
Если хотите его подавить, то напишите после (void)f;

Цитата Сообщение от FedorFomin Посмотреть сообщение
и какая то неизвестная мне ошибка.
Вложение ваше не открывается (если там было описание ошибки).
0
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 10
15.10.2018, 22:48  [ТС]
Прошу прощения, немного непривык к такой форумной платформе.
Вот, собственно, ошибка.
f будет считать задействованным, если его выводить в edit, к примеру?
Был бы также очень благодарен, если бы вы подсказали, как сделать вывод "с" в обьект memo.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
15.10.2018, 23:03
Цитата Сообщение от FedorFomin Посмотреть сообщение
f будет считать задействованным, если его выводить в edit, к примеру?
Ага.

Цитата Сообщение от FedorFomin Посмотреть сообщение
неизвестная мне ошибка.
Эта ошибка говорит, что у деструктора нет определения. Добавьте пустые фигурные скобки после его объявления (точку с запятой удалите).

Цитата Сообщение от FedorFomin Посмотреть сообщение
Был бы также очень благодарен, если бы вы подсказали, как сделать вывод "с" в обьект memo.
Последовательно вывести все три поля x,y,z предварительно преобразовав их в строку.

Я думаю, FloatToStr поможет в этом.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
15.10.2018, 23:03
DrOffset,
С пустыми круглыми скобками так же как и в случае с фигурными битики будут занулены?
не помню точно
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
15.10.2018, 23:04
Лучший ответ Сообщение было отмечено Kuzia domovenok как решение

Решение

Цитата Сообщение от Undisputed Посмотреть сообщение
С пустыми круглыми скобками так же как и в случае с фигурными битики будут занулены?
О чем речь сейчас?
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
15.10.2018, 23:05
FedorFomin,
В с++17 есть ещё атрибут maybe_unused
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
15.10.2018, 23:06
Цитата Сообщение от Undisputed Посмотреть сообщение
В с++17 есть ещё атрибут maybe_unused
Он просит переделать, чтобы не было С++11, а ты ему про С++17 говоришь
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
15.10.2018, 23:07
DrOffset,
Там где ты в конструкторе предложил инициализировать поля пустыми круглыми скобками)

Добавлено через 1 минуту
DrOffset,
Не заметил чего то про с++11)
В любом случае лишняя информация думаю не помешает)
Пусть впитывает
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
15.10.2018, 23:11
Цитата Сообщение от Undisputed Посмотреть сообщение
Там где ты в конструкторе предложил инициализировать поля пустыми круглыми скобками)
Да, будут нули (значения по умолчанию в общем случае).
1
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 10
15.10.2018, 23:18  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Последовательно вывести все три поля x,y,z предварительно преобразовав их в строку.
То есть сделать что то в таком роде

C++
1
2
3
Memo1 ->Lines ->Add(FloatToStr(c(x)));
Memo1 ->Lines ->Add(FloatToStr(c(y)));
Memo1 ->Lines ->Add(FloatToStr(c(z)));
Добавлено через 35 секунд
Цитата Сообщение от Undisputed Посмотреть сообщение
В с++17 есть ещё атрибут maybe_unused
Учту на будущее)
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
15.10.2018, 23:19
FedorFomin,
C++
1
2
3
Memo1 ->Lines ->Add(FloatToStr(c.x));
Memo1 ->Lines ->Add(FloatToStr(c.y));
Memo1 ->Lines ->Add(FloatToStr(c.z));
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
15.10.2018, 23:28
DrOffset,
Спасибо. А не общий случай это какой?)
Т.е ты имел ввиду если тип классовый и есть конструктор по умолчанию, то зависит от кода в конструкторе? Или что то другое?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
15.10.2018, 23:32
Цитата Сообщение от Undisputed Посмотреть сообщение
А не общий случай это какой?)
Т.е ты имел ввиду если тип классовый и есть конструктор по умолчанию, то зависит от кода в конструкторе? Или что то другое?
Для int значение по умолчанию - ноль, для указателя - nullptr, для классовых нетривиальных типов определяется реализацией соответствующего конструктора, для тривиальных - будет zero-initialization каждого поля. Ну и т.д.
1
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 10
15.10.2018, 23:37  [ТС]
DrOffset
Спасибо, помогло, извиняюсь за назойливость, но возникает еще вопрос.
Как можно занести собственные значения в вектор a и б? Так же через мемо?
Просто если так, то интересует, а чем заменить цикл? То есть, если был бы массив, то использовалось бы просто что-то наподобии:
C++
1
a1[i] =  Text.ToDouble(Memo1->Lines->Strings[i]);
Но как это переиначить в нынешних условиях под данные записи векторов?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
15.10.2018, 23:48
FedorFomin, ну можно так:
C++
1
2
3
    Vector a(Text.ToDouble(Memo1->Lines->Strings[0])
            , Text.ToDouble(Memo1->Lines->Strings[1])
            , Text.ToDouble(Memo1->Lines->Strings[2]));
Проверки только нужны на существование индексов.
Но вообще сложно сказать, вы же пишете программу, вам и решать как вам удобнее данные вводить.
Если у вас сложности с написанием программы на Builder, то предлагаю вам тему создать в соответствующем разделе.
0
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 10
16.10.2018, 00:01  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Если у вас сложности с написанием программы на Builder, то предлагаю вам тему создать в соответствующем разделе.
Наверно стоило так сразу и сделать, видимо просмотрел раздел.
Переиначить все вышло и большое вам за это спасибо, но есть еще один вопрос, за который заранее извиняюсь.

Видимо есть косяк в коде, в ответ выводятся одни нули.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
16.10.2018, 00:06
Цитата Сообщение от FedorFomin Посмотреть сообщение
Видимо есть косяк в коде
Есть косяк. Я вам же не так сказал сделать.
Я не говорил менять инициализацию у конструктора с параметрами, я говорил переделать конструктор без параметров.
У вас так должно быть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Vector
{
public:
    float x;
    float y;
    float z;
    Vector() : x(), y(), z() // См. пост #2
    {}
    Vector(float ax, float ay, float az) : x(ax), y(ay), z(az) // здесь только noexcept убрать надо было
    {}
// остальное
..................................
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2018, 00:06
Помогаю со студенческими работами здесь

Упрощение функции ЕСЛИ(ИЛИ)
Добрый день! Помогите оптимизировать массивную формулу. В примере, журнал учета рабочего времени. Сотрудники указывают время...

Дана квадратная матрица и вектор. Проверить, равен ли вектор какому либо столбцу или строке матрицы
Дана квадратная матрица и вектор. Проверить, равен ли вектор какому либо столбцу или строке матрицы. Моя программа работает когда правильно...

Упрощение функций или объединение их в одну
Есть 2 функции: function ElseConnect(url: String): Boolean; var hSession, hURL: HInternet; bResult : Boolean; Buffer :...

Сокращение или упрощение функции Mathcad prime 3.0
Доброго времени суток! Подскажите, пожалуйста, возможно ли как-то длинное выражение функции как-нибудь сократить, например, подогнав под...

Усложнение ПО
У меня ПО, которым имортирую Excel в dataGridView. Сделал я: 1) экспорт, 2)изменение цвета и шрифта(они не сохраняются после закрытия ПО) ,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru