| 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