Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import tkinter as tk
- class MainApplication(object):
- def __init__(self, master):
- self.master = master
- self.master.title("Solve-LGS's - by Jeremy")
- self.master.configure(bg="#f2f1f0")
- #self.master.resizable(width=False, height=False)
- # Frame
- self.frame = tk.Frame(self.master, bg="#f2f1f0")
- self.frame2 = tk.Frame(self.master, bg="#f2f1f0")
- # Textentrys Line 1
- self.a1 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.b1 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.c1 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.d1 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.e1 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.equal_1 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
- self.ls1 = tk.Entry(self.frame, font="Arial 15", width=7)
- # Textentrys Line 2
- self.a2 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.b2 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.c2 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.d2 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.e2 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.equal_2 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
- self.ls2 = tk.Entry(self.frame, font="Arial 15", width=7)
- # Textentrys Line 3
- self.a3 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.b3 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.c3 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.d3 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.e3 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.equal_3 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
- self.ls3 = tk.Entry(self.frame, font="Arial 15", width=7)
- # Textentrys Line 4
- self.a4 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.b4 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.c4 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.d4 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.e4 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.equal_4 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
- self.ls4 = tk.Entry(self.frame, font="Arial 15", width=7)
- # Textentrys Line 5
- self.a5 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.b5 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.c5 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.d5 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.e5 = tk.Entry(self.frame, font="Arial 15", width=7)
- self.equal_5 = tk.Label(self.frame, text="=", font="Arial 40", bg="#f2f1f0")
- self.ls5 = tk.Entry(self.frame, font="Arial 15", width=7)
- # Variabelnauswahl
- self.var_var = tk.IntVar()
- self.var_var.set(3)
- self.var_label = tk.Label(self.frame2, textvariable=self.var_var, font="Arial 15 bold", bg="#f2f1f0")
- self.var_label.grid(row=0, column=2)
- self.space_label1 = tk.Label(self.frame2, fg="#f2f1f0", bg="#f2f1f0", text=" ").grid(row=0, column=1)
- self.space_label2 = tk.Label(self.frame2, fg="#f2f1f0", bg="#f2f1f0", text=" ").grid(row=0, column=3)
- 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))
- self.button2.grid(row=0, column=0, columnspan=1)
- 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))
- self.button3.grid(row=0, column=4, columnspan=1)
- ###
- self.frame2.grid()
- self.frame.grid()
- self.frame.focus_set()
- self.master.bind("<Left>", lambda e: self.change_var_var(-1))
- self.master.bind("<Right>", lambda e: self.change_var_var(1))
- self.master.bind("<Return>", lambda e: self.solve_start())
- self.update_entrys()
- def change_var_var(self, factor):
- if factor > 0: # positiver faktor
- if self.var_var.get() != 5:
- self.var_var.set(self.var_var.get()+1)
- self.update_entrys()
- if factor < 0: # negativer faktor
- if self.var_var.get() != 2:
- self.var_var.set(self.var_var.get()-1)
- self.update_entrys()
- def update_entrys(self):
- self.var_anzahl = self.var_var.get()
- self.ids = [self.a1, self.a2, self.a3, self.a4, self.a5,
- self.b1, self.b2, self.b3, self.b4, self.b5,
- self.c1, self.c2, self.c3, self.c4, self.c5,
- self.d1, self.d2, self.d3, self.d4, self.d5,
- self.e1, self.e2, self.e3, self.e4, self.e5,
- self.equal_1, self.equal_2, self.equal_3, self.equal_4, self.equal_5,
- self.ls1, self.ls2, self.ls3, self.ls4, self.ls5]
- for item in self.ids:
- item.grid_forget()
- if self.var_anzahl == 2:
- self.a1.grid(row=1, column=0)
- self.b1.grid(row=1, column=1)
- self.equal_1.grid(row=1, column=2)
- self.ls1.grid(row=1, column=3)
- self.a2.grid(row=2, column=0)
- self.b2.grid(row=2, column=1)
- self.equal_2.grid(row=2, column=2)
- self.ls2.grid(row=2, column=3)
- if self.var_anzahl == 3:
- self.a1.grid(row=1, column=0)
- self.b1.grid(row=1, column=1)
- self.c1.grid(row=1, column=2)
- self.equal_1.grid(row=1, column=3)
- self.ls1.grid(row=1, column=4)
- self.a2.grid(row=2, column=0)
- self.b2.grid(row=2, column=1)
- self.c2.grid(row=2, column=2)
- self.equal_2.grid(row=2, column=3)
- self.ls2.grid(row=2, column=4)
- self.a3.grid(row=3, column=0)
- self.b3.grid(row=3, column=1)
- self.c3.grid(row=3, column=2)
- self.equal_3.grid(row=3, column=3)
- self.ls3.grid(row=3, column=4)
- if self.var_anzahl == 4:
- self.a1.grid(row=1, column=0)
- self.b1.grid(row=1, column=1)
- self.c1.grid(row=1, column=2)
- self.d1.grid(row=1, column=3)
- self.equal_1.grid(row=1, column=4)
- self.ls1.grid(row=1, column=5)
- self.a2.grid(row=2, column=0)
- self.b2.grid(row=2, column=1)
- self.c2.grid(row=2, column=2)
- self.d2.grid(row=2, column=3)
- self.equal_2.grid(row=2, column=4)
- self.ls2.grid(row=2, column=5)
- self.a3.grid(row=3, column=0)
- self.b3.grid(row=3, column=1)
- self.c3.grid(row=3, column=2)
- self.d3.grid(row=3, column=3)
- self.equal_3.grid(row=3, column=4)
- self.ls3.grid(row=3, column=5)
- self.a4.grid(row=4, column=0)
- self.b4.grid(row=4, column=1)
- self.c4.grid(row=4, column=2)
- self.d4.grid(row=4, column=3)
- self.equal_4.grid(row=4, column=4)
- self.ls4.grid(row=4, column=5)
- if self.var_anzahl == 5:
- self.a1.grid(row=1, column=0)
- self.b1.grid(row=1, column=1)
- self.c1.grid(row=1, column=2)
- self.d1.grid(row=1, column=3)
- self.e1.grid(row=1, column=4)
- self.equal_1.grid(row=1, column=5)
- self.ls1.grid(row=1, column=6)
- self.a2.grid(row=2, column=0)
- self.b2.grid(row=2, column=1)
- self.c2.grid(row=2, column=2)
- self.d2.grid(row=2, column=3)
- self.e2.grid(row=2, column=4)
- self.equal_2.grid(row=2, column=5)
- self.ls2.grid(row=2, column=6)
- self.a3.grid(row=3, column=0)
- self.b3.grid(row=3, column=1)
- self.c3.grid(row=3, column=2)
- self.d3.grid(row=3, column=3)
- self.e3.grid(row=3, column=4)
- self.equal_3.grid(row=3, column=5)
- self.ls3.grid(row=3, column=6)
- self.a4.grid(row=4, column=0)
- self.b4.grid(row=4, column=1)
- self.c4.grid(row=4, column=2)
- self.d4.grid(row=4, column=3)
- self.e4.grid(row=4, column=4)
- self.equal_4.grid(row=4, column=5)
- self.ls4.grid(row=4, column=6)
- self.a5.grid(row=5, column=0)
- self.b5.grid(row=5, column=1)
- self.c5.grid(row=5, column=2)
- self.d5.grid(row=5, column=3)
- self.e5.grid(row=5, column=4)
- self.equal_5.grid(row=5, column=5)
- self.ls5.grid(row=5, column=6)
- def solve_start(self):
- self.anz_var = self.var_var.get()
- if self.anz_var == 2:
- self.lgs = [ [float(self.a1.get()), float(self.b1.get()), float(self.ls1.get())],
- [float(self.a2.get()), float(self.b2.get()), float(self.ls2.get())]
- ]
- self.results = SolveZweierLgs(self.lgs)
- elif self.anz_var == 3:
- self.lgs = [ [float(self.a1.get()), float(self.b1.get()), float(self.c1.get()), float(self.ls1.get())],
- [float(self.a2.get()), float(self.b2.get()), float(self.c2.get()), float(self.ls2.get())],
- [float(self.a3.get()), float(self.b3.get()), float(self.c3.get()), float(self.ls3.get())]
- ]
- self.results = SolveDreierLgs(self.lgs)
- elif self.anz_var == 4:
- self.lgs = [ [self.a1.get(), self.b1.get(), self.c1.get(), self.d1.get(), self.ls1.get()],
- [self.a2.get(), self.b2.get(), self.c2.get(), self.d2.get(), self.ls2.get()],
- [self.a3.get(), self.b3.get(), self.c3.get(), self.d3.get(), self.ls3.get()],
- [self.a4.get(), self.b4.get(), self.c4.get(), self.d4.get(), self.ls4.get()]
- ]
- elif self.anz_var == 5:
- self.lgs = [ [self.a1.get(), self.b1.get(), self.c1.get(), self.d1.get(), self.e1.get(), self.ls1.get()],
- [self.a2.get(), self.b2.get(), self.c2.get(), self.d2.get(), self.e2.get(), self.ls2.get()],
- [self.a3.get(), self.b3.get(), self.c3.get(), self.d3.get(), self.e3.get(), self.ls3.get()],
- [self.a4.get(), self.b4.get(), self.c4.get(), self.d4.get(), self.e4.get(), self.ls4.get()],
- [self.a5.get(), self.b5.get(), self.c5.get(), self.d5.get(), self.e5.get(), self.ls5.get()]
- ]
- class FunctionsToSolve(object):
- """ Funktionen die benötigt werden"""
- def __init__(self):
- pass
- def is_negativ(self, num):
- """Return True wenn Zahl negativ ist, false wenn positiv o. 0"""
- self.num = num
- if self.num >= 0:
- return False
- if self.num < 0:
- return True
- def get_kgv(self, *nums):
- """Return das kleinste gemeinsame Vielfache von *nums"""
- from fractions import gcd
- self.nums = nums
- try:
- self.kgv = self.nums[0] * self.nums[1] / gcd(self.nums[0], self.nums[1])
- try:
- return self.get_kgv(self.kgv, *self.nums[2:])
- except IndexError:
- return self.kgv
- except ZeroDivisionError:
- return 0
- class Textfield(object):
- """Erstellt ein neues Fenster mit dem Lösungsweg"""
- def __init__(self, txt):
- self.txt = txt
- self.create_window()
- def create_window(self):
- self.t = tk.Toplevel()
- self.t.wm_title("Lösungsweg")
- self.text = tk.Text(self.t, height=40, width=50, font="Arial")
- self.text.bind("<Button-1>", self.set_focus)
- self.text.tag_configure("center", justify='center')
- self.text.insert("1.0", self.txt)
- self.text.tag_add("center", "1.0", "end")
- self.text.configure(state=tk.DISABLED)
- self.text.pack(expand=True)
- def set_focus(self, event):
- """Setzt Fokus auf Textwidget, sodass man den Text kopieren kann"""
- self.text.focus_set()
- class SolveZweierLgs(FunctionsToSolve):
- def __init__(self, lgs):
- self.lgs = lgs
- self.solve(self.lgs)
- def solve(self, lgs):
- self.ls_string = ""
- self.step_3 = None
- self.line1 = self.lgs[0]
- self.line2 = self.lgs[1]
- self.a1 = self.line1[0]
- self.b1 = self.line1[1]
- self.ls1 = self.line1[2]
- self.a2 = self.line2[0]
- self.b2 = self.line2[1]
- self.ls2 = self.line2[2]
- self.ls_string += "» Lineares Gleichungssystem\n"
- self.ls_string += self.current_lgs()
- """Step 2: Die erste Zahl in der ersten Zeile soll positiv sein (ev. mit -1 multiplizieren)."""
- if self.is_negativ(self.a1) == True:
- self.a1 *= -1
- self.b1 *= -1
- self.ls1 *= -1
- self.ls_string += "» 1. Zeile * -1\n"
- self.ls_string += self.current_lgs()
- """Step 3: Sorgen Sie durch Multiplikation oder Division dafür, dass in der ersten Spalte alle
- Zahlen den gleichen Betrag haben. In Zeile 2 soll die erste Zahl negativ sein."""
- if self.a1 != 0 and self.a2 != 0:
- """Es ist in Spalte 1 keine 0 vorhanden"""
- self.kgv_sp1 = self.get_kgv(self.a1, self.a2)
- self.factor_line_1_1 = self.kgv_sp1 / self.a1
- self.a1 *= self.factor_line_1_1
- self.b1 *= self.factor_line_1_1
- self.ls1 *= self.factor_line_1_1
- self.factor_line_2_1 = self.kgv_sp1 / self.a2
- self.factor_line_2_1 *= -1
- self.a2 *= self.factor_line_2_1
- self.b2 *= self.factor_line_2_1
- self.ls2 *= self.factor_line_2_1
- self.ls_string += "» 1. Zeile * {0}\n".format(self.factor_line_1_1)
- self.ls_string += "» 2. Zeile * {0}\n".format(self.factor_line_2_1)
- self.ls_string += self.current_lgs()
- elif self.a1 != 0 and self.a2 == 0:
- """Bereits aufgelöst"""
- self.step_3 = False
- elif self.a1 == 0 and self.a2 != 0:
- """Zeilen tauschen"""
- self.a1, self.a2 = self.a2, self.a1
- self.b1, self.b2 = self.b2, self.b1
- self.ls1, self.ls2 = self.ls2, self.ls1
- self.ls_string += "» 1. und 2. Zeile wurden getauscht."
- self.ls_string += self.current_lgs()
- """Step 4: 2. Zeile + 1. Zeile, sodass eine Null ensteht"""
- if self.step_3 != False:
- self.a2 += self.a1
- self.b2 += self.b1
- self.ls2 += self.ls1
- self.ls_string += "» 2. Zeile + 1. Zeile\n"
- self.ls_string += self.current_lgs()
- """Step 5: Lösen"""
- if (self.a2+self.b2+self.ls2) != 0:
- """x2 (b)"""
- self.ls_string += "» Gleichung nach x2 lösen:\n"
- self.ls_string += "{0}*x2 = {1} |: {2}\n".format(round(self.b2, 4), round(self.ls2, 4), round(self.b2, 4))
- self.ls2 = self.ls2 / self.b2
- self.ls_x2 = self.ls2
- self.ls_string += "x2 = {0}\n\n".format(round(self.ls_x2, 4))
- """x1 (a)"""
- self.ls_string += "» Gleichung nach x1 lösen:\n"
- self.ls_string += "{0}*x1 + {1}*x2 = {2}\n".format(round(self.a1, 4), round(self.b1, 4), round(self.ls1, 4))
- self.b1 = self.b1 * self.ls_x2
- if self.is_negativ(self.b1) == False:
- self.rz = "-"
- 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))
- self.ls1 -= self.b1
- elif self.is_negativ(self.b1) == True:
- self.rz = "+"
- 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))
- self.ls1 += (self.b1*-1)
- self.ls_string += "{0} = {1} |: {2}\n".format(round(self.a1, 4), round(self.ls1, 4), round(self.a1, 4))
- self.ls_x1 = self.ls1 / self.a1
- self.ls_string += "x1 = {0}\n\n".format(round(self.ls_x1, 4))
- self.ls_string += "x1 = {0}\nx2 = {1}\n".format(round(self.ls_x1, 4), round(self.ls_x2, 4))
- self.a = Textfield(self.ls_string)
- else:
- """Zeile 2 ist komplett 0"""
- self.ls_string += "» Gleichung nach x1 lösen:\n"
- if self.is_negativ(self.b1) == False:
- self.rz = "-"
- self.ls_string += "{0}*x1 + {1}*x2 = {2} |{3} {4}*x2\n".format(self.a1, self.b1, self.ls1, self.rz, self.b1)
- self.ls_string += "{0}*x1 = -{1}*x2 + {2} |: {3}\n".format(self.a1, self.b1, self.ls1, self.a1)
- self.ls_string += "x1 = -{0}*x2 + {1}\n\n".format(self.b1/self.a1, self.ls1/self.a1)
- self.v1 = "x1 = -{0}*x2 + {1}\n".format(self.b1/self.a1, self.ls1/self.a1)
- elif self.is_negativ(self.b1) == True:
- self.rz = "+"
- self.ls_string += "{0}*x1 + {1}*x2 = {2} |{3} {4}*x2\n".format(self.a1, self.b1, self.ls1, self.rz, self.b1)
- self.ls_string += "{0}*x1 = {1}*x2 + {2} |: {3}\n".format(self.a1, self.b1, self.ls1, self.a1)
- self.ls_string += "x1 = {0}*x2 + {1}\n\n".format(self.b1/self.a1, self.ls1/self.a1)
- self.v1 = "x1 = {0}*x2 + {1}\n".format(self.b1/self.a1, self.ls1/self.a1)
- self.ls_string += "» Gleichung nach x2 lösen:\n"
- if self.is_negativ(self.b1) == False:
- self.rz = "-"
- self.ls_string += "{0}*x1 + {1}*x2 = {2} |{3} {4}*x1\n".format(self.a1, self.b1, self.ls2, self.rz, self.a1)
- self.ls_string += "{0}*x2 = -{1}*x1 + {2} |: {3}\n".format(self.b1, self.a1, self.ls1, self.b1)
- self.ls_string += "x2 = -{0}*x1 + {1}\n\n".format(self.a1/self.b1, self.ls1/self.b1)
- self.v2 = "x2 = -{0}*x1 + {1}\n\n".format(self.a1/self.b1, self.ls1/self.b1)
- elif self.is_negativ(self.b1) == True:
- self.rz = "+"
- self.ls_string += "{0}*x1 + {1}*x2 = {2} |{3} {4}*x1\n".format(self.a1, self.b1, self.ls2, self.rz, self.a1)
- self.ls_string += "{0}*x2 = {1}*x1 + {2} |: {3}\n".format(self.b1, self.a1, self.ls1, self.b1)
- self.ls_string += "x2 = {0}*x1 + {1}\n\n".format(self.a1/self.b1, self.ls1/self.b1)
- self.v2 = "x2 = {0}*x1 + {1}\n\n".format(self.a1/self.b1, self.ls1/self.b1)
- self.ls_string += self.v1
- self.ls_string += self.v2
- self.a = Textfield(self.ls_string)
- def current_lgs(self):
- self.lgs = "[{0}, {1}, {2}]\n[{3}, {4}, {5}]\n\n".format(
- round(self.a1, 4), round(self.b1, 4), round(self.ls1, 4),
- round(self.a2, 4), round(self.b2, 4), round(self.ls2, 4))
- return self.lgs
- class SolveDreierLgs(FunctionsToSolve):
- def __init__(self, lgs):
- self.lgs = lgs
- self.solve(self.lgs)
- def solve(self, lgs):
- self.step_3 = None
- self.step_6 = None
- self.ls_string = ""
- self.line1 = self.lgs[0]
- self.line2 = self.lgs[1]
- self.line3 = self.lgs[2]
- self.a1 = self.line1[0]
- self.b1 = self.line1[1]
- self.c1 = self.line1[2]
- self.ls1 = self.line1[3]
- self.a2 = self.line2[0]
- self.b2 = self.line2[1]
- self.c2 = self.line2[2]
- self.ls2 = self.line2[3]
- self.a3 = self.line3[0]
- self.b3 = self.line3[1]
- self.c3 = self.line3[2]
- self.ls3 = self.line3[3]
- """Step 1: Wer Brüche eingibt ist selbst schuld.. Ttz"""
- self.ls_string += "» Lineares Gleichungssystem\n"
- self.ls_string += self.current_lgs()
- """Step 2: Die erste Zahl in der ersten Zeile soll positiv sein (ev. mit -1 multiplizieren)."""
- if self.is_negativ(self.a1) == True:
- self.a1 *= -1
- self.b1 *= -1
- self.c1 *= -1
- self.ls1 *= -1
- self.ls_string += "» 1. Zeile * -1\n"
- self.ls_string += self.current_lgs()
- """Step 3: Sorgen Sie durch Multiplikation oder Division dafür, dass in der ersten Spalte alle
- Zahlen den gleichen Betrag haben. In Zeile 2 und 3 soll die erste Zahl negativ sein."""
- if self.a1 != 0 and self.a2 != 0 and self.a3 != 0:
- """Es ist in Spalte 1 keine 0 vorhanden"""
- self.kgv_sp1 = self.get_kgv(self.a1, self.a2, self.a3)
- """ Zeile 1 """
- self.factor_line_1_1 = self.kgv_sp1 / self.a1
- self.a1 *= self.factor_line_1_1
- self.b1 *= self.factor_line_1_1
- self.c1 *= self.factor_line_1_1
- self.ls1 *= self.factor_line_1_1
- """ Zeile 2 """
- self.factor_line_2_1 = self.kgv_sp1 / self.a2
- self.factor_line_2_1 *= -1
- self.a2 *= self.factor_line_2_1
- self.b2 *= self.factor_line_2_1
- self.c2 *= self.factor_line_2_1
- self.ls2 *= self.factor_line_2_1
- """ Zeile 3 """
- self.factor_line_3_1 = self.kgv_sp1 / self.a3
- self.factor_line_3_1 *= -1
- self.a3 *= self.factor_line_3_1
- self.b3 *= self.factor_line_3_1
- self.c3 *= self.factor_line_3_1
- self.ls3 *= self.factor_line_3_1
- self.ls_string += "» 1. Zeile * {0}\n".format(self.factor_line_1_1)
- self.ls_string += "» 2. Zeile * {0}\n".format(self.factor_line_2_1)
- self.ls_string += "» 3. Zeile * {0}\n".format(self.factor_line_3_1)
- self.ls_string += self.current_lgs()
- elif self.a1 != 0 and self.a2 != 0 and self.a3 == 0:
- """Es ist in Spalte 1 in Zeile 3 eine 0 vorhanden"""
- self.kgv_sp1 = self.get_kgv(self.a1, self.a2)
- """ Zeile 1 """
- self.factor_line_1_1 = self.kgv_sp1 / self.a1
- self.a1 *= self.factor_line_1_1
- self.b1 *= self.factor_line_1_1
- self.c1 *= self.factor_line_1_1
- self.ls1 *= self.factor_line_1_1
- """ Zeile 2 """
- self.factor_line_2_1 = self.kgv_sp1 / self.a2
- self.factor_line_2_1 *= -1
- self.a2 *= self.factor_line_2_1
- self.b2 *= self.factor_line_2_1
- self.c2 *= self.factor_line_2_1
- self.ls2 *= self.factor_line_2_1
- self.ls_string += "» 1. Zeile * {0}\n".format(self.factor_line_1_1)
- self.ls_string += "» 2. Zeile * {0}\n".format(self.factor_line_2_1)
- self.ls_string += self.current_lgs()
- elif self.a1 != 0 and self.a2 == 0 and self.a3 != 0:
- """Es ist in Spalte 1 in Zeile 2 eine 0 vorhanden"""
- self.kgv_sp1 = self.get_kgv(self.a1, self.a3)
- """ Zeile 1 """
- self.factor_line_1_1 = self.kgv_sp1 / self.a1
- self.a1 *= self.factor_line_1_1
- self.b1 *= self.factor_line_1_1
- self.c1 *= self.factor_line_1_1
- self.ls1 *= self.factor_line_1_1
- """ Zeile 3 """
- self.factor_line_3_1 = self.kgv_spy / self.a3
- self.factor_line_3_1 *= -1
- self.a3 *= self.factor_line_3_1
- self.b3 *= self.factor_line_3_1
- self.c3 *= self.factor_line_3_1
- self.ls3 *= self.factor_line_3_1
- self.ls_string += "» 1. Zeile * {0}\n".format(self.factor_line_1_1)
- self.ls_string += "» 3. Zeile * {0}\n".format(self.factor_line_3_1)
- self.ls_string += self.current_lgs()
- else:
- """Es ist in Spalte 1 in Zeile 2+3 eine 0 vorhanden;
- Schritt 3 und 4 werden daher übersprungen."""
- self.step_3 = False
- """Step 4: Addieren Sie zur 2. und zur 3. Zeile jeweils die erste. Dadurch entstehen in der ersten
- Spalte 2 Nullen."""
- if self.step_3 != False:
- """Line 2 + Line 1"""
- self.a2 += self.a1
- self.b2 += self.b1
- self.c2 += self.c1
- self.ls2 += self.ls1
- """Line 3 + Line 1"""
- self.a3 += self.a1
- self.b3 += self.b1
- self.c3 += self.c1
- self.ls3 += self.ls1
- self.ls_string += "» 2. Zeile + 1. Zeile\n"
- self.ls_string += "» 3. Zeile + 1. Zeile\n"
- self.ls_string += self.current_lgs()
- """Step 5: Die zweite Zahl in der 2. Zeile soll positiv sein (ev. mit -1 multiplizieren)."""
- if self.is_negativ(self.b2) == True:
- self.b2 *= -1
- self.c2 *= -1
- self.ls2 *= -1
- self.ls_string += "» 2. Zeile * -1\n"
- self.ls_string += self.current_lgs()
- """Step 6: Sorgen Sie durch Multiplikation oder Division dafür, dass ab der 2. Zeile in der zweiten
- Spalte alle Zahlen den gleichen Betrag haben. In Zeile 3 soll die zweite Zahl negativ sein."""
- if self.b2 != 0 and self.b3 != 0:
- """ Es ist in Spalte 2 in Zeile 2 und 3 keine 0 vorhanden """
- self.kgv_sp2 = self.get_kgv(self.b2, self.b3)
- """ Zeile 2 """
- self.factor_line_2_2 = self.kgv_sp2 / self.b2
- self.b2 *= self.factor_line_2_2
- self.c2 *= self.factor_line_2_2
- self.ls2 *= self.factor_line_2_2
- """ Zeile 3 """
- self.factor_line_3_2 = self.kgv_sp2 / self.b3
- self.factor_line_3_2 *= -1
- self.b3 *= self.factor_line_3_2
- self.c3 *= self.factor_line_3_2
- self.ls3 *= self.factor_line_3_2
- self.ls_string += "» 2. Zeile * {0}\n".format(self.factor_line_2_2)
- self.ls_string += "» 3. Zeile * {0}\n".format(self.factor_line_3_2)
- self.ls_string += self.current_lgs()
- elif self.b2 != 0 and self.b3 == 0:
- """ Bereits fertig aufgelöst """
- self.step_6 = False
- pass
- elif self.b2 == 0 and self.b3 != 0:
- """ Zeile 3 und 2 werden getauscht, da Gleichung sonst nicht aufgelöst
- werden kann."""
- self.b2, self.b3 = self.b3, self.b2
- self.c2, self.c3 = self.c3, self.c2
- self.ls2, self.ls3 = self.ls3, self.ls2
- self.step_6 = False
- self.ls_string += "» 2. und 3. Zeile wurden getauscht.\n"
- self.ls_string += self.current_lgs()
- """Step 7: Addieren Sie zur 3. Zeile die 2. Zeile. Dadurch entsteht in der 3. Zeile die 2. Null"""
- if self.step_6 != False:
- self.b3 += self.b2
- self.c3 += self.c2
- self.ls3 += self.ls2
- self.ls_string += "» 3. Zeile + 2. Zeile\n"
- self.ls_string += self.current_lgs()
- """Step 8: Lösen"""
- """ x3 (c) lösen """
- self.ls_string += "» Gleichung nach x3 lösen:\n"
- self.ls_string += "{0}*x3 = {1} |: {2}\n".format(round(self.c3, 4), round(self.ls3, 4), round(self.c3, 4))
- self.ls3 = self.ls3 / self.c3
- self.ls_x3 = self.ls3
- self.ls_string += "x3 = {0}\n\n".format(round(self.ls_x3, 4))
- """ x2 (b) lösen """
- self.ls_string += "» Gleichung nach x2 lösen:\n"
- self.ls_string += "{0}*x2 + {1}*x3 = {2}\n".format(round(self.b2, 4), round(self.c2, 4), round(self.ls2, 4))
- self.c2 = self.c2 * self.ls_x3
- if self.is_negativ(self.c2) == False:
- self.rz = "-"
- 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))
- self.ls2 -= self.c2
- elif self.is_negativ(self.c2) == True:
- self.rz = "+"
- 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))
- self.ls2 += (self.c2*-1)
- self.ls_string += "{0}*x2 = {1} |: {2}\n".format(round(self.b2, 4), round(self.ls2, 4), round(self.b2, 4))
- self.ls_x2 = self.ls2 / self.b2
- self.ls_string += "x2 = {0}\n\n".format(round(self.ls_x2, 4))
- """ x1 (a) lösen """
- self.ls_string += "» Gleichung nach x1 lösen:\n"
- 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))
- self.b1 = self.b1 * self.ls_x2
- self.c1 = self.c1 * self.ls_x3
- self.b1c1 = (self.b1 + self.c1)
- self.ls_string += "{0}*x1 + {1} = {2}\n".format(round(self.a1, 4), round(self.b1c1, 4), round(self.ls1, 4))
- if self.is_negativ(self.b1c1) == False:
- self.rz = "-"
- 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))
- self.ls1 -= self.b1c1
- elif self.is_negativ(self.b1c1) == True:
- self.rz = "+"
- 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))
- self.ls1 += (self.b1c1*-1)
- self.ls_string += "{0}*x1 = {1} |: {2}\n".format(round(self.a1, 4), round(self.ls1, 4), round(self.a1, 4))
- self.ls_x1 = self.ls1 / self.a1
- self.ls_string += "x1 = {0}\n\n".format(round(self.ls_x1, 4))
- 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))
- self.a = Textfield(self.ls_string)
- def current_lgs(self):
- self.lgs = "[{0}, {1}, {2}, {3}]\n[{4}, {5}, {6}, {7}]\n[{8}, {9}, {10}, {11}]\n\n".format(
- round(self.a1, 4), round(self.b1, 4), round(self.c1, 4), round(self.ls1, 4),
- round(self.a2, 4), round(self.b2, 4), round(self.c2, 4), round(self.ls2, 4),
- round(self.a3, 4), round(self.b3, 4), round(self.c3, 4), round(self.ls3, 4))
- return self.lgs
- class SolveViererLgs(FunctionsToSolve):
- pass
- # TODO: Do it
- class SolveFuenferLgs(FunctionsToSolve):
- pass
- # TODO: Do it
- if __name__ == "__main__":
- root = tk.Tk()
- app = MainApplication(root)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement