Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> комплексные числа 
:(
    Опции темы
Deeoni$
Дата 4.10.2004, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 24.2.2003

Репутация: нет
Всего: нет



Интересует вопрос как из строки сделать комлексное число.
PM ICQ   Вверх
chipset
Дата 4.10.2004, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 164



что такое комплексное число? withstupid.gif
atoi не подойдет? withstupid.gif


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Дрон
Дата 4.10.2004, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



Цитата(chipset @ 4.10.2004, 07:20)
что такое комплексное число?
Подрастёшь -- узнаешь... и может ещё пожалеешь, что узнал smile.gif smile.gif smile.gif

Deeoni$
А смотря в каком виду оно у тебя задано. Если в виде a+ib, то тут нужно разбить строку на части "a","+","b". Дальше через atof преобразовать вещественную и комплексную часть из строки в float. И ещё изменить, если надо, знак комплексной части (это если там не "+", а "-").

Если в другом виде, то соответственно по другому нужно разбивать и преобразовывать.

Это сообщение отредактировал(а) Дрон - 4.10.2004, 08:18


--------------------
Да. Именно так.
PM   Вверх
DENNN
Дата 4.10.2004, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



ИМХО, чтоб какую-никакую работу с комплексными числами организовать, все равно придеться писать под них класс с переопределенными методами.
Ну или готовую библиотеку поискать smile.gif

А вопрос "из стороки сделать комплексное число" сам по-себе без пояснений несет мало ясности.
PM ICQ   Вверх
Deeoni$
Дата 4.10.2004, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 24.2.2003

Репутация: нет
Всего: нет



Цитата(DENNN @ 4.10.2004, 05:35)
ИМХО, чтоб какую-никакую работу с комплексными числами организовать, все равно придеться писать под них класс с переопределенными методами.
Ну или готовую библиотеку поискать smile.gif

А вопрос "из стороки сделать комплексное число" сам по-себе без пояснений несет мало ясности.

мне и надо класс написать простенький сложение, вычитание, деление, умножени, тригонометрическая форма, ввод\вывод.
Пусть у нас есть строка любого вида. Я ее пропарсил и получил два числа, вещественную и мнимую часть, теперь как мне присвоить их переменной соответствующего типа. Такая фигня не прокатывает:
complex <float> a;
float b;
float c;
//.......
a.real()=b;
a.imag()=c;
//........

компилирую если что gcc.exe

Это сообщение отредактировал(а) Deeoni$ - 5.10.2004, 09:01
PM ICQ   Вверх
Step
Дата 5.10.2004, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
Такая фигня не прокатывает:


 ! 
 
убедительная просьба

в подобных случаях цитировать содержание ошибок которые выдал компилятор, в ряде случаев причина может быть не в самом коде



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
DENNN
Дата 6.10.2004, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Step,
Deeoni$
Причина очевидна.
про шаблон complex<> ты почитал, а про предназначение real() и imag() - нет.
А они используються только для вывода, но не для ввода. (да и как ты сепбе представляешь ввод в таком виде?)
по поводу иксов ничего не скажу, а вот мсдн приводит пример:
Код

A type that represents the data type used to represent the real and imaginary parts of a complex number.

typedef Type value_type;
Remarks
value_type is a synonym for the class complex Type template parameter.

Example
// complex_valuetype.cpp
// compile with: /EHsc
#include <complex>
#include <iostream>

int main( )
{
  using namespace std;
  complex <double>::value_type a = 3, b = 4;
 
  complex <double> c1 ( a , b );
  cout << "Specifying initial real & imaginary parts"
     << "\nof type value_type: "
     << "c1 = " << c1 << "." << endl;
}
Output
Specifying initial real & imaginary parts
of type value_type: c1 = (3,4).

Очевидный недостаток такого решения - дополнительные телодвижения в случае, когда надо изменить только одну часть комплексного числа.

PM ICQ   Вверх
anonym
Дата 10.7.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



А допустим, я хочу добавить в класс complex метод, поворачивающий вектор, соответствующий данному числу на плоскости, на заданный угол. Почему такой код не работает? 
Код

typedef complex<double> Point;

class MyClass : Point
{
    Point Rotate(double angle)
    {
        Point t(polar(1.0, angle*Pi/180));
        Point temp = Point((double) this.real, (double) this.imag);
        Point res = temp * t;
        return res;
    }    
};

PM MAIL   Вверх
Xenon
Дата 11.7.2007, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



а что значит не работает? smile


--------------------
user posted image  
PM MAIL   Вверх
anonym
Дата 11.7.2007, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Короче, пишу
Код

#include <iostream>
#include <complex>
using namespace std;

const double Pi = 2 * asin(1);

typedef complex<double> Point;

class MyClass : Point
{
    MyClass Rotate(double angle)
    {
        MyClass t(polar(1.0, angle*Pi/180));
        MyClass temp = Point((double) this.real, (double) this.imag);
        MyClass res = temp * t;
        return res;
    }    
};

int main()
{
    MyClass a(3, 2);
    MyClass b = a.Rotate(135);
    cout << b << endl;
    return 0;
}

получаю
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??? Или я чего не так делаю?)
PM MAIL   Вверх
Xenon
Дата 11.7.2007, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Код

#include <iostream>
#include <complex>
using namespace std;

const double Pi = 2 * asin(1);

typedef complex<double> Point;

class MyClass : public Point
{
public:
    MyClass Rotate(double angle)
    {
        MyClass t(polar(1.0, angle*Pi/180));
        MyClass temp = Point((double) this.real, (double) this.imag);
        MyClass res = temp * t;
        return res;
    }    
};

int main()
{
    MyClass a(3, 2);
    MyClass b = a.Rotate(135);
    cout << b << endl;
    return 0;

}


Хотя бы так для начала smile А кто конструктор напишет? Кто иницилизирует базовый класс ? smile


--------------------
user posted image  
PM MAIL   Вверх
anonym
Дата 11.7.2007, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Это я так понял написать все варианты конструктора для класса complex и в каждом вызывать конструктор базового класса?...

Да фиг с этим конструктором... Меня больше нарягает, что если даже написать так
Код

#include <iostream>
#include <complex>
using namespace std;

const double Pi = 2 * asin(1);

typedef complex<double> Point;

class MyClass : Point
{
public:
    Point Rotate(double angle)
    {
        Point t(polar(1.0, angle*Pi/180));
        Point temp = Point((double) this.real, (double) this.imag);
        Point res = temp * t;
        return res;
    };    
};

int main()
{
    return 0;
}


то всё равно остаются ошибки
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
PM MAIL   Вверх
Xenon
Дата 11.7.2007, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Ты вообще чего делаешь?
this это указатель, поэтому нужно писать this-> а не this. К тому же зачем?
real и imag это функции - чего ты их приводишь к double как переменные smile Я вообще не понимаю чего ты хочешь. А расширение стандартных классов классическим наследованием - нехорошо. Делегированием надо.

Это сообщение отредактировал(а) Xenon - 11.7.2007, 01:58


--------------------
user posted image  
PM MAIL   Вверх
anonym
Дата 11.7.2007, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Цитата(Xenon @  11.7.2007,  01:58 Найти цитируемый пост)
Я вообще не понимаю чего ты хочешь

Да я тоже не совсем, если честно   smile 
Ладно, пасибо, понял, как именно этот код довести до ума, также понял, что делал через одно место)

Это сообщение отредактировал(а) anonym - 11.7.2007, 02:05
PM MAIL   Вверх
anonym
Дата 16.7.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 27.11.2006

Репутация: нет
Всего: 3



Ну а как всё же расширить этот класс делегированием?... я в принципе представляю себе, что это такое, но как это всё реализовать и чтоб всё грамотно было, с этим проблема... если не трудно, напиши, пожалуйста, код)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0914 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.