Учебная практика 36-й группы

Ознакомьтесь с языком Common Lisp: история создания, синтаксис, основные операции. Можно воспользоваться, например, следующей литературой:

Выполните четыре общих упражнения:

  1. Написать функцию diff, вычисляющую производную полинома. Примеры запуска программы (во всех примерах ниже для краткости пропущен вызов print):
    • (diff '(+ x (* 3 x)) 'x). Ответ: ( + 1 (+ (* 0 x) (* 1 3)))
    • (diff '(- x (* 3 x)) 'x). Ответ: (- x (* 3 x))
    • (diff '(* x ( + x 1)) 'x). Ответ: (+ (* 1 (+ x 1))(*(+ 1 0) x))
  2. Написать функцию len, вычисляющую длину списка. Примеры запуска программы:
    • (len '(x y z)). Ответ: 3
    • (len ()). Ответ: 0
  3. Написать функцию lst, возвращающую последний элемент списка. Использовать встроенную фунцию last нельзя. Примеры запуска программы:
    • (lst '(x y z)). Ответ: z
    • (lst ()). Ответ: NIL
  4. Написать функцию gcd, возвращающую НОД двух чисел. Примеры запуска программы:
    • (gcd 5 10). Ответ: 5
    • (gcd 7 19). Ответ: 1

а также два индивидуальных (для решения можно/нужно создавать дополнительные вспомогательные функции; также можно предполагать, что функция всегда получает корректные входные данные):

ФИО Задача 1 Задача 2
Аладьев И.Д.Напишите функцию, которая переворачивает список задом наперед.Напишите функцию, которая транспонирует матрицу.
Ашрафова С.А.Напишите функцию, которая определяет, является ли список палиндромом.Напишите функцию, которая определяет, является ли число совершенным. Число является совершенным, если сумма всех его собственных делителей равна самому числу: 6 = 1 + 2 + 3.
Балашов А.В.Напишите функцию, которая дублирует элементы списка.
(dub '(x y z)). Ответ: (x x y y z z)
Напишите функцию, которая выводит список всех простых делителей заданного числа.
Баранов Н.С.Напишите функцию, которая делает срез списка. Принимает на вход список и два числа I < K и возвращает элементы списка с I-го по K-й включительно.
(slice '(6 1 2 7 34 5 9) 2 5). Ответ: (1 2 7 34)
Напишите функцию, которая вычисляет скалярное произведение двух векторов.
Ботнева Е.Р.Напишите функцию, которая удаляет K-й элемент из списка.Напишите функцию, которая выводит N-й столбец матрицы.
Вощинин Д.Р.Напишите функцию, которая выводит все элементы, записанные в узлах бинарного дерева, в порядке инфиксного правого обхода. Формат представления бинарного дерева: пустое дерево - (), дерево - (атом поддерево1 поддерево2).
(leftprint '(2 (4()(1()())) (5()())). Ответ: (4 1 2 5)
Напишите функцию, которая выводит список всех делителей заданного числа.
Вылегжанин А.С.Напишите функцию, которая, получив на вход два числа N и M, возвращает список со всеми целыми числами из отрезка [N,M].Напишите функцию, которая выводит список всех простых множителей заданного числа.
Копылов П.С.Напишите функцию, которая удаляет из списка все вхождения заданного элемента.
(remel '(6 1 2 7 1 5 9) 1). Ответ: (6 2 7 5 9)
Напишите функцию, которая определяет, является ли список чисел знакопеременным, т.е. каждое следующее число имеет знак, противоположный предшествующему. Можно предполагать, что в списке нет нулей.
Лосев Я.С.Напишите функцию, которая раскрывает все скобки в списке.
(slice '(7 8 (1 4 (5)) 1 (2 3))). Ответ: (7 8 1 4 5 1 2 3)
Напишите функцию, которая находит максимальный элемент списка.
Порядочнов Ю.А.Напишите функцию, которая меняет знак всех чисел в списке на противоположный.Напишите функцию, которая находит минимальный элемент списка.
Ромашко Р.Г.Напишите функцию, которая проверяет, что список задает бинарное дерево. Формат представления бинарного дерева: пустое дерево - (), дерево - (атом поддерево1 поддерево2).
(isbinary '(2 (4()(1()())) (5()())). Ответ: T
Напишите функцию, которая определяет, является ли число простым.
Русских С.Напишите функцию, которой определяет высоту бинарного дерева, которое подается на вход в виде списка. Формат представления бинарного дерева: пустое дерево - (), дерево - (атом поддерево1 поддерево2).
(binheight '(2 (4()(1()())) (5()())). Ответ: 3
Напишите функцию, которая определяет, являются ли два числа взаимно-простыми.
Татарников А.И.Напишите функцию, которая возвращает крону двоичного дерева, подаваемого на вход в виде списка. Формат представления бинарного дерева: пустое дерево - (), дерево - (атом поддерево1 поддерево2).
(btcrown '(2 (4()(1()())) (5()())). Ответ: (1 5)
Напишите функцию, вычисляющую факториал числа N.
Феодориди Д.Ю.Напишите функцию, которая удаляет из списка все вхождения заданного элемента.
(remel '(6 1 2 7 1 5 9) 1). Ответ: (6 2 7 5 9)
Напишите функцию, которая определяет, является ли список чисел знакопеременным, т.е. каждое следующее число имеет знак, противоположный предшествующему. Можно предполагать, что в списке нет нулей.
Худнев А.С.Напишите функцию, которая, получив на вход два числа N и M, возвращает список со всеми целыми числами из отрезка [N,M].Напишите функцию, которая выводит список всех простых множителей заданного числа.
Шмелева А.А.Напишите функцию, которая делает срез списка. Принимает на вход список и два числа I < K и возвращает элементы списка с I-го по K-й включительно.
(slice '(6 1 2 7 34 5 9) 2 5). Ответ: (1 2 7 34)
Напишите функцию, которая вычисляет скалярное произведение двух векторов.

Ознакомьтесь с идеями, принципом работы, реализацией на Lisp и на любом императивном языке на ваш выбор следующих концепций, пришедших из языка Lisp:

Выполните два творческих упражнения на двух языках: Common Lisp и любом императивном языке на ваш выбор - приведите примеры кода, демонстрирующие работу с:

  1. лямбда-функциями,
  2. функциями высшего порядка.

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

Также выполните два индивидуальных задания на любом императивном языке на ваш выбор (писать код на языке Common Lisp для данных упражнений не надо):

ФИО map/reduce Замыкания
Аладьев И.Д.Дан список целых чисел. С помощью map отобразите его в список квадратов соответствующих чисел.
[2 9 -4 6 -2] => [4 81 16 36 4]
С помощью замыкания напишите генератор чисел Фибоначчи.
func = genFib(); func(); func(); func(); Ответ: 1 1 2
Ашрафова С.А.Дан список целых чисел. С помощью map отобразите его в список нулей и единиц, где 1 означает, что соответствующее число в исходном списке нечетное, а 0 - четное.
[2 9 -4 6 -2] => [0 1 0 0 0]
С помощью замыкания напишите генератор простых чисел.
func = genPrime(); func(); func(); func(); Ответ: 1 3 5
Балашов А.В.Дан список целых чисел. С помощью map отобразите его в список чисел с инвертированным знаком.
[2 9 -4 6 -2] => [-2 -9 4 -6 2]
С помощью замыкания напишите генератор степеней числа N.
N=3; func = genPow(N); func(); func(); func(); Ответ: 3 9 27
Баранов Н.С.Дан список целых чисел. С помощью map отобразите его в список, в котором все числа, кратные некоторому заданому N, обнулены.
[2 9 -4 6 -2], N=3 => [2 0 -4 0 -2]
С помощью замыкания напишите генератор делителей заданного числа N.
N = 9; func = genDivisors(N); func(); func(); func(); func(); func(); Ответ: 1 3 9 0 0
Ботнева Е.Р.Дан список целых чисел. С помощью reduce перемножьте все числа в нем.
[2 9 -4 6 -2] => 864
С помощью замыкания напишите генератор чисел, взаимно простых к заданному числу N.
N = 8; func = genPr(N); func(); func(); func(); func(); Ответ: 1 3 5 7
Вощинин Д.Р.Дан список слов. С помощью map отобразите его в список, в котором все слова переведены в верхний регистр.
["Hello" "world"] => ["HELLO" "WORLD"]
С помощью замыкания напишите генератор очередного простого числа из заданного списка.
lst = [3 9 8 7 2]; func = genPrElem(lst); func(); func(); func(); func(); Ответ: 3 7 0 0
Вылегжанин А.С.Дан список целых чисел. С помощью map отобразите его в список, в котором будет -1, если соответствующее число отрицательное, 0 - если равно нулю и 1, если положительное.
[2 9 -4 6 -2], N=3 => [1 1 -1 1 -1]
С помощью замыкания напишите генератор элементов арифметической прогрессии с заданными a1 и d.
a1 = 1; d = 3; func = genArProg(a1,d); func(); func(); func(); Ответ: 1 4 7
Копылов П.С.Дан список целых чисел. С помощью map отобразите его в список, в котором все числа, кратные некоторому заданому N, поделены на N.
[2 9 -4 6 -2], N=3 => [2 3 -4 2 -2]
С помощью замыкания напишите генератор элементов геометрической прогрессии с заданными b1 и q.
b1 = 2; q = 3; func = genGeoProg(b1,q); func(); func(); func(); Ответ: 2 6 18
Лосев Я.С.Дан список слов. С помощью reduce подсчитайте количество гласных во всех словах (алфавит - латиница).
["Hello" "World"] => 3
С помощью замыкания напишите генератор элементов по следующему алгоритму, начинающему с некоторого заданного N: если N четное число, то N = N / 2, иначе N = 3N+1.
N = 5; func = gen3nplus1(N); func(); func(); func(); Ответ: 5 16 8
Порядочнов Ю.А.Дан список целых чисел. С помощью reduce подсчитайте количество четных чисел в нем.
[2 9 -4 6 -2] => 4
С помощью замыкания напишите генератор последовательности элементов от заданных N до M
N = 3; M = 5; func = genSeq(N,M); func(); func(); func(); func(); Ответ: 3 4 5 3
Ромашко Р.Г.Дан список целых чисел. С помощью reduce подсчитайте количество отрицательных чисел в нем.
[2 9 -4 6 -2] => 2
С помощью замыкания напишите генератор простых множителей заданного числа N.
N = 10; func = genPrDiv(N); func(); func(); func(); func(); Ответ: 2 5 1 1
Русских С.Дан список целых чисел. С помощью map отобразите его в список с остатками от деления соответствующих чисел на некоторое заданное N.
[2 9 4 6 2], N=3 => [2 0 1 0 2]
С помощью замыкания напишите генератор разрядов бинарного представления заданного числа N от младших к старшим.
N = 10; func = genBin(N); func(); func(); func(); func(); Ответ: 0 1 0 1
Феодориди Д.Ю.Дан список целых чисел. С помощью map отобразите его в список, в котором находятся результаты применения заданной функции f(x).
[2 9 -4 5 -2], f(x)=2x+1 => [5 19 -7 11 -3]
С помощью замыкания напишите генератор разрядов заданного числа N от младших к старшим.
N = 142; func = genDev(N); func(); func(); func(); func(); Ответ: 2 4 1 0
Худнев А.С.Дан список целых чисел. С помощью reduce подсчитайте количество четных чисел в нем.
[2 9 -4 6 -2] => 4
С помощью замыкания напишите генератор последовательности элементов от заданных N до M
N = 3; M = 5; func = genSeq(N,M); func(); func(); func(); func(); Ответ: 3 4 5 3
Шмелева А.А.Дан список целых чисел. С помощью map отобразите его в список, в котором будет -1, если соответствующее число отрицательное, 0 - если равно нулю и 1, если положительное.
[2 9 -4 6 -2], N=3 => [1 1 -1 1 -1]
С помощью замыкания напишите генератор элементов арифметической прогрессии с заданными a1 и d.
a1 = 1; d = 3; func = genArProg(a1,d); func(); func(); func(); Ответ: 1 4 7

Код каждого упражнения должен быть оформлен полностью готовым для компиляции. Например, в случае реализации упражнений на языке C++ в коде должны быть заголовочные файлы, необходимые объявления пространств имен, функция main, функция печати результата на экран. Параметры можно задавать вручную в коде.

Оформите результат выполнения всех заданий в виде отчета. Необходимые элементы Отчета:

Электронный вариант отчета выслать на адрес soldis@yandex.ru. Все возникающие вопросы тоже можно отправлять на этот адрес.

Назад