Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2013, 15:48   #1
dimys1237
 
Регистрация: 26.10.2012
Сообщений: 5
По умолчанию Функция для программы на Haskell

Здравствуйте, задали дополнить программу одной функций .Вот само задание для основной программы и его код:
Код HTML:
В электронной записной книжке хранятся записи следующих видов: напоминания о днях рождения знакомых, телефоны знакомых и назначенные встречи. Напоминание состоит из имени знакомого и даты (день и месяц). Запись о телефоне должна содержать имя человека и его телефон. Информация о назначенной встрече содержит дату встречи (день, месяц, год) и краткое описание (можно представлять строкой). Разработайте тип данных, представляющий такую запись. Записная книжка является списком записей. Определите следующие функции:
1) getByName, возвращающая информацию о человеке с указанным именем (его телефон и дату рождения).
2) getByLetter, возвращающая список людей, о которых есть информация в записной книжке и чье имя начинается на указанную букву.
3) getAssignment, возвращающая по указанной дате список дел
(информация о назначенных встречах и телефоны друзей, которых нужно поздравить в этот день).
Код программы:
Код HTML:
data Note a b = BDate a (b,b,b) | Phone a b | Meet (b,b,b) a deriving (Show, Eq)
book :: [Note String Integer]
book = [Phone "Ivan" 89209321602, BDate "Ivan" (16,11,1994), Phone "Igor" 89209206411, BDate "Igor" (26,26,1994), Phone "Evgeney" 89209081511, BDate "Evgeney" (11,08,1994), Meet (14,05,2013) "Ivan"]
-- Getting Name
 
getName :: Note String Integer -> String
getName (BDate a _) = a
getName (Phone a _) = a
getName _ = ""
 
--Getting BDate
 
getBDate :: [Note String Integer] -> String -> (Integer,Integer,Integer)
getBDate [] _ = (0, 0, 0)
getBDate ((BDate a (b, c, d)):xs) n = if a==n then (b, c, d) else getBDate xs n
getBDate (_:xs) n = getBDate xs n
 
getPhone :: [Note String Integer] -> String -> Integer
getPhone [] _ = 0
getPhone ((Phone a b):xs) n = if a==n then b else getPhone xs n
getPhone (_:xs) n = getPhone xs n
 
getByName :: [Note String Integer] -> String -> (String, (Integer,Integer,Integer), Integer)
getByName [] _ = ("", (0,0,0), 0)
getByName ((BDate a (b,c,d)):xs) n = if a == n then (n, (b, c, d) , getPhone book n)
else getByName xs n
getByName ((Phone a b):xs) n = if a == n then (n, getBDate xs n , b)
else getByName xs n
getByName (_:xs) n = getByName xs n
 
getByLetter :: [Note String Integer] -> Char -> String -> [String]
getByLetter [] _ _ = []
getByLetter ((BDate a _):xs) n m = if (head a) == n && m /= a then a : getByLetter xs n a
else getByLetter xs n m
getByLetter ((Phone a _):xs) n m = if (head a) == n && m /= a then a : getByLetter xs n a
else getByLetter xs n m
getByLetter (x:xs) n m = getByLetter xs n m
 
getAssigment :: [Note String Integer] -> (Integer,Integer,Integer) -> [(String,Integer)]
getAssigment [] _ = []
getAssigment ((BDate a (b,c,e)):xs) (d,m,y) = if ((b==d)&&(c==m)&&((e==y)||(e<y))) then (a, getPhone book a) : getAssigment xs (d,m,y)
else getAssigment xs (d,m,y)
getAssigment ((Meet (b,c,e) a):xs) (d,m,y) = if ((b==d)&&(c==m)&&((e==y)||(e<y))) then (a, getPhone book a) : getAssigment xs (d,m,y)
else getAssigment xs (d,m,y)
getAssigment (_:xs) (d,m,y) = getAssigment xs (d,m,y)

getDR :: [Note String Integer] -> (Integer,Integer,Integer) -> String
getDR [] _ = []
getAssigment ((BDate a (b,c,e)):xs) (d,m,y) = if ((e==y)&&(c==m)&&((b==d)||(e<y)&&(c<m)&&(b<d))) then (a, getPhone book a) : getAssigment xs (d,m,y)
else getAssigment xs (d,m,y)
А вот задание по которому надо дополнить эту программу :
"Написать функцию, для нахождения человека с Датой Рождения ближайшей к указной дате"
т.е вводим дату рождения в ввиде (день,месяц, год) и программа выводит имя человека у которого его дата рождения ближе всего к введенной.Помогите пожалуйста
dimys1237 вне форума Ответить с цитированием
Старый 02.06.2013, 20:12   #2
dimys1237
 
Регистрация: 26.10.2012
Сообщений: 5
По умолчанию

подскажите пожалуйста очень надо, в хаскеле плохо понимаю
dimys1237 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Haskell KrotikDJ Помощь студентам 5 27.05.2013 20:49
функция извлечения и тут же включение USB Flash-накопителя в Windows 7 для Delphi 7 для программы Stetolik Помощь студентам 2 14.01.2013 12:33
Процедура или функция для повторного действия для разных объектов на форме abzhapparovmaxat Общие вопросы Delphi 13 14.10.2011 14:37
Haskell Katech Свободное общение 5 12.07.2009 23:40
Haskell Анастасия52 Помощь студентам 0 05.05.2009 14:09