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