Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 17.04.2014
Сообщений: 23
1

Вывод нескольких переменных

16.06.2014, 19:45. Показов 2384. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. сделан код

Haskell
1
2
3
4
nero :: ( [Char] , Integer ) -> ( [Char], Integer ) -> ( [Char], Integer ) -> [Char]
nero (a1, b1) (a2, b2) (a3, b3) = if  ((b1 `mod` 5) /= 0) then a1
                                      else if  ((b2 `mod` 5) /= 0) then a2 else 
                                            if  ((b3 `mod` 5) /= 0) then a3 else  "N\a"
Как нужно изменить программу чтобы программа выводила несколько переменных удовлетворяющих условию? Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2014, 19:45
Ответы с готовыми решениями:

Вывод нескольких переменных в консоль
Допустим, имеются две переменные a = 5, и b = 2. Нужно вывести обе переменные в консоль. Вопрос...

Вывод нескольких символьных переменных в MessageBox
Жаль, что не могу отозваться в адрес самого языка. Ну да ладно, всем стоит быть толерантными....

Вывод нескольких переменных в текстовом поле
function showh() { var theDate = new Date(); var theHours = theDate.getHours(); var...

Вывод нескольких разнотипных переменных в Tmemo и в файл
Здравствуйте. У меня вопрос от новичка. У меня есть несколько переменных разного типа. Необходимо...

10
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.06.2014, 20:09 2
Это имеете в виду?
Haskell
1
2
3
Prelude> let nero = map fst . filter (\(a, b) -> b `mod` 5 /= 0)
Prelude> nero [("first", 4), ("second", 5), ("third", 6)]
["first","third"]
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
16.06.2014, 20:19 3
Боюсь, что только изменив интерфейс... т.е. изменив тип возвращаемого значения на [[Char]]. Тогда если условиям удовлетворяет одна переменная - функция вернет список из одного элемента. Иначе - список из нескольких.
0
0 / 0 / 0
Регистрация: 17.04.2014
Сообщений: 23
16.06.2014, 20:27  [ТС] 4
Haskell
1
nero :: ( [Char] , Integer ) -> ( [Char], Integer ) -> ( [Char], Integer ) -> [[Char]]
так? а как дальше? если например условие if ((b1 `mod` 5) /= 0) && ((b2 `mod` 5) /= 0) then как тут вывести несколько элементов? и правильно ли условие?

Добавлено через 1 минуту
объясните пожалуйста все функции вашего кода
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
16.06.2014, 20:32 5
Я имел в виду что-то вроде:

Haskell
1
2
3
4
5
nero :: ( String , Integer ) -> ( String, Integer ) -> ( String, Integer ) -> [String] 
nero (s1,i1) (s2,i2) (s3,i3) | (i1 > 5) && (i2 > 5) && (i3 > 5) = [s1,s2,s3]
                                    | (i1 > 5) && (i2 > 5) = [s1,s2]
                                    | (i1 > 5) = [s1]
                                    | otherwise = []
1
0 / 0 / 0
Регистрация: 17.04.2014
Сообщений: 23
16.06.2014, 20:45  [ТС] 6
Haskell
1
2
3
4
5
nero :: ( String , Integer ) -> ( String, Integer ) -> ( String, Integer ) -> [String] 
nero (s1,i1) (s2,i2) (s3,i3) | (i1 > 5) && (i2 > 5) && (i3 > 5) = [s1,s2,s3]
                                    | (i1 > 5) && (i2 > 5) = [s1,s2]
                                    | (i1 > 5) = [s1]
                                    | otherwise = []
что за палочки и что означает otherwise
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
16.06.2014, 21:06 7
"Палочки" задают т.н. охранные условия. Смысл: если *** и *** и *** то значение функции = тому-то
Otherwise - означает "иначе".
0
0 / 0 / 0
Регистрация: 17.04.2014
Сообщений: 23
16.06.2014, 21:14  [ТС] 8
я дополнил код до всех условий, но почему то не все варианты работают, что именно у меня в коде не так?

Haskell
1
2
3
4
5
6
7
8
9
nero :: ( String , Integer ) -> ( String, Integer ) -> ( String, Integer ) -> [String] 
nero (s1,i1) (s2,i2) (s3,i3) | ((i1 `mod` 5) /= 0) && ((i2 `mod` 5) /= 0) && ((i3 `mod` 5) /= 0) = [s1,s2,s3]
                                    | ((i1 `mod` 5) /= 0) && ((i2 `mod` 5) /= 0) = [s1,s2]
                                    | ((i1 `mod` 5) /= 0) = [s1]
                                    | ((i2 `mod` 5) /= 0) = [s2]
                                    | ((i3 `mod` 5) /= 0) = [s3]
                                    | ((i1 `mod` 5) /= 0) && ((i3 `mod` 5) /= 0) = [s1,s3]
                                    | ((i2 `mod` 5) /= 0) && ((i3 `mod` 5) /= 0) = [s2,s3]
                                    | otherwise = ["N\a"]
0
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
16.06.2014, 21:44 9
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
--Ваше решение, но теперь все варианты работают. 
nero :: ( String , Integer ) -> ( String, Integer ) -> ( String, Integer ) -> [String] 
nero (s1,i1) (s2,i2) (s3,i3)
    | i1 `mod` 5 /= 0 && i2 `mod` 5 /= 0 && i3 `mod` 5 /= 0 = [s1,s2,s3]
    | i1 `mod` 5 /= 0 && i2 `mod` 5 /= 0                    = [s1,s2]
    | i1 `mod` 5 /= 0 && i3 `mod` 5 /= 0                    = [s1,s3]
    | i2 `mod` 5 /= 0 && i3 `mod` 5 /= 0                    = [s2,s3]
    | i1 `mod` 5 /= 0                                       = [s1]
    | i2 `mod` 5 /= 0                                       = [s2]
    | i3 `mod` 5 /= 0                                       = [s3]
    | otherwise                                             = ["N\\a"]
-- Чуть чуть модифицированое ваше решение
nero :: ( String , Integer ) -> ( String, Integer ) -> ( String, Integer ) -> [String] 
nero (s1,i1) (s2,i2) (s3,i3)
    | condition [i1,i2,i3] = [s1,s2,s3]
    | condition [i1,i2]    = [s1,s2]
    | condition [i1,i3]    = [s1,s3]
    | condition [i2,i3]    = [s2,s3]
    | condition [i1]       = [s1]
    | condition [i2]       = [s2]
    | condition [i3]       = [s3]
    | otherwise            = ["N\\a"]
    where
        condition = all (\x -> x`mod`5 /= 0)
-- Моё решение.
nero :: ( String , Integer ) -> ( String, Integer ) -> ( String, Integer ) -> [String] 
nero x y z = let r = case [x,y,z] of { x -> map fst $ filter (\x -> snd x `mod` 5 /= 0) x }
             in if r = [] then ["N\\a"] else r
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
16.06.2014, 21:57 10
Я бы сделал так (несколько более громоздко - зато понятнее):

Haskell
1
2
3
4
5
6
7
8
9
nero :: ( String , Integer ) -> ( String, Integer ) -> ( String, Integer ) -> [String] 
nero (s1,i1) (s2,i2) (s3,i3) | ((i1 `mod` 5) == 0) &&  ((i2 `mod` 5) == 0) && ((i3 `mod` 5) == 0)  = ["N\a"]
                                    | ((i1 `mod` 5) == 0) &&  ((i2 `mod` 5) == 0) && ((i3 `mod` 5) /= 0) = [s3]
                                    | ((i1 `mod` 5) == 0) &&  ((i2 `mod` 5) /= 0) && ((i3 `mod` 5) == 0) = [s2]
                                    | ((i1 `mod` 5) == 0) &&  ((i2 `mod` 5) /= 0) && ((i3 `mod` 5) /= 0) = [s2,s3]
                                    | ((i1 `mod` 5) /= 0) &&  ((i2 `mod` 5) == 0) && ((i3 `mod` 5) == 0) = [s1]
                                    | ((i1 `mod` 5) /= 0) &&  ((i2 `mod` 5) == 0) && ((i3 `mod` 5) /= 0) = [s1,s3]
                                    | ((i1 `mod` 5) /= 0) &&  ((i2 `mod` 5) /= 0) && ((i3 `mod` 5) == 0) = [s1,s2]
                                    | ((i1 `mod` 5) /= 0) &&  ((i2 `mod` 5) /= 0) && ((i3 `mod` 5) /= 0) = [s1,s2,s3]
1
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
17.06.2014, 00:15 11
Заглянул в соседнюю тему... в общем переписал своё решение чуть короче.
Haskell
1
2
3
nero :: ( String , Integer ) -> ( String, Integer ) -> ( String, Integer ) -> [String]
nero x y z = case [fst a | a <- [x,y,z], snd a `mod` 5 /= 0] of
    [] -> ["N\\a"]; x -> x
2
17.06.2014, 00:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2014, 00:15
Помогаю со студенческими работами здесь

Сравнение нескольких переменных
Есть слегка странное задание. Есть 10 отдельных переменных(v1, v2, v3, ...) типа int, которым...

Функции нескольких переменных в С++
Есть программа, в которой есть функция, вернее две. В программе ошибок нет, а вот сама...

Ввод нескольких переменных
Возможен ли ввод сразу нескольких переменных пользователем в консоль? Имеется в виду, без нажатия...

Экстремумы ф-ий нескольких переменных


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

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