Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.80 KB | None | 0 0
  1. import tkinter as tk
  2.  
  3. class MainApplication(object):
  4. def __init__(self, master):
  5. self.master = master
  6. self.master.title("Solve-LGS's - by Jeremy")
  7. self.master.configure(bg="#f2f1f0")
  8. #self.master.resizable(width=False, height=False)
  9. # Frame
  10. self.frame = tk.Frame(self.master, bg="#f2f1f0")
  11. self.frame2 = tk.Frame(self.master, bg="#f2f1f0")
  12.  
  13. # Textentrys Line 1
  14. self.a1 = tk.Entry(self.frame, font="Arial 15", width=7)
  15. self.b1 = tk.Entry(self.frame, font="Arial 15", width=7)
  16. self.c1 = tk.Entry(self.frame, font="Arial 15", width=7)
  17. self.d1 = tk.Entry(self.frame, font="Arial 15", width=7)
  18. self.e1 = tk.Entry(self.frame, font="Arial 15", width=7)
  19. self.equal_1 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
  20. self.ls1 = tk.Entry(self.frame, font="Arial 15", width=7)
  21. # Textentrys Line 2
  22. self.a2 = tk.Entry(self.frame, font="Arial 15", width=7)
  23. self.b2 = tk.Entry(self.frame, font="Arial 15", width=7)
  24. self.c2 = tk.Entry(self.frame, font="Arial 15", width=7)
  25. self.d2 = tk.Entry(self.frame, font="Arial 15", width=7)
  26. self.e2 = tk.Entry(self.frame, font="Arial 15", width=7)
  27. self.equal_2 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
  28. self.ls2 = tk.Entry(self.frame, font="Arial 15", width=7)
  29. # Textentrys Line 3
  30. self.a3 = tk.Entry(self.frame, font="Arial 15", width=7)
  31. self.b3 = tk.Entry(self.frame, font="Arial 15", width=7)
  32. self.c3 = tk.Entry(self.frame, font="Arial 15", width=7)
  33. self.d3 = tk.Entry(self.frame, font="Arial 15", width=7)
  34. self.e3 = tk.Entry(self.frame, font="Arial 15", width=7)
  35. self.equal_3 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
  36. self.ls3 = tk.Entry(self.frame, font="Arial 15", width=7)
  37. # Textentrys Line 4
  38. self.a4 = tk.Entry(self.frame, font="Arial 15", width=7)
  39. self.b4 = tk.Entry(self.frame, font="Arial 15", width=7)
  40. self.c4 = tk.Entry(self.frame, font="Arial 15", width=7)
  41. self.d4 = tk.Entry(self.frame, font="Arial 15", width=7)
  42. self.e4 = tk.Entry(self.frame, font="Arial 15", width=7)
  43. self.equal_4 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
  44. self.ls4 = tk.Entry(self.frame, font="Arial 15", width=7)
  45. # Textentrys Line 5
  46. self.a5 = tk.Entry(self.frame, font="Arial 15", width=7)
  47. self.b5 = tk.Entry(self.frame, font="Arial 15", width=7)
  48. self.c5 = tk.Entry(self.frame, font="Arial 15", width=7)
  49. self.d5 = tk.Entry(self.frame, font="Arial 15", width=7)
  50. self.e5 = tk.Entry(self.frame, font="Arial 15", width=7)
  51. self.equal_5 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
  52. self.ls5 = tk.Entry(self.frame, font="Arial 15", width=7)
  53.  
  54. # Variabelnauswahl
  55. self.var_var = tk.IntVar()
  56. self.var_var.set(3)
  57. self.var_label = tk.Label(self.frame2, textvariable=self.var_var, font="Arial 15 bold", bg="#f2f1f0")
  58. self.var_label.grid(row=0, column=2)
  59. self.space_label1 = tk.Label(self.frame2, fg="#f2f1f0", bg="#f2f1f0", text=" ").grid(row=0, column=1)
  60. self.space_label2 = tk.Label(self.frame2, fg="#f2f1f0", bg="#f2f1f0", text=" ").grid(row=0, column=3)
  61. self.button2 = tk.Button(self.frame2, text="«", bg="#f2f1f0", font="Arial 20", highlightthickness=0, relief="flat", takefocus=0, command=lambda: self.change_var_var(-1))
  62. self.button2.grid(row=0, column=0, columnspan=1)
  63. self.button3 = tk.Button(self.frame2, text="»", bg="#f2f1f0", font="Arial 20", highlightthickness=0, relief="flat", takefocus=0, command=lambda: self.change_var_var(1))
  64. self.button3.grid(row=0, column=4, columnspan=1)
  65.  
  66. ###
  67. self.frame2.grid()
  68. self.frame.grid()
  69. self.frame.focus_set()
  70.  
  71. self.master.bind("<Left>", lambda e: self.change_var_var(-1))
  72. self.master.bind("<Right>", lambda e: self.change_var_var(1))
  73.  
  74. self.master.bind("<Return>", lambda e: self.solve_start())
  75.  
  76. self.update_entrys()
  77.  
  78. def change_var_var(self, factor):
  79. if factor > 0: # positiver faktor
  80. if self.var_var.get() != 5:
  81. self.var_var.set(self.var_var.get()+1)
  82. self.update_entrys()
  83. if factor < 0: # negativer faktor
  84. if self.var_var.get() != 2:
  85. self.var_var.set(self.var_var.get()-1)
  86. self.update_entrys()
  87.  
  88. def update_entrys(self):
  89. self.var_anzahl = self.var_var.get()
  90.  
  91. self.ids = [self.a1, self.a2, self.a3, self.a4, self.a5,
  92. self.b1, self.b2, self.b3, self.b4, self.b5,
  93. self.c1, self.c2, self.c3, self.c4, self.c5,
  94. self.d1, self.d2, self.d3, self.d4, self.d5,
  95. self.e1, self.e2, self.e3, self.e4, self.e5,
  96. self.equal_1, self.equal_2, self.equal_3, self.equal_4, self.equal_5,
  97. self.ls1, self.ls2, self.ls3, self.ls4, self.ls5]
  98.  
  99. for item in self.ids:
  100. item.grid_forget()
  101.  
  102. if self.var_anzahl == 2:
  103. self.a1.grid(row=1, column=0)
  104. self.b1.grid(row=1, column=1)
  105. self.equal_1.grid(row=1, column=2)
  106. self.ls1.grid(row=1, column=3)
  107.  
  108. self.a2.grid(row=2, column=0)
  109. self.b2.grid(row=2, column=1)
  110. self.equal_2.grid(row=2, column=2)
  111. self.ls2.grid(row=2, column=3)
  112.  
  113. if self.var_anzahl == 3:
  114. self.a1.grid(row=1, column=0)
  115. self.b1.grid(row=1, column=1)
  116. self.c1.grid(row=1, column=2)
  117. self.equal_1.grid(row=1, column=3)
  118. self.ls1.grid(row=1, column=4)
  119.  
  120. self.a2.grid(row=2, column=0)
  121. self.b2.grid(row=2, column=1)
  122. self.c2.grid(row=2, column=2)
  123. self.equal_2.grid(row=2, column=3)
  124. self.ls2.grid(row=2, column=4)
  125.  
  126. self.a3.grid(row=3, column=0)
  127. self.b3.grid(row=3, column=1)
  128. self.c3.grid(row=3, column=2)
  129. self.equal_3.grid(row=3, column=3)
  130. self.ls3.grid(row=3, column=4)
  131.  
  132. if self.var_anzahl == 4:
  133. self.a1.grid(row=1, column=0)
  134. self.b1.grid(row=1, column=1)
  135. self.c1.grid(row=1, column=2)
  136. self.d1.grid(row=1, column=3)
  137. self.equal_1.grid(row=1, column=4)
  138. self.ls1.grid(row=1, column=5)
  139.  
  140. self.a2.grid(row=2, column=0)
  141. self.b2.grid(row=2, column=1)
  142. self.c2.grid(row=2, column=2)
  143. self.d2.grid(row=2, column=3)
  144. self.equal_2.grid(row=2, column=4)
  145. self.ls2.grid(row=2, column=5)
  146.  
  147. self.a3.grid(row=3, column=0)
  148. self.b3.grid(row=3, column=1)
  149. self.c3.grid(row=3, column=2)
  150. self.d3.grid(row=3, column=3)
  151. self.equal_3.grid(row=3, column=4)
  152. self.ls3.grid(row=3, column=5)
  153.  
  154. self.a4.grid(row=4, column=0)
  155. self.b4.grid(row=4, column=1)
  156. self.c4.grid(row=4, column=2)
  157. self.d4.grid(row=4, column=3)
  158. self.equal_4.grid(row=4, column=4)
  159. self.ls4.grid(row=4, column=5)
  160.  
  161. if self.var_anzahl == 5:
  162. self.a1.grid(row=1, column=0)
  163. self.b1.grid(row=1, column=1)
  164. self.c1.grid(row=1, column=2)
  165. self.d1.grid(row=1, column=3)
  166. self.e1.grid(row=1, column=4)
  167. self.equal_1.grid(row=1, column=5)
  168. self.ls1.grid(row=1, column=6)
  169.  
  170. self.a2.grid(row=2, column=0)
  171. self.b2.grid(row=2, column=1)
  172. self.c2.grid(row=2, column=2)
  173. self.d2.grid(row=2, column=3)
  174. self.e2.grid(row=2, column=4)
  175. self.equal_2.grid(row=2, column=5)
  176. self.ls2.grid(row=2, column=6)
  177.  
  178. self.a3.grid(row=3, column=0)
  179. self.b3.grid(row=3, column=1)
  180. self.c3.grid(row=3, column=2)
  181. self.d3.grid(row=3, column=3)
  182. self.e3.grid(row=3, column=4)
  183. self.equal_3.grid(row=3, column=5)
  184. self.ls3.grid(row=3, column=6)
  185.  
  186. self.a4.grid(row=4, column=0)
  187. self.b4.grid(row=4, column=1)
  188. self.c4.grid(row=4, column=2)
  189. self.d4.grid(row=4, column=3)
  190. self.e4.grid(row=4, column=4)
  191. self.equal_4.grid(row=4, column=5)
  192. self.ls4.grid(row=4, column=6)
  193.  
  194. self.a5.grid(row=5, column=0)
  195. self.b5.grid(row=5, column=1)
  196. self.c5.grid(row=5, column=2)
  197. self.d5.grid(row=5, column=3)
  198. self.e5.grid(row=5, column=4)
  199. self.equal_5.grid(row=5, column=5)
  200. self.ls5.grid(row=5, column=6)
  201.  
  202. def solve_start(self):
  203. self.anz_var = self.var_var.get()
  204.  
  205. if self.anz_var == 2:
  206. self.lgs = [ [float(self.a1.get()), float(self.b1.get()), float(self.ls1.get())],
  207. [float(self.a2.get()), float(self.b2.get()), float(self.ls2.get())]
  208. ]
  209. self.results = SolveZweierLgs(self.lgs)
  210.  
  211. elif self.anz_var == 3:
  212. self.lgs = [ [float(self.a1.get()), float(self.b1.get()), float(self.c1.get()), float(self.ls1.get())],
  213. [float(self.a2.get()), float(self.b2.get()), float(self.c2.get()), float(self.ls2.get())],
  214. [float(self.a3.get()), float(self.b3.get()), float(self.c3.get()), float(self.ls3.get())]
  215. ]
  216. self.results = SolveDreierLgs(self.lgs)
  217.  
  218. elif self.anz_var == 4:
  219. self.lgs = [ [self.a1.get(), self.b1.get(), self.c1.get(), self.d1.get(), self.ls1.get()],
  220. [self.a2.get(), self.b2.get(), self.c2.get(), self.d2.get(), self.ls2.get()],
  221. [self.a3.get(), self.b3.get(), self.c3.get(), self.d3.get(), self.ls3.get()],
  222. [self.a4.get(), self.b4.get(), self.c4.get(), self.d4.get(), self.ls4.get()]
  223. ]
  224.  
  225. elif self.anz_var == 5:
  226. self.lgs = [ [self.a1.get(), self.b1.get(), self.c1.get(), self.d1.get(), self.e1.get(), self.ls1.get()],
  227. [self.a2.get(), self.b2.get(), self.c2.get(), self.d2.get(), self.e2.get(), self.ls2.get()],
  228. [self.a3.get(), self.b3.get(), self.c3.get(), self.d3.get(), self.e3.get(), self.ls3.get()],
  229. [self.a4.get(), self.b4.get(), self.c4.get(), self.d4.get(), self.e4.get(), self.ls4.get()],
  230. [self.a5.get(), self.b5.get(), self.c5.get(), self.d5.get(), self.e5.get(), self.ls5.get()]
  231. ]
  232.  
  233. class FunctionsToSolve(object):
  234. """ Funktionen die benötigt werden"""
  235. def __init__(self):
  236. pass
  237.  
  238. def is_negativ(self, num):
  239. """Return True wenn Zahl negativ ist, false wenn positiv o. 0"""
  240. self.num = num
  241. if self.num >= 0:
  242. return False
  243. if self.num < 0:
  244. return True
  245.  
  246. def get_kgv(self, *nums):
  247. """Return das kleinste gemeinsame Vielfache von *nums"""
  248. from fractions import gcd
  249. self.nums = nums
  250. try:
  251. self.kgv = self.nums[0] * self.nums[1] / gcd(self.nums[0], self.nums[1])
  252.  
  253. try:
  254. return self.get_kgv(self.kgv, *self.nums[2:])
  255. except IndexError:
  256. return self.kgv
  257. except ZeroDivisionError:
  258. return 0
  259.  
  260. class Textfield(object):
  261. """Erstellt ein neues Fenster mit dem Lösungsweg"""
  262. def __init__(self, txt):
  263. self.txt = txt
  264. self.create_window()
  265.  
  266. def create_window(self):
  267. self.t = tk.Toplevel()
  268. self.t.wm_title("Lösungsweg")
  269. self.text = tk.Text(self.t, height=40, width=50, font="Arial")
  270. self.text.bind("<Button-1>", self.set_focus)
  271. self.text.tag_configure("center", justify='center')
  272. self.text.insert("1.0", self.txt)
  273. self.text.tag_add("center", "1.0", "end")
  274. self.text.configure(state=tk.DISABLED)
  275. self.text.pack(expand=True)
  276.  
  277. def set_focus(self, event):
  278. """Setzt Fokus auf Textwidget, sodass man den Text kopieren kann"""
  279. self.text.focus_set()
  280.  
  281. class SolveZweierLgs(FunctionsToSolve):
  282. def __init__(self, lgs):
  283. self.lgs = lgs
  284. self.solve(self.lgs)
  285.  
  286. def solve(self, lgs):
  287. self.ls_string = ""
  288. self.step_3 = None
  289.  
  290. self.line1 = self.lgs[0]
  291. self.line2 = self.lgs[1]
  292.  
  293. self.a1 = self.line1[0]
  294. self.b1 = self.line1[1]
  295. self.ls1 = self.line1[2]
  296.  
  297. self.a2 = self.line2[0]
  298. self.b2 = self.line2[1]
  299. self.ls2 = self.line2[2]
  300.  
  301. self.ls_string += "» Lineares Gleichungssystemn"
  302. self.ls_string += self.current_lgs()
  303.  
  304. """Step 2: Die erste Zahl in der ersten Zeile soll positiv sein (ev. mit -1 multiplizieren)."""
  305. if self.is_negativ(self.a1) == True:
  306. self.a1 *= -1
  307. self.b1 *= -1
  308. self.ls1 *= -1
  309. self.ls_string += "» 1. Zeile * -1n"
  310. self.ls_string += self.current_lgs()
  311.  
  312. """Step 3: Sorgen Sie durch Multiplikation oder Division dafür, dass in der ersten Spalte alle
  313. Zahlen den gleichen Betrag haben. In Zeile 2 soll die erste Zahl negativ sein."""
  314. if self.a1 != 0 and self.a2 != 0:
  315. """Es ist in Spalte 1 keine 0 vorhanden"""
  316. self.kgv_sp1 = self.get_kgv(self.a1, self.a2)
  317.  
  318. self.factor_line_1_1 = self.kgv_sp1 / self.a1
  319. self.a1 *= self.factor_line_1_1
  320. self.b1 *= self.factor_line_1_1
  321. self.ls1 *= self.factor_line_1_1
  322.  
  323. self.factor_line_2_1 = self.kgv_sp1 / self.a2
  324. self.factor_line_2_1 *= -1
  325. self.a2 *= self.factor_line_2_1
  326. self.b2 *= self.factor_line_2_1
  327. self.ls2 *= self.factor_line_2_1
  328.  
  329. self.ls_string += "» 1. Zeile * {0}n".format(self.factor_line_1_1)
  330. self.ls_string += "» 2. Zeile * {0}n".format(self.factor_line_2_1)
  331. self.ls_string += self.current_lgs()
  332.  
  333. elif self.a1 != 0 and self.a2 == 0:
  334. """Bereits aufgelöst"""
  335. self.step_3 = False
  336.  
  337. elif self.a1 == 0 and self.a2 != 0:
  338. """Zeilen tauschen"""
  339. self.a1, self.a2 = self.a2, self.a1
  340. self.b1, self.b2 = self.b2, self.b1
  341. self.ls1, self.ls2 = self.ls2, self.ls1
  342.  
  343. self.ls_string += "» 1. und 2. Zeile wurden getauscht."
  344. self.ls_string += self.current_lgs()
  345.  
  346. """Step 4: 2. Zeile + 1. Zeile, sodass eine Null ensteht"""
  347. if self.step_3 != False:
  348. self.a2 += self.a1
  349. self.b2 += self.b1
  350. self.ls2 += self.ls1
  351.  
  352. self.ls_string += "» 2. Zeile + 1. Zeilen"
  353. self.ls_string += self.current_lgs()
  354.  
  355. """Step 5: Lösen"""
  356. if (self.a2+self.b2+self.ls2) != 0:
  357. """x2 (b)"""
  358. self.ls_string += "» Gleichung nach x2 lösen:n"
  359. self.ls_string += "{0}*x2 = {1} |: {2}n".format(round(self.b2, 4), round(self.ls2, 4), round(self.b2, 4))
  360. self.ls2 = self.ls2 / self.b2
  361. self.ls_x2 = self.ls2
  362. self.ls_string += "x2 = {0}nn".format(round(self.ls_x2, 4))
  363.  
  364. """x1 (a)"""
  365. self.ls_string += "» Gleichung nach x1 lösen:n"
  366. self.ls_string += "{0}*x1 + {1}*x2 = {2}n".format(round(self.a1, 4), round(self.b1, 4), round(self.ls1, 4))
  367. self.b1 = self.b1 * self.ls_x2
  368. if self.is_negativ(self.b1) == False:
  369. self.rz = "-"
  370. self.ls_string += "{0}*x1 + {1} = {2} |{3} {4}n".format(round(self.a1, 4), round(self.b1, 4), round(self.ls1, 4), self.rz, round(self.b1, 4))
  371. self.ls1 -= self.b1
  372. elif self.is_negativ(self.b1) == True:
  373. self.rz = "+"
  374. self.ls_string += "{0}*x1 + {1} = {2} |{3} ({4}*-1)n".format(round(self.a1, 4), round(self.b1, 4), round(self.ls1, 4), self.rz, round(self.b1, 4))
  375. self.ls1 += (self.b1*-1)
  376.  
  377. self.ls_string += "{0} = {1} |: {2}n".format(round(self.a1, 4), round(self.ls1, 4), round(self.a1, 4))
  378. self.ls_x1 = self.ls1 / self.a1
  379.  
  380. self.ls_string += "x1 = {0}nn".format(round(self.ls_x1, 4))
  381.  
  382. self.ls_string += "x1 = {0}nx2 = {1}n".format(round(self.ls_x1, 4), round(self.ls_x2, 4))
  383.  
  384. self.a = Textfield(self.ls_string)
  385. else:
  386. """Zeile 2 ist komplett 0"""
  387. self.ls_string += "» Gleichung nach x1 lösen:n"
  388. if self.is_negativ(self.b1) == False:
  389. self.rz = "-"
  390. self.ls_string += "{0}*x1 + {1}*x2 = {2} |{3} {4}*x2n".format(self.a1, self.b1, self.ls1, self.rz, self.b1)
  391. self.ls_string += "{0}*x1 = -{1}*x2 + {2} |: {3}n".format(self.a1, self.b1, self.ls1, self.a1)
  392. self.ls_string += "x1 = -{0}*x2 + {1}nn".format(self.b1/self.a1, self.ls1/self.a1)
  393. self.v1 = "x1 = -{0}*x2 + {1}n".format(self.b1/self.a1, self.ls1/self.a1)
  394. elif self.is_negativ(self.b1) == True:
  395. self.rz = "+"
  396. self.ls_string += "{0}*x1 + {1}*x2 = {2} |{3} {4}*x2n".format(self.a1, self.b1, self.ls1, self.rz, self.b1)
  397. self.ls_string += "{0}*x1 = {1}*x2 + {2} |: {3}n".format(self.a1, self.b1, self.ls1, self.a1)
  398. self.ls_string += "x1 = {0}*x2 + {1}nn".format(self.b1/self.a1, self.ls1/self.a1)
  399. self.v1 = "x1 = {0}*x2 + {1}n".format(self.b1/self.a1, self.ls1/self.a1)
  400.  
  401. self.ls_string += "» Gleichung nach x2 lösen:n"
  402. if self.is_negativ(self.b1) == False:
  403. self.rz = "-"
  404. self.ls_string += "{0}*x1 + {1}*x2 = {2} |{3} {4}*x1n".format(self.a1, self.b1, self.ls2, self.rz, self.a1)
  405. self.ls_string += "{0}*x2 = -{1}*x1 + {2} |: {3}n".format(self.b1, self.a1, self.ls1, self.b1)
  406. self.ls_string += "x2 = -{0}*x1 + {1}nn".format(self.a1/self.b1, self.ls1/self.b1)
  407. self.v2 = "x2 = -{0}*x1 + {1}nn".format(self.a1/self.b1, self.ls1/self.b1)
  408. elif self.is_negativ(self.b1) == True:
  409. self.rz = "+"
  410. self.ls_string += "{0}*x1 + {1}*x2 = {2} |{3} {4}*x1n".format(self.a1, self.b1, self.ls2, self.rz, self.a1)
  411. self.ls_string += "{0}*x2 = {1}*x1 + {2} |: {3}n".format(self.b1, self.a1, self.ls1, self.b1)
  412. self.ls_string += "x2 = {0}*x1 + {1}nn".format(self.a1/self.b1, self.ls1/self.b1)
  413. self.v2 = "x2 = {0}*x1 + {1}nn".format(self.a1/self.b1, self.ls1/self.b1)
  414.  
  415. self.ls_string += self.v1
  416. self.ls_string += self.v2
  417. self.a = Textfield(self.ls_string)
  418.  
  419. def current_lgs(self):
  420. self.lgs = "[{0}, {1}, {2}]n[{3}, {4}, {5}]nn".format(
  421. round(self.a1, 4), round(self.b1, 4), round(self.ls1, 4),
  422. round(self.a2, 4), round(self.b2, 4), round(self.ls2, 4))
  423. return self.lgs
  424.  
  425. class SolveDreierLgs(FunctionsToSolve):
  426. def __init__(self, lgs):
  427. self.lgs = lgs
  428. self.solve(self.lgs)
  429.  
  430. def solve(self, lgs):
  431. self.step_3 = None
  432. self.step_6 = None
  433. self.ls_string = ""
  434.  
  435. self.line1 = self.lgs[0]
  436. self.line2 = self.lgs[1]
  437. self.line3 = self.lgs[2]
  438.  
  439. self.a1 = self.line1[0]
  440. self.b1 = self.line1[1]
  441. self.c1 = self.line1[2]
  442. self.ls1 = self.line1[3]
  443.  
  444. self.a2 = self.line2[0]
  445. self.b2 = self.line2[1]
  446. self.c2 = self.line2[2]
  447. self.ls2 = self.line2[3]
  448.  
  449. self.a3 = self.line3[0]
  450. self.b3 = self.line3[1]
  451. self.c3 = self.line3[2]
  452. self.ls3 = self.line3[3]
  453.  
  454. """Step 1: Wer Brüche eingibt ist selbst schuld.. Ttz"""
  455.  
  456. self.ls_string += "» Lineares Gleichungssystemn"
  457. self.ls_string += self.current_lgs()
  458.  
  459. """Step 2: Die erste Zahl in der ersten Zeile soll positiv sein (ev. mit -1 multiplizieren)."""
  460. if self.is_negativ(self.a1) == True:
  461. self.a1 *= -1
  462. self.b1 *= -1
  463. self.c1 *= -1
  464. self.ls1 *= -1
  465. self.ls_string += "» 1. Zeile * -1n"
  466. self.ls_string += self.current_lgs()
  467.  
  468. """Step 3: Sorgen Sie durch Multiplikation oder Division dafür, dass in der ersten Spalte alle
  469. Zahlen den gleichen Betrag haben. In Zeile 2 und 3 soll die erste Zahl negativ sein."""
  470. if self.a1 != 0 and self.a2 != 0 and self.a3 != 0:
  471. """Es ist in Spalte 1 keine 0 vorhanden"""
  472. self.kgv_sp1 = self.get_kgv(self.a1, self.a2, self.a3)
  473.  
  474. """ Zeile 1 """
  475. self.factor_line_1_1 = self.kgv_sp1 / self.a1
  476. self.a1 *= self.factor_line_1_1
  477. self.b1 *= self.factor_line_1_1
  478. self.c1 *= self.factor_line_1_1
  479. self.ls1 *= self.factor_line_1_1
  480.  
  481. """ Zeile 2 """
  482. self.factor_line_2_1 = self.kgv_sp1 / self.a2
  483. self.factor_line_2_1 *= -1
  484. self.a2 *= self.factor_line_2_1
  485. self.b2 *= self.factor_line_2_1
  486. self.c2 *= self.factor_line_2_1
  487. self.ls2 *= self.factor_line_2_1
  488.  
  489. """ Zeile 3 """
  490. self.factor_line_3_1 = self.kgv_sp1 / self.a3
  491. self.factor_line_3_1 *= -1
  492. self.a3 *= self.factor_line_3_1
  493. self.b3 *= self.factor_line_3_1
  494. self.c3 *= self.factor_line_3_1
  495. self.ls3 *= self.factor_line_3_1
  496.  
  497. self.ls_string += "» 1. Zeile * {0}n".format(self.factor_line_1_1)
  498. self.ls_string += "» 2. Zeile * {0}n".format(self.factor_line_2_1)
  499. self.ls_string += "» 3. Zeile * {0}n".format(self.factor_line_3_1)
  500. self.ls_string += self.current_lgs()
  501.  
  502. elif self.a1 != 0 and self.a2 != 0 and self.a3 == 0:
  503. """Es ist in Spalte 1 in Zeile 3 eine 0 vorhanden"""
  504. self.kgv_sp1 = self.get_kgv(self.a1, self.a2)
  505.  
  506. """ Zeile 1 """
  507. self.factor_line_1_1 = self.kgv_sp1 / self.a1
  508. self.a1 *= self.factor_line_1_1
  509. self.b1 *= self.factor_line_1_1
  510. self.c1 *= self.factor_line_1_1
  511. self.ls1 *= self.factor_line_1_1
  512.  
  513. """ Zeile 2 """
  514. self.factor_line_2_1 = self.kgv_sp1 / self.a2
  515. self.factor_line_2_1 *= -1
  516. self.a2 *= self.factor_line_2_1
  517. self.b2 *= self.factor_line_2_1
  518. self.c2 *= self.factor_line_2_1
  519. self.ls2 *= self.factor_line_2_1
  520.  
  521. self.ls_string += "» 1. Zeile * {0}n".format(self.factor_line_1_1)
  522. self.ls_string += "» 2. Zeile * {0}n".format(self.factor_line_2_1)
  523. self.ls_string += self.current_lgs()
  524.  
  525. elif self.a1 != 0 and self.a2 == 0 and self.a3 != 0:
  526. """Es ist in Spalte 1 in Zeile 2 eine 0 vorhanden"""
  527. self.kgv_sp1 = self.get_kgv(self.a1, self.a3)
  528.  
  529. """ Zeile 1 """
  530. self.factor_line_1_1 = self.kgv_sp1 / self.a1
  531. self.a1 *= self.factor_line_1_1
  532. self.b1 *= self.factor_line_1_1
  533. self.c1 *= self.factor_line_1_1
  534. self.ls1 *= self.factor_line_1_1
  535.  
  536. """ Zeile 3 """
  537. self.factor_line_3_1 = self.kgv_spy / self.a3
  538. self.factor_line_3_1 *= -1
  539. self.a3 *= self.factor_line_3_1
  540. self.b3 *= self.factor_line_3_1
  541. self.c3 *= self.factor_line_3_1
  542. self.ls3 *= self.factor_line_3_1
  543.  
  544. self.ls_string += "» 1. Zeile * {0}n".format(self.factor_line_1_1)
  545. self.ls_string += "» 3. Zeile * {0}n".format(self.factor_line_3_1)
  546. self.ls_string += self.current_lgs()
  547. else:
  548. """Es ist in Spalte 1 in Zeile 2+3 eine 0 vorhanden;
  549. Schritt 3 und 4 werden daher übersprungen."""
  550. self.step_3 = False
  551.  
  552. """Step 4: Addieren Sie zur 2. und zur 3. Zeile jeweils die erste. Dadurch entstehen in der ersten
  553. Spalte 2 Nullen."""
  554. if self.step_3 != False:
  555. """Line 2 + Line 1"""
  556. self.a2 += self.a1
  557. self.b2 += self.b1
  558. self.c2 += self.c1
  559. self.ls2 += self.ls1
  560.  
  561. """Line 3 + Line 1"""
  562. self.a3 += self.a1
  563. self.b3 += self.b1
  564. self.c3 += self.c1
  565. self.ls3 += self.ls1
  566.  
  567. self.ls_string += "» 2. Zeile + 1. Zeilen"
  568. self.ls_string += "» 3. Zeile + 1. Zeilen"
  569. self.ls_string += self.current_lgs()
  570.  
  571. """Step 5: Die zweite Zahl in der 2. Zeile soll positiv sein (ev. mit -1 multiplizieren)."""
  572. if self.is_negativ(self.b2) == True:
  573. self.b2 *= -1
  574. self.c2 *= -1
  575. self.ls2 *= -1
  576.  
  577. self.ls_string += "» 2. Zeile * -1n"
  578. self.ls_string += self.current_lgs()
  579.  
  580. """Step 6: Sorgen Sie durch Multiplikation oder Division dafür, dass ab der 2. Zeile in der zweiten
  581. Spalte alle Zahlen den gleichen Betrag haben. In Zeile 3 soll die zweite Zahl negativ sein."""
  582. if self.b2 != 0 and self.b3 != 0:
  583. """ Es ist in Spalte 2 in Zeile 2 und 3 keine 0 vorhanden """
  584. self.kgv_sp2 = self.get_kgv(self.b2, self.b3)
  585.  
  586. """ Zeile 2 """
  587. self.factor_line_2_2 = self.kgv_sp2 / self.b2
  588. self.b2 *= self.factor_line_2_2
  589. self.c2 *= self.factor_line_2_2
  590. self.ls2 *= self.factor_line_2_2
  591.  
  592. """ Zeile 3 """
  593. self.factor_line_3_2 = self.kgv_sp2 / self.b3
  594. self.factor_line_3_2 *= -1
  595. self.b3 *= self.factor_line_3_2
  596. self.c3 *= self.factor_line_3_2
  597. self.ls3 *= self.factor_line_3_2
  598.  
  599. self.ls_string += "» 2. Zeile * {0}n".format(self.factor_line_2_2)
  600. self.ls_string += "» 3. Zeile * {0}n".format(self.factor_line_3_2)
  601. self.ls_string += self.current_lgs()
  602.  
  603. elif self.b2 != 0 and self.b3 == 0:
  604. """ Bereits fertig aufgelöst """
  605. self.step_6 = False
  606. pass
  607.  
  608. elif self.b2 == 0 and self.b3 != 0:
  609. """ Zeile 3 und 2 werden getauscht, da Gleichung sonst nicht aufgelöst
  610. werden kann."""
  611. self.b2, self.b3 = self.b3, self.b2
  612. self.c2, self.c3 = self.c3, self.c2
  613. self.ls2, self.ls3 = self.ls3, self.ls2
  614. self.step_6 = False
  615.  
  616. self.ls_string += "» 2. und 3. Zeile wurden getauscht.n"
  617. self.ls_string += self.current_lgs()
  618.  
  619. """Step 7: Addieren Sie zur 3. Zeile die 2. Zeile. Dadurch entsteht in der 3. Zeile die 2. Null"""
  620. if self.step_6 != False:
  621. self.b3 += self.b2
  622. self.c3 += self.c2
  623. self.ls3 += self.ls2
  624.  
  625. self.ls_string += "» 3. Zeile + 2. Zeilen"
  626. self.ls_string += self.current_lgs()
  627.  
  628. """Step 8: Lösen"""
  629.  
  630. """ x3 (c) lösen """
  631. self.ls_string += "» Gleichung nach x3 lösen:n"
  632. self.ls_string += "{0}*x3 = {1} |: {2}n".format(round(self.c3, 4), round(self.ls3, 4), round(self.c3, 4))
  633.  
  634. self.ls3 = self.ls3 / self.c3
  635. self.ls_x3 = self.ls3
  636.  
  637. self.ls_string += "x3 = {0}nn".format(round(self.ls_x3, 4))
  638.  
  639. """ x2 (b) lösen """
  640. self.ls_string += "» Gleichung nach x2 lösen:n"
  641. self.ls_string += "{0}*x2 + {1}*x3 = {2}n".format(round(self.b2, 4), round(self.c2, 4), round(self.ls2, 4))
  642.  
  643. self.c2 = self.c2 * self.ls_x3
  644. if self.is_negativ(self.c2) == False:
  645. self.rz = "-"
  646. self.ls_string += "{0}*x2 + {1} = {2} |{3} {4}n".format(round(self.b2, 4), round(self.c2, 4), round(self.ls2, 4), self.rz, round(self.c2, 4))
  647. self.ls2 -= self.c2
  648. elif self.is_negativ(self.c2) == True:
  649. self.rz = "+"
  650. self.ls_string += "{0}*x2 + {1} = {2} |{3} ({4}*-1)n".format(round(self.b2, 4), round(self.c2, 4), round(self.ls2, 4), self.rz, round(self.c2, 4))
  651. self.ls2 += (self.c2*-1)
  652.  
  653. self.ls_string += "{0}*x2 = {1} |: {2}n".format(round(self.b2, 4), round(self.ls2, 4), round(self.b2, 4))
  654.  
  655. self.ls_x2 = self.ls2 / self.b2
  656.  
  657. self.ls_string += "x2 = {0}nn".format(round(self.ls_x2, 4))
  658.  
  659. """ x1 (a) lösen """
  660. self.ls_string += "» Gleichung nach x1 lösen:n"
  661. self.ls_string += "{0}*x1 + {1}*x2 + {2}*x3 = {3}n".format(round(self.a1, 4), round(self.b1, 4), round(self.c1, 4), round(self.ls1, 4))
  662.  
  663. self.b1 = self.b1 * self.ls_x2
  664. self.c1 = self.c1 * self.ls_x3
  665. self.b1c1 = (self.b1 + self.c1)
  666.  
  667. self.ls_string += "{0}*x1 + {1} = {2}n".format(round(self.a1, 4), round(self.b1c1, 4), round(self.ls1, 4))
  668. if self.is_negativ(self.b1c1) == False:
  669. self.rz = "-"
  670. self.ls_string += "{0}*x1 + {1} = {2} |{3} {4}n".format(round(self.a1, 4), round(self.b1c1, 4), round(self.ls1, 4), self.rz, round(self.b1c1, 4))
  671. self.ls1 -= self.b1c1
  672. elif self.is_negativ(self.b1c1) == True:
  673. self.rz = "+"
  674. self.ls_string += "{0}*x1 + {1} = {2} |{3} ({4}*-1)n".format(round(self.a1, 4), round(self.b1c1, 4), round(self.ls1, 4), self.rz, round(self.b1c1, 4))
  675. self.ls1 += (self.b1c1*-1)
  676.  
  677. self.ls_string += "{0}*x1 = {1} |: {2}n".format(round(self.a1, 4), round(self.ls1, 4), round(self.a1, 4))
  678.  
  679. self.ls_x1 = self.ls1 / self.a1
  680.  
  681. self.ls_string += "x1 = {0}nn".format(round(self.ls_x1, 4))
  682.  
  683. self.ls_string += "x1 = {0}nx2 = {1}nx3 = {2}".format(round(self.ls_x1, 4), round(self.ls_x2, 4), round(self.ls_x3, 4))
  684.  
  685. self.a = Textfield(self.ls_string)
  686.  
  687. def current_lgs(self):
  688. self.lgs = "[{0}, {1}, {2}, {3}]n[{4}, {5}, {6}, {7}]n[{8}, {9}, {10}, {11}]nn".format(
  689. round(self.a1, 4), round(self.b1, 4), round(self.c1, 4), round(self.ls1, 4),
  690. round(self.a2, 4), round(self.b2, 4), round(self.c2, 4), round(self.ls2, 4),
  691. round(self.a3, 4), round(self.b3, 4), round(self.c3, 4), round(self.ls3, 4))
  692. return self.lgs
  693.  
  694. class SolveViererLgs(FunctionsToSolve):
  695. pass
  696. # TODO: Do it
  697.  
  698. class SolveFuenferLgs(FunctionsToSolve):
  699. pass
  700. # TODO: Do it
  701.  
  702. if __name__ == "__main__":
  703. root = tk.Tk()
  704. app = MainApplication(root)
  705. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement