Разработка программного продукта для решения прикладных задач
Заказать уникальную курсовую работу- 79 79 страниц
- 3 + 3 источника
- Добавлена 06.10.2021
- Содержание
- Часть работы
- Список литературы
- Вопросы/Ответы
1.1. Исходные данные к заданиям курсовой работы 5
1.2. Анализ методических указаний, входных и выходных данных к заданиям курсовой работы 18
1.3. Выбор и обоснование необходимых сторонних библиотек и среды разработки 19
1.4. Выводы по первой главе 20
2. Разработка программного продукта для решения прикладных задач 21
2.1. Работа с наборами данных 21
2.1.1. Построение алгоритма решения задачи без графического интерфейса 21
2.1.2. Разработка программной реализации на языке программирования Python 3 22
2.1.3. Тестирование и отладка 23
2.2. Разработка экспертной системы 24
2.2.1. Построение алгоритма решения задания с графическим интерфейсом 24
2.2.2. Разработка программной реализации с использованием внешних библиотек 25
2.2.3. Тестирование и отладка 34
2.3. Разработка аналитической системы 35
2.3.1. Построение алгоритма решения задания с графическим интерфейсом 35
2.3.2. Разработка программной реализации с использованием внешних библиотек 38
2.3.3. Тестирование и отладка 71
2.4. Разработка логико-аналитической системы 72
2.4.1. Построение алгоритма решения «Ханойские башни» 72
2.4.2. Разработка программной реализации 74
2.4.3. Тестирование и отладка 78
3. Выводы 79
checkBox = QCheckBox(self.centralwidget) self.checkBox.setObjectName(u"checkBox") self.checkBox.setGeometry(QRect(240, 300, 211, 31)) font8 = QFont() font8.setPointSize(12) font8.setBold(True) font8.setWeight(75) self.checkBox.setFont(font8) self.pushButton_22 = QPushButton(self.centralwidget) self.pushButton_22.setObjectName(u"pushButton_22") self.pushButton_22.setGeometry(QRect(20, 600, 91, 51)) self.pushButton_22.setFont(font5) self.pushButton_22.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_19 = QPushButton(self.centralwidget) self.pushButton_19.setObjectName(u"pushButton_19") self.pushButton_19.setGeometry(QRect(130, 460, 91, 51)) self.pushButton_19.setFont(font5) self.pushButton_19.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_11 = QPushButton(self.centralwidget) self.pushButton_11.setObjectName(u"pushButton_11") self.pushButton_11.setGeometry(QRect(350, 530, 91, 51)) self.pushButton_11.setFont(font5) self.pushButton_11.setStyleSheet(u"background-color: rgb(150, 150, 150);\n""color: rgb(255, 255, 255);") self.pushButton_13 = QPushButton(self.centralwidget) self.pushButton_13.setObjectName(u"pushButton_13") self.pushButton_13.setGeometry(QRect(350, 600, 91, 51)) self.pushButton_13.setFont(font5) self.pushButton_13.setStyleSheet(u"background-color: rgb(150, 150, 150);\n""color: rgb(255, 255, 255);") self.pushButton_24 = QPushButton(self.centralwidget) self.pushButton_24.setObjectName(u"pushButton_24") self.pushButton_24.setGeometry(QRect(240, 600, 91, 51)) self.pushButton_24.setFont(font5) self.pushButton_24.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_15 = QPushButton(self.centralwidget) self.pushButton_15.setObjectName(u"pushButton_15") self.pushButton_15.setGeometry(QRect(350, 670, 91, 51)) self.pushButton_15.setFont(font5) self.pushButton_15.setStyleSheet(u"background-color: rgb(150, 150, 150);\n""color: rgb(255, 255, 255);") self.pushButton_14 = QPushButton(self.centralwidget) self.pushButton_14.setObjectName(u"pushButton_14") self.pushButton_14.setGeometry(QRect(460, 600, 91, 51)) self.pushButton_14.setFont(font5) self.pushButton_14.setStyleSheet(u"background-color: rgb(150, 150, 150);\n""color: rgb(255, 255, 255);") self.pushButton_4 = QPushButton(self.centralwidget) self.pushButton_4.setObjectName(u"pushButton_4") self.pushButton_4.setGeometry(QRect(130, 390, 91, 51)) self.pushButton_4.setFont(font5) self.pushButton_4.setStyleSheet(u"background-color: rgb(0, 85, 255);\n""color: rgb(255, 255, 255);") self.pushButton_25 = QPushButton(self.centralwidget) self.pushButton_25.setObjectName(u"pushButton_25") self.pushButton_25.setGeometry(QRect(240, 670, 91, 51)) self.pushButton_25.setFont(font5) self.pushButton_25.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_26 = QPushButton(self.centralwidget) self.pushButton_26.setObjectName(u"pushButton_26") self.pushButton_26.setGeometry(QRect(20, 670, 201, 51)) self.pushButton_26.setFont(font5) self.pushButton_26.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_3 = QPushButton(self.centralwidget) self.pushButton_3.setObjectName(u"pushButton_3") self.pushButton_3.setGeometry(QRect(20, 390, 91, 51)) self.pushButton_3.setFont(font5) self.pushButton_3.setStyleSheet(u"background-color: rgb(0, 85, 255);\n""color: rgb(255, 255, 255);") self.pushButton_6 = QPushButton(self.centralwidget) self.pushButton_6.setObjectName(u"pushButton_6") self.pushButton_6.setGeometry(QRect(350, 390, 91, 51)) self.pushButton_6.setFont(font5) self.pushButton_6.setStyleSheet(u"background-color: rgb(0, 85, 255);\n""color: rgb(255, 255, 255);") self.pushButton_23 = QPushButton(self.centralwidget) self.pushButton_23.setObjectName(u"pushButton_23") self.pushButton_23.setGeometry(QRect(130, 600, 91, 51)) self.pushButton_23.setFont(font5) self.pushButton_23.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_8 = QPushButton(self.centralwidget) self.pushButton_8.setObjectName(u"pushButton_8") self.pushButton_8.setGeometry(QRect(20, 460, 91, 51)) self.pushButton_8.setFont(font5) self.pushButton_8.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_18 = QPushButton(self.centralwidget) self.pushButton_18.setObjectName(u"pushButton_18") self.pushButton_18.setGeometry(QRect(130, 530, 91, 51)) self.pushButton_18.setFont(font5) self.pushButton_18.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_63 = QPushButton(self.centralwidget) self.pushButton_63.setObjectName(u"pushButton_63") self.pushButton_63.setGeometry(QRect(130, 300, 91, 61)) self.pushButton_63.setFont(font4) self.pushButton_63.setStyleSheet(u"background-color: rgb(255, 0, 0);\n""color: rgb(255, 255, 255);") self.pushButton_5 = QPushButton(self.centralwidget) self.pushButton_5.setObjectName(u"pushButton_5") self.pushButton_5.setGeometry(QRect(240, 390, 91, 51)) self.pushButton_5.setFont(font5) self.pushButton_5.setStyleSheet(u"background-color: rgb(0, 85, 255);\n""color: rgb(255, 255, 255);") self.pushButton_12 = QPushButton(self.centralwidget) self.pushButton_12.setObjectName(u"pushButton_12") self.pushButton_12.setGeometry(QRect(460, 530, 91, 51)) font9 = QFont() font9.setPointSize(14) font9.setBold(True) font9.setWeight(75) self.pushButton_12.setFont(font9) self.pushButton_12.setStyleSheet(u"background-color: rgb(150, 150, 150);\n""color: rgb(255, 255, 255);") self.pushButton_21 = QPushButton(self.centralwidget) self.pushButton_21.setObjectName(u"pushButton_21") self.pushButton_21.setGeometry(QRect(240, 530, 91, 51)) self.pushButton_21.setFont(font5) self.pushButton_21.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_9 = QPushButton(self.centralwidget) self.pushButton_9.setObjectName(u"pushButton_9") self.pushButton_9.setGeometry(QRect(350, 460, 91, 51)) self.pushButton_9.setFont(font5) self.pushButton_9.setStyleSheet(u"background-color: rgb(150, 150, 150);\n""color: rgb(255, 255, 255);") self.pushButton_20 = QPushButton(self.centralwidget) self.pushButton_20.setObjectName(u"pushButton_20") self.pushButton_20.setGeometry(QRect(240, 460, 91, 51)) self.pushButton_20.setFont(font5) self.pushButton_20.setStyleSheet(u"background-color: rgb(255, 255, 255);\n""color: rgb(0, 85, 255);") self.pushButton_10 = QPushButton(self.centralwidget) self.pushButton_10.setObjectName(u"pushButton_10") self.pushButton_10.setGeometry(QRect(460, 460, 91, 51)) self.pushButton_10.setFont(font5) self.pushButton_10.setStyleSheet(u"background-color: rgb(150, 150, 150);\n""color: rgb(255, 255, 255);") self.pushButton_16 = QPushButton(self.centralwidget) self.pushButton_16.setObjectName(u"pushButton_16") self.pushButton_16.setGeometry(QRect(460, 670, 91, 51)) self.pushButton_16.setFont(font5) self.pushButton_16.setStyleSheet(u"background-color: rgb(0, 85, 255);\n""color: rgb(255, 255, 255);") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(MainWindow) self.menubar.setObjectName(u"menubar") self.menubar.setGeometry(QRect(0, 0, 910, 21)) MainWindow.setMenuBar(self.menubar) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName(u"statusbar") MainWindow.setStatusBar(self.statusbar) self.pushButton_22.clicked.connect(self.digit("1")) self.pushButton_11.clicked.connect(self.operat("*")) self.pushButton_16.clicked.connect(self.ravno) self.pushButton_21.clicked.connect(self.digit("6")) self.pushButton_23.clicked.connect(self.digit("2")) self.pushButton_20.clicked.connect(self.digit("9")) self.pushButton_26.clicked.connect(self.digit("0")) self.pushButton_19.clicked.connect(self.digit("8")) self.pushButton_18.clicked.connect(self.digit("5")) self.pushButton_8.clicked.connect(self.digit("7")) self.pushButton_24.clicked.connect(self.digit("3")) self.pushButton_17.clicked.connect(self.digit("4")) self.pushButton_25.clicked.connect(self.digit(".")) self.pushButton_2.clicked.connect(self.sbros) self.pushButton_13.clicked.connect(self.operat("-")) self.pushButton_9.clicked.connect(self.operat("/")) self.pushButton_15.clicked.connect(self.operat("+")) self.pushButton_25.clicked.connect(self.tochka) self.pushButton_10.clicked.connect(self.operat("**")) self.pushButton_12.clicked.connect(self.sqrt) self.pushButton_14.clicked.connect(self.pl_min) self.pushButton_5.clicked.connect(self.ms) self.pushButton_3.clicked.connect(self.mdel) self.pushButton_4.clicked.connect(self.mr) self.pushButton_6.clicked.connect(self.mplus) self.pushButton_14.clicked.connect(self.mminus) self.pushButton_64.clicked.connect(self.ce) self.pushButton_40.clicked.connect(self.exp) self.pushButton_41.clicked.connect(self.operat("y-ый корень числа x")) self.pushButton_39.clicked.connect(self.lg10) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) Переводим названия кнопок def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) self.label_2.setText(QCoreApplication.translate("MainWindow", u"\u0413\u0440\u043e\u043c\u043e\u0432 \u041e\u043b\u0435\u0433 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u043e\u0432\u0438\u0447", None)) self.label_3.setText(QCoreApplication.translate("MainWindow", u" ID=70177166", None)) self.pushButton_27.setText(QCoreApplication.translate("MainWindow", u"Int", None)) self.pushButton_28.setText(QCoreApplication.translate("MainWindow", u"sinh", None)) self.pushButton_29.setText(QCoreApplication.translate("MainWindow", u"sin", None)) self.pushButton_30.setText(QCoreApplication.translate("MainWindow", u"Int", None)) self.pushButton_31.setText(QCoreApplication.translate("MainWindow", u"cos", None)) self.pushButton_32.setText(QCoreApplication.translate("MainWindow", u"Dms", None)) self.pushButton_33.setText(QCoreApplication.translate("MainWindow", u"cosh", None)) self.pushButton_34.setText(QCoreApplication.translate("MainWindow", u"x^y", None)) self.pushButton_35.setText(QCoreApplication.translate("MainWindow", u"tan", None)) self.pushButton_36.setText(QCoreApplication.translate("MainWindow", u"Pi", None)) self.pushButton_37.setText(QCoreApplication.translate("MainWindow", u"tanh", None)) self.pushButton_38.setText(QCoreApplication.translate("MainWindow", u"X3", None)) self.pushButton_39.setText(QCoreApplication.translate("MainWindow", u"lg10", None)) self.pushButton_40.setText(QCoreApplication.translate("MainWindow", u"F-E", None)) self.pushButton_41.setText(QCoreApplication.translate("MainWindow", u"x^(1/y)", None)) self.pushButton_42.setText(QCoreApplication.translate("MainWindow", u"Log", None)) self.textEdit.setHtml(QCoreApplication.translate("MainWindow", u"\n""
\n""0
", None)) self.pushButton_64.setText(QCoreApplication.translate("MainWindow", u"CE", None)) self.pushButton.setText(QCoreApplication.translate("MainWindow", u"функция", None)) self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"C", None)) self.pushButton_17.setText(QCoreApplication.translate("MainWindow", u"4", None)) self.label_4.setText(QCoreApplication.translate("MainWindow", u"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438", None)) self.label_5.setText(QCoreApplication.translate("MainWindow", u"1", None)) self.pushButton_43.setText(QCoreApplication.translate("MainWindow", u"MC1", None)) self.pushButton_46.setText(QCoreApplication.translate("MainWindow", u"MR1", None)) self.pushButton_45.setText(QCoreApplication.translate("MainWindow", u"MS1", None)) self.pushButton_44.setText(QCoreApplication.translate("MainWindow", u"M+1", None)) self.pushButton_47.setText(QCoreApplication.translate("MainWindow", u"M-1", None)) self.label_6.setText(QCoreApplication.translate("MainWindow", u"2", None)) self.pushButton_48.setText(QCoreApplication.translate("MainWindow", u"MC2", None)) self.pushButton_49.setText(QCoreApplication.translate("MainWindow", u"MR2", None)) self.pushButton_50.setText(QCoreApplication.translate("MainWindow", u"MS2", None)) self.pushButton_51.setText(QCoreApplication.translate("MainWindow", u"M+2", None)) self.pushButton_52.setText(QCoreApplication.translate("MainWindow", u"M-2", None)) self.label_7.setText(QCoreApplication.translate("MainWindow", u"3", None)) self.pushButton_53.setText(QCoreApplication.translate("MainWindow", u"MC3", None)) self.pushButton_54.setText(QCoreApplication.translate("MainWindow", u"MR3", None)) self.pushButton_55.setText(QCoreApplication.translate("MainWindow", u"MS3", None)) self.pushButton_56.setText(QCoreApplication.translate("MainWindow", u"M+3", None)) self.pushButton_57.setText(QCoreApplication.translate("MainWindow", u"M-3", None)) self.label_8.setText(QCoreApplication.translate("MainWindow", u"4", None)) self.pushButton_58.setText(QCoreApplication.translate("MainWindow", u"MC4", None)) self.pushButton_59.setText(QCoreApplication.translate("MainWindow", u"MR4", None)) self.pushButton_60.setText(QCoreApplication.translate("MainWindow", u"MS4", None)) self.pushButton_61.setText(QCoreApplication.translate("MainWindow", u"M+4", None)) self.pushButton_62.setText(QCoreApplication.translate("MainWindow", u"M-4", None)) self.checkBox.setText(QCoreApplication.translate("MainWindow", u"Обычный режим", None)) self.pushButton_22.setText(QCoreApplication.translate("MainWindow", u"1", None)) self.pushButton_19.setText(QCoreApplication.translate("MainWindow", u"8", None)) self.pushButton_11.setText(QCoreApplication.translate("MainWindow", u"*", None)) self.pushButton_13.setText(QCoreApplication.translate("MainWindow", u"-", None)) self.pushButton_24.setText(QCoreApplication.translate("MainWindow", u"3", None)) self.pushButton_15.setText(QCoreApplication.translate("MainWindow", u"+", None)) self.pushButton_14.setText(QCoreApplication.translate("MainWindow", u"+/-", None)) self.pushButton_4.setText(QCoreApplication.translate("MainWindow", u"<--", None)) self.pushButton_25.setText(QCoreApplication.translate("MainWindow", u".", None)) self.pushButton_26.setText(QCoreApplication.translate("MainWindow", u"0", None)) self.pushButton_3.setText(QCoreApplication.translate("MainWindow", u"%", None)) self.pushButton_6.setText(QCoreApplication.translate("MainWindow", u"x^2", None)) self.pushButton_23.setText(QCoreApplication.translate("MainWindow", u"2", None)) self.pushButton_8.setText(QCoreApplication.translate("MainWindow", u"7", None)) self.pushButton_18.setText(QCoreApplication.translate("MainWindow", u"5", None)) self.pushButton_63.setText(QCoreApplication.translate("MainWindow", u"<>", None)) self.pushButton_5.setText(QCoreApplication.translate("MainWindow", u"1/x", None)) self.pushButton_12.setText(QCoreApplication.translate("MainWindow", u"корень", None)) self.pushButton_21.setText(QCoreApplication.translate("MainWindow", u"6", None)) self.pushButton_9.setText(QCoreApplication.translate("MainWindow", u"/", None)) self.pushButton_20.setText(QCoreApplication.translate("MainWindow", u"9", None)) self.pushButton_10.setText(QCoreApplication.translate("MainWindow", u"X^y", None)) self.pushButton_16.setText(QCoreApplication.translate("MainWindow", u"=", None))Перевод числа в экспоненциальную форму и обратноdef exp(self): if len(self.out)>0: s=self.out[-1] if s.isdigit(): ifs.find("e") < 0:self.out.append("перевод в экспоненциальную форму")self.out.append("{:e}".format(float(s))) else: if len(self.out)>0: if s.find("e") > 0: self.out.append("перевод в обычную форму") self.out.append(str(float(s))) self.vivod() Десятичный логарифм def lg10(self): if len(self.out)>0: s=self.out[-1] if s.isdigit(): self.out.append("логарифм по основанию 10") self.first_value=str(math.log10(float(s))) self.out.append(self.first_value) self.op="" self.second_value="" self.vivod()Очистказначенийdefce(self):self.sbros() self.textEdit.clear() self.out.clear() Сохранение в памятьdef ms(self): self.mem=self.textEdit.toPlainText()Удаление из памятиdefmdel(self):self.mem="" Вычитание из памятиdefmminus(self):if self.mem=="": self.mem=str(float(self.textEdit.text())*(-1)) else: self.mem = str(float(self.mem)- float(self.textEdit.text()))Прибавление к памятиdefmplus(self):if self.mem=="": self.mem=self.textEdit.text() else: self.mem = str(float(self.mem)+ float(self.textEdit.text()))Вызов значения из памятиdefmr(self):if self.second_value!="" or self.op!="": self.second_value=self.mem self.res2() else: self.first_value = self.mem self.res1() Изменение знака числаdefpl_min(self):if self.second_value!="": self.second_value=str(float(self.second_value)*(-1)) self.res2() else: self.first_value = str(float(self.first_value) * (-1)) self.res1() Корень квадратный def sqrt(self): if self.second_value!="": self.ravno() if float(self.first_value)>=0: self.first_value = str(math.sqrt(float(self.first_value))) self.op = "" self.res1() Сброс def sbros(self): self.first_value="" self.op = "" self.second_value = "" Ввод десятичной точкиdef tochka(self): if self.op!="": if self.second_value=="": self.second_value="0." else: if self.second_value.find(".")==-1: self.second_value+="." self.res2() else: if self.first_value.find(".")==-1: self.first_value+="." self.res1()Подсчет значения выраженияdefravno(self):if self.op=="*": self.first_value=str(float(self.first_value)*float(self.second_value)) if self.op == "/": if int(self.second_value)!=0: self.first_value = str(float(self.first_value) / float(self.second_value)) else: self.sbros() self.first_value = 'Деление на ноль' if self.op=="-": self.first_value=str(float(self.first_value)-float(self.second_value)) if self.op=="+": self.first_value=str(float(self.first_value)+float(self.second_value)) if self.op=="**": self.first_value=str(float(self.first_value)**float(self.second_value)) ifself.op == "y-ый корень числа x":if float(self.first_value >= 0): self.first_value = str(pow(float(self.first_value), 1/float(self.second_value))) else: self.sbros() self.first_value = 'Корень из отрицательного числа' self.op="" self.second_value="" self.out.append("=") self.out.append(self.first_value) self.vivod() Ввод значений def digit(self,name): defwriteDigit():Если первый символ числа не является цифрой, то это сообщение об ошибке В этом случае сбрасываем значенияifnotself.first_value[0].isdigit():self.sbros() Если кеще не был нажат оператор, то меняется первое числоif self.op=="": if self.first_value=="0.0" or self.first_value=="0": self.first_value=name else: self.first_value+=name del self.out[-1] self.out.append(self.first_value) else: Иначе меняем второе число if self.second_value=="0.0" or self.second_value=="0": self.second_value=name else: if self.second_value!="": del self.out[-1] self.second_value+=name self.out.append(self.second_value) self.vivod() return writeDigit def operat(self,name): defwriteop(): Если до этого было второе число, то сначала вычисляется результатif self.second_value!="": self.out.append(name) self.ravno() self.op=name else: self.op = name self.out.append(self.op) if len(self.out) == 8: self.out.pop(0) self.vivod() return writeop def vivod(self): self.textEdit.clear() self.textEdit.setAlignment(QtCore.Qt.AlignRight) font = QFont() font.setPointSize(18) self.textEdit.setFont(font) for y in self.out: if y[-2:]==".0": y=y[:-2] self.textEdit.append(y)Тестирование и отладкаВсе элементы графического интерфейса отображаются. Работа кнопок проверена вручную и соответствует методическим рекомендациям. Все команды корректно считываются по нажатию кнопок и выполняются. Результаты работ команд совпали с данными, полученными при ручном расчете. Данные корректно отображаются. Ошибки выполнения операций корректно обрабатываются.Разработка логико-аналитической системыПостроение алгоритма решения «Ханойские башни»Заметим, что диаметр дисков увеличивается справа налево и сверху вниз. Так что мы можем действовать следующим образом:Пусть n = 2Если шпиндель номер nне пустПеремещаем верхний диск со шпинделя номер nна шпиндель с номером n– 1n = n – 1Если n = 1Переходим к пункту 1Иначе переходим к пункту 2.1ИначеЕсли n < 9n = n + 1Переходим к пункту 2ИначеКОНЕЦАлгоритм полностью тривиален и реализуется с помощью рекурсии. Осталось учесть особенности задания.Необходимо считать количество шагов, чтобы можно было отобразить итерацию с нужным номером;Необходимо учесть, с какого на какой шпиндель можно перекладывать диски;Необходимо заранее посчитать общее количество итераций, чтобы потом вычислить номер нужной итерации;Первое решается программно.Второе дано в условии:С первого шпинделя ничего перекладывать не надо – все уже там;Со второго по седьмой будем перекладывать на диск с номером на 1 меньше;С восьмого будем перекладывать на шестой;Разработка программной реализацииИсходные данные - id студента и допустимые ходыID = '70177166'MOVES = {2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 6}По номеру шпинделя и количеству дисков на нем, получаем количество дисковdef numerate_disks(_disks_index, _disks_count): answer = [] for i in range(_disks_count): current_disk_number = _disks_index * 10 + i + 1 answer.append(current_disk_number)Разворачиваем, чтобы шли в нужном порядкеanswer = answer[::-1] return answerОсновной классclass Hanoj: Инициализация экземпляра классаdef __init__(self, _id, _moves): self.id = _id self.moves = _movesСколько всего понадобится итерацийself.total_iterations = 0Считаемself.get_total_iterations()На каких по счету итерациях делать вывод данныхself.percents = {} Считаемself.get_percents()Текущее расположение дисковself.position = {} Считаемself.get_position() Количество прошедших итерацийself.iterations = 0 Печатаем начальное положениеself.print() Получаем начальное расположение дисковdefget_position(self):length = len(self.id) for i in range(length): Номер шпинделяdisks_index = i + 1Количество дисков на немdisks_count = int(ID[-disks_index])self.position[i + 1] = numerate_disks(disks_index, disks_count)Двигаем верхний диск со шпинделя _n на первый шпиндельdefmoving(self, _n): Пока не окажемся на первом шпинделеif _n > 1: Смотрим, сколько на шпинделе дисковcurrent_length = len(self.position[_n]) Берем верхнийtemp = self.position[_n][current_length - 1] Снимаем егоself.position[_n].pop(current_length - 1)Двигаем на допустимую по методичке позициюself.position[MOVES[_n]].append(temp)Увеличиваем количество итерацийself.iterations += 1 Очередная итерация готова. Если нужно - печатаем информациюif self.iterations in self.percents.keys(): self.print() Пробуем двинуть диск дальшеself.moving(MOVES[_n]) Начинаем решение со второго шпинделяdefsolving(self, _n): Пока не закончили со всеми шпинделямиif _n < 9: Если на текущем шпинделе еще есть дискиcurrent_length = len(self.position[_n]) ifcurrent_length > 0: Двигаем диск к первому шпинделюself.moving(_n) self.solving(_n) else: Иначе переходим к следущему_n += 1self.solving(_n) Печать текущего состоянияdef print(self): print()print('Процент выполнения:', self.percents[self.iterations]) print('Количество прошедших итераций:', self.iterations)print('Текущее положение:', *self.position.values()) input('Для продолжения нажмите ENTER') По номеру студента определяем, на скольки процентах выполнения выводить информациюdef get_percents(self): Всего будет 4 пары чиселfor i in range(4): new_percents = int(ID[2 * i: 2 * (i + 1)]) переводим их в процентыnew_count_of_iterations = (new_percents * self.total_iterations) // 100 И запоминаемself.percents[new_count_of_iterations] = new_percentsПлюс начальное и конечное положениеself.percents[0] = 0self.percents[self.total_iterations] = 100Вычисляем общее количество итераций, которые нужно будет сделатьdef get_total_iterations(self):Для диска на любом шпинделе, кроме восьмого, понадобится на одну итерацию меньше, чем номер шпинделяanswer = 0 for i in range(7): answer += int(self.id[i]) * (7 - i)А с восьмого шпинделя можно прыгнуть сразу на шестой, поэтому тут быстрееanswer -= int(self.id[0]) Запоминаемself.total_iterations = answerСоздаем экземпляр классаhanoj = Hanoj(ID, MOVES)Запускаем рекурсию, начиная со второго шпинделяhanoj.solving(2)Пример выполнения программы можно посмотреть на рисунке 4Рисунок 4 – Пример выполнения программыТестирование и отладкаВсе вычисления выполняются верно (проверено вручную), проценты по номеру студента вычисляются верно. Соответствующие указанным процентам номера итераций соответствуют действительности.ВыводыВ ходе выполнения курсовой работы были проанализированы представленные в методическом пособии четыре задания.Для них был составлен алгоритм решения с использованием языка программирования Python3. Написание программы осуществлялось с помощью следующего программного обеспечения:IDLE;PyCharm;Результат выполнения – программное обеспечение, как с графическим интерфейсом, так и без. Все программы были протестированы на работоспособность и корректность выдаваемых результатов.В ходе выполнения заданий, для создания графического интерфейса, были использованы внешние библиотеки PyQt5 и Pysideиз списка рекомендованных.В программах, для облегчения отладки, тестирования и читабельности, был использован ООП стиль написания (задания номер два, три и четыре) и разбиение на модули (задание №3).В ходе выполнения работы были выполнены следующие задачи:развитие навыка разработки и тестирования прикладного программного обеспечения;развитие навыков автоматизации решения типовых задач;развитиенавыка разработки прикладного программного обеспечения.Считаю цель, которая заключалась в изучениитехнологии высокоуровневого программирования прикладного программного обеспечения, выполненной.Список используемой литературыhttps://pythonworld.ru/https://metanit.com/https://pythonru.com/2. https://metanit.com/
3. https://pythonru.com/
Вопрос-ответ:
Какие исходные данные используются в заданиях курсовой работы?
В заданиях курсовой работы используются различные исходные данные, предоставленные во входных файлах. Это могут быть текстовые и числовые данные, которые необходимо обработать и проанализировать в рамках задачи.
Какие методические указания предоставлены для входных и выходных данных заданий курсовой работы?
Для входных и выходных данных заданий курсовой работы предоставлены методические указания, которые могут содержать формат ожидаемых данных, примеры входных и выходных файлов, а также подробные описания требуемых операций над данными.
Какими сторонними библиотеками и средой разработки следует пользоваться при разработке программного продукта для решения прикладных задач?
При разработке программного продукта для решения прикладных задач можно использовать различные сторонние библиотеки и среду разработки, которые могут облегчить процесс разработки и добавить нужные функциональные возможности. Конкретный выбор сторонних библиотек и среды разработки зависит от конкретных требований задачи и предпочтений разработчика.
Какая основная цель разработки программного продукта для решения прикладных задач?
Основная цель разработки программного продукта для решения прикладных задач состоит в том, чтобы создать эффективное и удобное средство для автоматизации решения конкретных задач в рамках определенной области. Это позволяет значительно упростить и ускорить работу, а также повысить точность и надежность получаемых результатов.
Какие навыки и знания требуются для разработки программного продукта для решения прикладных задач?
Для разработки программного продукта для решения прикладных задач требуются знания и навыки в области программирования, алгоритмизации, структур данных, анализа и обработки данных. Также полезными могут быть знания математики и статистики, а также опыт работы с конкретными технологиями и инструментами разработки.
Какие данные использовались при разработке программного продукта?
При разработке программного продукта были использованы исходные данные, предоставленные в заданиях курсовой работы.
Какие сторонние библиотеки и среды разработки были выбраны для разработки программного продукта?
Для разработки программного продукта были выбраны сторонние библиотеки и среды разработки, которые были обоснованы на основе анализа задач и требований к программному продукту.
Какие задачи решаются программным продуктом?
Программный продукт разработан для решения прикладных задач, включая работу с наборами данных, построение алгоритмов и графиков, анализ входных и выходных данных.
Какие выводы можно сделать по первой главе статьи?
По первой главе статьи можно сделать следующие выводы: был произведен анализ заданий курсовой работы и методических указаний, выбраны необходимые сторонние библиотеки и среды разработки, исходные данные к заданиям курсовой работы использовались в процессе разработки программного продукта.
Как происходит работа с наборами данных в программном продукте?
В программном продукте реализована функциональность по работе с наборами данных, включая построение алгоритма решения задачи без графиков и другие методы обработки данных.
Какие задания были включены в курсовую работу?
В курсовую работу были включены задания, связанные с анализом и разработкой программного продукта для решения прикладных задач.