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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
#1

Класс комплексных чисел - C++

14.10.2012, 17:08. Просмотров 2469. Ответов 25
Метки нет (Все метки)

Сейчас начал изучение классов. Придумал себе задачку: написать класс комплексных чисел. Пока планирую так:
PRIVATE:
- переменные:
double Real, Imaginary, Radius, Argument;
- функции:
тригонометрия, возведение в степень и т.п.

PUBLIC:
- функции:
ввод, вывод;
сумма, разность, умножение;
возведение в степень;

(пока, думаю, достаточно)
Помогите, пожалуйста, с написанием прототипа класса и дайте советов по улучшению? Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 17:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс комплексных чисел (C++):

Класс комплексных чисел - C++
Привет))) Пожалуйста, помогите мне создать эту программу!) Я буду вам благодарна) Разработать алгоритм и программу ввода с клавиатуры...

Класс комплексных чисел - C++
Класс комплексных чисел, стандартные операции, перегрузка ввода-вывода. С вводом-выводом проблемы. Вроде всегда так писали, но сейчас...

Класс комплексных чисел - C++
Нужно создать программу (два класса) Класс комплексных чисел Базовый класс (мнимых чисел): Конструкторы: по умолчавнию, с параметрами...

Класс комплексных чисел - C++
Помогите пожалуйста реализовать (без использования <complex>) класс комплексных чисел с простейшими операциями и ВЫВЕСТИ результат на...

Класс комплексных чисел - C++
Ребят, помогите пожалуйста написать класс комплексных чисел... Я плохо разбираюсь в объектно-ориентированном программировании, учусь,...

Класс Комплексных Чисел - C++
Здравствуйте, попробовал тут написать класс комплексных чисел, но пишет ошибку error: statement cannot resolve adress of overloaded...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 17:17 #2
Лучше храните внутри числа в каком-то одном формате. Или как действительную и мнимую части, или в экспоненциальной форме (радиус-угол). Можно извращаться с автоматическим переводом туда-сюда, но что так, что иначе — всё равно будут потери точности.

Конструкторы копирования, создание комплексного по одному/паре действительных и т. п. тоже не забудьте. И константу i. И операторы присваивания всего, что можете выдумать.

Арифметику как операторы внутри класса. Возведение в степень, тригонометрия, модуль, логарифмы и вся другая лабуда, что есть в стандартной математической библиотеке — точно так же, как и в библиотеке: вынесены в глобальные функции. Перегрузка, все дела.
1
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
14.10.2012, 17:30  [ТС] #3
но что так, что иначе — всё равно будут потери точности.
Для меня важно научиться с классами работать, а точность абсолютно никакой роли не играет, поскольку на практике я эту программу применять не буду.
Конструкторы копирования
такое я пока не учил, можете рассказать на пальцах в 2-ух словах?
создание комплексного по одному/паре действительных
это как? У меня функция void input () будет работать с действительными числами и "копировать" их в комплексные.
И константу i
а зачем она?
И операторы присваивания всего, что можете выдумать.
Так, по-моему, классы и так можно между собой присваивать. Подскажите, какие ещё придумать?
Арифметику как операторы внутри класса. Возведение в степень, тригонометрия, модуль, логарифмы и вся другая лабуда, что есть в стандартной математической библиотеке — точно так же, как и в библиотеке: вынесены в глобальные функции. Перегрузка, все дела.
Можно на простом языке? Я ещё достаточно мало знаю в программировании...
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
14.10.2012, 17:34 #4
может лучше взять задачку попроше, для изучения классов, чем комплексные числа?
0
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
14.10.2012, 17:37  [ТС] #5
Я не против Это просто первое, что пришло в голову. Подскажите другую задачу, пожалуйста. Спасибо!
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 17:40 #6
Цитата Сообщение от vlad_light Посмотреть сообщение
Для меня важно научиться с классами работать, а точность абсолютно никакой роли не играет, поскольку на практике я эту программу применять не буду.
Ну вот и будете учиться работать с классами. А не наступать на грабли "ой я сделал вычисления в одном формате, но забыл перевести результат в другой и запомнить".

Цитата Сообщение от vlad_light Посмотреть сообщение
такое я пока не учил, можете рассказать на пальцах в 2-ух словах?
Для такого представления чисел, как у вас, его не надо делать руками, но он есть. Это конструктор, который (сюрприз!) делает копию объекта. Например, когда делается
C++
1
2
Complex x(10, 20);
Complex y = x; // отрабатывает конструктор копирования
Цитата Сообщение от vlad_light Посмотреть сообщение
это как? У меня функция void input () будет работать с действительными числами и "копировать" их в комплексные.
Это
C++
1
Complex x(10, 20); // 10 + 20i
Цитата Сообщение от vlad_light Посмотреть сообщение
а зачем она?
Ну это больше для прикола. Чтоб можно было писать
C++
1
Complex x = 10 + 20*i;
Цитата Сообщение от vlad_light Посмотреть сообщение
Так, по-моему, классы и так можно между собой присваивать. Подскажите, какие ещё придумать?
Одного типа да, можно. А присвоить double комплексному числу так, чтобы действительная часть комплексного числа стала равна тому double, а мнимая обнулилась? (Ну, хотя, там могут отработать неявные приведения типов и всё будет окей.)

Цитата Сообщение от vlad_light Посмотреть сообщение
Можно на простом языке? Я ещё достаточно мало знаю в программировании...
Ну вот все эти + и * будут внутри класса как перегруженные операторы: operator+, operator* и т. п. А всякие pow(), exp(), log() — вне класса как глобальные функции. Не методы.
1
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
14.10.2012, 17:41 #7
ну чтобы , полностью насладится всей прелестью ООП, как стандарт , задачка на реализацию классов Геом Фигур, начиная с абстрактной точки заканчивая , сферой , тут можно и перегрузку функций подсчета площадей и объема посмотреть, полиморфизм в явном виде, а комплексные числа лучше делать когда их применяешь , и то лучше стандартных библиотек врятил сделаешь )
если ваша среда разработки поддерживает GUI , то можно попробовать реализовать интегратор какой нибудь мат модели, тогоже маятника, и запилить через GUI анимацию движения
0
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
14.10.2012, 17:57  [ТС] #8
C++
1
2
Complex x(10, 20);
Complex y = x; // отрабатывает конструктор копирования
Ну, такое у меня вроди как и само по себе будет работать: Complex x(10, 20) -- это иницилизация (а разве там не фигурные скобки надо?), а Complex y = x -- это присваивание классов между собой, что тоже допускается.
Одного типа да, можно. А присвоить double комплексному числу так, чтобы действительная часть комплексного числа стала равна тому double, а мнимая обнулилась?
Т.е. сделать неявное преобразование из действительного в комплексное (поскольку, на действительное число можно только умножать, прибавлять, например, действительное и комплексное нельзя).
как перегруженные операторы: operator+, operator*
до операторов я пока не дошёл, поэтому сделаю что-то типа add(x,y), вместо x+y.
Сейчас займусь написанием кода, спасибо!
а комплексные числа лучше делать когда их применяешь
так будем применять) Например, потом посчитаем комплексную экспоненту через ряд
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
14.10.2012, 18:02 #9
Цитата Сообщение от vlad_light Посмотреть сообщение
Т.е. сделать неявное преобразование из действительного в комплексное (поскольку, на действительное число можно только умножать, прибавлять, например, действительное и комплексное нельзя).
думаю , ~OhMyGodSoLong~, имел ввиду перегрузку оператора '=' ,и насчет суммы действительного и комплексного, число 8 = 8+0i , и число 4i , результат суммы, очевидно, 8+4i
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 18:07 #10
Да нет, можно и через неявные преобразования (раз они уж есть в Си++). Но для того, чтобы эти преобразования работали, надо сделать специальные конструкторы.

Цитата Сообщение от vlad_light Посмотреть сообщение
Ну, такое у меня вроди как и само по себе будет работать: Complex x(10, 20) -- это иницилизация (а разве там не фигурные скобки надо?)
Вот именно, чтобы было не через фигурные. Да и через фигурные вы не сможете — поля ведь private. И чтобы можно было делать
C++
1
2
double y = 10;
Complex x = y; // x == 10 + 0i
0
vlad_light
14.10.2012, 18:17  [ТС]
  #11

Не по теме:

насчет суммы действительного и комплексного, число 8 = 8+0i , и число 4i , результат суммы, очевидно, 8+4i
Я имел ввиду, что [math]$+:\mathbb C\times\mathbb C\to\mathbb C$[\math], т.е. определён только для комплексных чисел. А то, что 8=8+0i -- это чисто совпадение, такое же, скажем, как и матрица 1 на 1 эквивалентна просто числу.

0
OhMyGodSoLong
14.10.2012, 18:23
  #12

Не по теме:

Я вас удивлю, но ℝ ⊂ ℂ.

Не по теме:

Куда можно нажаловаться на уё*****сть местного рендерера ТеХа?

0
vlad_light
14.10.2012, 19:01  [ТС]
  #13

Не по теме:

Пусть будет так А как сюда ТеХ вставить?

0
OhMyGodSoLong
14.10.2012, 19:08
  #14

Не по теме:

[latex]ТеХ-код[/latex]

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

1
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
14.10.2012, 19:35  [ТС] #15
Гляньте, пожалуйста. Пока правильно?
class
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
//my_complex.h
#include <iostream>
 
double pow (const double& x, const int& a);
double sin (const double& x);
double cos (const double& x);
double atan (const double& x);
 
 
class complex
{
private:
    double Re, Im;
 
public:
    void input ();
    void output();
    void sum (const complex& z);
    void sub (const complex& z);
    void mul (const complex& z);
    void pow (const double& a);
 
    complex ()
    {
        Re = Im = 0;
    }
    complex (double x)
    {
        Re = x;
        Im = 0;
    }
    complex (double x, double y)
    {
        Re = x;
        Im = y;
    }
};
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2012, 19:35
Привет! Вот еще темы с ответами:

Написать класс комплексных чисел - C++
Недавно начал изучать C++ по самоучителю, пишу на Dev-C++ 4.9. Не могу разобраться с классами. Задача: написать класс комплексных чисел,...

Класс комплексных чисел(подправить) - C++
Помогите дописать в оераторе &quot;умножение&quot; умножение вещественного числа на комплексное,double на комплексное. Очень надо. Заранее спасибо ...

Создать класс комплексных чисел - C++
Создать класс,объекты которого моделируют комплексные числа с перегрузкой необходимых операций.

Реализовать пользовательский класс комплексных чисел - C++
Помогите пожалуйста сделать задание - программу вычисления комплексного числа. Есть рабочая, которая считает формулу:...


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

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

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