|
@@ -0,0 +1,98 @@
|
|
|
+import tkinter as tk
|
|
|
+from tkinter import ttk
|
|
|
+from tkinter import filedialog
|
|
|
+
|
|
|
+def calculate_skiing():
|
|
|
+ """
|
|
|
+ Вычисляет день, когда лыжник пробежит больше 20 км, и день, когда суммарный пробег превысит 100 км.
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ initial_distance = float(initial_distance_entry.get())
|
|
|
+ increase_percentage = float(increase_percentage_entry.get())
|
|
|
+
|
|
|
+ if initial_distance <= 0:
|
|
|
+ result_text.delete("1.0", tk.END)
|
|
|
+ result_text.insert(tk.END, "Начальное расстояние должно быть больше 0.")
|
|
|
+ return
|
|
|
+
|
|
|
+ if increase_percentage <= 0:
|
|
|
+ result_text.delete("1.0", tk.END)
|
|
|
+ result_text.insert(tk.END, "Процент увеличения должен быть больше 0.")
|
|
|
+ return
|
|
|
+
|
|
|
+ distance = initial_distance
|
|
|
+ total_distance = initial_distance
|
|
|
+ day = 1
|
|
|
+ day_over_20 = None
|
|
|
+ day_over_100 = None
|
|
|
+
|
|
|
+ while True:
|
|
|
+ if distance > 20 and day_over_20 is None:
|
|
|
+ day_over_20 = day
|
|
|
+
|
|
|
+ if total_distance > 100 and day_over_100 is None:
|
|
|
+ day_over_100 = day
|
|
|
+
|
|
|
+ if day_over_20 is not None and day_over_100 is not None:
|
|
|
+ break
|
|
|
+
|
|
|
+ day += 1
|
|
|
+ distance *= (1 + increase_percentage / 100)
|
|
|
+ total_distance += distance
|
|
|
+ if day > 1000:
|
|
|
+ break
|
|
|
+
|
|
|
+ result = ""
|
|
|
+ if day_over_20 is not None:
|
|
|
+ result += f"В день {day_over_20} лыжник пробежит больше 20 км.\n"
|
|
|
+ else:
|
|
|
+ result += "Лыжник никогда не пробежит больше 20 км.\n"
|
|
|
+
|
|
|
+ if day_over_100 is not None:
|
|
|
+ result += f"Суммарный пробег превысит 100 км в день {day_over_100}.\n"
|
|
|
+ else:
|
|
|
+ result += "Суммарный пробег никогда не превысит 100 км.\n"
|
|
|
+
|
|
|
+ result_text.delete("1.0", tk.END)
|
|
|
+ result_text.insert(tk.END, result)
|
|
|
+
|
|
|
+
|
|
|
+ filepath = filedialog.asksaveasfilename(defaultextension=".txt",
|
|
|
+ filetypes=[("Текстовые файлы", "*.txt"),
|
|
|
+ ("Все файлы", "*.*")])
|
|
|
+
|
|
|
+ if filepath:
|
|
|
+ try:
|
|
|
+ with open(filepath, "w") as f:
|
|
|
+ f.write(result)
|
|
|
+ result_text.insert(tk.END, f"\nРезультат сохранен в файл: {filepath}")
|
|
|
+ except Exception as e:
|
|
|
+ result_text.insert(tk.END, f"\nОшибка при сохранении в файл: {e}")
|
|
|
+
|
|
|
+ except ValueError:
|
|
|
+ result_text.delete("1.0", tk.END)
|
|
|
+ result_text.insert(tk.END, "Введите корректные числа.")
|
|
|
+
|
|
|
+
|
|
|
+root = tk.Tk()
|
|
|
+root.title("Расчет пробега лыжника")
|
|
|
+
|
|
|
+initial_distance_label = ttk.Label(root, text="Начальный пробег (км):")
|
|
|
+initial_distance_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
|
|
|
+initial_distance_entry = ttk.Entry(root)
|
|
|
+initial_distance_entry.grid(row=0, column=1, padx=5, pady=5, sticky=tk.E)
|
|
|
+initial_distance_entry.insert(0, "10")
|
|
|
+
|
|
|
+increase_percentage_label = ttk.Label(root, text="Процент увеличения пробега:")
|
|
|
+increase_percentage_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
|
|
|
+increase_percentage_entry = ttk.Entry(root)
|
|
|
+increase_percentage_entry.grid(row=1, column=1, padx=5, pady=5, sticky=tk.E)
|
|
|
+increase_percentage_entry.insert(0, "10")
|
|
|
+
|
|
|
+calculate_button = ttk.Button(root, text="Рассчитать", command=calculate_skiing)
|
|
|
+calculate_button.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
|
|
|
+
|
|
|
+result_text = tk.Text(root, height=10, width=50)
|
|
|
+result_text.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
|
|
|
+
|
|
|
+root.mainloop()
|