Parcourir la source

Merge branch 'master' of u22zelinsky/up into master

ypv il y a 2 semaines
Parent
commit
0079315521

+ 90 - 0
ОАиП/2024-25/36гр/2 сем/Задача 4.143. Зелинский Кирилл.py

@@ -0,0 +1,90 @@
+import tkinter as tk
+from tkinter import ttk
+from tkinter import filedialog
+
+def calculate_dates():
+    """
+    Вычисляет предыдущую и следующую даты для заданной даты.
+    """
+    try:
+        day = int(day_entry.get())
+        month = int(month_entry.get())
+
+        if not (1 <= month <= 12):
+            result_text.delete("1.0", tk.END)
+            result_text.insert(tk.END, "Месяц должен быть от 1 до 12.")
+            return
+
+        days_in_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
+        if not (1 <= day <= days_in_month[month]):
+            result_text.delete("1.0", tk.END)
+            result_text.insert(tk.END, f"День должен быть от 1 до {days_in_month[month]} для месяца {month}.")
+            return
+
+
+        prev_day = day - 1
+        prev_month = month
+        if prev_day == 0:
+            prev_month -= 1
+            if prev_month == 0:
+                result_text.delete("1.0", tk.END)
+                result_text.insert(tk.END, "Введенная дата не может быть 1 января (по условию задачи).")
+                return
+            prev_day = days_in_month[prev_month]
+
+
+        next_day = day + 1
+        next_month = month
+        if next_day > days_in_month[month]:
+            next_day = 1
+            next_month += 1
+            if next_month > 12:
+                result_text.delete("1.0", tk.END)
+                result_text.insert(tk.END, "Введенная дата не может быть 31 декабря (по условию задачи).")
+                return 
+
+        result = f"Предыдущий день: {prev_day:02d}.{prev_month:02d}\n"
+        result += f"Следующий день: {next_day:02d}.{next_month:02d}\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("Калькулятор дат")
+
+
+day_label = ttk.Label(root, text="День:")
+day_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
+day_entry = ttk.Entry(root)
+day_entry.grid(row=0, column=1, padx=5, pady=5, sticky=tk.E)
+
+month_label = ttk.Label(root, text="Месяц:")
+month_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
+month_entry = ttk.Entry(root)
+month_entry.grid(row=1, column=1, padx=5, pady=5, sticky=tk.E)
+
+calculate_button = ttk.Button(root, text="Рассчитать", command=calculate_dates)
+calculate_button.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
+
+result_text = tk.Text(root, height=5, width=30)
+result_text.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
+
+root.mainloop()

+ 98 - 0
ОАиП/2024-25/36гр/2 сем/Задача 6.32. Зелинский Кирилл.py

@@ -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()