(freiwillige Zusatzaufgabe)
In Java gibt es eine sehr einfache Art, um statische Funktionen zu erzeugen, die sogenanten Lambda-Ausdrücke. So lässt sich die Standardparabelfunktion schreiben als folgender Ausdruck: (x) -> x*x.
So lassen sich Objekte vom Typ Function<Double,Double> erzeugen. Diese haben genau eine Methode, die Methode apply. Diese bekommt einen Double-Wert als Parameter und berechnet den Funktionswert für diesem Parameter.
Spannender als nur immer den Graphen einer bestimmten Funktion zu schreiben, ist es, diese Funktion als Parameter mit einem Lambda-Ausdruck zu erzeugen.
Schreiben Sie jetzt eine Methode:
static String mkStringGraph(Function<Double,Double> f,int xMin,int xMax,int yMin,int yMax).
Sie soll einen String erzeugen, der als Ascii-Graphik den Graphen der übergebenen Funktione $f$ im Definitionsbereich
xMin bis
xMax anzeigt.
Der Aufruf System.out.println(mkStringGraph(x -> 10*Math.cos(x/10),-50, 50, -10, 10)); soll zum Beispiel zu folgender Ausgabe führen:
*|*
*****|*****
*** | ***
** | **
*** | ***
** | **
** | **
* ** | ** *
** ** | ** **
** ** | ** **
--***----------------------------***--------------|--------------***----------------------------***--
** ** | ** **
** ** | ** **
** ** | ** **
*** ** | ** ***
** *** | *** **
** ** | ** **
*** ** | ** ***
*** *** | *** ***
********* | *********
|
Es soll also das Koordinatensystem gezeichnet werden und der Verlauf des Graphen mit dem Symbol * stetig angezeigt werden.
import java.util.function.Function;
public final class FunGraph {
private FunGraph(){}
static String mkStringGraph(Function<Double,Double> f
,int xMin,int xMax,int yMin,int yMax){
String result="";
//Hier jetzt zeilenweise den String erzeugen.
return result;
}
public static void main(String[] args) {
System.out.println(mkStringGraph((x)->x*x,-2,2,0,4));
System.out.println(mkStringGraph((x)->x*x*x,-4,4,0,16));
System.out.println(mkStringGraph(x -> 10*Math.cos(x/10),-5,5,0,25));
}
}