Sanlover

Untitled

Sep 17th, 2021
675
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import random
  2. import tkinter as tk
  3. from tkinter import ttk
  4. from tkinter import filedialog as fd
  5.  
  6.  
  7. def toString(array):
  8.     mystring = ""
  9.     for digit in data:
  10.         mystring += str(digit) + ' '
  11.     return mystring
  12.  
  13.  
  14. data = ''
  15. root = tk.Tk()
  16.  
  17. canvas = tk.Canvas(root, width=400, height=300, relief='raised')
  18. canvas.pack()
  19.  
  20. label = tk.Label(root, text='Манипуляции с массивом')
  21. label.config(font=('helvetica', 12))
  22. canvas.create_window(200, 15, window=label)
  23.  
  24. label2 = tk.Label(root, text='Ввод вручную:')
  25. label2.config(font=('helvetica', 10))
  26. canvas.create_window(50, 50, window=label2)
  27.  
  28. entry = tk.Entry(root)
  29. canvas.create_window(160, 50, window=entry)
  30.  
  31.  
  32. def getArrayFromField():
  33.     global data
  34.     data = entry.get()
  35.     data = list(map(int, data.split()))
  36.  
  37.     label3 = tk.Label(root, text='Array: ' + toString(data), font=('helvetica', 10))
  38.     canvas.create_window(200, 210, window=label3)
  39.  
  40.  
  41. button1 = tk.Button(text='Считать', command=getArrayFromField, bg='brown', fg='white',
  42.                     font=('helvetica', 9, 'bold'))
  43. canvas.create_window(255, 50, window=button1)
  44.  
  45.  
  46. def getArrayFromFile():
  47.     filepath = fd.askopenfilename(initialdir="C:\\",
  48.                                   title="Open file okay?",
  49.                                   filetypes=(("text files", "*.txt"),
  50.                                              ("all files", "*.*")))
  51.     file = open(filepath, 'r')
  52.     global data
  53.     data = file.read()
  54.     file.close()
  55.     label3 = tk.Label(root, text='Array: ' + toString(data), font=('helvetica', 10))
  56.     canvas.create_window(200, 210, window=label3)
  57.  
  58.  
  59. def saveArrayToFile():
  60.     f = fd.asksaveasfile(mode='w', defaultextension=".txt")
  61.  
  62.     if f is None:
  63.         return
  64.  
  65.     f.write(toString(data))
  66.     f.close()
  67.  
  68.  
  69. def shell():
  70.     global data
  71.     n = len(data)
  72.     h = n // 2
  73.     while h > 0:
  74.         for i in range(h, n):
  75.             t = data[i]
  76.             j = i
  77.             while j >= h and data[j - h] > t:
  78.                 data[j] = data[j - h]
  79.                 j -= h
  80.  
  81.             data[j] = t
  82.         h = h // 2
  83.     label5 = tk.Label(root, text='Array: ' + toString(data), font=('helvetica', 10))
  84.     canvas.create_window(200, 210, window=label5)
  85.  
  86.  
  87. def shaker():
  88.     global data
  89.     length = len(data)
  90.     swapped = True
  91.     start_index = 0
  92.     end_index = length - 1
  93.  
  94.     while swapped:
  95.         swapped = False
  96.         for i in range(start_index, end_index):
  97.             if data[i] > data[i + 1]:
  98.                 data[i], data[i + 1] = data[i + 1], data[i]
  99.                 swapped = True
  100.         if not swapped:
  101.             break
  102.         swapped = False
  103.         end_index = end_index - 1
  104.         for i in range(end_index - 1, start_index - 1, -1):
  105.             if data[i] > data[i + 1]:
  106.                 data[i], data[i + 1] = data[i + 1], data[i]
  107.                 swapped = True
  108.  
  109.         start_index = start_index + 1
  110.     label6 = tk.Label(root, text='Array: ' + toString(data), font=('helvetica', 10))
  111.     canvas.create_window(200, 210, window=label6)
  112.  
  113.  
  114. def partition(nums, low, high):
  115.     pivot = nums[(low + high) // 2]
  116.     i = low - 1
  117.     j = high + 1
  118.     while True:
  119.         i += 1
  120.         while nums[i] < pivot:
  121.             i += 1
  122.  
  123.         j -= 1
  124.         while nums[j] > pivot:
  125.             j -= 1
  126.  
  127.         if i >= j:
  128.             return j
  129.  
  130.         nums[i], nums[j] = nums[j], nums[i]
  131.  
  132.  
  133. def hoarSort(nums):
  134.     def _hoarSort(items, low, high):
  135.         if low < high:
  136.             split_index = partition(items, low, high)
  137.             _hoarSort(items, low, split_index)
  138.             _hoarSort(items, split_index + 1, high)
  139.  
  140.     _hoarSort(nums, 0, len(nums) - 1)
  141.  
  142.  
  143. def hoar():
  144.     global data
  145.     hoarSort(data)
  146.  
  147.     label7 = tk.Label(root, text='Array: ' + toString(data), font=('helvetica', 10))
  148.     canvas.create_window(200, 210, window=label7)
  149.  
  150.  
  151. label4 = tk.Label(root, text='Ввод из файла:')
  152. label4.config(font=('helvetica', 10))
  153. canvas.create_window(50, 100, window=label4)
  154.  
  155. button3 = tk.Button(text="Сохранить массив в файл", command=saveArrayToFile, bg='brown', fg='white',
  156.                     font=('helvetica', 9, 'bold'))
  157. canvas.create_window(305, 100, window=button3)
  158.  
  159. button2 = tk.Button(text="Открыть", command=getArrayFromFile, bg='brown', fg='white', font=('helvetica', 9, 'bold'))
  160. canvas.create_window(135, 100, window=button2)
  161.  
  162. button4 = tk.Button(text="Шелл", command=shell, bg='brown', fg='white', font=('helvetica', 9,
  163.                                                                               'bold'))
  164. canvas.create_window(70, 150, window=button4)
  165.  
  166. button5 = tk.Button(text="Шейкер", command=shaker, bg='brown', fg='white', font=('helvetica', 9,
  167.                                                                                  'bold'))
  168. canvas.create_window(210, 150, window=button5)
  169. button6 = tk.Button(text="Хоар", command=hoar, bg='brown', fg='white', font=('helvetica', 9,
  170.                                                                              'bold'))
  171. canvas.create_window(350, 150, window=button6)
  172.  
  173. root.mainloop()
  174.  
RAW Paste Data