Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Язык программирования SWI-Prolog. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
830 Кб
Скачать

Задание 16. Написать предикат, который формирует новый список, извлекая из исходного списка элементы, стоящие на чётных местах.

Задание 17. Написать предикат, который меняет местами соседние элементы исходного списка.

Пример: исходный список [1,2,3,4,5], результат – список [2,1,4,3,5].

Задание 18. Написать предикат, который дублирует каждый элемент исходного списка.

Задание 19. Написать предикат, который вычисляет число положительных элементов в списке.

Задание 20. Написать предикат, который вычисляет число отрицательных элементов в списке.

Задание 21. Написать предикат, входным параметром которого является список размеров нескольких прямоугольников, а выходным – список площадей этих прямоугольников.

Задание 22. Написать предикат, входным параметром которого является список размеров нескольких прямоугольников, а выходным – список периметров этих прямоугольников.

Задание 23. Написать предикат, входным параметром которого является список радиусов нескольких кругов, а выходным – список площадей этих кругов.

Задание 24. Написать предикат, входным параметром которого является список радиусов нескольких окружностей, а выходным – список длин этих окружностей.

Задание 25. Написать предикат, входным параметров которого является список аргументов функции y = ln(1+x^2), а выходным – список значений этой функции в указанных точках.

71

Задание 26. Написать предикат write_list(Список), который выводит элементы полученного списка в столбик.

Задание 27. Написать предикат, который нумерует элементы полученного списка. Результат – список подсписков вида [k, значение k-того элемента].

В задачах 28-31 многочлен P(X) = A0 +A1*X +A2*X^2 + … + AN*X^N

задаётся списком своих коэффициентов A0, A1, …, AN.

Задание 28. Написать предикат, который формирует список коэффициентов полинома, являющегося суммой двух других полиномов.

Задание 29. Написать предикат, который умножает полином, заданный списком своих коэффициентов на заданное число.

Задание 30. Написать предикат, вычисляющий первую производную от полинома P(X).

Задание 31. Написать предикат, вычисляющий коэффициенты первообразной для полинома P(X).

Задание 32. Написать предикат, который делит отрезок [A; B] на N частей и возвращает список точек деления. Например, при A = 0, B = 1, N = 4 предикат должен создать список из пяти значений: 0, 0.25, 0.5, 0.75, 1.

Задание 33. Написать предикат, который получает два списка одинаковой длины и формирует список пар соответствующих значений этих списков.

Пример. Пусть A = [A1,A2,A3], B = [B1,B2,B3], тогда результирующий список есть R = [[A1,B1],[A2,B2],[A3,B3]].

Задание 34. Написать предикат, который получает натуральное число N и выводит последовательность значений, полученную следующим алгоритмом:

пока N не равно 1 повторять

если N чётное число, то N = N div 2 иначе N = 3*N + 1 конец цикла

72

Пример. При начальном значении N = 12 получим последовательность: 12, 6, 3, 10, 5, 16, 8, 4, 2, 1.

Задание 35. Написать предикат, который разделяет список чисел на три: список отрицательных, список положительных и список нулевых значений.

Задание 36. Написать предикат, который получает два числовых списка и формирует множество значений, присутствующих в одном из этих списков и не присутствующих в другом.

Задание 37. Написать предикат, который получает список с повторяющимися значениями и возвращает список пар вида [значение, количество].

Задание 38. Написать предикат, который получает список и возвращает те значения из списка, которые входят в него только один раз.

Задание 39. Выполнить циклический сдвиг списка влево на N позиций. Пример. Исходный список A = [1,2,3,4,5,6,7], список, сдвинутый на две

позиции влево, B = [3,4,5,6,7,1,2].

Задание 40. Задан список натуральных чисел, больших единицы. Получить список простых чисел, содержащихся в исходном списке.

Задание 41. Получить список простых чисел, не превосходящих заданного натурального числа N.

Подсказка. Используйте встроенный предикат numlist(2,N,List) для получения исходных значений.

Задание 42. Написать предикат, который получает натуральное число N и возвращает единичную матрицу порядка N.

Задание 43. Написать предикат, который получает натуральное число N и возвращает квадратную матрицу порядкаN со случайными значениями её элементов.

Задание 44. Написать предикат слияния двух упорядоченных по возрастанию списков в один упорядоченный по возрастанию список.

73

Задание 45. Написать предикат, который разделяет список L на два: список First, содержащий первые K элементов списка L, и список Last, содержащий все остальные элементы спискаL. Предполагается, что количество элементов списка L больше, чем значение K.

Задание 46. Дан

список пар вида(X, Y). Вычислить

отдельно сумму

X-в и сумму Y-в.

 

 

Задание 47. Дан

числовой список. Получить список

сумм соседних

элементов.

Пример. Исходный список [4, -1, 8, 3], результат [3, 7, 11].

Задание 48. Написать предикат, который формирует список в порядке ввода с клавиатуры значений, отличных от нуля. Признак завершения ввода – число 0 (в список не включается!).

Задание 49. Вывести N строк треугольника Паскаля. Пример: для N = 5 должен получиться следующий результат: [1] [1, 1]

[1, 2, 1] [1, 3, 3, 1]

[1, 4, 6, 4, 1]

Задание 50. Маше подарили новогодний подарок– набор конфет. В наборе конфеты N разных наименований, причём N > 3. Маша планирует съедать каждый день по три разные конфеты. Какое наибольшее количество дней сможет Маша придерживаться своего плана? Сколько конфет останется несъеденными?

Исходные данные – список с указанием количества конфет каждого наименования.

Задание 51. Написать предикат, который получает натуральное число N и возвращает список [1, 2, 2, 3, 3, 3, …, N, N,…,N], в котором каждое значение K от 1 до N появляется ровно K раз подряд.

74

Задание 52. Написать предикат, который получает список целых чисел и возвращает список частичных сумм элементов исходного списка.

Пояснение. k-тая частичная сумма есть суммаk первых элементов исходного списка.

Пример. Исходный список L = [1,2,3,4,5], результат R = [1,3,6,10,15].

Задание 53. Написать предикат, который получает значение первого элемента списка и дополняет список доN элементов, используя рекуррентное соотношение A(k) = 2*A(k – 1) + 3 для k > 1.

Задание 54. Дан список, содержащий как положительные, так и отрицательные числовые значения. Получить минимальное значение абсолютной величины элементов списка.

Пример. Исходный список [-6, -3, 5, 8], результат 3.

Задание 55. Написать предикат, который получает список вещественных чисел и вычисляет их среднее арифметическое.

Задание 56. Написать предикат, который получает список вещественных чисел и вычисляет произведение всех элементов списка.

Задание 57. Написать предикат, который получает два натуральных числа и вычисляет их наибольший общий делитель.

2.3. Структуры данных

Задание 1. Напишите предикат, который получает произвольную последовательность открывающих и закрывающих скобок и определяет, является ли она правильной или нет. Алгоритм использует стек символов и работает следующим образом:

Если очередной символ – открывающая скобка, то она помещается в стек.

Если очередной символ – закрывающая скобка и стек не пуст, то из стека удаляется «верхний» символ (т. е. открывающая скобка).

75

Если очередной символ – закрывающая скобка и стек пуст, то алгоритм выводит сообщение «Последовательность скобок не является правильной» и завершает работу.

Алгоритм «штатно» завершает работу после обработки всех символов последовательности. Если при этом стек символов пуст, то выводится сообщение «Последовательность скобок является правильной», иначе выводится сообщение «Последовательность скобок не является правильной».

Примеры правильных скобочных последовательностей:

()(()), ((()()(()))())

Примеры неправильных скобочных последовательностей:

()()), ((()), )()(

Задание 2. Обобщите алгоритм на скобочные последовательности, состоящие из круглых и квадратных скобок. Проверьте работу алгоритма на следующих примерах.

Примеры правильных скобочных последовательностей:

()[()], (()[()(())])()

Примеры неправильных скобочных последовательностей:

([)(]), [(]), (([()]]), ][[())

Задание 3. Используя очередь, решите следующую задачу. На n карточках написаны числа от1 до n. Карточки собраны в стопку по порядку написанных на них чисел, так что вверху находится значение 1. Карточки выкладываются на стол слева направо следующим образом: первая кладется на стол, вторая – под низ стопки, третья – на стол, четвертая – под низ стопки и т. д., пока все карточки не будут выложены на стол. Каким будет порядок карточек на столе?

Тестовый пример (n = 10):

Результат: 1, 3, 5, 7, 9, 2, 6, 10, 8, 4.

Задание 4. Используя очередь, решите следующую задачу. Дан список целых чисел. Определить, какое максимальное значение можно получить, суммируя K подряд идущих элементов списка. Предполагается, что количество элементов списка больше, чем K.

Тестовый пример.

L = [3,-1, 5, 6, 4, 2, -3, 16, 1], K = 4. Результат: Smax = 19 ( 19 = 4+2-3+16).

76

Вариант задания – определить минимальное значение суммы K подряд идущих элементов списка.

Тестовый пример.

L = [3,-1, 5, 6, 4, 2, -3, 16, 1], K = 4. Результат: Smin = 9 ( 9 = 6+4+2-3).

Задание 5. Используя очередь, вычислите значение A(N), если извест-

ны значения A(1), A(2), …, A(S), коэффициенты Q(1), Q(2), …, Q(S) и ре-

куррентное соотношение для всех K > S:

A(K) = Q(1)*A(K-1) + Q(2)*A(K-2) + … + Q(S)*A(K-S).

Задание 6. Напишите предикат, вычисляющий количество узлов двоичного дерева.

Задание 7. Напишите предикат поиска в двоичном упорядоченном дереве.

Задание 8. Напишите предикат, который получает двоичное дерево и формирует список всех его вершин. Реализуйте следующий вариант обхода дерева: левое поддерево, корень, правое поддерево.

Задание 9. Напишите предикат, который получает неотрицательное число K и двоичное дерево и формирует список его вершин, находящихся на уровне номер K.

Пояснение. Уровень К составляет множество вершин, путь к которым от корня одинаков и равен K рёбрам.

Задание 10. Арифметическое выражение может быть представлено в виде двоичного дерева. Например, выражение (3 + 5)*(9 – 4) можно представить как

T = [умножить, [сложить, [3, [], []], [5, [], []]], [вычесть, [9, [], []], [4, [], []]]], или для большей наглядности:

A=[3,[],[]],

B=[5,[],[]],

C=[9,[],[]],

D=[4,[],[]],

T=[умножить,[сложить,A,B], [вычесть,C,D]].

Напишите предикат, который получает дерево арифметического выражения и вычисляет его значение.

77

2.4. Числовые ребусы

В числовом ребусе каждая буква соответствует одной цифре, разные буквы соответствуют разным цифрам, одинаковые буквы – одинаковым цифрам.

Задание 1. Решить числовой ребус ШАГ * СТО = ДОРОГА.

Задание 2. Решить «шахматный» ребус ХОД * А5 = НИЧЬЯ. Учтите, что цифра 5 не должна совпасть с числовым значением ни одной из букв .

Задание 3. Решить числовой ребус ДВА * ПЯТЬ = ДЕСЯТЬ.

Задание 4. Решить числовой ребус ДВА * ДВА = ЧЕТЫРЕ.

Задание 5. Решить числовой ребус ОДИН + ОДИН = МНОГО.

Задание 6. Решить числовой ребус 4 * ABCDE = EDCBA.

Задание 7. Решить числовой ребус 3 * ВАГОН = СОСТАВ.

Задание 8. Решить числовой ребус УДАР + УДАР = ДРАКА.

Задание 9. Решить числовой ребус АТАКА + УДАР + УДАР = НОКАУТ.

Задание 10. Решить числовой ребус FORTY + TEN + TEN = SIXTY.

Задание 11. Решить числовой ребус 3 * ЦВЕТОК = БУКЕТИК.

Задание 12. Решить числовой ребус АНДРЕЙ + ЖАННА = ДРУЖБА.

Задание 13. Решить числовой ребус БАРБОС + БОБИК = СОБАКИ.

Задание 14. Решить числовой ребус ДРАМА + ДРАМА = ТЕАТР.

Задание 15. Решить числовой ребус 3 * ДОМНА = ЗАВОД.

Задание 16. Решить числовой ребус ДЕТАЛЬ + ДЕТАЛЬ = ИЗДЕЛИЕ.

78

Задание 17. Решить числовой ребус БАБКА+ ДЕДКА + РЕПКА = = СКАЗКА.

Задание 18. Решить числовой ребус ТРАВА + КОРОВА + ДОЯРКА = МОЛОКО,

если КОРОВА больше, чем ДОЯРКА.

Задание 19. Решить числовой ребус МУХА + МУХА = СЛОН.

Задание 20. Решить числовой ребус СИНУС + СИНУС + КОСИНУС = ТАНГЕНС

(хотя в математике это не так).

Задание 21. Решить числовой ребус ПОЛСТА+ ПОЛСТА + СТО = = ДВЕСТИ.

Задание 22. Решить числовой ребус БАЛЕТ + БАЛЕТ = ТЕАТР.

Задание 23. Решить числовой ребус 3 * КНИГА = НАУКА.

Задание 24. Решить числовой ребус ОХОХО + АХАХА = АХАХАХ.

Задание 25. Решить числовой ребус НАТАША + ТОНЯ = СЁСТРЫ.

Задание 26. Решить числовой ребус ВЕТКА + ВЕТКА = ДЕРЕВО.

Задание 27. Решить числовой ребус

УС*УС = НОС, СУ*СУ = СОН

Задание 28. Найти решение ребуса – значения «нот» DO, RE, MI, FA, SOL, LA, SI, если

RE + MI = FA

DO + SI = MI

LA + SI = SOL

79

Задание 29. Решить числовой ребус на сложение

ПРИМЕР

РИМЕР

ИМЕР

МЕР

ЕР

Р

------

ЗАДАЧА

Задание 30. Целые числа A и R в уравнении A*8 = R состоят из цифр от 1 до 9 включительно, причём каждая цифра содержится по одному разу как в числе A, так и в числе R. Определите эти числа.

Задание 31. Из цифр 1, 2, 3, …, 9 собрать три трёхзначных числа, каждое из которых является квадратом некоторого натурального числа. Каждую цифру указанного диапазона нужно использовать ровно один раз.

Задание 32. Определить шестизначное число B, цифры которого образуют строго возрастающую последовательность и которое является полным квадратом некоторого натурального числа A. Вывести числа A и B.

Задание 33. Десятизначное число зашифровано стандартным способом словом ПОРТУГАЛИЯ, т. е. одинаковым буквам соответствуют одинаковые цифры, а разным буквам – разные.

Известно, что в каждом из слов ТИР, ТРАП, ПУЛЯ и УГОЛ цифровые значения букв образуют возрастающую последовательность. Расшифровать исходное слово.

2.5. Базы данных

Задание 1. Маршруты городского транспорта. Задан список остановок в формате (Номер, Название) и список маршрутов в формате (Номер, Список_номеров_остановок).

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]