e2:bedingteverzweigungen

Bedingte Verzweigungen

Nach dem Ausflug in die Geschichte der Programmiersprachen soll nun ein Programm zum Lösen der quadratischen Gleichung $ax^2+bx+c=0$ entwickelt werden. Wir verwenden ein sogenanntes Struktogramm, um den Programmablauf zu planen. Das Struktogramm wurde mit dem Programm „StruktEd32“ erstellt.

Flussdiagramme und Struktogramme sind Hilfsmittel, um Programmabläufe zunächst ganz unabhängig von der Programmiersprache zu planen.

Um die bedingten Verzweigungen in JAVA zu realisieren, benötigt man die IF-ELSE-Struktur

Expression ist dabei ein Ausdruck, dessen Ergebnistyp boolean, d.h. richtig oder falsch ist (true oder false). Typische solche Ausdrücke sind : $d < 0$ oder $a == 0$ Ein Diagramm, das beschreibt, wie man korrekt Quelltexte in einer bestimmten Hochsprache bildet, heißt Syntaxdiagramm. Zum Üben schauen wir uns gleich noch mal das Syntaxdiagramm der FOR-Schleife an:

Anfangs werden (Zähl-)Variablen (ggf. definiert und) initialisiert (Init). Solange die Schleifenbedingung (Expr) true ergibt, wird der Schleifenrumpf (Statement) wiederholt ausgeführtAnschließend werden die (Zähl-)Variablen aktualisiert (Update) und der Ausdruck erneut überprüft.

Der Datentyp boolean ist ein eigener Datentyp in JAVA, der nur die Werte true oder false annehmen kann. Es ist natürlich auch legitim, Variablen vom Typ boolean zu verwenden Wir listen hier noch alle Vergleichsoperatoren auf, die in einer boolean-Expression vorkommen können:

< kleiner
kleiner gleich
> größer
>= größer gleich
== gleich (zur Unterscheidung vom Zuweisungsoperator =)
!= ungleich

Mehrere Bedingungen können mit UND oder ODER verknüpft werden

Bedingung1  &&  Bedingung2	Beide Bedingungen müssen für true erfüllt sein.
Bedingung1  ||  Bedingung2	Mindestens eine Bedingung muss für true erfüllt sein.

Jetzt das Programm mit grafischer Oberfläche:

public void jButton1_ActionPerformed(ActionEvent evt)
  {
    double a = Double.parseDouble(jTextField1.getText()) ;
    double b = Double.parseDouble(jTextField2.getText()) ;
    double c = Double.parseDouble(jTextField3.getText()) ;
 
    if (a == 0)
    {
      jTextField4.setText("Keine quadratische Gleichung") ;
      jTextField5.setVisible(false) ;
      jTextField6.setVisible(false) ;
      jLabel5.setVisible(false) ;
      jLabel6.setVisible(false) ;
    }
    else
    {
      double p = b/a ; double q = c/a ;
      double d = p*p/4 - q ;
      if (d < 0)
      {
        jTextField4.setText("Keine Lösungen") ;
        jTextField5.setVisible(false) ;
        jTextField6.setVisible(false) ;
        jLabel5.setVisible(false) ;
        jLabel6.setVisible(false) ;
      }
      else
      {
        if (d == 0)
        {
          jTextField4.setText("Genau eine Lösung") ;
          jTextField5.setVisible(true) ;
          jTextField6.setVisible(false) ;
          jLabel5.setVisible(true) ;
          jLabel6.setVisible(false) ;
          jTextField5.setText(Double.toString(-p/2)) ;
        }
        else
        {
          jTextField4.setText("Zwei Lösungen") ;
          jTextField5.setVisible(true) ;
          jTextField6.setVisible(true) ;
          jLabel5.setVisible(true) ;
          jLabel6.setVisible(true) ;
          jTextField5.setText(Double.toString(-p/2 + Math.sqrt(d))) ;
          jTextField6.setText(Double.toString(-p/2 - Math.sqrt(d))) ;
        }
      }
    }
  }

Wir verwenden hier eine Methode, die alle Objekte der GUI (Grafische Oberfläche) besitzen: die Methode setVisible(Wert), wobei der Wert vom Typ boolean sein muss, d.h. er muss true oder false sein.

Weiterhin verwenden wir hier eine Methode der Klasse Math, nämlich sqrt(Wert). Diese Methode zieht die Wurzel aus einer double-Zahl. Die Klasse Math enthält viele mathematische Funktionen und Konstanten. Sie steht immer zur Verfügung, d.h. es muss nicht ein besonderes package zu Programmbeginn eingebunden werden.

  • /var/www/infowiki/data/pages/e2/bedingteverzweigungen.txt
  • Zuletzt geändert: 2017/09/22 13:51
  • von admin03