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

Разработайте программу для анализа и обобщения результатов опроса

27.10.2016, 17:45. Показов 1725. Ответов 4
Метки нет (Все метки)

Помогите пожалуйста. Большие проблемы с хаскелем.
Разработайте программу для анализа и обобщения результатов опроса. Пример опроса:

Каково Ваше общее мнение об этом курсе?
Ваше мнение о лекциях?
Что Вы думаете о том, что занятия назначены на субботу?
Что Вы думаете о заданиях для лабораторных работ?
Насколько трудным был для Вас этот курс?

Каждый вопрос имеет фиксированное количество ответов (например: очень хорошо, хорошо, нормально, плохо, очень плохо). Ответ одного человека представлен списком пар (номер вопроса, ответ), например: [(1, "очень хорошо"), (3, "плохо"), (4, "нормально")]. Допускается, что человек мог не ответить на некоторые вопросы (в нашем примере это 2 и 5), но не допускается несколько ответов на один и тот же вопрос.

Определите функцию validReply :: Reply -> Bool, которая определяет, допустим ли ответ.

Пример списка ответов:

someReplies :: [Reply]
someReplies =[[(1, "очень хорошо"), (3, "плохо"), (4, "нормально")],
[(2,"хорошо"), (3,"плохо"), (4,"хорошо"), (5,"трудно")],
[(4,"нормально"), (5,"очень трудно")]]

Определите функцию questions :: [Reply] -> [Int], которая по списку результатов опроса возвращает упорядоченный список номеров вопросов, которые были отвечены хоть в каких-то результатах.

Пример: questions someReplies возвращает [1,2,3,4,5].

Определите функцию answers :: Int -> [Reply] -> [String], которая по номеру вопроса и списку результатов опроса возвращает список всех ответов на него. Пример: answers 3 someReplies возвращает ["плохо","плохо"].

Определите функцию summary :: [Reply] -> [(Int,[(Int,String)])], которая по списку результатов опроса возвращает таблицу, содержащую для каждого вопроса все ответы, данные на него и количество каждого ответа. Ответы должны быть отсортированы так, чтобы самые частые были вначале.

Пример:

Main> summary someReplies
[(1,[(1,"очень хорошо")]), (2,[(1,"хорошо")]), (3,[(2,"плохо")]), (4,[(2,"нормально"),(1,"хорошо")]), (5,[(1,"очень трудно"),(1,"трудно")])]

Определите summarize :: [Reply] -> IO (), которая по списку результатов опроса печатает таблицу ответов с процентами.
Пример:

Main> summarize someReplies
Вопрос 1: 100% очень хорошо
Вопрос 2: 100% хорошо
Вопрос 3: 100% плохо
Вопрос 4: 67% нормально 33% хорошо
Вопрос 5: 50% очень трудно 50% трудно
Для более обобщенного анализа сгруппируем ответы со словом «очень» и без него. Определите функцию mild :: [Reply] -> [Reply], которая по списку результатов опроса выдает список результатов опроса без слова «очень». Пример:

Main> summarize (mild someReplies)
Вопрос 1: 100% хорошо
Вопрос 2: 100% хорошо
Вопрос 3: 100% плохо
Вопрос 4: 67% нормально 33% хорошо
Вопрос 5: 100% трудно
Напишите программу, которая получала бы данные из файла, где в строке записаны ответы на анкету одного человека, и выводила бы обобщенные результаты в текстовом виде (см. выше) и в виде столбчатой диаграммы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2016, 17:45
Ответы с готовыми решениями:

Разработайте алгоритм для анализа успеваемости
4 задача. Разработайте алгоритм для анализа успеваемости. Если процент успеваемости более 60%,...

Плагин для отображения результатов опроса в виде диаграмм
Здравствуйте, такая ситуация необходимо на сайте разместить результаты опроса в виде диаграмм, есть...

Вывод результатов опроса PHP+MySQL
Есть 5 таблиц "life_situation"(жизненные ситуации), "questions"(вопросы), "answers"(ответы),...

Разработайте программу для достижения следующих целей:
Числа хранятся в узлах двоичного дерева. Разработайте программу для достижения следующих целей: 1)...

4
Модератор
Эксперт функциональных языков программированияЭксперт Python
34343 / 19130 / 4022
Регистрация: 12.02.2012
Сообщений: 32,041
Записей в блоге: 13
28.10.2016, 17:40 2
Вот начало:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import Data.List
 
type Reply = [(Int,String)]
 
validReply :: Reply -> Bool
validReply x = chk $ map fst x
               where chk [] = True
                     chk (y:ys) | y `elem` ys = False
                                | otherwise   = chk ys
                                
questions :: [Reply] -> [Int]
questions r =  map head $ group $ sort $ concatMap (\ x -> map fst x) r
                
answers :: Int -> [Reply] -> [String]
answers k r =  map snd $ concatMap (\ x -> filter (\ (p,_) -> p==k) x) r
3
1 / 1 / 0
Регистрация: 27.10.2016
Сообщений: 18
30.10.2016, 09:52  [ТС] 3
Спасибо))) Не знаю правда, получится ли дальше самому развить программу((( Но все равно, спасибо)
0
1 / 1 / 0
Регистрация: 27.10.2016
Сообщений: 18
04.11.2016, 12:55  [ТС] 4
Извините, уважаемый Catstail, я хотел спросить, Вы сможете дальше помочь мне с разработкой данного проекта?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
34343 / 19130 / 4022
Регистрация: 12.02.2012
Сообщений: 32,041
Записей в блоге: 13
06.11.2016, 21:30 5
Вот, добавил еще одну функцию (чтобы не париться с русскими буквами - перевел на английский).

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
38
39
40
41
42
import Data.List
 
type Reply = [(Int,String)]
 
someReplies :: [Reply]
someReplies =[[(1, "very good"), (3, "bad"), (4, "normal")],
              [(2,"good"), (3,"bad"), (4,"good"), (5,"difficult")],
              [(4,"normal"), (5,"very difficult")]]
 
validReply :: Reply -> Bool
validReply x = chk $ map fst x
               where chk [] = True
                     chk (y:ys) | y `elem` ys = False
                                | otherwise   = chk ys
                                
questions :: [Reply] -> [Int]
questions r =  map head $ group $ sort $ concatMap (\ x -> map fst x) r
                
answers :: Int -> [Reply] -> [String]
answers k r =  map snd $ concatMap (\ x -> filter (\ (p,_) -> p==k) x) r
 
setof :: [Int] -> [Int]
setof [] = []
setof (x:xs) = x : (setof $ filter (/= x) xs)
 
summary rs = zip [1,2..] ss
             where na = sort $ setof $ map fst aa
                   aa = concatMap id rs
                   ss = map action $ map (\ n -> filter (\ (a,s) -> a==n) aa) na   
            
action cs = qsort $ map (\ x -> ((length x),(head x))) $ group $ sort $ map snd cs                   
             
                   
qsort :: [(Int,String)] -> [(Int,String)]                   
qsort [] = []
qsort (x:xs) = (qsort $ filter (\ (z,s) -> (z > fst x)) xs) ++ 
               [x] ++ 
               (qsort $ filter (\ (z,s) -> (z <= fst x)) xs)
 
*Main> summary someReplies
 
[(1,[(1,"very good")]),(2,[(1,"good")]),(3,[(2,"bad")]),(4,[(2,"normal"),(1,"good")]),(5,[(1,"difficult"),(1,"very difficult")])]
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2016, 21:30
Помогаю со студенческими работами здесь

Разработайте программу для построения графика функции y = x^3
1) Разработайте программу для построения функций y = x3

Разработайте программу для вычисления значения функции
Разработайте программу для вычисления значения функции

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

Разработайте программу для вывода кодовой таблицы ASCII
1. Разработайте программу для вывода кодовой таблицы ASCII.


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

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

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