| 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