Java/PQ-Formel: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
main>Karl Kirst
K (typo)
(+ Version von Axel Grünhagen)
Markierung: 2017-Quelltext-Bearbeitung
 
(10 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{DISPLAYTITLE:pq-Formel mit Java}}
{{Fortsetzung|
{{Kurzinfo-1|Java}}
vorher=Algorithmik<br>Turtle-Grafik|vorherlink=Java/Turtle-Grafik|
Das folgende Beispiel eignet sich, um eine verschachtelte [[Java/Bedingte Ausführung|if..else-Verzweigung]] einzuführen.
weiter=GUI|weiterlink=Java/GUI|
übersicht=Einstieg in Java<br>(Übersicht)|übersichtlink=Java#Übersicht|}}
 
Das folgende Beispiel eignet sich, um eine verschachtelte [[Java/Algorithmik#Bedingte Anweisung|if..else-Verzweigung]] einzuführen. <!---Die folgende Klasse ist das Endergebnis der beim Bild­schirmfilm vorgestellten Klasse, die die pq-Formel be­rechnet.--->  Neben  „if..else“  benötigen  Sie  Kenntnisse  im Umgang mit [[Java/Erste Schritte#Konsolenausgabe|System.out.println]] und der Klasse Math, die in Java standardmäßig vorhanden ist.
 
Die Klasse '''Math''' ist das Matheobjekt mit allen Operationen für einfache numerische Berech­nungen.(...) Der Ergebnistyp fast aller Operationen ist <code>double</code>.
 
* <code>sqrt</code>: Wurzelziehen
* <code>pow</code>: Potenzen
 
double x = Math.sqrt( 2 ); doulbe y = Math.pow( 2,10 );  // 2^10 = 1024
 


<source lang="java">
<source lang="java">
Zeile 8: Zeile 19:
public String berechnePQFormel(double pP, double pQ){
public String berechnePQFormel(double pP, double pQ){
     double diskriminante;
     double diskriminante;
     diskriminante = (pP/2)*(pP/2)-pQ;
     diskriminante = (pP/2) * (pP/2) - pQ;
     if (diskriminante >= 0) {
     if (diskriminante >= 0) {
       double x1,x2;
       double x1,x2;
Zeile 26: Zeile 37:
</source>
</source>


==Siehe auch==
{{Box|Arbeitshinweise|
* [[Bild:ZUM-Logo.png|20px]] [http://informatik.zum.de/pieper/blog/index.php?entry=entry060920-121319 Zugehöriges Arbeitsblatt] und Bildschirmfilm.
<!---Schauen Sie sich zunächst den Bildschirmfilm zu dieser Klasse an.--->Beschreiben Sie, weshalb bei <code>berechnePQFormel()</code> innerhalb des ersten if-Anweisungs­blocks noch ein zweiter, verschachtelter if-Block auftritt. Erläutern Sie dabei die Klammersetzung der geschweiften Klammern.
* [[Java]]
# <code>bestimmeBetrag()</code> gibt den Betrag einer Zahl zurück (eine negative Zahl wird zu einer positiven. Analysieren Sie die Funktionsweise dieser Methode.
* [[Java/Bedingte Ausführung]]
# Vergleichen Sie die beiden Varianten der quadrieren-Methoden. Beide führen zu demselben Ergebnis. Welche würden Sie bevorzugen?
* Mathematischer Hintergrund: [[Quadratische Funktion]]  
# Implementieren Sie eine Methode <code>zieheWurzel(double pZahl)</code>, die entweder die Wurzelvon <code>pZahl</code> zurückgibt oder -1, falls <code>pZahl</code> negativ ist.(Hinweis: -1 ist natürlich mathematisch nicht richtig, aber so müssen Sie die Zahl, die Sie zurückgeben, nicht in einen String umwandeln.)}}
 
 
{{Fortsetzung|
vorher=Algorithmik<br>Turtle-Grafik|vorherlink=Java/Turtle-Grafik|
weiter=GUI|weiterlink=Java/GUI|
übersicht=Einstieg in Java<br>(Übersicht)|übersichtlink=Java#Übersicht|}}
 
== verbesserte Version ==
Hallo zusammen,
 
ich habe selbst ein solches Beispiel gebraucht und das aktive etwas umgebaut (Trennung von Berechnung und Texterstellung, Verwendung von StringBuilder zur Erstellung der Ergebnistexte). Die verschachtelte if Bedingung ist nun in der Funktion ergebnisText(...). Sieht noch jemand einen Fehler?
Danke und Gruss
--[[Benutzer:Axel g|Axel Gruenhagen]] 10:55, 30. Aug. 2009 (UTC)
 
<source lang="java">
public class FormelberechnerNeu {
 
    public String berechnePQFormel(double pP, double pQ) {
        double pPhalbe = pP / 2;       
        double diskriminante = Math.pow(pPhalbe,2) - pQ;
        double x1 = 0;
        double x2 = 0;
        if (diskriminante >= 0) {
            double sqrtDiskriminante = Math.sqrt(diskriminante);
            x1 = -(pPhalbe) + sqrtDiskriminante;
            x2 = -(pPhalbe) - sqrtDiskriminante;
        }
        return ergebnisText(x1, x2, diskriminante);
    }
 
    private String ergebnisText(double x1, double x2, double diskriminante) {
        StringBuilder ergebnisText = new StringBuilder();
 
        if (diskriminante >= 0) {
            if (x1 == x2) {
                ergebnisText.append("Das Ergebnis ist L={");
                ergebnisText.append(x2);               
 
            } else {
                ergebnisText.append("Die Ergebnisse sind L={");
                ergebnisText.append(x1);
                ergebnisText.append(";");
                ergebnisText.append(x2);
            }
            ergebnisText.append("}");
        } else {
            ergebnisText.append("Keine Lösung, die Diskriminante ist ");
            ergebnisText.append(diskriminante);
           
        }
        return ergebnisText.toString();
    }
}
</source>
 
 
== Siehe auch ==
* [[PQ-Formel]]
* Mathematischer Hintergrund: [[Quadratische Funktionen]]  
 




[[Kategorie:Java]]
[[Kategorie:Java]]
[[Kategorie:Quadratische Funktionen]]

Aktuelle Version vom 20. August 2019, 02:08 Uhr

Das folgende Beispiel eignet sich, um eine verschachtelte if..else-Verzweigung einzuführen. Neben „if..else“ benötigen Sie Kenntnisse im Umgang mit System.out.println und der Klasse Math, die in Java standardmäßig vorhanden ist.

Die Klasse Math ist das Matheobjekt mit allen Operationen für einfache numerische Berech­nungen.(...) Der Ergebnistyp fast aller Operationen ist double.

  • sqrt: Wurzelziehen
  • pow: Potenzen
double x = Math.sqrt( 2 ); doulbe y = Math.pow( 2,10 );  // 2^10 = 1024


public class Formelberechner
{
public String berechnePQFormel(double pP, double pQ){
    double diskriminante;
    diskriminante = (pP/2) * (pP/2) - pQ;
    if (diskriminante >= 0) {
      double x1,x2;
      x1 = -(pP/2) + Math.sqrt (diskriminante);
      x2 = -(pP/2) - Math.sqrt (diskriminante);
      if (x1==x2){
        return "Das Ergebnis ist L={"+x2+"}";    
      }
      else {
        return "Die Ergebnisse sind L={"+x1+";"+x2+"}";
      }
    }
    else {
      return "Keine Lösung, die Diskriminate ist "+diskriminante;
    }
}

Arbeitshinweise

Beschreiben Sie, weshalb bei berechnePQFormel() innerhalb des ersten if-Anweisungs­blocks noch ein zweiter, verschachtelter if-Block auftritt. Erläutern Sie dabei die Klammersetzung der geschweiften Klammern.

  1. bestimmeBetrag() gibt den Betrag einer Zahl zurück (eine negative Zahl wird zu einer positiven. Analysieren Sie die Funktionsweise dieser Methode.
  2. Vergleichen Sie die beiden Varianten der quadrieren-Methoden. Beide führen zu demselben Ergebnis. Welche würden Sie bevorzugen?
  3. Implementieren Sie eine Methode zieheWurzel(double pZahl), die entweder die Wurzelvon pZahl zurückgibt oder -1, falls pZahl negativ ist.(Hinweis: -1 ist natürlich mathematisch nicht richtig, aber so müssen Sie die Zahl, die Sie zurückgeben, nicht in einen String umwandeln.)


verbesserte Version

Hallo zusammen,

ich habe selbst ein solches Beispiel gebraucht und das aktive etwas umgebaut (Trennung von Berechnung und Texterstellung, Verwendung von StringBuilder zur Erstellung der Ergebnistexte). Die verschachtelte if Bedingung ist nun in der Funktion ergebnisText(...). Sieht noch jemand einen Fehler? Danke und Gruss --Axel Gruenhagen 10:55, 30. Aug. 2009 (UTC)

public class FormelberechnerNeu {

    public String berechnePQFormel(double pP, double pQ) {
        double pPhalbe = pP / 2;        
        double diskriminante = Math.pow(pPhalbe,2) - pQ;
        double x1 = 0;
        double x2 = 0;
        if (diskriminante >= 0) {
            double sqrtDiskriminante = Math.sqrt(diskriminante);
            x1 = -(pPhalbe) + sqrtDiskriminante;
            x2 = -(pPhalbe) - sqrtDiskriminante;
        }
        return ergebnisText(x1, x2, diskriminante);
    }

    private String ergebnisText(double x1, double x2, double diskriminante) {
        StringBuilder ergebnisText = new StringBuilder();

        if (diskriminante >= 0) {
            if (x1 == x2) {
                ergebnisText.append("Das Ergebnis ist L={");
                ergebnisText.append(x2);                

            } else {
                ergebnisText.append("Die Ergebnisse sind L={");
                ergebnisText.append(x1);
                ergebnisText.append(";");
                ergebnisText.append(x2);
            }
            ergebnisText.append("}");
        } else {
            ergebnisText.append("Keine Lösung, die Diskriminante ist ");
            ergebnisText.append(diskriminante);
            
        }
        return ergebnisText.toString();
    }
}


Siehe auch