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

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

Войти
Регистрация
Восстановить пароль
 
 
Delllinger
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 3
#1

Помогите с Объектно Ориентированным Программированием. Комплексные числа - C++

28.09.2011, 14:24. Просмотров 953. Ответов 17
Метки нет (Все метки)

Нужно разработать класс для работы с комплексными числами (2 поля - действительное и мнимое)
Методы: Сложение, вычитание и умножение, вывод на эран. Всё с использованием конструктора
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2011, 14:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите с Объектно Ориентированным Программированием. Комплексные числа (C++):

Написать калькулятор с объектно–ориентированным подходом - C++
Написать калькулятор, но с объектно–ориентированным подходом, и выводом пользователю информации о возможных ошибках (деление на 0, ввод...

Помогите с программированием пожалуйста. - C++
Задали в универе по информатике((

Комплексные числа - C++
Нужно написать программу методом перегрузки, которая производит операции с комплексными числами, т.е. сложение, вычитание, умножение и...

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

Комплексные числа - C++
Написать программу производящую арифметические действия над вводимыми с клавиатуры комплексными числами. Те: пользователь вводит одно...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.09.2011, 14:35 #2
Delllinger, что конкретно непонятно? Это задание мелькало уже тысячи раз на форуме/в интернете/в литературе и к нему есть столько же готовых решений. Чем вы уникальны?
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 15:49 #3
Цитата Сообщение от Delllinger Посмотреть сообщение
Нужно разработать класс для работы с комплексными числами (2 поля - действительное и мнимое)
Методы: Сложение, вычитание и умножение, вывод на эран. Всё с использованием конструктора
CComplex.h
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
49
50
#ifndef CCOMPLEX_H
#define CCOMPLEX_H
 
#include <stdio.h>
 
class CComplex
{
private:
    float re;
    float im;
public:
    CComplex(){re = 0; im = 0;};//конструктор по умолчанию
    CComplex(float _re = 0, float _im = 0){re = _re; im = _im;};//конструктор преобразования
 
    //Кроме = не использую &
    //т.к  = единсвенный оператор который может изменять значение исходной переменной
    //после всех остальных операторов переменные не должны терпеть изменений
    CComplex operator + (CComplex val)
    {
        return CComplex(re + val.re,im + val.im);
    }
    CComplex operator - (CComplex val)
    {
        return CComplex(re - val.re,im - val.im);
    }
    CComplex operator * (CComplex val)
    {
        return CComplex
            (
                re*val.re - im*val.im, 
                im*val.re + re*val.im
            );
    }
    CComplex &operator = (float val)
    {
        re = val;
    }
    CComplex &operator = (CComplex val)
    {
        re = val.re;
        im = val.im;
        return CComplex(re,im);
    }
    void Show()
    {
        printf("%.f + j*(%.f)\r\n",re,im);
    }
};
 
#endif
main.cpp
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "CComplex.h"
#include <conio.h>
 
int main()
{
    CComplex a = 5.2;//5.2 + j*0
    CComplex b(5.3,6.3);
    printf("a = ");a.Show();
    printf("b = ");b.Show();
 
    printf("a + b = ");(a + b).Show();
    CComplex c = a + b;
    c = (c * a);
    printf("c * a = ");c.Show();
    getch();
    return 0;
}
a = 5 + j*(0)
b = 5 + j*(6)
a + b = 11 + j*(6)
c * a = 55 + j*(33)

PS:При желании можно ввести деление и другие матфункции сделав класс полной функциональности
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
28.09.2011, 15:59 #4
Учимся пользоваться поиском:
http://www.cyberforum.ru/search.php?searchid=3586669
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.09.2011, 16:01 #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
CComplex(){re = 0; im = 0;};//конструктор по умолчанию 
CComplex(float _re = 0, float _im = 0){re = _re; im = _im;};//конструктор преобразования
первый конструктор излишен к тому же получается неоднозначность, какой их них вызвать
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 16:12 #6
Цитата Сообщение от Jupiter Посмотреть сообщение
первый конструктор излишен к тому же получается неоднозначность, какой их них вызвать
сделал конструктор по умолчанию чтобы в программе можно было так писать
CComplex a;
a = 5;
CComplex b(5.3,6.3);
//т.е полный функционал

CString так же имеет и тот и тот конструкторы...
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
28.09.2011, 16:14 #7
-=ЮрА=-, если ты его удалишь, то в программе тоже можно будет так писать. Полный функционал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class foo
{
public:
    foo(int x = 0, int y = 0);
 
private:
    int _x, _y;
};
 
foo::foo(int x, int y)
    : _x(x), _y(y)
{
}
 
int main()
{
    foo f1, f2(3, 4);
    return 0;
}
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.09.2011, 16:15 #8
-=ЮрА=-, если в Вашем коде функции main 7-ю строку заменить на
C++
1
CComplex a;// = 5.2;//5.2 + j*0
то вы получите ошибку компиляции о неоднозначности
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 17:05 #9
Цитата Сообщение от Jupiter Посмотреть сообщение
-=ЮрА=-, если в Вашем коде функции main 7-ю строку заменить на
- думаю проще тогда заменить конструктор преобразования
C++
1
CComplex(float _re, float _im){re = _re; im = _im;};
+ заменив конструктор преобразования столкнулся с эрором, поэтому в этом случае перегрузку

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CComplex &operator = (float val)
сделал уже так
C++
1
2
3
4
5
CComplex &operator = (float val)
    {
        re = val;
        return CComplex(re,im);
    }
Добавлено через 14 секунд
Цитата Сообщение от Jupiter Посмотреть сообщение
-=ЮрА=-, если в Вашем коде функции main 7-ю строку заменить на
- думаю проще тогда заменить конструктор преобразования
C++
1
CComplex(float _re, float _im){re = _re; im = _im;};
+ заменив конструктор преобразования столкнулся с эрором, поэтому в этом случае перегрузку

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CComplex &operator = (float val)
сделал уже так
C++
1
2
3
4
5
CComplex &operator = (float val)
    {
        re = val;
        return CComplex(re,im);
    }
При таком построении класса код ниже компилируется
Код на Си
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    CComplex a;a = 5.2;//5.2 + j*0
    CComplex b(5.3,6.3);
    printf("a = ");a.Show();
    printf("b = ");b.Show();
 
    printf("a + b = ");(a + b).Show();
    CComplex c = a + b;
    c = (c * a);
    printf("c * a = ");c.Show();
    getch();
    return 0;
}


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

Не по теме:

Вообще не буду отвечать если вступаю в дискусию и минусуют...

0
Nameless One
28.09.2011, 17:18
  #10

Не по теме:

Код на Си
это не код на Си

0
-=ЮрА=-
28.09.2011, 17:19
  #11

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
это не код на Си
- минус за это?

0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
28.09.2011, 17:21 #12
C++
1
2
3
4
5
6
CComplex &operator = (CComplex val)
        {
                re = val.re;
                im = val.im;
                return CComplex(re,im);
        }
А что в 5 строчке происходит? Создается новый объект и возвращается?
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 17:28 #13
Цитата Сообщение от Chelioss Посмотреть сообщение
Создается новый объект и возвращается?
- Возвращаем новый объект CComplex(re,im) - инициализированный val
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
28.09.2011, 17:42 #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- Возвращаем новый объект CComplex(re,im) - инициализированный val
Возвращаем же ссылку, так? А объект то, созданный внутри метода уничтожится при завершении работы метода, тогда почему это работает?
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 17:50 #15
Цитата Сообщение от Chelioss Посмотреть сообщение
Возвращаем же ссылку, так? А объект то, созданный внутри метода уничтожится при завершении работы метода, тогда почему это работает?
ССomplex(float _re,float _im) подразумевает выделение памяти под новый объект, privat переменные принимаеют значение _re и _im и после возврата функции не уничтожаются на мой взглад так
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2011, 17:50
Привет! Вот еще темы с ответами:

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

Комплексные числа - C++
2. Даны два комплексных числа в алгебраической форме. Найти их произведение. Пример //Лаб.раб.№ 1. Линейная программа. ...

Комплексные числа - C++
Здравствуйте! Как мне в С написать вычисление следующего значения R(коэффициент прохождения): l=exp(i*ky1*(-d)); j=i*ky1*(1-d); ...

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


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

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

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