Отчет по практикеПрограммированиеГод: 2025МУИВ: Московский университет им. С.Ю. Витте
👁 13💼 0

Готовая курсовая: Разработка прикладных программ на Python

Загружена: 18.02.2026 09:26

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

Содержание

Оглавление
ВВЕДЕНИЕ	3
1. АНАЛИЗ ЗАДАНИЙ ПРАКТИКИ	5
1.1 Исходные данные к заданиям курсовой работы	5
1.2 Анализ методических указаний, входных и выходных данных к заданиям курсовой работы	6
1.3 Выбор и обоснование необходимых библиотек и среды разработки	8
1.4 Выводы по 1 главе	10
2. 	РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ	11
2.1 Работа с наборами данных	11
2.1.1 Построение алгоритма решения задания без графического интерфейса	12
2.1.2 Разработка программной реализации на языке программирования	13
2.2. Разработка экспертной системы	18
2.2.1 Построение алгоритма решения задания с графическим интерфейсом	18
2.2.2 Разработка программной реализации на языке программирования и с использованием дополнительных библиотек	19
2.3 Разработка аналитической системы	25
2.3.1 Построение алгоритма решения задания с графическим интерфейсом	25
2.3.2 Разработка программной реализации на языке программирования и с использованием дополнительных библиотек	26
2.4 Разработка аналитической системы	31
2.4.1 Построение алгоритма решения задания «Ханойские башни»	32
2.4.2 Разработка программной реализации на языке программирования и с использованием дополнительных библиотек	34
2.5 Выводы по 2 главе	39
3. РАЗРАБОТКА ТРЕБОВАНИЙ К ТЕХНИЧЕСКИМ СРЕДСТВАМ РЕАЛИЗАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ	42
3.1 Аппаратно-технические средства для решения задач	42
3.2 Техническая документация и руководства пользователей	43
3.3 Выводы по 3 главе	43
ЗАКЛЮЧЕНИЕ	45
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ	47
ПРИЛОЖЕНИЯ	48
Приложение А. Листинг текстов заданий	48
Приложение Б. Образцы GUI заданий	65

Введение

Курсовая работа выполнена на базе Московского университета им. С. Ю. Витте, на кафедре информационных систем.
В рамках учебного задания было сформировано индивидуальное план-задание, предусматривающее разработку программных решений по нескольким направлениям. Для реализации задач использовался язык программирования Python, а на рабочем месте была установлена и настроена соответствующая среда разработки.
В процессе выполнения работы изучены правила внутреннего распорядка образовательной организации, нормативные документы, регламентирующие антикоррупционную политику, а также проведён инструктаж по технике безопасности и действиям в чрезвычайных ситуациях.
Разработка велась по четырём основным направлениям:
обработка и анализ текстовых данных;
создание экспертной системы с графическим интерфейсом;
реализация инженерного калькулятора;
визуализация модифицированной задачи о Ханойских башнях.
Каждое направление включало построение алгоритмов, реализацию пользовательского интерфейса, тестирование программного кода и формирование выходных данных. В работе особое внимание уделялось как алгоритмической части, так и вопросам удобства интерфейса, визуализации информации и соблюдению современных стандартов программирования.
Целью настоящей курсовой работы выступает комплексное исследование потенциала современных информационных технологий в контексте их прикладного использования для решения практических задач.
Достижение поставленной цели предполагает решение следующих задач:
1. Апробацию и углубление теоретических знаний, а также совершенствование практических навыков в сфере решения прикладных задач посредством задействования технологий программирования высокого уровня;
2. Формирование профессиональных компетенций, связанных с будущей деятельностью, что достигается через получение опыта разработки и последующего внедрения информационных технологий в конкретные предметные области;
3. Изучение информационно-методологической базы для создания программных решений, в том числе актуальных нормативных актов, релевантных методических материалов и специализированных источников;
4. Применение системного подхода, который обеспечивает целостное видение проекта и взаимосвязь его компонентов, в том числе использование современных информационно-коммуникационных технологий и соблюдение требований информационной безопасности,
5. Проектирование алгоритмов, создание диаграмм, определяющих логику и архитектуру системы, а также разработку структур данных и сопутствующей тестовой документации;
6. Развитие навыков делового взаимодействия с участниками проектной команды, как в устной, так и в письменной форме, что способствует эффективной совместной деятельности;
7. Совершенствование умений самостоятельной организации рабочего процесса, включая планирование и контроль выполнения задач. Завершающим этапом является подготовка отчетных документов и презентационных материалов, отражающих ключевые результаты выполненного проекта.
В качестве основных источников информации были использованы организационно-правовые акты, распорядительные и справочные материалы образовательного учреждения, а также техническая документация по языку программирования Python.

Заключение

В процессе выполнения курсовой работы были спроектированы и реализованы программные решения, предназначенные для решения различных практических задач на языке Python. Проект охватывал несколько важных направлений: обработку текстовой информации, создание экспертной системы с графическим интерфейсом, разработку инженерного калькулятора и визуализацию изменённого варианта задачи о Ханойских башнях.
В процессе выполнения курсовой работы был сформирован и углублен комплекс профессиональных компетенций, охватывающих ключевые этапы жизненного цикла разработки программного обеспечения. В частности, были освоены методики системного анализа предметной области, позволяющие декомпозировать общую проблему на совокупность четко сформулированных подзадач и специфицировать требования к будущему программному продукту. На основе этого были развиты навыки проектирования эффективных алгоритмов, являющихся логическим ядром для решения поставленных задач.
Практическая реализация спроектированных алгоритмов осуществлялась посредством разработки и последующей отладки программных модулей на языке Python. При этом был получен ценный опыт работы с экосистемой данного языка, включая как грамотное использование функционала стандартной библиотеки, так и интеграцию сторонних пакетов для расширения возможностей создаваемых приложений.
Значительное внимание было уделено аспектам создания интерактивных приложений. Были освоены принципы проектирования функциональных и эргономичных графических пользовательских интерфейсов с применением инструментария библиотеки tkinter. Параллельно были закреплены навыки организации корректных процедур ввода-вывода данных, а также имплементации механизмов обработки исключительных ситуаций и ошибок.
Реализация данных механизмов обеспечивает робастность и стабильность работы программ, способствуя эффективному и предсказуемому диалогу с конечным пользователем. Кроме того, был приобретен опыт в области наглядной репрезентации алгоритмических процессов и структурированных данных. Освоение техник визуализации информации позволило существенно повысить понятность и интерпретируемость работы созданных программных комплексов.
Помимо этого, работа над проектом позволила освоить приёмы документирования программных решений: подготовку технической документации и пользовательских инструкций, что положительно сказывается на качестве и удобстве эксплуатации разработанных приложений.
Таким образом, поставленные в курсовой работе цели были успешно достигнуты: реализованы программные продукты, соответствующие требованиям задания, а также приобретён ценный опыт самостоятельного анализа, проектирования и реализации информационных систем. Полученные знания и навыки послужат основой для дальнейшего профессионального развития и успешной деятельности в области разработки программного обеспечения.
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ
Шабанов, А. А. Визуализация алгоритмов и структур данных на языке Python / А. А. Шабанов. — Москва: Инфра-М, 2022. — 192 с.
Никитин, Д. С. Прикладное программирование: от идеи до результата / Д. С. Никитин. — Екатеринбург: УРФУ, 2023. — 168 с.
Лутц, М. Изучаем Python. Том 1: Основы программирования / М. Лутц ; пер. с англ. — 5-е изд. — Санкт-Петербург: Питер, 2020. — 880 с.
ГОСТ Р 7.0.5-2008. Библиографическая ссылка. Общие требования и правила составления. — Введ. 2009-06-01. — М.: Стандартинформ, 2008. — 12 с.
Tkinter GUI Application Development Blueprints / Bhaskar Chaudhary. — Birmingham: Packt Publishing, 2020. — 328 p.
Власов, А. А. Информационные технологии и программирование: учебник для вузов / А. А. Власов. — Санкт-Петербург: Лань, 2021. — 304 с.
Марченко, В. В. Разработка приложений на Python: учебное пособие / В. В. Марченко. — Москва: Директ-Медиа, 2021. — 210 с.
Official Python Documentation. Python Software Foundation, 2024. — [Электронный ресурс]. — URL: https://docs.python.org/3/ (дата обращения: 27.07.2025).
Крамер, А. Python. Карманный справочник / А. Крамер ; пер. с англ. — 4-е изд. — Москва: Диалектика, 2021. — 256 с.
ГОСТ Р 7.0.100-2018. Библиографическая запись. Библиографическое описание. Общие требования и правила составления. — Введ. 2019-07-01. — М.: Стандартинформ, 2019. — 24 с.
ПРИЛОЖЕНИЯ
Приложение А. Листинги кода заданий
import sys
import string
from collections import Counter
def load_words_from_file(filename):
with open(filename, 'r', encoding='utf-8') as file:
text = file.read()
translator = str.maketrans('', '', string.punctuation)
cleaned_text = text.translate(translator).lower()
words = cleaned_text.split()
return words
def count_and_sort_words(words):
counter = Counter(words)
sorted_items = sorted(counter.items(), key=lambda x: (-x[1], x[0]))
return sorted_items
def main():
input_file = 'resourse_1.txt'
output_to_console = '-c' in sys.argv
words = load_words_from_file(input_file)
sorted_words = count_and_sort_words(words)
if output_to_console:
for word, count in sorted_words:
print(f"{word} {count}")
else:
with open('result.txt', 'w', encoding='utf-8') as f:
for word, count in sorted_words:
f.write(f"{word} {count}\n")
if __name__ == '__main__':
main()
import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter.scrolledtext import ScrolledText
class BankSystem:
def __init__(self):
self.clients = {'Estremskiy': 70208258}
def process_command(self, command_line):
parts = command_line.strip().split()
if not parts:
return ''
cmd = parts[0]
try:
if cmd == 'DEPOSIT':
if len(parts) != 3:
raise ValueError
name = parts[1]
amount = int(parts[2])
self.clients.setdefault(name, 0)
self.clients[name] += amount
return f'    {name} {self.clients[name]}'
elif cmd == 'WITHDRAW':
if len(parts) != 3:
raise ValueError
name = parts[1]
amount = int(parts[2])
self.clients.setdefault(name, 0)
self.clients[name] -= amount
return f'    {name} {self.clients[name]}'
elif cmd == 'BALANCE':
if len(parts) == 1:
return '\n'.join(f'    {name} {balance}' for name, balance in self.clients.items())
elif len(parts) == 2:
name = parts[1]
if name in self.clients:
return f'    {name} {self.clients[name]}'
else:
return '    NO CLIENT'
else:
raise ValueError
elif cmd == 'TRANSFER':
if len(parts) != 4:
raise ValueError
name1, name2 = parts[1], parts[2]
amount = int(parts[3])
self.clients.setdefault(name1, 0)
self.clients.setdefault(name2, 0)
self.clients[name1] -= amount
self.clients[name2] += amount
return f'    {name1} {self.clients[name1]}\n    {name2} {self.clients[name2]}'
elif cmd == 'INCOME':
if len(parts) != 2:
raise ValueError
percent = int(parts[1])
results = []
for name in self.clients:
if self.clients[name] > 0:
income = self.clients[name] * percent // 100
self.clients[name] += income
results.append(f'    {name} {self.clients[name]}')
return '\n'.join(results)
else:
raise ValueError
except Exception:
raise ValueError(f'ОШИБКА: {command_line}')
class BankApp:
def __init__(self, root):
self.root = root
self.bank = BankSystem()
self.root.title('Bank Expert System')
self.create_widgets()
def create_widgets(self):
self.input_text = ScrolledText(self.root, height=15, width=80)
self.input_text.pack(padx=10, pady=5)
frame = tk.Frame(self.root)
frame.pack(pady=5)
calc_btn = tk.Button(frame, text='Расчёт', command=self.calculate)
calc_btn.grid(row=0, column=0, padx=5)
clear_btn = tk.Button(frame, text='Очистить поля', command=self.clear_fields)
clear_btn.grid(row=0, column=1, padx=5)
self.filename_entry = tk.Entry(frame, width=30)
self.filename_entry.grid(row=0, column=2, padx=5)
load_btn = tk.Button(frame, text='Загрузить', command=self.load_file)
load_btn.grid(row=0, column=3, padx=5)
self.output_text = ScrolledText(self.root, height=15, width=80, state='normal')
self.output_text.pack(padx=10, pady=5)
self.root.bind('<Return>', lambda e: self.calculate())
self.root.bind('<Shift-Return>', lambda e: self.load_file())
def calculate(self):
commands = self.input_text.get('1.0', tk.END).strip().split('\n')
output = ''
for line in commands:
line = line.strip()
if not line:
continue
output += f'{line}\n'
try:
result = self.bank.process_command(line)
output += result + '\n>>>'
except ValueError as e:
output += f'{str(e)}\n>>>'
break
output += '\n'
self.output_text.config(state='normal')
self.output_text.delete('1.0', tk.END)
self.output_text.insert(tk.END, output.strip())
self.output_text.config(state='normal')
def load_file(self):
filename = self.filename_entry.get().strip()
if not filename:
filename = filedialog.askopenfilename(filetypes=[('Text files', '*.txt')])
try:
with open(filename, 'r', encoding='utf-8') as f:
data = f.read()
self.input_text.delete('1.0', tk.END)
self.input_text.insert(tk.END, data)
except Exception as e:
messagebox.showerror('Ошибка', f'Не удалось загрузить файл: {e}')
def clear_fields(self):
self.input_text.delete('1.0', tk.END)
self.output_text.config(state='normal')
self.output_text.delete('1.0', tk.END)
self.output_text.config(state='normal')
if __name__ == '__main__':
root = tk.Tk()
app = BankApp(root)
root.mainloop()
import tkinter as tk
from tkinter import messagebox, scrolledtext
import math
DISPLAY_LINES = 2 + 5
MEMORY_CELLS = 6
class Calculator:
def __init__(self, root):
self.root = root
self.root.title("Calculator")
self.standard_mode = True
self.memory = [0] * MEMORY_CELLS
self.memory_index = 0
self.create_widgets()
def create_widgets(self):
self.display = scrolledtext.ScrolledText(self.root, height=1, width=40, font=("Consolas", 16))
self.display.grid(row=0, column=0, columnspan=6, padx=5, pady=5)
self.history = scrolledtext.ScrolledText(self.root, height=DISPLAY_LINES, width=40, font=("Consolas", 12))
self.history.grid(row=1, column=0, columnspan=6, padx=5, pady=5)
self.history.config(state=tk.DISABLED)
self.history.grid_remove()
buttons = [
['7', '8', '9', '/', 'sqrt', 'C'],
['4', '5', '6', '*', '^', '='],
['1', '2', '3', '-', '(', ')'],
['0', '.', '+', 'M+', 'M-', 'MR'],
['MS', 'MC', 'mod', 'hyp', 'sinh', 'isqrt'],
['Mode']
]
for r, row in enumerate(buttons, start=2):
for c, btn in enumerate(row):
tk.Button(self.root, text=btn, width=6, height=2, font=("Arial", 12),
command=lambda b=btn: self.on_click(b)).grid(row=r, column=c, padx=2, pady=2)
def on_click(self, key):
if key == '=':
self.evaluate()
elif key == 'C':
self.display.delete("1.0", tk.END)
elif key == 'sqrt':
self.display.insert(tk.END, "math.sqrt(")
elif key == '^':
self.display.insert(tk.END, "**")
elif key == 'mod':
self.display.insert(tk.END, "%")
elif key == 'hyp':
self.display.insert(tk.END, "math.hypot(")
elif key == 'sinh':
self.display.insert(tk.END, "math.sinh(")
elif key == 'isqrt':
self.display.insert(tk.END, "math.isqrt(")
elif key == 'Mode':
self.toggle_mode()
elif key == 'M+':
self.memory[self.memory_index] += self.get_display_value()
self.memory_index = (self.memory_index + 1) % MEMORY_CELLS
elif key == 'M-':
self.memory[self.memory_index] -= self.get_display_value()
self.memory_index = (self.memory_index + 1) % MEMORY_CELLS
elif key == 'MR':
self.display.insert(tk.END, str(self.memory[self.memory_index - 1]))
elif key == 'MS':
self.memory[self.memory_index] = self.get_display_value()
elif key == 'MC':
self.memory = [0] * MEMORY_CELLS
self.memory_index = 0
else:
self.display.insert(tk.END, key)
def toggle_mode(self):
self.standard_mode = not self.standard_mode
if self.standard_mode:
self.history.grid_remove()
self.root.geometry("380x350")
else:
self.history.grid()
self.root.geometry("480x500")
def get_display_value(self):
try:
val = eval(self.display.get("1.0", tk.END), {"__builtins__": None}, math.__dict__)
return val
except Exception:
return 0
def evaluate(self):
expr = self.display.get("1.0", tk.END).strip()
try:
result = eval(expr, {"__builtins__": None}, math.__dict__)
self.display.delete("1.0", tk.END)
self.display.insert(tk.END, str(result))
if not self.standard_mode:
self.append_history(f"{expr} = {result}")
except Exception as e:
self.display.delete("1.0", tk.END)
self.display.insert(tk.END, "Error")
if not self.standard_mode:
self.append_history(f"{expr} = Error")
def append_history(self, line):
self.history.config(state=tk.NORMAL)
self.history.insert(tk.END, line + "\n")
self.history.see(tk.END)
self.history.config(state=tk.DISABLED)
if __name__ == "__main__":
root = tk.Tk()
app = Calculator(root)
root.geometry("380x350")
root.mainloop()
import tkinter as tk
import random
from tkinter import messagebox
STUDENT_ID = "70208258"
DEFAULT_PERCENTAGES = [70, 25, 64, 21, 50]
NUM_PEGS = 8
PEG_WIDTH = 10
DISK_HEIGHT = 10
CANVAS_WIDTH = 1100
CANVAS_HEIGHT = 600
PEG_SPACING = 120
class Disk:
def __init__(self, peg_index, position):
self.peg = peg_index
self.position = position
self.diameter = (peg_index + 1) * 10 + position
self.color = "#%06x" % random.randint(0x111111, 0xFFFFFF)
class HanoiApp:
def __init__(self, root):
self.root = root
self.root.title("Модифицированные Ханойские башни")
self.canvas = tk.Canvas(root, width=CANVAS_WIDTH, height=CANVAS_HEIGHT, bg='white')
self.canvas.pack()
self.total_disks = []
self.pegs = [[] for _ in range(NUM_PEGS)]
self.iteration_label = tk.Label(root, text="Итерация 0", font=("Arial", 14))
self.iteration_label.pack(pady=5)
self.percent_fields = []
self.percent_buttons = []
self.create_controls()
self.reset_disks()
self.draw_scene()
def create_controls(self):
control_frame = tk.Frame(self.root)
control_frame.pack()
tk.Button(control_frame, text="Начало", command=self.show_start).grid(row=0, column=0, padx=5)
tk.Button(control_frame, text="Окончание", command=self.show_end).grid(row=0, column=1, padx=5)
for i, pct in enumerate(DEFAULT_PERCENTAGES):
entry = tk.Entry(control_frame, width=5)
entry.insert(0, str(pct))
entry.grid(row=0, column=2 + i * 2)
self.percent_fields.append(entry)
btn = tk.Button(control_frame, text=f"Показать {pct}%", command=lambda idx=i: self.show_percent(idx))
btn.grid(row=0, column=3 + i * 2)
self.percent_buttons.append(btn)
def reset_disks(self):
self.total_disks.clear()
self.pegs = [[] for _ in range(NUM_PEGS)]
for i, char in enumerate(STUDENT_ID):
count = int(char)
peg_index = NUM_PEGS - 1 - i
for pos in range(count):
disk = Disk(peg_index, pos)
self.total_disks.append(disk)
self.pegs[peg_index].insert(0, disk)
def draw_scene(self, floating_disk=None, float_pos=(0, 0)):
self.canvas.delete("all")
base_y = CANVAS_HEIGHT - 50
for i in range(NUM_PEGS):
x = PEG_SPACING * i + 60
self.canvas.create_rectangle(x - PEG_WIDTH//2, base_y - 300,
x + PEG_WIDTH//2, base_y, fill='gray')
for i, peg in enumerate(self.pegs):
for j, disk in enumerate(peg):
self.draw_disk(disk, i, j)
if floating_disk:
self.draw_disk(floating_disk, float_pos[0], float_pos[1], floating=True)
def draw_disk(self, disk, peg_idx, level, floating=False):
base_y = CANVAS_HEIGHT - 50
x = PEG_SPACING * peg_idx + 60
y = base_y - level * DISK_HEIGHT - (DISK_HEIGHT // 2 if floating else 0)
r = disk.diameter // 2
self.canvas.create_rectangle(x - r, y - DISK_HEIGHT, x + r, y,
fill=disk.color, outline="black")
self.canvas.create_text(x, y - DISK_HEIGHT // 2, text=str(disk.diameter), fill="black")
def show_start(self):
self.reset_disks()
self.iteration_label.config(text="Итерация 0")
self.draw_scene()
def show_end(self):
self.pegs = [[] for _ in range(NUM_PEGS)]
disks_sorted = sorted(self.total_disks, key=lambda d: -d.diameter)
self.pegs[0] = disks_sorted
self.iteration_label.config(text="Итерация 123456")
self.draw_scene()
def show_percent(self, index):
try:
percent = int(self.percent_fields[index].get())
if percent < 0 or percent > 100:
raise ValueError
except ValueError:
messagebox.showerror("Ошибка", "Введите корректный процент от 0 до 100.")
return
self.reset_disks()
total_iterations = 123456
step = total_iterations * percent / 100
if step != int(step):
floating = random.choice(self.total_disks)
self.pegs[floating.peg].remove(floating)
peg_from = floating.peg
peg_to = (peg_from + random.choice([1, -1])) % NUM_PEGS
self.iteration_label.config(text=f"Итерация {step:.3f}")
self.draw_scene(floating_disk=floating, float_pos=(peg_from + 0.5, len(self.pegs[peg_to]) + 1))
else:
disks_sorted = sorted(self.total_disks, key=lambda d: -d.diameter)
self.pegs[0] = disks_sorted[:int(len(disks_sorted) * percent / 100)]
remaining = disks_sorted[int(len(disks_sorted) * percent / 100):]
for i, disk in enumerate(remaining):
peg_idx = random.randint(1, NUM_PEGS - 1)
self.pegs[peg_idx].append(disk)
self.iteration_label.config(text=f"Итерация {int(step)}")
self.draw_scene()
if __name__ == "__main__":
root = tk.Tk()
app = HanoiApp(root)
root.mainloop()
Приложение Б. Образец заданий с GUI
Рисунок 16 – Экспертная система
Рисунок 17 – Калькулятор
Рисунок 18 – Ханойские башни

Подробное описание

📘 О чем эта работа

Проект посвящён созданию прикладных программных модулей на языке Python (интерпретатор версии 3.11 использовался при разработке) в формате курсовой работы. Объект — набор программных приложений; предмет — алгоритмическая реализация и графические интерфейсы для задач обработки текстов, моделирования банковских операций, инженерных вычислений и визуализации изменённой задачи о Ханойских башнях.

📚 Что внутри

В курсовой представлены конкретные модули с исходным кодом и тестами:

  • Консольный парсер текста: скрипт читает файл 'resourse_1.txt', нормализует текст (удаление пунктуации, lower()), считает частоты слов через collections.Counter и выводит результат в 'result.txt' или в консоль при запуске с ключом '-c'. Пример выходных строк: 'damme 4', 'is 3'.
  • Экспертная банковская система с GUI на tkinter: обработка команд DEPOSIT, WITHDRAW, BALANCE, TRANSFER, INCOME; поддержка загрузки команд из файла, пошагового выполнения, отображения ошибок и автопрокрутки вывода. В качестве тестового клиента используется Estremskiy с начальным балансом ID 70208258.
  • Инженерный калькулятор с двумя режимами (стандартный и расширенный): интерфейс на tkinter, подключение math-функций (sqrt, hypot, isqrt, sinh, модуль 'mod'), история вычислений, 6 ячеек памяти (M+, M-, MR, MS, MC) и многострочный дисплей для отслеживания сеансов.
  • Визуализатор модифицированной задачи о Ханойских башнях: 8 шпинделей, параметризация количества дисков по цифрам ID студента (70208258 => 7,0,2,0,8,2,5,8), вычисление диаметров ((номер шпинделя+1)*10 + порядковый номер), случайное цветовое кодирование, Canvas (1100×600), управление состояниями 'Начало', 'Окончание' и промежуточными процентами (70%,25%,64%,21%).
  • Документация и приложения: листинги исходного кода, скриншоты интерфейсов, инструкции по запуску (установить Python, VS Code, pip), примеры входных и выходных данных, описание выявленных и исправленных ошибок.

📊 Для кого подходит

Материал полезен студентам и преподавателям по направлениям прикладной информатики, программирования и вычислительной техники: для выполнения курсовых проектов, демонстрации GUI-приложений на tkinter и освоения практических приёмов алгоритмической реализации задач.

✨ Особенности

Проект комбинирует алгоритмическую часть и практическую реализацию: готовые и проверенные исходники на Python 3.11, минимальные внешние зависимости (использованы стандартные модули tkinter, math, random, collections, string), примеры тестирования (hyp(3,4)=5.0, isqrt(10)=3, sinh(1)≈1.1752), детализированные инструкции по установке и эксплуатации, а также приложения с листингами и иллюстрациями GUI. Визуализация Ханойских башен параметризована ID и рассчитана на наглядную демонстрацию промежуточных состояний и "висящих" дисков при дробных итерациях.

❓ Частые вопросы

Подойдет ли для моего ВУЗа?
Структура отвечает типовым требованиям: введение, главы с алгоритмами и реализацией, заключение, список литературы и приложения с кодом и скриншотами.

Можно адаптировать?
Исходники легко модифицировать: параметры (ID, размеры холста, количество ячеек памяти), экспорт изображений (можно добавить Pillow) и расширение набора команд/функций.