0 / 0 / 0
Регистрация: 01.04.2015
Сообщений: 14
1

Дано натуральное число. Верно ли, что в данном числе цифра А встречается более двух раз?

01.04.2015, 19:15. Показов 2490. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток всем.
ребята, помогите пожалуйста
нам начали преподавать ЯП Haskel, Только я с ним не лажу ну никак
задача элементарная
а реализовать я ее не могу, птм что ну не понимаю я функциональное программирование
условие: дано натуральное число. верно ли, что в данном числе цифра А встречается более двух раз? А задано.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2015, 19:15
Ответы с готовыми решениями:

Дано натуральное число. Верно ли, что в данном числе цифра А встречается более двух раз?
Доброго времени суток всем, ребята, помогите пожалуйста нам начали преподавать Visual basic 6.0, ...

Дано натуральное число. Верно ли. что цифра a встречается в нем реже, чем цифра b?
Дано натуральное число. Верно ли. что цифра a встречается в нем реже, чем цифра b?

Дано натуральное число.Верно ли что цифра А встречается в нем реже чем цифра В?
кто нибудь знает как такое решить????

Дано натуральное число. Верно ли, что цифра a встречается в нем реже чем цифра b?
кто нибудь знает как такое решить????

12
Модератор
Эксперт функциональных языков программированияЭксперт Python
37324 / 20756 / 4275
Регистрация: 12.02.2012
Сообщений: 34,160
Записей в блоге: 14
01.04.2015, 20:12 2
Вот одно из решений:

Haskell
1
2
3
4
5
6
7
chk :: Int -> Int -> Int -> Bool
chk 0 _ _ = False
chk n a k | (c==a) && (k==1) = True
          | (c==a) = chk q a (k+1)
          | otherwise = chk q a k
            where c = n `mod` 10
                  q = n `div` 10
Правда, немного неудобно то, что у функции один "лишний" накопительный параметр.

Добавлено через 13 минут
Вот еще решение:

Haskell
1
2
3
chk' :: Int -> Int -> Bool
chk' n a = (length s) - (length (filter (\ c -> (ord c)-(ord '0') /= a) s)) >= 2
           where s=show n
1
Модератор
5102 / 3329 / 535
Регистрация: 01.06.2013
Сообщений: 6,956
Записей в блоге: 9
01.04.2015, 20:20 3
Haskell
1
2
3
4
5
6
7
8
myfun :: (Num a, Eq a, Integral b, Eq b) => b -> a -> b -> Bool
myfun dig = go 
  where go _ 0 = False
        go n v = let (d,r)= v `divMod` 10 in
                 if r == dig then (n == 1) || go (n-1) d
                             else go n d 
 
main = print $ myfun 6 2 12345678961  -- есть ли две шестёрки в числе?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37324 / 20756 / 4275
Регистрация: 12.02.2012
Сообщений: 34,160
Записей в блоге: 14
01.04.2015, 20:21 4
Точнее, приведенные решения задачи "... заданная цифра встречается 2 или более раз". Если нужно, чтобы строго более двух раз, то нужно чуть поправить:


Haskell
1
2
3
4
5
6
7
8
9
10
11
chk :: Int -> Int -> Int -> Bool
chk 0 _ _ = False
chk n a k | (c==a) && (k>1) = True
          | (c==a) = chk q a (k+1)
          | otherwise = chk q a k
            where c = n `mod` 10
                  q = n `div` 10
 
chk' :: Int -> Int -> Bool
chk' n a = (length s) - (length (filter (\ c -> (ord c)-(ord '0') /= a) s)) > 2
           where s=show n
1
Модератор
5102 / 3329 / 535
Регистрация: 01.06.2013
Сообщений: 6,956
Записей в блоге: 9
01.04.2015, 23:01 5
Да, я тоже не заметил.
Haskell
1
2
3
4
5
6
myfun :: (Num a, Eq a, Integral b, Eq b) => b -> a -> b -> Bool
myfun dig = go 
  where go _ 0 = False
        go n v = let (d,r)= v `divMod` 10 in
                 if r == dig then (n == 0) || go (n-1) d
                             else go n d
Добавлено через 2 часа 32 минуты
Через show можно и короче
Haskell
1
2
3
myfun :: Show a => a -> Int -> a -> Bool
myfun dig n = let c = head $ show dig in
              (n<) . length . filter (==c) . show
1
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
02.04.2015, 06:49 6
Цитата Сообщение от Catstail Посмотреть сообщение
Haskell
1
2
chk' n a = (length s) - (length (filter (\ c -> (ord c)-(ord '0') /= a) s)) > 2
           where s=show n
как то сложно. почему не так ?
Haskell
1
chk' n a = length (filter (==intToDigit a) $ show n) > 2
2
0 / 0 / 0
Регистрация: 01.04.2015
Сообщений: 14
02.04.2015, 08:49  [ТС] 7
спасибо большое
0
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
02.04.2015, 10:28 8
Еще вариант:
Haskell
1
2
task :: Int -> Int -> Bool
task a = (>2) . length . filter (==a) . fmap (read . return) . show
1
0 / 0 / 0
Регистрация: 01.04.2015
Сообщений: 14
02.04.2015, 10:41  [ТС] 9
пожалуйста объясните мне код
точнее синтаксис
вот функция задаю число и цифру(встречающуюся больше 2 раз0 а дальше длина строки и дальше, где начинается фильтр я не понимаю)
fun n a = length (filter (==intToDigit a) $ show n) > 2
и сразу такой вопрос, можно ли сделать это через условие if или нет?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
02.04.2015, 11:13 10
show n
преобразование числа в строку
filter (==intToDigit a)
фильтрация символов в строке (осталяя только = а)
length
подсчет кол-ва элементов после фильтрации
Цитата Сообщение от масяня41 Посмотреть сообщение
сделать это через условие if или нет?
ну может и можно. но зачем?
0
Эксперт 1С
844 / 607 / 211
Регистрация: 24.07.2013
Сообщений: 2,102
02.04.2015, 15:55 11
Цитата Сообщение от pycture Посмотреть сообщение
сделать это через условие if или нет?
ну может и можно. но зачем?
Чтобы понятнее было )
0
0 / 0 / 0
Регистрация: 01.04.2015
Сообщений: 14
04.04.2015, 06:46  [ТС] 12
наш преподаватель не любит, когда используют какие-то базовые функции haskell, ему нужно либо через условие ,либо "сам придумай" )
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
04.04.2015, 07:01 13
Цитата Сообщение от масяня41 Посмотреть сообщение
наш преподаватель не любит, когда используют какие-то базовые функции haskell, ему нужно либо через условие ,либо "сам придумай" )
вариант с if без "базовых функций" давал KolodeznyDiver
0
04.04.2015, 07:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2015, 07:01
Помогаю со студенческими работами здесь

Дано натуральное число. Верно ли, что в данном числе нет данной цифры А
помогите пожалуйста найти ошибку, выдает что всегда есть Задание: Дано натуральное число. Верно...

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

Дано натуральное число. Верно ли, что в данном числе нет заданной цифры?
Дали задание: Дано натуральное число. Верно ли, что в данном числе нет данной цифры А. А задается...

Дано натуральное число b. Верно ли, что в данном числе сумма цифр больше b, а само число делится на а.
1.Дано натуральное число b. Верно ли, что в данном числе сумма цифр больше b, а само число делится...


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

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

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