Programm zur den Grundrechenarten der Komplexen Zahlen



Hallo Leute ich grüße euch wieder ganz Herzlich. Ich werde heute nicht neues über die Programmiersprache Posten sondern auf Nachfrage ein Programm welches von einem User mir gestellt wurde. Es geht um ein Programm, welches die Grundrechenarten der Komplexen Zahlen in Python berechnet. Diejenigen, die meine Posts lange folgen, wissen, dass wir , das Java2Enterprise Team, uns nicht nur mit der Programmiersprache Java beschäftigen sondern auch mit der Skriptsprache Python. Der User hatte mir letztens eine Mail geschrieben, dass sein Programm zwar läuft jedoch diese nicht richtig auswertet. Bevor ich seine Mail mir ganz gelesen habe, wusste ich schon, um welches Problem es sich bei dem User handelt. Das ist das sogenannte Semantik Fehler. Dieses Problem hat wenig mit der Funktion des Programms zutun sondern mehr um die Bedeutung und die Funktionen des Programms. Zum Beispiel ist das Ergebnis der Rechnung 2 + 2 gleich 4 Jedoch ist das Ergebnis der Multiplikation 2 * 2 ebenfalls die 4. Das bedeutet, falls ihr in Wirklichkeit Multiplikation rechnen möchtet jedoch im Programm statt mal plus geschrieben habt, das Programm die Zahlen/Eingaben addiert. Bei diesem Beispiel handelt es sich um den Semantischen Fehler. Das Programm läuft zwar jedoch würde es für die Zahlen ohne die 2 eine ganz andere Lösung liefern.
Anstatt sein Fehler ihm per Email mitzuteilen, habe ich mich entschieden, diesen mit Anwesenheit von euch mitzuteilen, damit ihr euch auch ein Überblick verschaffen könnt.
Ich habe die Quelldatei >>Hier<< auf Github Hochgeladen jedoch möchte ich diese aber ebenfalls hier Eintragen, sodass ihr euch auch den Syntaktischen Unterschied zwischen Java und Python vorstellen könnt.
Quelcode in Java
MainKlasse
package java2enterprise;
public class Main {
      public static void main(String[] args) {
            System.out.println("");
            System.out.println("--------------");
            System.out.println("PROGRAMM START");
            System.out.println("--------------");
            System.out.println("");
            KomplexeZahlen verbinden = new KomplexeZahlen();
            verbinden.einlesen();  
      }
}

KomplexeZahlenKlasse (RechenEinheit)
package java2enterprise;

import java.util.Scanner;

public class KomplexeZahlen {
     
      // Methode zu einlesen der Werte
     
      public static void einlesen() {
            System.out.println("");
            Scanner realTeilZ1 = new Scanner(System.in);
            System.out.println("Geben Sie den Re[Z1] ein:");
            double a1 = realTeilZ1.nextDouble();
           
            Scanner imTeilZ1 = new Scanner(System.in);
            System.out.println("Geben Sie den Im[Z1] ein:");
            double b1 = imTeilZ1.nextDouble();
           
            Scanner realTeilZ2 = new Scanner(System.in);
            System.out.println("Geben Sie den Re[Z2] ein:");
            double a2 = realTeilZ2.nextDouble();
           
            Scanner imTeilZ2 = new Scanner(System.in);
            System.out.println("Geben Sie den Im[Z2] ein:");
            double b2 = imTeilZ2.nextDouble();
           
            System.out.println("");
            System.out.println("Welche Operation möchten Sie ausführen?");
            System.out.println("0 = Addition       \t-> [z1 + z2]");
            System.out.println("1 = Subtraktion    \t-> [z1 - z2]");
            System.out.println("2 = Multiplikation \t-> [z1 * z2]");
            System.out.println("3 = Division       \t-> [z1 / z2]");
            System.out.println("4 = Ende");
           
            Scanner einGabe = new Scanner(System.in);
            byte eingabe = einGabe.nextByte();
           
            if(eingabe == 0) {
                  addition(a1, b1, a2, b2);
            }
            else if(eingabe == 1) {
                  subtraktion(a1, b1, a2, b2);
            }
            else if(eingabe == 2) {
                  multiplikation(a1, b1, a2, b2);
            }
            else if(eingabe == 3) {
                  division(a1, b1, a2, b2);
            }
            else if(eingabe == 4) {
                  ende();
            }
            else {
                  System.out.println("FALSCHE EINGABE");
            }
      }
     
      public static void addition(double a1, double b1, double a2, double b2) {
            // Berechnung der Addition einer Komplexen Zahl in Karthesischer Form
            System.out.println("");
            double aerg = a1 + a2;
            double berg = b1 + b2;
            if(b1 + b2 < 0) {
                  System.out.println("z1 + z2 = "+aerg+" "+berg+"i");
            }
            else if(b1 + b2 > 0) {
                  System.out.println("z1 + z2 = "+aerg+" + "+berg+"i");
            }
            System.out.println("");
            einlesen();
      }
     
      public static void subtraktion(double a1, double b1, double a2, double b2) {
            // Berechnung der Subtraktion einer Komplexen Zahl in Karthesischer Form
            System.out.println("");
            double aerg = a1 - a2;
            double berg = b1 - b2;
            if(b1 - b2 < 0) {
                  System.out.println("z1 - z2 = "+aerg+" "+ berg+"i");
            }
            else if(b1 - b2 > 0) {
                  System.out.println("z1 - z2 = "+aerg+" - "+berg+"i");
            }
            System.out.println("");
            einlesen();
      }
     
      public static void multiplikation(double a1, double b1, double a2, double b2) {
            // Berechnung der Multiplikation einer Komplexen Zahl in Karthesischer Form
            System.out.println("");
            double re = (a1 * a2) - (b1 * b2);
            double im = (b1 * a2) + (b2 * a2);
            if(im < 0) {
                  System.out.println("z1 * z2 ="+re+" "+im+"i");
            }
            else if(im > 0) {
                  System.out.println("z1 * z2 ="+re+" + "+im+"i");
            }
            System.out.println("");
            einlesen();
      }
     
      public static void division(double a1, double b1, double a2, double b2) {
            // Berechnung der Division einer Komplexen Zahl in Karthesischer Form
            System.out.println("");
            double re = ((a1 * a2) + (b2 * b1)) / ((a2 * a2)+(b2 * b2));
            double im = ((a2 * b1) - (a1 * b2)) / ((a2 * a2)+(b2 * b2));
            if(im < 0) {
                  System.out.println("z1 / z2 ="+re+" "+im+"i");
            }
            else if(im > 0) {
                  System.out.println("z1 / z2 ="+re+" + "+im+"i");
            }
            System.out.println("");
            einlesen();
      }
     
      public static void ende() {
            System.out.println("");
            System.out.println("-------------");
            System.out.println("PROGRAMM ENDE");
            System.out.println("-------------");
            System.exit(0);
      }
}


QuellCode in Python

def addition(a1, b1, a2, b2):
    #Berechnung der Addition einer Komplexen Zahl in Karthesicher Form
    print("Addition")
    aerg = a1 + a2
    berg = b1 + b2
    if(b1+b2 < 0):
        print("a + b = ", aerg," ", berg,"i")
    elif(b1+b2 > 0):
        print("a + b = ", aerg," + ", berg,"i")
    print("")
    main()

def subtraktion(a1, b1, a2, b2):
    #Berechnung der Subtraktion einer Komplexen Zahl in Karthesischer Form
    print("Subtraktion")
    aerg = a1 - a2
    berg = b1 - b2
    if(b1 - b2 < 0):
        print("a - b = ", aerg," ", berg,"i")
    elif(b1 - b2 > 0):
        print("a - b = ", aerg," - ", berg,"i")
    print("")
    main()

def multiplikation(a1, b1, a2, b2):
    #Berechnung der Multiplikation einer Komplexen Zahl in Karthesicher Form
    print("Multiplikation")
    re = (a1 * a2) - (b1 * b2)
    im = (b1 * a2) + (b2 * a1)
    if(im < 0):
        print("a * b = ", re, " ", im,"i")
    elif(im > 0):
        print("a * b = ", re, " + ", im,"i")
    print("")
    main()

def division(a1, b1, a2, b2):
    #Berechnung der division einer Komplexen Zahl in Karthesischer Form
    print("Division")
    re = ((a1 * a2) + (b2 * b1)) / ((a2*a2)+(b2*b2))
    im = ((a2 * b1) - (a1 * b2)) / ((a2*a2)+(b2*b2))
    if(im < 0):
        print("a / b = ", re, " ", im,"i")
    elif(im > 0):
        print("a / b = ", re, " + ", im,"i")
    print("")
    main()

def startKomplexeZahlen():
    print("")
    print("--------------")
    print("PROGRAMM START")
    print("--------------")
    print("")
    main()

def main():
    print("0 = Addition")
    print("1 = Subtraktion")
    print("2 = Multiplikation")
    print("3 = Division")
    print("4 = Ende")
    eingabe = int(input())
    if(eingabe == 0):
        print("Geben Sie die Komplexen Zahlen in Karthesischer Form an")
        a1 = float(input("Geben Sie den Re[Z1] ein:"))
        b1 = float(input("Geben Sie den Im[Z1] ein:"))
        a2 = float(input("Geben Sie den Re[Z2] ein:"))
        b2 = float(input("Geben Sie den Im[Z2] ein:"))
        addition(a1, b1, a2, b2)
    elif(eingabe == 1):
        print("Geben Sie die Komplexen Zahlen in Karthesischer Form an")
        a1 = float(input("Geben Sie den Re[Z1] ein:"))
        b1 = float(input("Geben Sie den Im[Z1] ein:"))
        a2 = float(input("Geben Sie den Re[Z2] ein:"))
        b2 = float(input("Geben Sie den Im[Z2] ein:"))
        subtraktion(a1, b1, a2, b2)
    elif(eingabe == 2):
        print("Geben Sie die Komplexen Zahlen in Karthesischer Form an")
        a1 = float(input("Geben Sie den Re[Z1] ein:"))
        b1 = float(input("Geben Sie den Im[Z1] ein:"))
        a2 = float(input("Geben Sie den Re[Z2] ein:"))
        b2 = float(input("Geben Sie den Im[Z2] ein:"))
        multiplikation(a1, b1, a2, b2)
    elif(eingabe == 3):
        print("Geben Sie die Komplexen Zahlen in Karthesischer Form an")
        a1 = float(input("Geben Sie den Re[Z1] ein:"))
        b1 = float(input("Geben Sie den Im[Z1] ein:"))
        a2 = float(input("Geben Sie den Re[Z2] ein:"))
        b2 = float(input("Geben Sie den Im[Z2] ein:"))
        division(a1, b1, a2, b2)
    elif(eingabe == 4):
        ende()

def ende():
    print("")
    print("-------------")
    print("PROGRAMM ENDE")
    print("-------------")
    print("")
    a = 0
    while(a == 0):
        break




Als erstes könnt ihr sehen, dass wir einen großen Syntax Unterschied zwischen Java und Python haben. Diese ist nämlich, dass Java einen Umfangreichen Syntax als Python hat. Ich möchte euch hier die Funktion des Programm in Java und die einzelnen Methoden interpretieren.
Die Methode einlesen() beschäftigt sich mit der, wie der Name es schon verrät, mit dem Einlesen der Werte, welches vom Benutzer in die Konsole eingegebene worden ist. Diese Methode stellt nach dem Erfolgreichen Eingabe der Werte und Speichern die Fragestellung, welche der vier Grundoperationen angewendet werden sollen. Man könnte auch als erstes die Operation auswählen danach die Eingabe der Werte tätigen jedoch würde dies viel Umfangreicher sein als das Aktuelle Programm. Diese Methode wird auch das EVA-Prinzip genannt. Das EVA-Prinzip besagt, dass wir unser Programm als erstes etwas eingeben danach dieses von dem Programm bearbeitet wird und schließlich das Ergebnis der Verarbeitung ausgegeben wird. Nach dem der Benutzer sich um einen Operation entschieden hat, wird diese durch die if und else if Verzweigungen zu der jeweiligen Methode weitergeleitet. Natürlich werden die davor eingegebenen Werte ebenfalls mitgeleitet. Schließlich wird das Ergebnis/Verarbeitung der Aufgaben in der jeweiligen Methode ausgeführt und Ausgegeben. Danach landet der Benutzer wieder in der Methode fürs einlesen. Diese kann sich aber auch entscheiden das Programm zu beenden. Der Größte unterscheid zwischen Java und Python ist, dass wir in Java mehrere Klassen haben. So habe ich die Main-Methode in der Main Klasse programmiert. Die Main-Klasse wird nur beim Start des Programms ausgeführt und besitzt deshalb keinen großen Syntax. Ihr könnt die beiden Programme selber kompilieren und selber tüfteln wie man das vorhandene Programm noch erweitern kann. Schließlich kann ja der Benutzer etwas anderes als eine Zahl eingeben zum Beispiel ein String mit dem der Primitive Datentyp nichts anfangen kann. Ihr könnt, falls der Benutzer solch etwas unternimmt, diese Fehlermeldung abfangen. Stichwort ist hier try & catch. Viel Spaß. Für Fragen stehe ich gerne zur Verfügung.

Kommentare

Beliebte Posts aus diesem Blog

How can I transform a .jar file to a .bat file?

Raspberry Pi als echten Web- und Mailserver einsetzen (German)

Umrechnung von Grad Celsius nach Grad Fahrenheit