Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
zaars
3 / 3 / 0
Регистрация: 30.05.2019
Сообщений: 3
1

Нужна подробная информация по разъяснению - Комплексное число

30.05.2019, 17:16. Просмотров 1908. Ответов 7
Метки нет (Все метки)

Собственно пытался написать тип класса для работы с комплексным числом, но компилятор выдает ошибку даже на этом этапе. Книги особо не решили проблему (самая полезная была "Миран Липовача - Изучай Haskell во имя добра - 2012")
Кто решит уладить этот конфуз как нить?

source_file.hs:16:5:
Not in scope: data constructor ‘Complex’


Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--ghc 7.10
 
data ComplexData = ComplexData {
    real:: Float,
    imag:: Float
    } deriving (Eq, Show)
 
class Complex a where
    (+), (-), (/), (*) :: a -> a -> a
    realPart :: a -> Float
    
instance Complex ComplexData where
    realPart a = real a
 
d = ComplexData 1.0 2.0
c = Complex d
 
main = print $ "a"
Добавлено через 2 часа 0 минут
На языке Haskell разработать программу по созданию типа Complex,
который можно использовать для представления комплексных чисел.
Для этого типа ввести селекторы realPart и imagPart, которые
возвращают действительную и мнимую части комплексного числа
соответ
ственно.
В качестве отчетности представить исходный код программы.
Перечитав задание, понял, что это класс не нужен. Решил вопрос через создание нового типа и выбором данных из него через функции
1
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2019, 17:16
Ответы с готовыми решениями:

Комплексное число. Вычислить модуль комплексного числа. Найти комплексное число, обратное заданному
Ребят, помогите дописать задачу. Никак дальше сообразить не могу Нужно создать комплексное...

Подробная информация о LEDA
Просто трёп по сабжу? Кто пользовал, кому понравилось, для чего рулит...

Chart подробная информация
Добрый день! Подскажите возможно ли сделать на объекте chart подробную информацию при наведении на...

Подробная информация о железе
Как посмотреть количество кулеров системе и их загруженность???

Подробная информация об устройстве клавиатур
Подскажите, пожалуйста, где можно найти описание принципа работы, блок схемы и принципиальные ...

7
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,525
Записей в блоге: 9
30.05.2019, 17:42 2
Можно было написать свой instance Num ComplexData что бы можно было использовать (+), (-), (/), (*).
И отдельно сделать realPart, imagPart.
2
zaars
3 / 3 / 0
Регистрация: 30.05.2019
Сообщений: 3
30.05.2019, 17:56  [ТС] 3
Haskell
1
2
instance Num CompexData where
    (+) = a -> a -> ComplexData (realPart a) (imagePart a)
как то так?
0
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,525
Записей в блоге: 9
30.05.2019, 18:18 4
Лучший ответ Сообщение было отмечено zaars как решение

Решение

zaars,
Haskell
1
2
3
4
5
6
7
instance Num ComplexData where
    (ComplexData rl il) + (ComplexData rr ir) = ComplexData (rl + rr) (il + ir)
    (ComplexData rl il) - (ComplexData rr ir) = 
    (ComplexData rl il) * (ComplexData rr ir) = 
    abs (ComplexData r i) = 
    signum (ComplexData r i) = 
    fromInteger i =
Я написал только для (+). Остальное сами.

Добавлено через 2 минуты
Для (/) понадобится сделать instance Fractional ComplexData .
3
30.05.2019, 18:18
zaars
3 / 3 / 0
Регистрация: 30.05.2019
Сообщений: 3
30.05.2019, 18:25  [ТС] 5
Haskell
1
2
3
4
5
6
instance Num ComplexData where
    (ComplexData rl il) + (ComplexData rr ir) = ComplexData (rl + rr) (il + ir)
    (ComplexData rl il) - (ComplexData rr ir) = ComplexData (rl - rr) (il - ir) -- тут понятно
    (ComplexData a b) * (ComplexData c d) = ComplexData (a * c - b * d) (a * d + c * b) --
    abs (ComplexData r i) = ComplexData( abs(r) abs(i) )
-- остальные понятно, спасибо
2
Catstail
Модератор
24811 / 12610 / 2300
Регистрация: 12.02.2012
Сообщений: 20,519
30.05.2019, 22:20 6
Цитата Сообщение от zaars Посмотреть сообщение
abs (ComplexData r i) = ComplexData( abs(r) abs(i) )
- ошибка. Правильно так:

Haskell
1
    abs (Complex r i) =Complex sqrt (r*r+i*i) 0
1
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,525
Записей в блоге: 9
30.05.2019, 23:42 7
Так не скомпилируется, правильно так
Haskell
1
       abs (ComplexData r i) = ComplexData (sqrt (r*r+i*i)) 0
2
Напишите програ
0 / 0 / 0
Регистрация: 24.01.2015
Сообщений: 6
12.06.2019, 09:25 8
А какой всё таки итоговый код по этой задачи?
0
12.06.2019, 09:25
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2019, 09:25

Подробная информация о файле / папке
Интересует такого рода информация о файле / папке: какую иконку (icon) использует файл, адрес этой...

Подробная информация по двойному клику
Всем привет как сделать так чтобы из формы где отображен список всех пользователей и по двойному...

Подробная информация по работе с классами
Посоветуйте книгу, где работа с классами была бы изложена так же хорошо как в Философии java Эккеля.


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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