Zur Hauptnavigation springen [Alt]+[0] Zum Seiteninhalt springen [Alt]+[1]

Aufgaben zur Implementation

Aufgabe zur Implementation

  1. Lade die Datei alg15_xyDiagramm. Passe das Programm so an, dass die Messwerte aus der Datei Amplitudes.csv geladen werden. Sie sollen in den Array x_werte bzw. y_werte gespeichert werden. Beachte, dass es sich bei den Messwerten um Dezimalzahlen (double) handelt. Lade zunächst nur die ersten 40 Werte.

    Hinweis: Du musst überall die neuen Namen der Arrays einsetzen.

    In der Methode zeichneBalken soll die Ausgabe so angepasst werden, dass statt der Spielernamen die x-Werte und statt der Punktzahlen die y-Werte verwendet werden. Gib zunächst nur die ersten 40 Werte aus.

    Hinweis: Die Breite eines Rechtecks muss eine ganze Zahl (int) sein. Daher muss die Kommazahl in eine ganze Zahl umgewandelt werden. Dazu wird ein Typecast = Typumwandlung verwendet:

    int breite = (int) y_werte[i];

    Die Ausgabe der Zahlen als Text erfordert auch eine Typumwandlung. Diese erreicht man einfachsten, wenn man die Zahl an einen (leeren) String anhängt:

    text(""+y_werte[i], 2, 4);

  2. Das Balkendiagramm soll in ein XY-Diagramm umgewandelt werden. Wir zeichnen zunächst für jeden Messwert einen Punkt P(x|y) mit dem Befehl point(x,y). Beachte, dass die Koordinaten x und y wiederum ganze Zahlen sein müssen. Verwende also einen Typecast um x und y-Wert zu bestimmen. Wenn alles klappt, lade alle Daten und zeige sie an.

Skalierung

Das Diagramm klebt noch am oberen Rand des Bildschirms. Es soll die Bildfläche möglichst gut ausfüllen. Daher müssen wir zwei Anpassungen vornehmen:

Aufgabe zur Implementation

Beim x-Wert muss ein Faktor errechnet werden, der dafür sorgt, dass der größte x-Wert der Messreihe auf die größte Bildschirmkoordinate umgerechnet wird:

Faktor_x = größteBildschirmkoordinate / größter x-Wert der Messung

x-Koordinate = Messwert * Faktor_x

Mit diesem Faktor muss jeder Messwert multipliziert werden, um die richtige x-Koordinate des Bildschirms zu bekommen. Für den y-Wert muss genauso ein Faktor berechnet werden. Beim y-Wert kommt noch hinzu, dass die y-Koordinaten des Bildschirms von oben nach unten gerechnet werden. Daher ergibt sich die y-Koordinate folgendermaßen:

Faktor_y = größteBildschirmkoordinate / größter y-Wert der Messung

y-Koordinate = größteBildschirmkoordinate - Messwert*Faktor_y

 

  1. Passe die Methode sucheMaximum(int[] zahlen) so an, dass sie mit einem Array aus double-Zahlen arbeiten kann.

    Lasse in der Methode zeichneXYDiagramm vor der Schleife für das Zeichnen der Punkte das Maximum der x-Werte und das Maximum der y-Werte mit dieser Methode bestimmen. Beachte, dass der Rückgabewerte die Position des Maximums im Array und nicht dessen Wert ist. Ermittle daraus den maximalen x-Wert bzw. y-Wert. Berechne dann den x- und den y-Faktor.

    Beim Zeichnen der Punkte berechnest du dann die x- und die y-Koordinate des skalierten Messwerts.

  2. Nun sollen statt Punkten Linien eingezeichnet werden. Diese sollen zwischen zwei aufeinanderfolgenden Messpunkten mit dem Befehl line(x1,y1, x2,y2); gezeichnet werden. Bestimme daher in der Schleife zum Zeichnen auch die Koordinaten des nächsten Messwerts und zeichne eine Linie.

    Achtung: die Schleifenbedingung muss angepasst werden, damit es nicht zu einem Array-Index out of Bounds-Fehler kommt (man versucht auf ein Array-Element zuzugreifen, das es gar nicht gibt). Verwenden die Methode zur Fehlersuche, um herausfinden, bei welchem i der Fehler auftritt, wenn man die Schleife nicht anpasst.

 

Physikalische Messungen schwanken oft sehr stark aufgrund von momentanen Effekten. Um Trends erkennen zu können, ist es daher sinnvoll, den Durchschnitt einiger Werte heranzuziehen und als Kurve darzustellen. Im der Abbildung oben siehst du beispielsweise die Messwerte (grün), ein Mittel über jeweils 40 Messwerte (rot) und ein Mittel über 500 Messwerte (weiß). In der weißen Kurve kann man den Trend der Lautstärke während des gesamten Unterrichts am besten erkennen.

Bsp

Aufgabe zur Implementation

 

  1. Implementiere eine Methode double berechneDurchschnitt(double[] zahlen, int start, int n), die zu einem gegebenen Array, einer Startposition und einer Anzahl n von Elementen, den Durchschnitt der nächsten n Array-Werte ab der Startposition berechnet. Orientiere dich dabei an der schon implementierten Methode, die den Durchschnitt aller Zahlen berechnet. Beachte, dass es am Ende des Arrays passieren kann, dass nur noch weniger als n weitere Werte zur Verfügung stehen. Daher muss man in der Schleifenbedingung sowohl überprüfen, ob das Ende des Arrays noch nicht erreicht wurde, als auch, ob die Anzahl noch nicht erreicht wurde.

  2. Passe die Methode zeichneXYDiagramm so an, dass sie einen Parameter schrittweite entgegennimmt. Passe das Zeichnen der Linien so an, dass immer zunächst der Durchschnitt der angegebenen Schrittweite berechnet wird. Dieser Durchschnitt wird dann skaliert und gezeichnet.

    Passe den Aufruf der Methode zeichneXYDiagramm so an, dass der Wert des Parameters schrittweite übergeben wird. Experimentiere mit verschiedenen Schrittweiten. Du kannst auch mehrere Diagramme mit unterschiedlichen Schrittweiten übereinander zeichnen lassen. Verändere dazwischen mit stroke(r,g,b) die Farbe des Malstiftes.

 

 

XY-Diagramm: Herunterladen [odt][230 KB]

XY-Diagramm: Herunterladen [pdf][209 KB]

 

Weiter zu Übung