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