Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > комплексные числа |
Автор: Deeoni$ 4.10.2004, 00:24 |
Интересует вопрос как из строки сделать комлексное число. |
Автор: chipset 4.10.2004, 06:20 |
что такое комплексное число? ![]() atoi не подойдет? ![]() |
Автор: Дрон 4.10.2004, 08:17 | ||
![]() ![]() ![]() Deeoni$ А смотря в каком виду оно у тебя задано. Если в виде a+ib, то тут нужно разбить строку на части "a","+","b". Дальше через atof преобразовать вещественную и комплексную часть из строки в float. И ещё изменить, если надо, знак комплексной части (это если там не "+", а "-"). Если в другом виде, то соответственно по другому нужно разбивать и преобразовывать. |
Автор: DENNN 4.10.2004, 13:35 |
ИМХО, чтоб какую-никакую работу с комплексными числами организовать, все равно придеться писать под них класс с переопределенными методами. Ну или готовую библиотеку поискать ![]() А вопрос "из стороки сделать комплексное число" сам по-себе без пояснений несет мало ясности. |
Автор: Deeoni$ 4.10.2004, 23:08 | ||
мне и надо класс написать простенький сложение, вычитание, деление, умножени, тригонометрическая форма, ввод\вывод. Пусть у нас есть строка любого вида. Я ее пропарсил и получил два числа, вещественную и мнимую часть, теперь как мне присвоить их переменной соответствующего типа. Такая фигня не прокатывает: complex <float> a; float b; float c; //....... a.real()=b; a.imag()=c; //........ компилирую если что gcc.exe |
Автор: Step 5.10.2004, 09:35 | ||||
|
Автор: DENNN 6.10.2004, 09:34 | ||
Step, Deeoni$ Причина очевидна. про шаблон complex<> ты почитал, а про предназначение real() и imag() - нет. А они используються только для вывода, но не для ввода. (да и как ты сепбе представляешь ввод в таком виде?) по поводу иксов ничего не скажу, а вот мсдн приводит пример:
Очевидный недостаток такого решения - дополнительные телодвижения в случае, когда надо изменить только одну часть комплексного числа. |
Автор: anonym 10.7.2007, 23:14 | ||
А допустим, я хочу добавить в класс complex метод, поворачивающий вектор, соответствующий данному числу на плоскости, на заданный угол. Почему такой код не работает?
|
Автор: Xenon 11.7.2007, 01:18 |
а что значит не работает? ![]() |
Автор: anonym 11.7.2007, 01:37 | ||
Короче, пишу
получаю Main.cpp(13) : error C2664: '__thiscall MyClass::MyClass(const class MyClass &)' : cannot convert parameter 1 from 'class std::complex<double>' to 'const class MyClass &' Reason: cannot convert from 'class std::complex<double>' to 'const class MyClass' No constructor could take the source type, or constructor overload resolution was ambiguous Main.cpp(14) : error C2228: left of '.real' must have class/struct/union type Main.cpp(14) : error C2228: left of '.imag' must have class/struct/union type Main.cpp(15) : error C2440: 'initializing' : cannot convert from 'class std::complex<double>' to 'class MyClass' No constructor could take the source type, or constructor overload resolution was ambiguous Main.cpp(22) : error C2661: 'MyClass::MyClass' : no overloaded function takes 2 parameters Main.cpp(23) : error C2248: 'Rotate' : cannot access private member declared in class 'MyClass' Main.cpp(11) : see declaration of 'Rotate' Main.cpp(24) : error C2243: 'type cast' : conversion from 'class MyClass *' to 'const class std::complex<double> &' exists, but is inaccessible Что они там такого набабахали в этом complex??? Или я чего не так делаю?) |
Автор: Xenon 11.7.2007, 01:43 | ||
Хотя бы так для начала ![]() ![]() |
Автор: anonym 11.7.2007, 01:50 | ||
Это я так понял написать все варианты конструктора для класса complex и в каждом вызывать конструктор базового класса?... Да фиг с этим конструктором... Меня больше нарягает, что если даже написать так
то всё равно остаются ошибки Main.cpp(15) : error C2228: left of '.real' must have class/struct/union type Main.cpp(15) : error C2228: left of '.imag' must have class/struct/union type |
Автор: Xenon 11.7.2007, 01:58 |
Ты вообще чего делаешь? this это указатель, поэтому нужно писать this-> а не this. К тому же зачем? real и imag это функции - чего ты их приводишь к double как переменные ![]() |
Автор: anonym 11.7.2007, 02:05 |
Да я тоже не совсем, если честно ![]() Ладно, пасибо, понял, как именно этот код довести до ума, также понял, что делал через одно место) |
Автор: anonym 16.7.2007, 16:25 |
Ну а как всё же расширить этот класс делегированием?... я в принципе представляю себе, что это такое, но как это всё реализовать и чтоб всё грамотно было, с этим проблема... если не трудно, напиши, пожалуйста, код) |