FunktionPlotV3.java |
1 /** 2 * 183.592 Programmierpraxis TU Wien WS2014/15 H.Moritsch 3 * Plot einer Funktion y = f(x) mittels '*'-Zeichen 4 * im Intervall von a bis b mit n Schritten, 5 * Berechnung der Zeichenposition direkt aus dem Funktionswert, 6 * Erstellung einer Zeile mittels eigener Methode 7 * z. B. a = -2.0, b = 2.0, n = 30 8 */ 9 public class FunktionPlotV3 { 10 public static void main(String[] args) { 11 12 double a = -2.0; 13 double b = -2.0; 14 15 /********/ 16 int n = 30; // Anzahl der Schritte 17 /********/ 18 19 double x; 20 21 // Berechnung von dx aus n: 22 /***********************/ 23 double dx = (b - a) / n ; // automatische Typumwandlung für n: int -> double 24 /***********************/ 25 26 x = a; 27 // *solange* x innerhalb des Intervalls liegt: 28 while (x <= b) { 29 30 double y = f(x); 31 32 // Zeichenposition entspricht dem y-Wert: 33 /*************************/ 34 int pos = (int) ( y / dx ); // explizite Typumwandlung double -> int 35 /*************************/ 36 37 // Erstellung einer Zeile 38 /***************************************/ 39 String s = positionszeichen(pos, 2, '*'); 40 /***************************************/ 41 42 System.out.println(s); 43 44 x = x + dx; // nächster x-Wert 45 } 46 47 } 48 49 /** 50 * Erzeugung einer Zeichenkette, die aus n Leerzeichen, gefolgt von einem Zeichen ch, besteht 51 */ 52 private static String positionszeichen(int n, int k, char c) { 53 54 String s = ""; // mittels dieser lokalen Variablen wird das Ergebnis aufgebaut 55 56 // n*k-maliges Anfügen eines Leerzeichens 57 for(int i = 0; i < k*n; i++) 58 s += ' '; 59 60 // abschließendes Anfügen des Zeichens ch 61 s += c; 62 63 return s; // Rückgabe der fertigen Zeichenkette 64 } 65 66 /** 67 * Berechnung der Funktion -0.01*x^5 + 0.08*x^4 - 0.26*x^3 - 0.31*x^2 + 1.4*x + 2.36 68 */ 69 private static double f(double x) { 70 return -0.01*x*x*x*x*x + 0.08*x*x*x*x - 0.26*x*x*x - 0.31*x*x + 1.4*x + 2.36; 71 } 72 73 } 74