8 / 6 / 2
Регистрация: 29.11.2017
Сообщений: 206
1

Опишите тип данных Vector a, определяющий трехмерные вектора, элементами которых являются значения типа a.

08.11.2018, 15:08. Показов 1036. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Опишите тип данных Vector a, определяющий трехмерные вектора, элементами которых являются значения
типа a. Конструктор Vec3 должен принимать тройку элементов типа (a, a, a).
Необходимо реализовать селекторы (геттеры) xCoor, yCoor и zCoor — функции типа
Vector a -> a, извлекающие из вектора значение его первой, второй и третьей координаты, соответственно.
Объявите тип Vector a экземпляром класса Show (при условии, что тип a относится к классам Show), определив
функцию show, превращающую вектор в строку.
Объявите тип Vector a экземпляром класса Eq (при условии, что тип a относится к классу Eq), определив
функцию (==). Считаем два вектора равными, когда их соответствующие координаты равны между собой.
Объявите тип Vector a экземпляром класса Num (при условии, что тип a относится к классам Num и
Floating), определив функции (+), (*), negate, abs, signum, fromInteger, используя следующие соотношения:
Код
(x1, y1, z1) + (x2, y2, z2) = (x1 + x2, y1 + y2, z1 + z2)
(x1, y1, z1) · (x2, y2, z2) = (y1z2 − y2z1, z1x2 − z2x1, x1y2 − x2y1)
−(x, y, z) = (−x, −y, −z)
|(x, y, z)| = (sqrt(x^2 + y^2 + z^2), 0, 0)
signum(x, y, z) = (x / |(x, y, z)|, y / |(x, y, z)|, z / |(x, y, z)|)
n = (n, 0, 0)
При определении всех функций (за исключением геттеров) для извлечении координат вектора следует пользоваться
только функциями xCoor, yCoor и zCoor.

Моя задача:
Haskell
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
-- Тип данных "вектор" 
data Vector a = Vec3 (a, a, a)
-- Cелекторы (геттеры) для координаты x y z
xCoor i = x
      where (x, _, _) = i
yCoor i = y
      where (_, y, _) = i
zCoor i = z
      where (_, _, z) = i
 
-- Назначение типа данных Vector экземпляром класса Eq
instance (Eq a) => Eq (Vector a) where
    (==) i1 i2 = (xCoor i1 == xCoor i2) && (yCoor i1 == yCoor i2)
                                           (zCoor i1 == zCoor i2)
 
-- Назначение типа данных Vector экземпляром класса Show
instance (Show a) => Show (Vector a) where
    show i = "(" ++ show (xCoor i) ++ ", " ++ show (yCoor i)
                                           ++ ", " ++ show (zCoor i) ++ ")"
 
-- Назначение типа данных Interval экземпляром класса Num
instance (Num a, Floating a) => Num (Vector a) where
    (+) i1 i2 = ((xCoor i1 + xCoor i2) , (yCoor i1 + yCoor i2) , (zCoor i1 + zCoor i2))
    (*) i1 i2 = (a, b, c)
          where a = yCoor i1 * zCoor i2 - yCoor i2 * zCoor i1
                b = zCoor i1 * xCoor i2 - zCoor i2 * xCoor i1
                c = xCoor i1 * yCoor i2 - xCoor i2 * yCoor i1
    negate i = iMap negate i
    abs i = (a, 0, 0)
          where a = sqrt (xCoor i * xCoor i + yCoor i * yCoor i + zCoor i * zCoor i)
    fromInteger x = (x, 0, 0)
Получаю ошибки и не могу понять в чём причина
Помогите,пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2018, 15:08
Ответы с готовыми решениями:

вычислить суммы элементов строк, номера которых не являются элементами заданного целочисленного вектора
а)сформировать из строк матрицы B матрицу C, расположив строки так, чтобы кол-во отрицательных...

Напишите программу, работающую с типизированным файлом, элементами которого являются значения типа integer
Напишите программу, работающую с типизированным файлом, элементами которого являются значения типа...

Массив: создать одномерный массив, элементами которого являются двумерные массивы, элементами которых являются записи
создать одномерный массив, элементами которого являются двумерные массивы, элементами которых...

Элементами одномерного массива являются n случайных целых чисел, значения которых заданы в диапазоне от -40 до 50 (n задает пользователь)
Элементами одномерного массива являются n случайных целых чисел, значения которых заданы в...

5
Модератор
5042 / 3271 / 526
Регистрация: 01.06.2013
Сообщений: 6,798
Записей в блоге: 9
08.11.2018, 16:28 2
Haskell
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
-- Тип данных "вектор" 
data Vector a = Vec3 (a, a, a)
-- Cелекторы (геттеры) для координаты x y z
xCoor :: Vector a -> a
xCoor (Vec3 (x, _, _)) = x
 
yCoor :: Vector a -> a
yCoor (Vec3 (_, y, _)) = y
 
zCoor :: Vector a -> a      
zCoor (Vec3 (_, _, z)) = z
 
-- Назначение типа данных Vector экземпляром класса Eq
instance (Eq a) => Eq (Vector a) where
    (==) i1 i2 = (xCoor i1 == xCoor i2) && (yCoor i1 == yCoor i2) &&
                                           (zCoor i1 == zCoor i2)
 
-- Назначение типа данных Vector экземпляром класса Show
instance (Show a) => Show (Vector a) where
    show i = "(" ++ show (xCoor i) ++ ", " ++ show (yCoor i)
                                           ++ ", " ++ show (zCoor i) ++ ")"
 
-- Назначение типа данных Interval экземпляром класса Num
instance (Num a, Floating a) => Num (Vector a) where
    (+) i1 i2 = Vec3 ((xCoor i1 + xCoor i2) , (yCoor i1 + yCoor i2) , (zCoor i1 + zCoor i2))
    (*) i1 i2 = Vec3 (a, b, c)
          where a = yCoor i1 * zCoor i2 - yCoor i2 * zCoor i1
                b = zCoor i1 * xCoor i2 - zCoor i2 * xCoor i1
                c = xCoor i1 * yCoor i2 - xCoor i2 * yCoor i1
    negate i = Vec3 ( negate $ xCoor i, negate $ yCoor i, negate $ zCoor  i)
    abs i = Vec3 (a, 0, 0)
          where a = sqrt (xCoor i * xCoor i + yCoor i * yCoor i + zCoor i * zCoor i)
    fromInteger x = Vec3 (fromInteger x, 0, 0)
    signum i = Vec3 ( signum $ xCoor i, signum $ yCoor i, signum $ zCoor  i)
Насчёт signum сами сообразите какой у него смысл для вектора. По крайней мере это компилируется.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36357 / 20236 / 4211
Регистрация: 12.02.2012
Сообщений: 33,510
Записей в блоге: 13
08.11.2018, 18:14 3
А зачем interval? Разве он есть в задании?

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- Тип данных "вектор" 
data Vector a = Vec3 (a, a, a)
-- Cелекторы (геттеры) для координаты x y z
xCoor i = x
      where Vec3 (x, _, _) = i
yCoor i = y
      where Vec3 (_, y, _) = i
zCoor i = z
      where Vec3 (_, _, z) = i
 
-- Назначение типа данных Vector экземпляром класса Eq
instance (Eq a) => Eq (Vector a) where
    (==) i1 i2 = (xCoor i1 == xCoor i2) && (yCoor i1 == yCoor i2) && (zCoor i1 == zCoor i2)
 
-- Назначение типа данных Vector экземпляром класса Show
instance (Show a) => Show (Vector a) where
    show i = "(" ++ show (xCoor i) ++ ", " ++ show (yCoor i)
                                           ++ ", " ++ show (zCoor i) ++ ")"
0
8 / 6 / 2
Регистрация: 29.11.2017
Сообщений: 206
08.11.2018, 23:22  [ТС] 4
А почему не заводится на данных примерах?
Ошибка:41 - Undefined data constructor ":-:"
Примеры:
Haskell
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
main = do
   --предопределяем три интервала
  let i1 = (-12) :-: (-4)
  let i2 = 16 :-: 8
  let i3 = (-10) :-: 5
  -- вывод значений первых двух интервалов
  print $ i1
  print $ iStart i2
  print $ iEnd i2
  print $ iNormalize i2
  print $ i2
  -- операции над интервалами
  print $ 0 <~ i1
  print $ 0 <~ i3
  print $ 7 <~ i3
  print $ iMap sin i3 
  -- арифметические операции  над интервалами
  print $ i1 + i2
  print $ i1 - i3
  print $ i3 * i1
  print $ i3 / i1
  print $ negate i1
  print $ abs i1
  print $ abs i3
  print $ signum i3
  -- смешанные арифметические операции, подключающие frominteger
  print $ 2 * i1
  print $ ((2 :-: 5) :-: (7 :-: 9)) + 1
  print $ i1 / 4
  print $ 4 / i1
  print $ i1 / (4 / 3)
  -- операции сравнения интервалов
  print $ i1 < i2
  print $ i1 <= i3
  print $ i1 > i3
  print $ compare i2 i3
  print $ compare i1 i2
0
Эксперт 1С
843 / 606 / 211
Регистрация: 24.07.2013
Сообщений: 2,102
08.11.2018, 23:29 5
Цитата Сообщение от Artem7693 Посмотреть сообщение
А почему не заводится на данных примерах?
Эти примеры для другой задачи.
1
8 / 6 / 2
Регистрация: 29.11.2017
Сообщений: 206
09.11.2018, 16:29  [ТС] 6
А какие тесты можно написать для данной задачи?
0
09.11.2018, 16:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2018, 16:29
Помогаю со студенческими работами здесь

Сформировать вектор В, элементами которого являются значения элементов тех строк исходного массива, сумма которых положительна
1.Дана матрица C(M,N). Сформировать вектор В, элементами которого являются значения элементов тех...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>)
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало...

Вывести на экран два массива, элементами первого являются элементы, меньшие заданного значения, элементами второго - большие заданного значения
Задан массив целых чисел. Вывести на экран два массива, элементами первого являются элементы,...

Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона
public Form_List(string a) { str = a; InitializeComponent(); ...

Преобразование типа данных nvarchar в тип данных datetime привело к выходу значения за пределы диапазона
Проблема:При открытии базы данных mssql происходит ошибка :Преобразование типа данных nvarchar в...

Преобразование типа данных varchar в тип данных smalldatetime привело к выходу значения за пределы диапазона
Здравствуйте. помогите пожалуйста. что может привести к этой ошибке(ошибка в заголовке темы)? ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru