close

Вход

Забыли?

вход по аккаунту

?

5

код для вставкиСкачать
Лабораторная работа № 5. Функции на списках.
Теория. Роганова с. 40-43.
Примеры выполнения.
1. В нотации Haskell'а записать функции, работающие со списками. По возможности воспользоваться формализмами охраны и локальными переменными. Дан список, упорядоченный по убыванию. Найти номер первого элемента, меньшего заданного числа а. вызываем функцию, которая работает через вспомогательную, нужна для того, чтобы отсчет был с начала, а не с конца
> func11 :: [Float] -> Float -> Int
> func11 mas a = (length mas - help_func11 mas a)-1
вспомогательная функция, которая производит основные вычисления, ищет номер первого элемента после заданного числа а
> help_func11 :: [Float] -> Float -> Int
> help_func11 [] _ = -1
> help_func11 (x:mas) a = if(a>x) then length mas else help_func11 mas a
2. В нотации Haskell'а записать более сложные функции, работающие со списками. При необходимости воспользоваться дополнительными функциями и определёнными в предыдущем упражнении. По возможности воспользоваться формализмами охраны и локальными переменными. Найти среднее арифметическое положительных и отрицательных элементов массива.
определяем функцию, которая выводит на экран среднее арифметическое отрицательных и положительных членов массива в виде тьюпла
> func22 :: [Float] -> [Float]
> func22 mas = (sr_poloz mas 0 0:[sr_otr mas 0 0] )
определяем функцию, которая вычисляет среднее арифметическое положительных членов массива
> sr_poloz :: [Float] -> Float -> Float -> Float
> sr_poloz [] sum_mas count = sum_mas / count
> sr_poloz (x:mas) sum_mas count = if (x>0) > then sr_poloz mas (sum_mas+x) (count+1) > else sr_poloz mas (sum_mas) (count)
определяем функцию, которая вычисляет среднее арифметическое отрицательных членов массива
> sr_otr :: [Float] -> Float -> Float -> Float
> sr_otr [] sum_mas count = sum_mas / count
> sr_otr (x:mas) sum_mas count = if (x<0) then sr_otr mas (sum_mas+x) (count+1) else sr_otr mas (sum_mas) (count)
Упражнения
1. В нотации Haskell'а записать функции, работающие со списками. По возможности воспользоваться формализмами охраны и локальными переменными.
1) getN - функция вычленения N-ого элемента из заданного списка.
2) listSumm - функция сложения элементов двух списков. Возвращает список, составленный из сумм элементов списков-параметров. Учесть, что переданные списки могут быть разной длины.
3) oddEven - функция перестановки местами соседних чётных и нечётных элементов в заданном списке.
4) reverse - функция, обращающая список (первый элемент списка становится последним, второй - предпоследним, и так далее до последнего элемента).
5) map - функция применения другой переданной в качестве параметра функции ко всем элементам заданного списка.
6) Дан список, упорядоченный по убыванию. Найти номер первого элемента, большего заданного числа а. 7) Определить, есть ли в массиве хотя бы одна пара одинаковых соседних элементов. В случае положительного ответа определить номера элементов первой из таких пар.
8) Если в массиве есть хотя бы одна пара одинаковых соседних элементов, то напечатать все элементы, следующие за элементами первой из таких пар.
9) Определить, является ли массив упорядоченным по возрастанию. В случае отрицательного ответа определить номер первого элемента, нарушающего такую упорядоченность.
10) Имеются данные о сумме очков, набранных в чемпионате каждой из футбольных команд. Определить, перечислены ли команды в списке в соответствии с занятыми ими местами в чемпионате. 2. В нотации Haskell'а записать более сложные функции, работающие со списками. При необходимости воспользоваться дополнительными функциями и определёнными в предыдущем упражнении. По возможности воспользоваться формализмами охраны и локальными переменными.
1) Найти число пар соседних элементов массива, являющихся четными числами.
2) Найти число пар соседних элементов массива, оканчивающихся нулем.
3) Найти число элементов массива, которые больше своих "соседей", т.е. предшествующего и последующего.
4) Дан массив вещественных чисел. Выяснить: верно ли, что количество положительных элементов не превышает 5.
5) Дан массив вещественных чисел. Выяснить: верно ли, что количество элементов, которые не больше 50, 55, кратно четырем.
6) Найти разницу средних арифметических значений для положительных и отрицательных элементов массива.
7) reverseAll - функция, получающая на вход списочную структуру и обращающая все её элементы, а также её саму.
8) position - функция, возвращающая номер первого вхождения заданного атома в список.
9) set - функция, возвращающая список, содержащий единичные вхождения атомов заданного списка.
10) frequency - функция, возвращающая список пар (символ, частота). Каждая пара определяет атом из заданного списка и частоту его вхождения в этот список.
Контрольные вопросы
1. что такое список?
2. как задают тип списка?
3. как записывается пустой список?
4. что такое голова списка?
5. что такое хвост списка?
6. перечислите способы задания списков?
7. какие стандартные функции работы со списками определены в файле Prelude.hs?
8. сколько всего функций для работы со списками определено в файле Prelude.hs?
9. что делает операция "1:[ ]"?
10. для чего используется оператор "++"?
11. в чем отличие функций concat и zip? 12. как записывают строки в Haskell? 13. каково будет значение выражения: "head "abcd""?
14. какие функции для работы со строками определены в файле Prelude.hs?
Документ
Категория
Рефераты
Просмотров
92
Размер файла
40 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа