Advertisement
Guest User

Hw2

a guest
Oct 5th, 2015
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.55 KB | None | 0 0
  1. from tkinter import *
  2. import tkinter
  3. from tkinter import ttk
  4. from tkinter import messagebox
  5. from operator import itemgetter
  6.  
  7.  
  8. def puhasta():
  9.     tahvel.delete('all')
  10.  
  11. # joonistab tahvlile protsesse kujutavad ristkülikud numbrite ja protsesside nimedega
  12. def joonista(jarjend):
  13.     puhasta()
  14.     eelmise_loppx = 2
  15.     startPoint = 10
  16.     tmp = []    #massiiv valitud ketta sektorite ja nende koordinaatide jaoks
  17.     for i in range(50):
  18.         if (i+1)==startPoint:
  19.             jarjend.insert(0, [i+1, eelmise_loppx+10])
  20.         if i+1 in jarjend:
  21.             color = "#0099cc"
  22.             jarjend[jarjend.index(i+1)]=[i+1, eelmise_loppx+10]
  23.         else:
  24.             color = "white"
  25.         kujund = tahvel.create_rectangle(eelmise_loppx, 15, eelmise_loppx+20,40, fill=color)
  26.         text = tahvel.create_text(eelmise_loppx+10, 27, text=i+1)
  27.         eelmise_loppx += 20
  28.     step = 50
  29.     for x in range(len(jarjend)):
  30.         tipp = tahvel.create_oval(jarjend[x][1]-2, step-2, jarjend[x][1]+2, step+2)
  31.         if x+1<len(jarjend):
  32.             line = tahvel.create_line(jarjend[x][1], step, jarjend[x+1][1], step+10)
  33.         step+=10
  34.  
  35. # teeb järjendist kahetasemelise listi, mida on mugavam töödelda
  36. def massiiviks(input_jarjend):
  37.     valjund = []
  38.     for i in input_jarjend.split(","):
  39.         valjund.append(int(i))
  40.     return valjund
  41.  
  42. # otsustab, millist järjendit teha kahetasemeliseks massiiviks
  43. def massiiviMeister():
  44.     jarjend = []
  45.     if var.get() == 1:
  46.         return massiiviks(predef1)
  47.     elif var.get() == 2:
  48.         return massiiviks(predef2)
  49.     elif var.get() == 3:
  50.         return massiiviks(predef3)
  51.     elif var.get() == 4:
  52.         try:
  53.             return massiiviks(kasutaja_jarjend.get())
  54.         except:
  55.             messagebox.showerror(title="Viga sisendis", message="Vigane kasutaja muster!")
  56.             return massiiviks(predef1)
  57.     else:
  58.         return massiiviks(predef1)
  59.  
  60. def FCFS(jarjend):
  61.     return jarjend
  62.  
  63. def SSTF(jarjend):
  64.     tmp = []
  65.     start = 10
  66.     delta=0     #See on kaugus konkreetsest punktist. Kui punkt on i, siis kontrollime,
  67.     # kas element leidub paremal sellest punktist (i+delta) või vasakul (i-delta)
  68.     while len(jarjend)!=0:
  69.         if start in jarjend:
  70.             tmp.append(start)
  71.             jarjend.remove(start)
  72.         if start+delta in jarjend:
  73.             tmp.append(start+delta)
  74.             jarjend.remove(start+delta)
  75.             start=start+delta
  76.             delta=0
  77.         if (start-delta) in jarjend:
  78.             tmp.append(start-delta)
  79.             jarjend.remove(start-delta)
  80.             start=start-delta
  81.             delta=0
  82.         delta+=1
  83.     return tmp
  84.  
  85. def SCAN(jarjend):
  86.     tmp_algus=[]
  87.     tmp_lopp=[]
  88.     for i in sorted(jarjend):
  89.         if i > 10:
  90.             tmp_algus.append(i)
  91.         else:
  92.             tmp_lopp.append(i)
  93.     if 1 not in tmp_lopp:
  94.         tmp_lopp.insert(0, 1)
  95.     if 50 not in tmp_algus:
  96.         tmp_algus.insert(len(tmp_algus), 50)
  97.     tmp = tmp_algus+sorted(tmp_lopp, reverse=True)
  98.     return tmp
  99.  
  100. def LOOK(jarjend):
  101.     tmp_algus=[]
  102.     tmp_lopp=[]
  103.     for i in sorted(jarjend):
  104.         if i > 10:
  105.             tmp_algus.append(i)
  106.         else:
  107.             tmp_lopp.append(i)
  108.     tmp = tmp_algus+sorted(tmp_lopp, reverse=True)
  109.     return tmp
  110.  
  111. def CSCAN(jarjend):
  112.     tmp_algus=[]
  113.     tmp_lopp=[]
  114.     for i in sorted(jarjend):
  115.         if i > 10:
  116.             tmp_algus.append(i)
  117.         else:
  118.             tmp_lopp.append(i)
  119.     if 1 not in tmp_lopp:
  120.         tmp_lopp.insert(0, 1)
  121.     if 50 not in tmp_algus:
  122.         tmp_algus.insert(len(tmp_algus), 50)
  123.     tmp = tmp_algus+tmp_lopp
  124.     return tmp
  125.  
  126. def CLOOK(jarjend):
  127.     tmp_algus=[]
  128.     tmp_lopp=[]
  129.     for i in sorted(jarjend):
  130.         if i > 10:
  131.             tmp_algus.append(i)
  132.         else:
  133.             tmp_lopp.append(i)
  134.     tmp = tmp_algus+tmp_lopp
  135.     return tmp
  136.  
  137. def kasuvalija(jarjend, algoritm):
  138.     if algoritm == "FCFS":
  139.         return FCFS(jarjend)
  140.     elif algoritm == "SSTF":
  141.         return SSTF(jarjend)
  142.     elif algoritm == "SCAN":
  143.         return SCAN(jarjend)
  144.     elif algoritm == "LOOK":
  145.         return LOOK(jarjend)
  146.     elif algoritm == "CSCAN":
  147.         return CSCAN(jarjend)
  148.     elif algoritm == "CLOOK":
  149.         return CLOOK(jarjend)
  150.  
  151. def jooksuta_algoritmi(algoritm):
  152.     jarjend = massiiviMeister()
  153.     valjund = kasuvalija(jarjend, algoritm)
  154.     joonista(valjund)
  155.  
  156. predef1 = "15,8,17,27,9,1,14"
  157. predef2 = "1,3,35,41,21,11,28"
  158. predef3 = "12,7,19,4,24,49,26"
  159.  
  160.  
  161. # GUI
  162. raam = Tk()
  163. raam.title("Planeerimisalgoritmid")
  164. raam.resizable(False, False)
  165. raam.geometry("1100x400")
  166.  
  167. var = IntVar()
  168. var.set(1)
  169. Radiobutton(raam, text="Esimene", variable=var, value=1).place(x=10,y=40)
  170. Radiobutton(raam, text="Teine", variable=var, value=2).place(x=10,y=70)
  171. Radiobutton(raam, text="Kolmas", variable=var, value=3).place(x=10,y=100)
  172. Radiobutton(raam, text="Enda oma", variable=var, value=4).place(x=10,y=130)
  173.  
  174. silt_vali = ttk.Label(raam, text="Vali või sisesta järjend (kujul 15,8,17,27,9,1,14)")
  175. silt_vali.place(x=10, y=10)
  176.  
  177. silt1 = ttk.Label(raam, text=predef1)
  178. silt1.place(x=120, y=40)
  179.  
  180. silt2 = ttk.Label(raam, text=predef2)
  181. silt2.place(x=120, y=70)
  182.  
  183. silt3 = ttk.Label(raam, text=predef3)
  184. silt3.place(x=120, y=100)
  185.  
  186. silt_run = ttk.Label(raam, text="Algoritmi käivitamiseks klõpsa nupule")
  187. silt_run.place(x=10, y=160)
  188.  
  189. tahvel = Canvas(raam, width=1100, height=180, background="white")
  190. tahvel.place(x=0, y=220)
  191.  
  192. kasutaja_jarjend = ttk.Entry(raam)
  193. kasutaja_jarjend.place(x=120, y=130, height=25, width=240)
  194.  
  195. FCFS_nupp = ttk.Button(raam, text="FCFS", command = lambda : jooksuta_algoritmi("FCFS"))
  196. FCFS_nupp.place(x=10, y=190,height=25, width=80)
  197.  
  198. SSTF_nupp = ttk.Button(raam, text="SSTF", command = lambda : jooksuta_algoritmi("SSTF"))
  199. SSTF_nupp.place(x=100, y=190,height=25, width=80)
  200.  
  201. SCAN_nupp = ttk.Button(raam, text="SCAN", command = lambda : jooksuta_algoritmi("SCAN"))
  202. SCAN_nupp.place(x=190, y=190,height=25, width=80)
  203.  
  204. LOOK_nupp = ttk.Button(raam, text="LOOK", command = lambda : jooksuta_algoritmi("LOOK"))
  205. LOOK_nupp.place(x=280, y=190,height=25, width=80)
  206.  
  207. CSCAN_nupp = ttk.Button(raam, text="C-SCAN", command = lambda : jooksuta_algoritmi("CSCAN"))
  208. CSCAN_nupp.place(x=370, y=190,height=25, width=80)
  209.  
  210. CLOOK_nupp = ttk.Button(raam, text="C-LOOK", command = lambda : jooksuta_algoritmi("CLOOK"))
  211. CLOOK_nupp.place(x=460, y=190,height=25, width=80)
  212.  
  213. puhasta_nupp = ttk.Button(raam, text="Puhasta väljund", command = lambda : puhasta() )
  214. puhasta_nupp.place(x=560, y=190,height=25, width=130)
  215.  
  216. raam.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement