Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/68: Рейтинг темы: голосов - 68, средняя оценка - 4.81
7 / 11 / 0
Регистрация: 01.08.2012
Сообщений: 99
1

Комплексные числа

01.08.2012, 13:30. Показов 13154. Ответов 38
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Изучаю сейчас C++ по Дейтелам, там попалось задание - создать класс комплексное число с функциями: сложение, вычитание, вывод числа в виде (re, im). Была проблема с первыми двумя функциями. Пошёл шарить по форумам - нашёл только варианты с перегрузкой операторов, а такого в книжке нет до этого задания, то есть надо типа обойтись без перегрузки. Я взял написал по-тупому, пока только сложение (смысл делать остальное, когда оно должно быть построено по тому же принципу, а я может в чём ошибаюсь). Посмотрите пжлст мою программу и скажите насколько я идиот прокомментриуйте функцию add, сложения то бишь: так вообще можно делать? Не вызовет ли это каких-либо проблем? Программа работает и выдаёт вполне себе человеческий результат, но мало ли где могут быть подводные грабли.
И да, если мой вариант всё-таки правильный, почему ВЕЗДЕ, где ни поищу, попадаются варианты с перегрузкой? Они чем-то лучше?
Буду очень благодарен за ответ идиот ли я и почему, учиться мне особо не у кого, а надо.

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
#include <iostream>
#include <cmath>
 
using std::cin;
using std::cout;
using std::endl;
 
class Complex
{
public:
    Complex(double = 0.0, double = 0.0);
    void print_number();
    Complex add(Complex, Complex);
 
private:
    double re, im;
 
};
 
Complex::Complex(double r, double i) //конструктор со значениями по умолчанию
{
    re=r; im=i;
}
void Complex::print_number() //вывод числа
{
    cout << "( " << re << ", " << im << " )" << endl;
}
Complex Complex::add(Complex a, Complex b) //сложение
{
    Complex x;
 
    x.re=a.re+b.re;
    x.im=a.im+b.im;
 
    return x;
}
int main()
{
    Complex complex1(3.0, 5.5), complex2(2.0, -1.0), complex_sum;
    //создаём объекты, задаём значения
 
    complex1.print_number();//вывести первое число
    complex2.print_number();//вывести второе число
    complex_sum=complex_sum.add(complex1, complex2);//сложить их
    complex_sum.print_number();//вывести результат
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2012, 13:30
Ответы с готовыми решениями:

Комплексные числа
Как вы думаете. Допустим, у нас есть i. То самое, что значит -1. Можно ли как-то реализовать,...

Комплексные числа
Сформировать массив из 10 элементов в диапазоне из структуры комплексных чисел.

Комплексные числа
Не могу решить эту задачу!Напишите Алгоритм пожалуйста,вот условие: 1)Вводятся два комплексных...

Комплексные числа
2. Даны два комплексных числа в алгебраической форме. Найти их произведение. Пример ...

38
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
01.08.2012, 14:13 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от John Prick Посмотреть сообщение
grizlik78, конструктор копирования в любом случае необходим.
Здесь компилятор его самостоятельно сделает вполне подходящим. Но можно и самому написать. Если написать правильно, то хуже не станет
0
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
01.08.2012, 14:16 22
Цитата Сообщение от John Prick Посмотреть сообщение
grizlik78, конструктор копирования в любом случае необходим.
имеет смысл делать конструктор копирования, если есть указатели или ссылки..
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
01.08.2012, 14:19 23
Цитата Сообщение от grizlik78 Посмотреть сообщение
Здесь компилятор его самостоятельно сделает вполне подходящим.
Вот они издержки моего MSVS6.0. у меня он самостоятельно ничего за меня делать не будет.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
01.08.2012, 14:22 24
John Prick, я с этим чудом техники давно уже не сталкивался, но думаю ты ошибаешься. Умолчательные конструкторы (в том числе и копирования) появились в языке задолго до первого стандарта и VC6.
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
01.08.2012, 14:35 25
grizlik78, умолчательный конструктор копирования там будет, но надеяться, что он правильно скопирует внутренние поля нельзя, только если класс совсем уж простой. Впрочем, это уже оффтоп.
0
grizlik78
01.08.2012, 14:36
  #26

Не по теме:

Ну, класс и есть простой, побитового копирования вполне хватает. Ладно, не будем развивать тему :)

0
Заблокирован
Автор FAQ
01.08.2012, 15:02 27
kozlik_kozlik, если комплексы по простому, то посмотри сюда
https://www.cyberforum.ru/faq/... ost2432704
Здесь крайне простая реализация решение квадратного уравнения с D < 0
https://www.cyberforum.ru/faq/... ost2435222
Здесь таблица значений функции с комплексным значением
https://www.cyberforum.ru/faq/... ost2439450
Ну и далее по нарастающей вплоть до класса CComplex

Добавлено через 1 минуту

Не по теме:

PS:

Цитата Сообщение от kozlik_kozlik Посмотреть сообщение
using std::cin;
using std::cout;
using std::endl;
- это всё спокойно можно заменить 1 строкой using namespace std хуже код от этого не станет...

0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2012, 15:32 28
Цитата Сообщение от -=ЮрА=-
- это всё спокойно можно заменить 1 строкой using namespace std хуже код от этого не станет...
Вообще-то будет, т.е. и с уже using плохо ...

Важно в основном не то что использовать using или using namespace, а то где это делать...
Не хорошо это делать в глобальном пространстве.

Если что то используется в классе
C++
1
2
3
4
void Complex::print_number() //вывод числа
{
    cout << "( " << re << ", " << im << " )" << endl;
}
лучше указывать явно std::
C++
1
2
3
4
void Complex::print_number() //вывод числа
{
    std::cout << "( " << re << ", " << im << " )" << std::endl;
}
Либо помещать using во внутрь метода.Это улучшит читаемость и обезопасит от конфликта имен

Добавлено через 10 минут
Если расматривать это метод, то наверное лучше его немного обобщить
C++
1
2
3
4
void Complex::print_number(std::istream &stream) //вывод числа
{
    stream << "( " << re << ", " << im << " )" << std::endl;
}
Так как в будующем может понадобится выводить в данные в другие потоки ( например в файл).
Но думаю лучшим вариантом было бы перегрузить оператор << относительно класса.
0
Заблокирован
Автор FAQ
01.08.2012, 15:45 29

Не по теме:

Avazart, я не хочу спорить тут всё рассказал https://www.cyberforum.ru/blogs/34326/blog275.html
От того что тыкаем везде space:: умными дядями вы не станете, а в моих глазах это вообще глупость. Есть желание поспорить что либо заходи в блог, я покажу и тебе что ничего такого в этом нет, даже выгоды имеются от экономии и понятности кода



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Либо помещать using во внутрь метода.
- это вообще бред!
Цитата Сообщение от Avazart Посмотреть сообщение
лучше указывать явно std::
- почему лучше?Потому что все бездумно так пишут?:)

0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2012, 16:06 30
У меня нет и капли сомнения в том что я говорю (и в том что говорят умные дяди пишущие книжки) поэтому и желания спорить нет.

Столько страниц в блоге и вас еще не переубедили в очевидном...
Что на водит на мысль вы наверное не умеете просто призновать свою не правоту.


Класс лучше оформлять в отдельном файле ( и желательно в оформленом в отдельном пространстве ).
А значит ваши юзинги перекочуют и в хедер что в дальнейшем может повлеч конфликт имен при подключении ваших исходников кем-то другим в другую программу в другой среде где свои имена ( а может и вами лично по тому как груду кода в памяти не удержишь)

Более того если кода много "глобальные" юзинги плохо читаются. Их тяжелее найти в большом файле нежели в конкретной области видимости.

Цитата Сообщение от -=ЮрА=-
- это вообще бред!
Ну а локализовывать переменные тоже бред ?

Цитата Сообщение от -=ЮрА=-
- почему лучше? Потому что все бездумно так пишут?
Хотя бы из расчета того что ваш код может расширятся и может использоваться другими программистами (которые повидимому не особо горят желанием разбираться что у вас там и как...)

Читаем допустим такой код
C++
1
regex re("*.txt");
Что тут имелось ввиду boost::regex или std::regex (из нового стандарта) или my::regex или regex из IDE или чужего исходника?
0
Заблокирован
Автор FAQ
01.08.2012, 16:25 31
Avazart, ладно не буду спорить, для этого у меня есть блог, если не умеете писат ьпросто пишите сложно - это дело сугубо личное. Не надо просто привселюдно писать вот такие фразы
Цитата Сообщение от Avazart Посмотреть сообщение
это всё спокойно можно заменить 1 строкой using namespace std хуже код от этого не станет...
Вообще-то будет, т.е. и с уже using плохо ...
. В рамках форума холиворить не хочу, а в блоге я ответил на все как бы непреодолимые преграды...

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Читаем допустим такой код
Код C++
1
regex re("*.txt");
Цитата Сообщение от Avazart Посмотреть сообщение
Что тут имелось ввиду boost::regex или std::regex (из нового стандарта) или my::regex или regex из IDE или чужего исходника?
- если покажешь инклуды и using однозначно скажу.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2012, 16:29 32
- если покажешь инклуды и using однозначно скажу.
Вот именно !!!
Нужно пролистать весь файл вверх( просматривая все вложенные области видимости) и смотреть инклюды и инклюды инклюдов итп... и где то там в "глубине души" может таится ваш глобальный using
0
Заблокирован
Автор FAQ
01.08.2012, 16:38 33
Avazart,
Нужно пролистать весь файл вверх
- а ты когда файл открываешь читаешь его сконца?Мне достаточно будет один раз пробежаться по коду и буду знать что к чему, если тебе нет то пожалуйста пиши std:: boost:: но не говори людям что так должно быть без альтернатив...Краткость сестра таланта со space:: ты точно коротко писать не будешь

Не по теме:

Всё давай заканчивать, т.к. всё что ты напишешь дальше я уже читать не буду до момента прихода сюда ТС...

0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2012, 17:11 34
- а ты когда файл открываешь читаешь его сконца?Мне достаточно будет один раз пробежаться по коду и буду знать что к чему
Ну если консольки писать в два файла и три строчки ...
но не говори людям что так должно быть без альтернатив...
А я и не говорил...
Бокопорить и писать не читабельный код никто не запрещает...

Добавлено через 5 минут
Краткость сестра таланта со space:: ты точно коротко писать не будешь
В данном случае сеста лени.
По тому как кроме краткости к коду предъявляются и другие требования такие как ясность и читаемость
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
01.08.2012, 17:13 35
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- а ты когда файл открываешь читаешь его сконца?
а если ты в поиске функцию ищешь и жмакаешь по найденным, файл открывается с любой строчки. а ещё в дебаге можно вофти в функцию, которая будет где-то в середине файла, а там в ней методы непонятные. как понять какой из какого нэймспейса? лазить вверх файла? да и если файлов под 1000, за год не запомнишь, какой юзинг в каком используется.
0
Заблокирован
Автор FAQ
01.08.2012, 17:23 36

Не по теме:

Avazart, так для себя просвети по поводу этого

Цитата Сообщение от Avazart Посмотреть сообщение
Бокопорить и писать не читабельный код никто не запрещает..
- т.е ты меня бокопором называешь если я пишу using namespace std так?Ну давай уж раз начал говори как есть!



для Avazart
Добавлено через 8 минут

Не по теме:

Знаешь я уже жалею что помогал тебе здесь
Узнать запущена ли служба Windows
раз уж ты таким "небокопором" оказываешся да ещё и оскорбляешь хотя пробыл тут по меньше моего и совершенно никакого права не имеешь меня оскорблять! Пожалуй занесу тебя в список игнора как это сделал с парой пользователей и просто для меня перестанешь существовать! Не буду говорить ничего, просто взял твою фразу на заметку, "хакер"...

0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2012, 17:30 37
Знаешь я уже жалею что помогал тебе здесь
Я ждал аргументов, а не слюней
0
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 3
26.11.2018, 18:12 38
Кто знает , какие можно перечислить возможные структуры данных для работы с комплексными числами (с++)?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.11.2018, 18:44 39
Чего? Библиотеки в смысле? В STL есть https://en.cppreference.com/w/cpp/numeric/complex
0
26.11.2018, 18:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2018, 18:44
Помогаю со студенческими работами здесь

Комплексные числа
Здравствуйте! у меня большая проблема... я плохо понимаю с++ и с трудом делаю лабы в универе. вот...

Комплексные числа
Доброе время суток! Я новичок в Си++ а задали задание сделать: Заранее спасибо!

Комплексные числа..
Помогите пожалуйста... срочно нужно решение этой задачки.. Описать класс для работы с комплексными...

комплексные числа
дан список, элементы которого являются комплексными числами. Найти сумму элементов списка


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru