Главная страница
Навигация по странице:

  • 1.3 Выводы по 1 главе 11 2 РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ 12

  • 2.5 Выводы по 2 главе 17 3 РАЗРАБОТКА ТРЕБОВАНИЙ К ТЕХНИЧЕСКИМ СРЕДСТВАМ РЕАЛИЗАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ 18

  • СПИСОК ЛИТЕРАТУРЫ 20

  • 1 АНАЛИЗ ЗАДАНИЙ КУРСОВОЙ РАБОТЫ 1.1 Исходные данные к заданиям курсовой работы

  • 1.2 Анализ методических указаний, входных и выходных данных к заданиям курсовой работы

  • 1.2 Выбор и обоснование необходимых библиотек и среды разработки

  • 2 РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ 2.1 Работа с наборами данных

  • 2.2 Разработка экспертной системы

  • 2.4 Разработка логико-аналитической системы

  • Рекурсивный метод

  • 3 РАЗРАБОТКА ТРЕБОВАНИЙ К ТЕХНИЧЕСКИМ СРЕДСТВАМ РЕАЛИЗАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ

  • ПРИЛОЖЕНИЕ А – ЗАДАНИЕ №1

  • ПРИЛОЖЕНИЕ Б – ЗАДАНИЕ №2

  • ПРИЛОЖЕНИЕ В – ЗАДАНИЕ №3

  • ПРИЛОЖЕНИЕ Г – ЗАДАНИЕ №4

  • бублик. 1 анализ заданий курсовой работы 3 1 Исходные данные к заданиям курсовой работы 3 2 Анализ методических указаний


    Скачать 36.53 Kb.
    Название1 анализ заданий курсовой работы 3 1 Исходные данные к заданиям курсовой работы 3 2 Анализ методических указаний
    Анкорбублик
    Дата27.10.2022
    Размер36.53 Kb.
    Формат файлаdocx
    Имя файлаtest.docx
    ТипАнализ
    #758247

    ВВЕДЕНИЕ 2

    1 АНАЛИЗ ЗАДАНИЙ КУРСОВОЙ РАБОТЫ 3

    1.1 Исходные данные к заданиям курсовой работы 3

    1.2 Анализ методических указаний, входных и выходных данных к заданиям курсовой работы 9

    1.2 Выбор и обоснование необходимых библиотек и среды разработки 10

    1.3 Выводы по 1 главе 11

    2 РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ 12

    2.1 Работа с наборами данных 12

    2.2 Разработка экспертной системы 13

    2.3 Разработка аналитической системы 13

    2.4 Разработка логико-аналитической системы 15

    2.5 Выводы по 2 главе 17

    3 РАЗРАБОТКА ТРЕБОВАНИЙ К ТЕХНИЧЕСКИМ СРЕДСТВАМ РЕАЛИЗАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ 18

    ВЫВОДЫ 19

    СПИСОК ЛИТЕРАТУРЫ 20

    ПРИЛОЖЕНИЕ А – ЗАДАНИЕ №1 21

    ПРИЛОЖЕНИЕ Б – ЗАДАНИЕ №2 22

    ПРИЛОЖЕНИЕ В – ЗАДАНИЕ №3 27

    ПРИЛОЖЕНИЕ Г – ЗАДАНИЕ №4 30

    ВВЕДЕНИЕ

    Python – высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объем полезных функций [7].

    Python поддерживает несколько парадигм программирования: структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты – динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Python организовывается в функции и классы, которые могут объединяться в модули [1].

    Объектом исследования является разработка приложений.

    Предметом исследования является разработка приложений на языке питон. Целью данной работы, является решение прикладных задач.

    Для реализации поставленных целей в работе решается ряд задач:




    • привести исходные данные к заданиям курсовой работы;


    • провести анализ методических указаний, входных и выходных данных к заданиям курсовой работы;


    • осуществить выбор и обоснование необходимых библиотек и среды разработки;


    • провести работу с наборами данных;


    • осуществить разработку экспертной системы;


    • осуществить разработку аналитической системы;


    • осуществить разработку логико-аналитической системы.


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

    1 АНАЛИЗ ЗАДАНИЙ КУРСОВОЙ РАБОТЫ

    1.1 Исходные данные к заданиям курсовой работы


    Задание № 1 - Работа с наборами данных БЕЗ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА (GUI).

    Во внешнем файле resourse_1.txt дан текст. Выведите все слова, встречающиеся в тексте, по одному на каждую строку, через пробел укажите количество повторений. Слова должны быть отсортированы по убыванию их количества появления в тексте, а при одинаковой частоте появления — в лексикографическом порядке. Вывод должен осуществляться в текстовый файл result_1.txt. При необходимости можно продублировать вывод в консоль.

    После того, как вы создадите словарь всех слов, необходимо отсортировать его по частоте встречаемости слова. Желаемого можно добиться, если создать список, элементами которого будут кортежи из двух элементов: частота встречаемости слова и само слово. Например, [(2, 'hi'), (1, 'what'), (3, 'is')]. Тогда стандартная сортировка будет сортировать список кортежей, при этом кортежи сравниваются по первому элементу, а если они равны — то по второму. Знаки препинания не должны учитываться.

    Задание № 2 - Разработка экспертной системы С ГРАФИЧЕСКИМ ИНТЕРФЕЙСОМ (GUI).

    Некоторый банк хочет внедрить систему управления счетами клиентов, поддерживающую следующие операции:




    1. Пополнение счета клиента.


    2. Снятие денег со счета.


    3. Запрос остатка средств на счете.


    4. Перевод денег между счетами клиентов.


    5. Начисление процентов всем клиентам.


    Необходимо реализовать такую систему. Первоначально у банка 1 клиент. Клиент(ы) банка идентифицируются именами (уникальная строка, не содержащая пробелов). Вам необходимо задать в качестве имени клиента – свою фамилию на английском языке с большой буквы. На вашу фамилию должен быть открыт счет с суммой равной вашему ID.

    В отдельном поле должна быть предусмотрена возможность ввода простых команд, которые поддерживают следующие операции:

    DEPOSIT name sum Зачислить сумму sum на счет клиента name. Если клиента нет, то он создается и на него заводится счет с указанной суммой.

    WITHDRAW name sum Снять сумму sum со счета клиента name. Если клиента, то счет создается. Баланс при выполнении такой операции у вновь созданного клиента должен быть отрицательный.

    BALANCE name Узнать остаток средств на счету клиента name. Для каждого запроса BALANCE программа должна вывести остаток на счету данного клиента. Если же у клиента с запрашиваемым именем не открыт счет в банке, выводится сообщение «NO CLIENT». Если пользователь не указал имя клиента – то выводится баланс всех существующих клиентов.

    TRANSFER name1 name2 sum Перевести сумму sum со счета клиента name1 на счет клиента name2. Если у какого-либо клиента, то он заводится в системе и ему создается счет с переведенной суммой.

    INCOME p Начислить всем клиентам, у которых открыты счета, p% от суммы счета. Проценты начисляются только клиентам с положительным остатком на счету, если у клиента остаток отрицательный, то его счет не меняется. После начисления процентов сумма на счету остается целой, то есть начисляется только целое число денежных единиц. Дробная часть начисленных процентов отбрасывается.

    Программа должна обрабатывать текстовые команды из левого поля только после нажатия кнопки «Calculate». То есть, пользователь сначала вводит желаемые команды, при этом каждая новая команда вводится с новой строки, а потом нажимает на кнопку «Calculate». Результат должен быть выведен в поле справа.

    Количество команд, которые может ввести пользователь за один раз – не более 20. При необходимости следует предусмотреть прокрутку в поле. Пользователю допускается вводить «пустые строки» - несколько раз нажимать на кнопку «enter». При нажатии клавиши ввода «enter», фокус не должен переходить на кнопку «Calculate».

    Формат и внешний вид окна определяет разработчик. Для «очистки» левого и правого полей можно предусмотреть кнопку «Clear», при этом данные о ранее введенных клиентах не должны быть потеряны.

    Команды вводятся пользователем только большими буквами. Сама команда, имя клиента, суммы (числа) разделяются пробелами.

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

    Как только для несуществующего ранее клиента проводится операция пополнения (DEPOSIT), снятия (WITHDRAW) или перевода денег (TRANSFER), он вносится в систему, ему заводится счет с указанным балансом. Все дальнейшие операции проводятся только с этим счетом. Сумма на счету может быть как положительной, так и отрицательной, при этом всегда является целым числом.

    Задание № 3 - Разработка аналитической системы С ГРАФИЧЕСКИМ ИНТЕРФЕЙСОМ (GUI).

    Разработать калькулятор со стандартным и расширенным функционалом.

    Стандартный функционал




    1. Арифметические действия + - * /.


    2. Возможность ввода отрицательного числа


    3. Возведение в степень.


    4. Извлечение квадратного корня.


    5. Работа с памятью, состоящей из одной ячейки.


    6. Должна быть кнопка сброса и кнопка «=» (равно).


    Расширенный функционал




    1. Наличие кнопки/меню перехода в расширенный режим


    2. Возможность работы с несколькими ячейками памяти. Количество ячеек памяти выбирается согласно методическим указаниям.


    3. Отображение последовательности математических операций и цифр в n-строчном «дисплее», с возможностью «прокрутки». Количество строк «дисплея» калькулятора выбирается согласно методическим указаниям.


    4. Реализация «инженерных» функций расширенного режима. Конкретный перечень функций выбирается согласно методическим указаниям.


    Необходимо разработать программу и GUI для реализации стандартных функций калькулятора. Примерный вид внешнего интерфейса представлен на рисунке. Конкретная компоновка элементов интерфейса, внешний вил, цветовая палитра, максимальное количество отображаемых цифр, число отображаемых строк на «дисплее» калькулятора могут отличаться от представленного рисунка и должны согласовываться с руководителем курсовой работы.

    Функционал «инженерного» режима работы калькулятора добавляется при нажатии на кнопку перехода в расширенный режим, либо выбора соответствующего пункта меню.

    Расширенный режим работы определяется внешним видом «цифрового дисплея», количеством ячеек памяти (кнопки M+, M-, MS, MR, MS) и кнопками, отвечающими за дополнительные функции.

    Количество строк «цифрового дисплея» должно определяться как последовательная сумма всех цифр ID студента. Суммирование отдельных цифр числа должно осуществляться до получения однозначного числа, состоящей из 1-й цифры. Данный процесс рекомендуется реализовать с помощью рекурсивной функции. Для данной функции должна быть предусмотрена специальная кнопка.

    Количество ячеек памяти калькулятора должно определяться как последовательная сумма последних 3-х чисел ID. Суммирование отдельных цифр числа должно осуществляться до получения однозначного числа, состоящей из 1-й цифры. Данный процесс также рекомендуется реализовать с помощью рекурсивной функции.

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

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

    При разработке программы следует использовать принципы объектно-ориентированного программирования.

    Калькулятор должен работать и корректно выдавать результат.

    Размер кнопок, цветовая палитра, расположение и т.п. определяется самостоятельно. Внешний вид калькулятора не оценивается, однако следует придерживаться традиционных компоновок.

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

    Задание № 4 - Задача о Ханойских башнях С ГРАФИЧЕСКИМ ИНТЕРФЕЙСОМ (GUI).

    Модифицированная задача о Ханойских башнях. Существует 8 шпинделей, пронумерованых от 8 до 1 слева направо. На каждом шпинделе надеты диски, в количестве, равном соответствующей цифре из ID студента. Все диски имеют разные диаметры. Диаметр диска равен M * 10 + N, где М – номер шпинделя, на котором надет диск, а N – это номер диска на шпинделе, считая сверху вниз. Необходимо визуально изобразить предложенную задачу. Диски на шпинделях сделать случайных цветов. На каждом диске отображать цифру, равную его диаметру. Диаметр диска также показывать его фактическим размером в пикселях. Необходимо вычислить, за какое минимальное количество итераций переместятся все диски на шпиндель номер 1 по следующим правилам:




    • за одну итерацию можно переместить не более одного диска;


    • диски можно класть только с большего на меньший;


    • со шпинделя номер 8 можно перекладывать диски только на шпиндели 7 и 6;


    • со шпинделя номер 1 можно перекладывать диски только на шпиндели номер 2 и 3;


    • со шпинделей от 2 по 7 можно перекладывать диски только на два соседних шпинделя.


    Необходимо отобразить начальное и конечное расположение дисков на шпинделях, для этого под изображением Ханойских башен предусмотреть две кнопки «Начало» и «Окончание». При нажатии на нее, в надписи под схемой должен выводится текст «Итерация ХХ», где ХХ – номер итерации (либо 0, либо номер итоговой итерации, соответственно).

    Необходимо графически отобразить четыре промежуточные итерации перекладывания дисков. Для этого:




    • общее количество итераций признаётся равным 100%,


    • ID студента делится на 4 двузначных числа, каждое из которых обозначает итерацию, соответствующую этому проценту выполнения общей задачи.


    Под изображением Ханойских башень предусмотреть четыре поля для ввода цифр с процентами выполнения. По-умолчанию добавить туда числа из п. б)

    Под каждым полем для ввода предусмотреть кнопку, при нажатии на которую схема Ханойской башни отображает расположение дисков на соответствующей итерации. Также в надписи под схемой должен выводится текст «Итерация ХХ», где ХХ – номер итерации

    Дать возможность пользователю изменять проценты в полях для ввода цифр, и по нажатию соответствующей кнопки просматривать расположение дисков на данной итерации.

    Так как задача алгоритмически достаточно проста, то основная часть работы над задачей студента сводится к правильной визуализации полученных результатов, а также оптимальному поиску промежуточных результатов. Поскольку диски близких размеров будут отличаться всего на один пиксель, то для контроля на каждом диске необходимо проставить его диаметр в виде цифры. Так как в конце задачи все диски будут находиться на первом шпинделе, а общее количество дисков теоретически может быть равно 72, то рекомендуется сделать толщину одного диска примерно равной 10-12 пикселям, для указанного окна. Если по какому-либо проценту получается дробная итерация, то необходимо её визуализировать как промежуточный этап переноса диска. При этом диск изобразить в воздухе, между тем шпинделем, с которого он снят, и тем, на который он переносится. Номер итерации в таком случае отображать как дробный, с округлением до 3 цифр после нуля.

    Таким образом, сформулированы исходные данные к заданиям курсовой работы.
    1.2 Анализ методических указаний, входных и выходных данных к заданиям курсовой работы


    Входными данными для задания №1 являются внесенные в текстовый файл resourse_1.txt (5-6 абзацев).

    Выходными данными будет ответ на задание №1 выведенный в текстовый файл result_1.txt.

    Входные данные задания №2 являются внесенные в текстовый файл resourse_2.txt (5-6 абзацев).

    Выходными данными будет ответ на задание №2 выведенный в текстовый файл result_2.txt.

    Входные данные задания №3 является введенные с помощью мыши числа и арифметические операции.

    Выходными данными будет результат, либо сообщение об ошибке при некорректной операции, отображенные на дисплее калькулятора.

    Входными данными задания №4 является идентификатор студента.

    Выходными данными - окно с начальным расположением дисков на шпинделях Ханойских башень. Шпиндели пронумерованы, на дисках также обозначены соответствующие диаметры. Под ней отображается шесть кнопок и четыре поля для ввода цифр. В нижней части экрана демонстрируется надпись «Итерация 0». При нажатии на любую из шести имеющихся кнопок, либо при заполнении поля ввода другими данными и нажатии на кнопку, схема ханойских башен меняется, для отображения соответствующей итерации. Надпись в нижней части экрана также меняется.

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

    1.2 Выбор и обоснование необходимых библиотек и среды разработки


    Среда разработки PyCharm, язык программирования - Python. В работе используются наиболее распространенные библиотеки и модули стандартной библиотеки. В связи с наблюдаемым в настоящее время стремительным развитием персональной вычислительной техники, происходит постепенное изменение требований, предъявляемых к языкам программирования. Все большую роль начинают играть интерпретируемые языки, поскольку возрастающая мощь персональных компьютеров начинает обеспечивать достаточную скорость выполнения интерпретируемых программ. А единственным существенным преимуществом компилируемых языков программирования является создаваемый ими высокоскоростной код. Когда скорость выполнения программы не является критичной величиной, наиболее правильным выбором будет интерпретируемый язык, как более простой и гибкий инструмент программирования. В связи с этим, определенный интерес представляет рассмотрение сравнительно нового языка программирования Python, который был создан его автором Гвидо ван Россумом в начале 90-х годов [2]. Отличительные характеристики языка:




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


    • минималистичный язык, с небольшим количеством конструкций;


    • краткий код;


    • прекрасно подходит для создания программ-обёрток, поддерживается импорт Си-библиотек;


    • существует большое количество реализаций;


    • очень хорошая поддержка математических вычислений (библиотеки NumPy, SciPy);


    • используется для обработки естественных языков (NLTK);


    • большое количество развитых web-фреймворков.


    Язык можно рекомендовать всем, кто только начинает программировать, как первый язык программирования в жизни [6].

    Таким образом, осуществлен выбор и обоснование необходимых библиотек и среды разработки.
    1.3 Выводы по 1 главе


    Таким образом, сформулированы исходные данные к заданиям курсовой работы, проведен анализ методических указаний, входных и выходных данных к заданиям курсовой работы, осуществлен выбор и обоснование необходимых библиотек и среды разработки.
    2 РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ

    2.1 Работа с наборами данных


    Высокоуровневый язык программирования Python 3 предоставляет своим пользователям массу полезных средств для взаимодействия с текстовыми файлами. Встроенные методы платформы позволяют не только создавать документы для хранения строковой информации, но и читать из них данные, а также записывать, удалять и всячески манипулировать их содержимым [3].

    Работа с любым текстовым файлом в Python начинается с вызова специальной функции open, которая принимает в качестве параметров путь к объекту на компьютере и режим обработки. Путь к документу можно указать как абсолютный (адрес расположения на жестком диске ПК), так и как относительный (координаты относительно папки проекта). Выбирая нужный режим обработки файла, следует учитывать его назначение (“w” для записи, “r” для чтения данных). Следующий пример показывает простое взаимодействие с текстовым документом.

    file = open("test.txt", "w")

    file.write("hello world")

    file.close()

    Как можно заметить, функция open принимает относительный путь файла и открывает его для записи. Если в папке с исходным кодом документа с аналогичным именем и расширением .txt не существует, метод open создает его самостоятельно, после чего открывает для него нужный режим обработки. Выполнив все необходимые действия с переменной file, которая ссылается на реальный файл, следует вручную закрыть его, чтобы избежать потери информации. Данную задачу выполняет метод close, если вызвать его при помощи оператора доступа (точки).

    Таким образом, рассмотрена работа с наборами данных.

    2.2 Разработка экспертной системы


    Выполнить точно такие же действия, но без необходимости вручную закрывать файл, вполне возможно благодаря связке операторов with as. Для этого необходимо поместить метод open сразу после ключевого слова with, а переменную, которая будет ссылаться на файл, прописать за конструкцией as. Ниже располагается пример открытия документа с помощью with as.

    with open("test.txt", "w") as file:

    file.write("hello world")

    Оба примера небольших программ демонстрируют работу с test.txt, который генерируется в каталоге с исходным кодом. В качестве режима обработки для него выбирается запись данных. После этого при помощи метода write в него заносится строка “hello world”. Завершается код в обоих случаях закрытием текстового файла test.txt методом close или автоматически.

    Таким образом, рассмотрена разработка экспертной системы.
    2.3 Разработка аналитической системы


    Для реализации калькулятор создаём окно 485 на 550. Размеры не важны. Так же указываем, что окно не будет изменяться. В методе build создаём такой список:

    btns = [

    "C", "DEL", "*", "=",

    "1", "2", "3", "/",

    "4", "5", "6", "+",

    "7", "8", "9", "-",

    "+/-", "0", "%", "X^2"

    ]
    Он отвечает за все кнопки, отображающиеся у нас в окне. Создали список, теперь проходимся циклом и отображаем эти кнопки. Добавляем надпись с выводом результата.
    self.formula = "0"

    self.lbl = Label(text=self.formula, font=("TimesNewRoman", 21, "bold"),

    bg="#000", foreground="#FFF")

    self.lbl.place(x=11, y=50)
    Пишем логику

    def logicalc(self, operation):

    if operation == "C":

    self.formula = ""

    elif operation == "DEL":

    self.formula = self.formula[0:-1]

    elif operation == "X^2":

    self.formula = str((eval(self.formula))**2)

    elif operation == "=":

    self.formula = str(eval(self.formula))

    else:

    if self.formula == "0":

    self.formula = ""

    self.formula += operation

    self.update()

    def update(self):

    if self.formula == "":

    self.formula = "0"

    self.lbl.configure(text=self.formula)
    Таким образом, так, как у нас нет ввода с клавиатуры, мы можем позволить себе сделать так, просто проверить на спец. кнопки (C, DEL, =) и в остальных случаях просто добавить это к формуле.
    2.4 Разработка логико-аналитической системы


    Имеется три стержня a, b и c. На стержень а нанизаны пирамидкой несколько колец разного диаметра. Задача состоит в том, чтобы за наименьшее число ходов перенести пирамиду на стержень b, используя стержень c, как вспомогательный [7].

    За один раз разрешается переносить только одно кольцо, причём, нельзя класть большее кольцо на меньшее.

    Решить головоломку Ханойская башня можно несколькими методами.

    Рекурсивный метод

    Предположим, что известен алгоритм перемещения n-1 дисков с одного стержня на второй, тогда функция play() для перемещения n дисков со стержня surse на стержень receiver должна будет:




    • переместить n-1 диск со стержня surse на стержень storage


    • последний диск n переместить со стержня surse на стержень receiver


    • переместить n-1 диск со стержня storage на стержень receiver.



    Листинг 1. Программа, решающая головоломку Ханойская башня.

    n = 5 # Количестводисков

    def play(n, sourse, receiver, storage):

    """

    Функция перемещения n дисков в головоломке Ханойская башня.

    Аргументы функции:

    Первый аргумент n - integer (целое число), количество дисков в пирамиде.

    sourse, receiver, storage - любоготипа.

    Второй аргумент - sourse, стержень с которого перекладываем диски.

    Третий аргумент - receiver, стержень на который перекладываем диски.

    Четвёртый аргумент - storage, стержень на который перекладываем n-1 дисков

    для временного хранения в процессе общей работы.

    """

    if n <= 0: return

    play(n-1, sourse, storage, receiver)

    print("Диск ", n, " : ", sourse, " --> ", receiver)

    play(n-1, storage, receiver, sourse)
    play (n, 'a', 'b', 'c')
    Результат работы программы решающей головоломку Ханойская башня с пятью дисками.

    Диск 1 : a --> b

    Диск 2 : a --> c

    Диск 1 : b --> c

    Диск 3 : a --> b

    Диск 1 : c --> a

    Диск 2 : c --> b

    Диск 1 : a --> b

    Диск 4 : a --> c

    Диск 1 : b --> c

    Диск 2 : b --> a

    Диск 1 : c --> a

    Диск 3 : b --> c

    Диск 1 : a --> b

    Диск 2 : a --> c

    Диск 1 : b --> c

    Диск 5 : a --> b

    Диск 1 : c --> a

    Диск 2 : c --> b

    Диск 1 : a --> b

    Диск 3 : c --> a

    Диск 1 : b --> c

    Диск 2 : b --> a

    Диск 1 : c --> a

    Диск 4 : c --> b

    Диск 1 : a --> b

    Диск 2 : a --> c

    Диск 1 : b --> c

    Диск 3 : a --> b

    Диск 1 : c --> a

    Диск 2 : c --> b

    Диск 1 : a --> b

    Таким образом, не трудно заметить, что минимальное число ходов, необходимое для решения головоломки, равно (2n − 1), где n — число дисков.

    2.5 Выводы по 2 главе


    Таким образом, в данной главе проведена работа с наборами данных, осуществлена разработка экспертной системы, разработка аналитической системы и разработка логико-аналитической системы.

    3 РАЗРАБОТКА ТРЕБОВАНИЙ К ТЕХНИЧЕСКИМ СРЕДСТВАМ РЕАЛИЗАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ

    Для выполнения работы рекомендуется установить Python из Microsoft Store. При установке из Microsoft Store используется базовый интерпретатор Python3, но в дополнение к автоматическому обновлению также настраиваются параметры пути для текущего пользователя (без необходимости доступа администратора). Это особенно полезно, если работать из среды образовательного учреждения [4].

    Если тспользовать Python в Windows для разработки веб-приложений, мы рекомендуем настроить среду разработки другим образом. Вместо установки непосредственно в Windows рекомендуется установить и использовать Python через подсистему Windows для Linux.

    В некоторых сложных сценариях (например, при необходимости модификации или доступа к установленным файлам Python, создания копий двоичных файлов или непосредственного использования библиотек DLL Python) может потребоваться загрузить определенный выпуск Python непосредственно с сайта python.org или установить альтернативное средство, например Anaconda, Jython, PyPy, WinPython, IronPython [8].

    Таким образом, в данной главе рассмотрены требования к техническим средствам реализации программного обеспечения для решения прикладных задач.
    ВЫВОДЫ

    Python - современный язык программирования, работающий на всех распространенных операционных системах для настольных компьютеров. Язык программирования Питон разрабатывается чуть более 20 лет. В настоящее время активно используется две версии языка — более старая версия 2 и современная версия. Версия 2 более не развивается, но до сих пор еще используется, поскольку очень много программного обеспечения и библиотек разработано именно для версии 2. Между версиями есть существенная несовместимость, в том числе в синтаксисе команд ввода-вывода (программа на языке Python 2-й версии может не работать в 3-й версии и наоборот), но в целом они очень похожи. Мы будет использовать именно версию 3, как более современную и совершенную.

    Python - современный универсальный интерпретируемый язык программирования.

    Его достоинства:

    Кроссплатформенность и бесплатное распространение.

    Простой синтаксис и богатые возможности позволяют записывать программы очень кратко, но в то же время понятно.

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

    Богатая стандартная библиотека, возможность разработки промышленных приложений (для работы с сетью, GUI, базами данных и т.д.)
    СПИСОК ЛИТЕРАТУРЫ




    1. Бакетт, Крис Dart в действии / Крис Бакетт. - М.: ДМК Пресс, 2020. - 886 c.


    2. Головатый, А. Django. Подробное руководство / А. Головатый. - М.: Символ-плюс, 2020. - 429 c.


    3. Кристиансен, Том Программирование на Perl / Том Кристиансен и др. - М.: Символ-плюс, 2022. - 710 c.


    4. Лутц, М. Программирование на Python. Том 2 / М. Лутц. - М.: Символ-плюс, 2021. - 270 c.


    5. Любанович, Билл Простой Python. Современный стиль программирования / Билл Любанович. - М.: Питер, 2022. - 480 c.


    6. Марк, Лутц Программирование на Python. Том 1 / Лутц Марк. - М.: Символ-плюс, 2020. - 878 c.


    7. Прохоренок, Николай Python 3 и PyQt. Разработка приложений / Николай Прохоренок. - М.: БХВ-Петербург, 2020. - 704 c.


    8. Сошников, Дмитрий Функциональное программирование на Python / Дмитрий Сошников. - М.: ДМК Пресс, 2021. - 752 c.


    9. Уэсли, Дж. Чан Python. Создание приложений / Уэсли Дж. Чан. - М.: Вильямс, 2020. - 816 c.


    10. Форсье, Джефф Django. Разработка веб-приложений на Python / Джефф Форсье , Пол Биссекс , Уэсли Чан. - М.: Символ-плюс, 2020. - 456 c.



    ПРИЛОЖЕНИЕ А – ЗАДАНИЕ №1

    import re

    import string

    frequency = {}

    document_text = open('test.txt', 'r')

    text_string = document_text.read().lower()

    match_pattern = re.findall(r'\b[a-z]{3,15}\b', text_string)

    for word in match_pattern:

    count = frequency.get(word,0)

    frequency[word] = count + 1

    frequency_list = frequency.keys()

    for words in frequency_list:

    print words, frequency[words]
    ПРИЛОЖЕНИЕ Б – ЗАДАНИЕ №2

    from tkinter import *
    clients_list = ["Agapova"]

    money_list = [70164163]

    def reading(): # Построчное чтение запросов из текстового поля 1

    request = ent1.get(1.0, END).strip().split("\n")

    for line in request:

    line_number = request.index(line) + 1

    line = line.strip().split()
    if line[0] == "DEPOSIT":

    deposit(line[1], line[2])

    elif line[0] == "WITHDRAW":

    withdraw(line[1], line[2])

    elif line[0] == "BALANCE":

    print(len(line))

    if len(line) == 1:

    balance()

    else:

    balance(line[1])

    elif line[0] == "TRANSFER":

    transfer(line[1], line[2], line[3])

    elif line[0] == "INCOME":

    income(line[1])

    else:

    ent2.insert("1.0", "ERROR REQUEST\n")

    def deposit(name, sum): # Зачисление суммы на счёт

    if name in clients_list:

    money_list[clients_list.index(name)] += int(sum)

    else:

    clients_list.append(name)

    money_list.append(int(sum))

    printer(name)

    def withdraw(name, sum): # Снятие суммы со счёта

    if name in clients_list:

    money_list[clients_list.index(name)] -= int(sum)

    else:

    clients_list.append(name)

    money_list.append(-int(sum))

    printer(name)

    def balance(name="all"): # Проверка баланса. all - вывод баланса всех клиентов

    if (name in clients_list) or (name == "all"):

    printer(name)

    else:

    ent2.insert("1.0", f"NO CLIENT\n")

    def transfer(name1, name2, sum): # Перевод между счетами от кого - name1, кому - name2

    if (name1 in clients_list) and (name2 in clients_list):

    money_list[clients_list.index(name1)] -= int(sum)

    money_list[clients_list.index(name2)] += int(sum)

    elif (name1 in clients_list) and (name2 not in clients_list):

    money_list[clients_list.index(name1)] -= int(sum)

    clients_list.append(name2)

    money_list.append(int(sum))

    elif (name1 not in clients_list) and (name2 in clients_list):

    money_list[clients_list.index(name2)] += int(sum)

    clients_list.append(name1)

    money_list.append(-int(sum))

    else:

    clients_list.append(name1)

    money_list.append(-int(sum))

    clients_list.append(name2)

    money_list.append(int(sum))

    printer(name2)

    def income(p): # Добавление процентов на неотрицательные счета

    for i in money_list:

    if i > 0:

    money_list[money_list.index(i)] = int(i + i*int(p)/100)

    printer()

    def clearance(): # Очистка полей 1 и 2

    ent1.delete(1.0, END)

    ent2.delete(1.0, END)

    def printer(name="all"): # Вывод баланса в поле 2

    if name != "all":

    index = clients_list.index(name)

    ent2.insert("1.0", f"BALANCE: {clients_list[index]} {money_list[index]}\n")

    else:

    for i in range(len(clients_list)):

    ent2.insert("1.0", f"BALANCE: {clients_list[i]} {money_list[i]}\n")

    root = Tk()

    ent1 = Text(width=25, height=6)

    ent2 = Text(width=25, height=6)

    but1 = Button(text="Calculate", command=reading)

    but2 = Button(text="Clear", command=clearance)

    ent1.grid(row=0)

    ent2.grid(row=0, column=1)

    but1.grid(row=1)

    but2.grid(row=1, column=1)

    root.mainloop()
    ПРИЛОЖЕНИЕ В – ЗАДАНИЕ №3

    from tkinter import *

    class Main(Frame):

    def __init__(self, root):

    super(Main, self).__init__(root)

    self.build()
    def build(self):

    self.formula = "0"

    self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"), bg="#000", foreground="#FFF")

    self.lbl.place(x=11, y=50)
    btns = [

    "C", "DEL", "*", "=",

    "1", "2", "3", "/",

    "4", "5", "6", "+",

    "7", "8", "9", "-",

    "(", "0", ")", "X^2"

    ]
    x = 10

    y = 140

    for bt in btns:

    com = lambda x=bt: self.logicalc(x)

    Button(text=bt, bg="#FFF",

    font=("Times New Roman", 15),

    command=com).place(x=x, y=y,

    width=115,

    height=79)

    x += 117

    if x > 400:

    x = 10

    y += 81
    def logicalc(self, operation):

    if operation == "C":

    self.formula = ""

    elif operation == "DEL":

    self.formula = self.formula[0:-1]

    elif operation == "X^2":

    self.formula = str((eval(self.formula))**2)

    elif operation == "=":

    self.formula = str(eval(self.formula))

    else:

    if self.formula == "0":

    self.formula = ""

    self.formula += operation

    self.update()
    def update(self):

    if self.formula == "":

    self.formula = "0"

    self.lbl.configure(text=self.formula)

    if __name__ == '__main__':

    root = Tk()

    root["bg"] = "#000"

    root.geometry("485x550+200+200")

    root.title("Калькулятор")

    root.resizable(False, False)

    app = Main(root)

    app.pack()

    root.mainloop()

    ПРИЛОЖЕНИЕ Г – ЗАДАНИЕ №4

    # -*- coding: utf-8 -*-

    import sys

    class Hanoi:

    def move(self, a, b, c, n):

    if n == 1:

    c.append(a[len(a)-1])

    del a[len(a)-1]

    if f == 1: self.display(a, b, c)

    else:

    self.move(a, c, b, n - 1)

    c.append(a[len(a)-1])

    del a[len(a)-1]

    if f == 1: self.display(a, b, c)

    self.move(b, a, c, n - 1)

    def __init__(self, n):

    if n > 0:

    self.a = []

    for i in range(n):

    self.a.append(n - i)

    self.b = []

    self.c = []

    self.n = n

    self.display(self.a, self.b, self.c)

    self.move(self.a, self.b, self.c, self.n)

    def display(self, a, b, c):

    print u"1: ",

    for i in range(len(a)):

    print str(a[i]) + ' ',

    print ""

    print u"2: ",

    for i in range(len(b)):

    print str(b[i]) + ' ',

    print ""

    print u"3: ",

    for i in range(len(c)):

    print str(c[i]) + ' ',

    print ""

    if len(sys.argv) > 3 or len(sys.argv) < 2:

    print "error"

    sys.exit(1)

    f = 0

    n = int(sys.argv[1])

    if len(sys.argv) == 3 and sys.argv[2] == "-v":

    f = 1

    x = Hanoi(n)

    del x

    sys.exit(u"Complete")


    написать администратору сайта