Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
6 / 6 / 2
Регистрация: 21.11.2010
Сообщений: 92
1

Функция mutual :: Integer -> Integer -> Bool определяет, являются ли заданные два числа взаимно простыми

13.05.2015, 20:24. Показов 1889. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Так вышло, что в сжатые сроки нужны решения некоторых задач. Решал бы сам, если бы не был занят проектом. Как уже поняли с Haskell ранее не сталкивался и даже не знаю насколько сложны задачи.
Прошу помощи на сколько это возможно в решении.
Задача 1: Функция mutual :: Integer -> Integer -> Bool определяет, являются ли заданные два натуральных числа взаимно простыми. Например, mutual 25 14 => True, а mutual 12 39 => False.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2015, 20:24
Ответы с готовыми решениями:

Функция: определить, являются ли два переданные ей числа взаимно простыми
Напишите логическую функцию, которая определяет, являются ли два переданные ей числа взаимно...

Проверить являются ли заданные три числа взаимно простыми
Написать программу в паскаль абс и составить блок-схему

Определить являются ли заданные три числа взаимно простыми
Решить задачу с использованием функции def

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

7
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
14.05.2015, 11:52 2
Haskell
1
2
3
4
5
6
7
gcd' :: Integer -> Integer -> Integer
gcd' n m | (m > n) = gcd' m n 
         | (m == 0) = n
         | otherwise = gcd' m (n `rem` m)
 
mutual :: Integer -> Integer -> Bool
mutual x y = (gcd' x y)==1
1
6 / 6 / 2
Регистрация: 21.11.2010
Сообщений: 92
15.05.2015, 19:23  [ТС] 3
Catstail, как ее скомпилировать и провести пару тестов?
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
15.05.2015, 19:38 4
Зачем компилировать? Чем вариант провести тесты прямо в интерактивном режиме (ghci) не устраивает?
0
6 / 6 / 2
Регистрация: 21.11.2010
Сообщений: 92
15.05.2015, 20:00  [ТС] 5
XZentus, чтоб я знал что это за режим... поподробнее прошу
Я через онлайн ide смотрел http://www.tutorialspoint.com/... online.php
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
15.05.2015, 20:45 6
Лучший ответ Сообщение было отмечено Head Shot как решение

Решение

Можете использовать, например, такую тестовую программу:

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
import System.Environment
 
gcd' :: Integer -> Integer -> Integer
gcd' n m | (m > n) = gcd' m n 
         | (m == 0) = n
         | otherwise = gcd' m (n `rem` m)
 
mutual :: Integer -> Integer -> Bool
mutual x y = (gcd' x y)==1
 
testpairs x y = [(z,r) | z <- x, r <- y, z /= r, z < r]
 
toprint x1 x2 y1 y2 = zip tp $ map (\(x,y) -> mutual x y) tp
                                  where l1 = [x1..x2]
                                        l2 = [y1..y2]
                                        tp = testpairs l1 l2
 
main = do
        args <- getArgs
        case args of
            [] -> cprn $ toprint 10 15 20 23
            [x,y] -> do
                        let d1 = read x :: Integer
                            d2 = read y :: Integer
                        cprn $ toprint 2 d1 2 d2
            [x1,x2,y1,y2] -> do
                                let d1 = read x1 :: Integer
                                    d2 = read x2 :: Integer
                                    d3 = read y1 :: Integer
                                    d4 = read y2 :: Integer
                                cprn $ toprint d1 d2 d3 d4
            otherwise ->  putStrLn "Wrong args"
        where 
              cnv ((x,y), bl) | bl        = (sxy x y) ++ " -> Взаимно простые"
                              | otherwise = (sxy x y) ++ " -> Не взаимно простые"
              sxy x y = show x ++ " и " ++ show y
              cprn x = mapM_ putStrLn $ map cnv x
Добавлено через 1 минуту
Компилировать так:
Haskell
1
ghc -O2 main.hs
1
6 / 6 / 2
Регистрация: 21.11.2010
Сообщений: 92
15.05.2015, 20:52  [ТС] 7
XZentus, вообще круть, все скомпилировалось и результаты отображаются
ps думал ранее, что тот код каким-то образом запустить и все, а тут конечно тот вариант что написали, без опыта точно не сделал
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
15.05.2015, 20:57 8
Собственно, тут, в основном, описана работа с аргументами командной строки, чтобы один раз скомпилировать и проверять сколько влезет.
Если допустимо каждый раз перекомпилировать для отображения новых диапазонов, то функция main сокращается всего до двух строчек.
0
15.05.2015, 20:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2015, 20:57
Помогаю со студенческими работами здесь

Составить программу, которая определяет, являются ли три введённые числа х, у, z взаимно простыми
Составить программу, которая определяет, являются ли три введённые числа х, у, z взаимно-простыми....

Определите, являются ли данные два натуральных числа взаимно простыми. Составьте функцию, которая проверяла бы, являются
Определите, являются ли данные два натуральных числа взаимно простыми. Составьте функцию, которая...

Определить являются ли два числа взаимно простыми
Написать функцию в которой 2 числа называются простыми, если имеют один общий делитель- единицу

Определить, являются ли два числа взаимно простыми
Здравстуйте! У меня есть задание. Написать программу проверки введенные два числа взаимно...


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

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