Министерство науки и высшего образования Российской Федерации ФГБОУ ВО Кубанский государственный технологический университет Многоотраслевой институт подготовки и переподготовки специалистов Кафедра информационных систем и программирования Направление подготовки 09.03.04 Программная инженерия (код и наименование направления) Профиль Проектирование и разработка программного обеспечения (наименование профиля) КОНТРОЛЬНАЯ РАБОТА № 1 Вариант 2 по дисциплине Логическое программирование _______________ (наименование дисциплины) Студент 3 курса, шифр Группа 20-ЗКБс-ПР1 Фамилия Солодкий Имя Никита 20-ЗКБс-012 Отчество , специальность 09.03.04 Константинович Дата поступления работы Оценка Рецензент ” 2023 г. Подпись ” Краснодар 2023 Урвачев П. М. Содержание Содержание…………………………………………………………………2 Введение…………………………………………………………………….3 Написать цель для определения того, содержит ли введённая с клавиатуры строка только строчные буквы. Использовать красное отсечение….…..4 Написать предикат вычисления факториала…………………..….……....5 Разработать программу преобразования арабских чисел в римские в диапазоне от 0 до 999………………………………………….…………....6 Заключение…………………………………………………………………..7 Список использованных источников………………………………………8 2 Введение Логи́ческое программи́рование — парадигма программирования, основанная на математической логике — программы в ней задаются в форме логических утверждений и правил вывода. Наиболее известный язык логического программирования — Пролог. Первым языком логического программирования был язык Плэнер, в котором была заложена возможность автоматического вывода результата из данных и заданных правил перебора вариантов (совокупность которых называлась планом). Плэнер использовался для того, чтобы понизить требования к вычислительным ресурсам (с использованием техники поиска с возвратом) и обеспечить возможность вывода фактов, без активного использования стека. Затем был разработан Пролог, который не требовал плана перебора вариантов и был, в этом смысле, упрощением Плэнера. От Плэнера также произошли логические языки программирования QA-4, Popler, Conniver и QLISP, а также язык Ether, не использующих метод поиска с возвратами[1]. Языки Mercury, Visual Prolog, Oz, Fril, Datalog основаны на Прологе. 3 Написать цель для определения того, содержит ли введённая с клавиатуры строка только строчные буквы. Использовать красное отсечение run():init(), X=read(),Y=read(), % ввод двух чисел clearInput(), % очистка буфера ввода ( X>Y,!,write("Максимальное число: ",X); % для X>Y write("Максимальное число: ",Y) % для X<=Y ), _=readchar(),!; write("\nПрограмма завершена"), _=readchar(). 4 Написать предикат вычисления факториала implement main open core, console constants className = "com/visual-prolog/main". classVersion = "$JustDate: $$Revision: $". class predicates append : (Elem* Список1, Elem* Список2, Elem* Результат) procedure (i,i,o). clauses classInfo(className, classVersion). append([X|L1],L2,[X|L]) :- !,append(L1,L2,L). append(_,L,L). run():-init(), append(["123","abc","абв"],["prolog","пролог"],L), write(L),nl, append([8.2,9.4,10.8],[-0.999,123.45],L1), write(L1),nl, _=readchar(). end implement main goal mainExe::run(main::run). 5 Разработать программу преобразования арабских чисел в римские в диапазоне от 0 до 999 def checkio(data): rom = ['I', 'V', 'X', 'L', 'C', 'D', 'M'] str_data = str(data) str_data = str_data[::-1] num_digits = len(str_data) ans = "" rom_pointer = 0 for place in range(num_digits): if str_data[place] in ["0", "1", "2", "3"]: ans = rom[rom_pointer] * int(str_data[place]) + ans elif str_data[place] in ["4"]: ans = rom[rom_pointer] + rom[rom_pointer + 1] + ans elif str_data[place] in ["5", "6", "7", "8"]: ans = rom[rom_pointer + 1] + rom[rom_pointer] * (int(str_data[place]) - 5) + ans elif str_data[place] in ["9"]: ans = rom[rom_pointer] + rom[rom_pointer + 2] + ans rom_pointer += 2 return ans 6 Заключение Сегодня мы многое поняли (с) — и прикоснулись к вершине айсберга логического программирования. Тезисно (tl;dr) статья умещается в несколько пунктов: современное логическое программирование != Пролог; ASP хорош для решения комбинаторных задач; вероятностное логическое программирование подходит для моделей вида: правила + вероятность; лучше всего использовать ASP и ЛП для создания прототипов и тестирования идей: "а нам вообще что-то даст это дополнительное ограничение?", "против чего тестировать будем?", etc; если у вас нет хороших идей, как написать быстрый поиск к трудной задаче с ограничениями, скорее всего вам пригодится ASP и это будет быстрее и надежнее лобового решения. 7 Список использованных источников 1. Фаулер M. Рефакторинг: улучшение существующего кода. – Пер. с англ. – СПб: Символ Плюс, 2003. – 432 с. 2. Сыромятников С.В., Бронштейн И.Е., Луговской Н.Л. Рефакторинг в рамках программного проекта. Труды Института системного программирования РАН. 2014. – 402 с. 3. Лаврищева, Е. М. Программная инженерия. Парадигмы, технологии и case-средства: учебник для вузов / Е. М. Лаврищева. – 2-е изд., испр. – М.: Издательство Юрайт, 2018. – 280 с. 4. Мартин Р., Чистый код: создание, анализ и рефакторинг. – СПб.: Питер, 2019. – 464 с. 5. Макконнелл С. Совершенный код. Мастер класс / Пер. с англ. – М.: Издательство «Русская редакция», 2010. – 896 с. 6. Назаров С.В. Архитектура и проектирование программных систем. М.: ИНФРА-М, 2013. – 352 с. 8