FunktionPlotV6.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 * mit Trennung der Erstellung und Ausgabe der Zeilen, 6 * mit einem Array zum Speichern der Zeilen 7 */ 8 public class FunktionPlotV6 { 9 public static void main(String[] args) { 10 11 double a = -2.0; 12 double b = -2.0; 13 int n = 30; 14 15 double dx = (b - a) / n ; 16 17 double [ ] wert = new double [ n+1 ]; 18 19 /***********************************/ 20 String [ ] plot = new String [ n+1 ]; // Array der Länge n+1 von String-Variablen 21 /***********************************/ // zum Speichern der auszugebenden Zeilen 22 23 // Berechnen und Speichern der Funktionswerte 24 25 for (int i = 0; i<=n; i++) { 26 27 double x = a + i * dx; 28 double y = f(x); 29 wert[i] = y; 30 31 } 32 33 // Erstellen der "Zeichnung" (einzelne Zeilen) 34 35 for (int i = 0; i<=n; i++) { 36 37 int pos = (int) ( wert[i] / dx ); 38 String s = positionszeichen(pos, 2, '*'); 39 40 // Speichern der i.ten Zeile (Wert von s) 41 /*************/ 42 plot [ i ] = s; // Zuweisung an die Variable 'plot[i]' 43 /*************/ 44 45 } 46 47 // Ausgabe des Plots 48 49 for (int i = 0; i<=n; i++) { 50 51 /********/ 52 System.out.println( plot [ i ] ); // Ausgabe der gespeicherten Zeile 53 /********/ 54 55 } 56 57 } 58 59 /** 60 * Erzeugung einer Zeichenkette, die aus n Leerzeichen, gefolgt von einem Zeichen ch, besteht 61 */ 62 private static String positionszeichen(int n, int k, char c) { 63 64 String s = ""; // mittels dieser lokalen Variablen wird das Ergebnis aufgebaut 65 66 // n*k-maliges Anfügen eines Leerzeichens 67 for(int i = 0; i < k*n; i++) 68 s += ' '; 69 70 // abschließendes Anfügen des Zeichens ch 71 s += c; 72 73 return s; // Rückgabe der fertigen Zeichenkette 74 } 75 76 /** 77 * Berechnung der Funktion -0.01*x^5 + 0.08*x^4 - 0.26*x^3 - 0.31*x^2 + 1.4*x + 2.36 78 */ 79 private static double f(double x) { 80 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; 81 } 82 83 } 84