Advertisement
Guest User

Untitled

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