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 for-Schleife und Berechnung der x-Werte direkt 
6    * aus der Laufvariablen (ohne x-Inkrementierungen)
7    */
8   public class FunktionPlotV4 {
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          // für alle x-Werte im Intervall:
18      
19          /**************************/        
20          for (int i = 0; i <= n; i++) {  // n + 1 Iterationen
21          /**************************/        
22  
23              // aus i kann x direkt (genauer) berechnet werden:
24              /********************/
25              double x = a + i * dx;      // automatische Typumwandlung für i: int -> double
26              /********************/
27               
28              double y = f(x);
29  
30              int pos = (int) ( y / dx ); 
31  
32              String s = positionszeichen(pos, 2, '*');
33  
34              System.out.println(s);
35  
36          }
37  
38      }
39  
40      /**
41      * Erzeugung einer Zeichenkette, die aus n Leerzeichen, gefolgt von einem Zeichen ch, besteht
42      */
43      private static String positionszeichen(int n, int k, char c) {
44  
45          String s = ""; // mittels dieser lokalen Variablen wird das Ergebnis aufgebaut
46  
47          // n*k-maliges Anfügen eines Leerzeichens
48          for(int i = 0; i < k*n; i++)
49              s += ' ';
50  
51          // abschließendes Anfügen des Zeichens ch
52          s += c;
53  
54          return s;   // Rückgabe der fertigen Zeichenkette
55      }
56  
57      /**
58      * Berechnung der Funktion -0.01*x^5 + 0.08*x^4 - 0.26*x^3 - 0.31*x^2 + 1.4*x + 2.36
59      */ 
60      private static double f(double x) {
61          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;
62      }
63  
64  }
65