Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18

Необходимо вывести 3 любые карты (разного достоинства и разной масти) по данному списку с кортежами

11.06.2013, 07:57. Показов 2796. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо вывести 3 любые карты (разного достоинства и разной масти) по данному списку с кортежами:
Haskell
1
karta = [(Two,Piki),(Two,Trefy),(Two,Bubny),(Three,Chervy),(Three,Piki),(Three,Trefy),(Three,Bubny),(Three,Chervy),(Four,Piki),(Four,Trefy),(Four,Bubny),(Four,Chervy),(Five,Piki),(Five,Trefy),(Five,Bubny),(Five,Chervy),(Six,Piki),(Six,Trefy),(Six,Bubny),(Six,Chervy),(Seven,Piki),(Seven,Trefy),(Seven,Bubny),(Seven,Chervy),(Eight,Piki),(Eight,Trefy),(Eight,Bubny),(Eight,Chervy),(Nine,Piki),(Nine,Trefy),(Nine,Bubny),(Nine,Chervy),(Ten,Piki),(Ten,Trefy),(Ten,Bubny),(Ten,Chervy),(Valet,Piki),(Valet,Trefy),(Valet,Bubny),(Valet,Chervy),(Dama,Piki),(Dama,Trefy),(Dama,Bubny),(Dama,Chervy),(Korol,Piki),(Korol,Trefy),(Korol,Bubny),(Korol,Chervy),(Tuz,Piki),(Tuz,Trefy),(Tuz,Bubny),(Tuz,Chervy)]
Мучаюсь уже неделю, ничего путного не выходит(
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2013, 07:57
Ответы с готовыми решениями:

По заданному номеру номеру масти м и номеру достоинства карты к определить полное название карты
Мастям игральных карт условно присвоены следующие порядковые номера:пики-1, трефы-2 , бубны-3, червы-4. Достоинству карт присвоены...

По заданным номеру масти и номеру достоинства карты определить полное название
народ есть задания: 1. Мастям игральных карт условно присвоены слеующие порядковые номера: масти "пики" — 1,.масти...

Дан номер масти и номер достоинства карты. Определить полное название
Дан номер масти m (1<=m=< 4) и номер достоинства карты k (6<= k =< 14). Определить полное название соответствующей карты в виде «дама пик»,...

21
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
11.06.2013, 08:48
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
data Dost = Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Valet | Dama | Korol | Tuz deriving (Eq,Show)
data Mast = Piki | Trefy | Bubny | Chervy deriving (Eq,Show)
 
chkDost :: [(Dost,Mast)] -> Dost -> Bool
chkDost [] _ = True
chkDost (x:xs) d | (fst x) == d = False
                 | otherwise = chkDost xs d 
 
chkMast :: [(Dost,Mast)] -> Mast -> Bool
chkMast [] _ = True
chkMast (x:xs) m | (snd x) == m = False
                 | otherwise = chkMast xs m
 
task :: Int -> [(Dost,Mast)] -> [(Dost,Mast)] -> [(Dost,Mast)]
task 0 sel _ = sel 
task n sel (x:xs) | (chkDost sel (fst x)) && (chkMast sel (snd x)) = task (n-1) (x:sel) xs
                  | otherwise =  task n sel xs
 
-- Проверка:
 
Main> task 2 [] [(Two,Piki),(Two,Trefy),(Two,Bubny),(Three,Chervy),(Three,Piki)]
 
[(Three,Chervy),(Two,Piki)]
1
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18
11.06.2013, 09:12  [ТС]
Дело в том, что так и я делал (ну почти так), но преподаватель сказал мне задать колоду карт (это и есть karta), внутри которого кортежи структуры (достоинство,масть) и суть в том, что на основе именно этого списка необходимо создать функцию, которая как раз бы и выводила 3 карты (любые) у которых как раз разная масть и достоинство. А в колоде 52 карты (1 кортеж - 1 карта) - в этом и есть моя проблема...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
11.06.2013, 11:23
Так решение-то правильное... Просто вызов должен быть таким:

Haskell
1
task 3 [] А_на_этом_месте_твоя_kart
1
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18
11.06.2013, 11:28  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Так решение-то правильное... Просто вызов должен быть таким:

Haskell
1
task 3 [] А_на_этом_месте_твоя_kart
А объявление Data нельзя никак избежать
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
11.06.2013, 11:48
Цитата Сообщение от havier Посмотреть сообщение
А объявление Data нельзя никак избежать
- думаю, нет

Добавлено через 10 минут
Но можно колоду сгенерировать (чтобы не писать длинных строк). Чуть позже сделаю!
1
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18
11.06.2013, 11:48  [ТС]
В общем отправил преподавателю, он сказал, что в принципе программа правильная, но сделана не так - и вот его цитата: "У тебя есть колода карт - то есть твой список karta, с которым ты и должен работать, а точнее с кортежами! То есть тип данных Dost и Mast присутствовать вообще не должен, иначе зачем я просил тогда объявить колоду?!"
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
11.06.2013, 11:57
Вот полное решение:


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
data Dost = Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Valet | Dama | Korol | Tuz deriving (Eq,Show)
data Mast = Piki | Trefy | Bubny | Chervy deriving (Eq,Show)
 
prod :: Dost -> [Mast] -> [(Dost,Mast)]
prod _ [] = []
prod d (m:ms) = (d,m) : prod d ms
 
cartP :: [Dost] -> [Mast] -> [(Dost,Mast)]
cartP [] _ = []
cartP (d:ds) m = (prod d m) ++ (cartP ds m) 
 
chkDost :: [(Dost,Mast)] -> Dost -> Bool
chkDost [] _ = True
chkDost (x:xs) d | (fst x) == d = False
                 | otherwise = chkDost xs d 
 
chkMast :: [(Dost,Mast)] -> Mast -> Bool
chkMast [] _ = True
chkMast (x:xs) m | (snd x) == m = False
                 | otherwise = chkMast xs m
 
koloda = cartP [Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Valet,Dama,Korol,Tuz] [Piki,Trefy,Bubny,Chervy]                 
                 
task :: Int -> [(Dost,Mast)] -> [(Dost,Mast)] -> [(Dost,Mast)]
task 0 sel _ = sel 
task n sel (x:xs) | (chkDost sel (fst x)) && (chkMast sel (snd x)) = task (n-1) (x:sel) xs
                  | otherwise =  task n sel xs
А вызов вот:

Haskell
1
2
Main> task 3 [] koloda
[(Four,Bubny),(Three,Trefy),(Two,Piki)]
1
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18
11.06.2013, 12:12  [ТС]
Большое спасибо за реализации, я бы эти 2 способа не написал) жаль препод стоит на своём и принимать не хочет, настаивая на том, чтобы я вообще убрал эти объявленные пользовательские типы Dost и Mast, спасибо ещё раз
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
11.06.2013, 12:40
На самом деле функция, решающая задачу, к типам не привязана. Чуть позже покажу!
1
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18
11.06.2013, 12:59  [ТС]
Ну я то в принципе понимаю, но спорить с преподавателем не стал - он сказал не то, и нужно переделать, я и сказал, что больше мыслей у меня нет - на что услышал: "жаль.."
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
11.06.2013, 13:02
Вот общее решение:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
prod :: a -> [b] -> [(a,b)]
prod _ [] = []
prod d (m:ms) = (d,m) : prod d ms
 
cartP :: [a] -> [b] -> [(a,b)]
cartP [] _ = []
cartP (d:ds) m = (prod d m) ++ (cartP ds m) 
 
chkDost :: (Eq a) => [(a,b)] -> a -> Bool
chkDost [] d = True
chkDost (x:xs) d | (fst x) == d = False
                 | otherwise = chkDost xs d 
 
chkMast :: (Eq b) => [(a,b)] -> b -> Bool
chkMast [] m = True
chkMast (x:xs) m | (snd x) == m = False
                 | otherwise = chkMast xs m
                 
task :: (Eq a, Eq b) => Int -> [(a,b)] -> [(a,b)] -> [(a,b)]
task 0 sel _ = sel 
task n sel (x:xs) | (chkDost sel (fst x)) && (chkMast sel (snd x)) = task (n-1) (x:sel) xs
                  | otherwise =  task n sel xs
1
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18
11.06.2013, 13:19  [ТС]
А как теперь просмотреть эти карты?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
11.06.2013, 14:28
Цитата Сообщение от havier Посмотреть сообщение
настаивая на том, чтобы я вообще убрал эти объявленные пользовательские типы Dost и Mast
Какое странное требование.

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
piki   = 0
trefy  = 1
bubny  = 2
chervy = 3
 
mast 0 = "Piki"
mast 1 = "Trefy"
mast 2 = "Bubny"
mast 3 = "Chervy"
 
dost 1  = "Tuz"
dost 11 = "Valet"
dost 12 = "Dama"
dost 13 = "Korol"
dost n  = show n
 
karta (d, m) = dost d ++ " " ++ mast m
 
karty = [ (dost, mast) | mast <- [piki..chervy], dost <- [1..13] ]
 
vzyatTriKarty = [(karty!!1), (karty!!17), (karty!!38)]
 
main = mapM_ (putStrLn . karta) vzyatTriKarty
http://ideone.com/pGVc7Q
1
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18
11.06.2013, 15:03  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
vzyatTriKarty = [(karty!!1), (karty!!17), (karty!!38)]
Возник один вопрос: vzyatTriKarty - список, внутри которого кортежи, а что значит в кортеже
!!- ?
1, 17, 38 - ?
Не особо врубился что это за числа и как они выбирают достоинство карты
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
11.06.2013, 15:20
Цитата Сообщение от havier Посмотреть сообщение
Возник один вопрос: vzyatTriKarty - список, внутри которого кортежи, а что значит в кортеже
!!- ?
1, 17, 38 - ?
Не особо врубился что это за числа и как они выбирают достоинство карты
!! — выбрать элемент списка по его позиции в списке. И оно не в кортеже, скобки там не нужны, кортежи у тебя в списке карт (karty).
1, 17, 38 — просто три позиции, дающие карты разной масти и достоинства. Какое задание такой и ответ, любые три карты выбраны.
1
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18
11.06.2013, 15:25  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
1, 17, 38 — просто три позиции, дающие карты разной масти и достоинства. Какое задание такой и ответ, любые три карты выбраны.
То есть я могу выбрать любые числа и поставить на их место? И есть ли какой-либо диапазон среди этих чисел?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
11.06.2013, 16:09
Цитата Сообщение от havier Посмотреть сообщение
А как теперь просмотреть эти карты?
- создать колоду и вызвать task...

Добавлено через 4 минуты
Цитата Сообщение от korvin_ Посмотреть сообщение
Какое странное требование
- я думаю, что преподаватель имел в виду, что достоинства и масти - это объекты класса Eq.
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
12.06.2013, 02:39
Цитата Сообщение от Catstail Посмотреть сообщение
я думаю, что преподаватель имел в виду, что достоинства и масти - это объекты класса Eq.
И что? Как это связано с запретом использовать собственные типы данных? Int/Integer — объекты класса Eq.
1
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 18
12.06.2013, 02:59  [ТС]
Преподаватель сказал, что уже лучше, но ещё нужно доработать и дал следующую подсказку: у тебя есть объявленный список
Haskell
1
karta = [(Two,Piki),(Two,Trefy),(Two,Bubny),(Three,Chervy),(Three,Piki),(Three,Trefy),(Three,Bubny),(Three,Chervy),(Four,Piki),(Four,Trefy),(Four,Bubny),(Four,Chervy),(Five,Piki),(Five,Trefy),(Five,Bubny),(Five,Chervy),(Six,Piki),(Six,Trefy),(Six,Bubny),(Six,Chervy),(Seven,Piki),(Seven,Trefy),(Seven,Bubny),(Seven,Chervy),(Eight,Piki),(Eight,Trefy),(Eight,Bubny),(Eight,Chervy),(Nine,Piki),(Nine,Trefy),(Nine,Bubny),(Nine,Chervy),(Ten,Piki),(Ten,Trefy),(Ten,Bubny),(Ten,Chervy),(Valet,Piki),(Valet,Trefy),(Valet,Bubny),(Valet,Chervy),(Dama,Piki),(Dama,Trefy),(Dama,Bubny),(Dama,Chervy),(Korol,Piki),(Korol,Trefy),(Korol,Bubny),(Korol,Chervy),(Tuz,Piki),(Tuz,Trefy),(Tuz,Bubny),(Tuz,Chervy)]
"Создай рекурсивную функцию которая отделяет голову твоего списка karta, а остальную часть опять себе передаёт. В общем через рекурсию у тебя и должны сравниваться элементы списка (кортежи), а в результате вывестись 3 любые карты"
То есть как я понял делает это до тех пор пока i<>3 и I растёт если случайная величина равна 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2013, 02:59
Помогаю со студенческими работами здесь

Сколькими способами из колоды (52 карты) можно выбрать 4 карты одной масти?
сколькими способами из колоды(52 карты) можно выбрать 4 карты одной масти? Можно найти общее число исходов, а дальше не знаю как,...

Написать подпрограммы, которые тусуют карты и возвращают false, если в колоде есть 3 карты одной масти подряд
Определить массив, который имитирует колоду карт. Написать процедуру и функцию, которая тусует карты и возвращает false, если в колоде есть...

Выплата суммы фишками разного достоинства...
2. Посетитель проиграл в казино a рублей. У него есть фишки 2, 5, 15, 20, 50, 100, 500$. Сколько фишек разного достоинства отдаст игрок,...

Сколько купюр разного достоинства отдаст покупатель
Покупатель должен заплатить в кассу 5руб. У него имеются купюры по 1, 5, 10, 50, 100, 500, 1000 и 10000 руб. Сколько купюр разного...

Выбрать из 36 карт любые 4, чтобы три из них были одной масти
Помогите, пожалуйста, с задачкой. Сколькими способами можно выбрать из колоды в 36 карт четыре карты так, чтобы ровно три из них были...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru