Hausaufgabe 04 loesung PDF

Title Hausaufgabe 04 loesung
Course Einführung in die Informatik
Institution Technische Universität Berlin
Pages 6
File Size 175 KB
File Type PDF
Total Downloads 34
Total Views 133

Summary

WS18/19...


Description

Einführung in die Informatik - WS 2018/19 Technische Universität Berlin

Neuronale Informationsverarbeitung

Übungsblatt 4 (Block 1) Prof. Dr. Klaus Obermayer und Mitarbeiter Arrays, Schleifen Verfügbar ab: Abgabe bis:

12.11.18 19.11.18-23.11.18

Aufgabe 1: Umsatzanalyse

6 Punkte

In einem Marktanalyseteam sollen die Umsätze eines anonymisierten Unternehmens statistisch untersucht werden. In den Vorgaben auf ISIS finden Sie die Klasse Umsatzanalyse.java. Darin wird ein 2D-Array umsatz deklariert und mit den Umsatzwerten (in Millionen Euro pro Monat) eines Unternehmens befüllt. Erweitern Sie das Java-Programm Umsatzanalyse.java nach folgenden Vorgaben: Jahresanalyse

1. Bestimmen Sie für jedes Jahr den durchschnittlichen Monatsumsatz gerundet1 auf ganze Zahlen (insgesamt 7 Werte). Geben Sie die Jahresdurchschnitte mit den dazugehörigen Jahren auf der Konsole aus. 2. Bestimmen Sie die Abweichung der ermittelten Jahresdurchschnitte aus Teilaufgabe 1 zu den erwarteten Werten eines linearen Trends (linearer Umsatzanstieg). Gehen Sie folgendermaßen vor: • Bestimmen Sie die Steigung der Geraden, welche durch die Punkte ( 2011, Umsatz von 2011 ) und ( 2017, Umsatz von 2017 ) verläuft. • Geben Sie diesen Wert auf der Konsole aus und interpretieren Sie ihn kurz. • Bilden Sie die Differenz der in Teilaufgabe 1 ermittelten tatsächlichen Jahresdurchschnitte zu den erwarteten Werten der Umsätze (linearer Trend), welche durch die zuvor bestimmte Gerade gegeben sind. • Geben Sie die ermittelten Differenzen mit den dazugehörigen Jahren auf der Konsole aus. • Interpretieren Sie diese Werte kurz. Monatsanalyse

3. Bestimmen Sie die durchschnittlichen Umsätze pro Monat2 gerundet auf ganze Werte (insgesamt 12 Werte). Geben Sie die Durchschnitte mit den dazugehörigen Monaten auf der Konsole aus. 4. Zentrieren Sie die ermittelten durchschnittlichen Umsätze pro Monat. Gehen Sie dabei wie folgt vor: • Bilden Sie zuerst den Durchschnitt aller Monatsdurchschnitte aus Teilaufgabe 3 (insgesamt 1 Wert). • Subtrahieren Sie für die Zentrierung von jedem einzelnen der Monatsdurchschnitte aus Teilaufgabe 3 den Durchschnitt der Monatsdurchschnitte (insgesamt 12 Werte). 1

Zum Runden können Sie die Methode round der Math-Klasse verwenden. Beachten Sie, dass das Ergebnis des Methodenaufrufs anschließend nach int gecastet werden muss, um es in einer int-Variable speichern zu können. Beispiel: double y = 3.6; int x = (int)(Math.round(y)); ergibt x = 4. 2 Mitteln Sie z.B. für den Monat Januar über alle Monate Januar der vorhandenen Jahre, um einen Durchschnitt pro Monat zu erhalten.

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

1

InfTech

WS 2018/19

Übungsblatt 4 (Block 1)

• Geben Sie die zentrierten Durchschnitte mit den dazugehörigen Monaten auf der Konsole aus. 5. Sind saisonale Schwankungen zu erkennen? Wenn ja, welche Jahreszeit weist den durchschnittlich höchsten Umsatz auf? Stellen Sie hinsichtlich dieser Erkenntnisse eine Vermutung auf, in welcher Branche das Unternehmen, von welchem Sie die Umsätze ausgewertet haben, tätig sein könnte. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

public class Umsatzanalyse{ public static void main(String[] args){ int[][] umsatz = {{ 10, 9, 11, 8, 13, 19, 17, 18, 14, 12, 11, 8}, { 8, 10, 10, 10, 15, 17, 20, 17, 12, 13, 10, 9}, { 9, 11, 11, 9, 12, 17, 20, 19, 12, 11, 9, 10}, { 7, 8, 9, 9, 11, 17, 19, 17, 16, 10, 8, 7}, { 8, 8, 7, 8, 10, 16, 18, 16, 11, 11, 9, 7}, { 7, 6, 8, 9, 11, 15, 16, 16, 10, 10, 7, 7}, { 7, 7, 8, 8, 10, 15, 15, 14, 10, 9, 8, 5}}; String[] monat = {"Jan", "Feb", "Mar","Apr", "Mai","Jun", "Jul", "Aug", " Sep", "Okt", "Nov", "Dez"}; int[] jahr ={2011, 2012, 2013, 2014, 2015, 2016, 2017}; // Ihr Code hier } }

Musterlösung: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

public class Umsatzanalyse{ public static void main(String[] args){ int[][] umsatz = {{ 10, 9, 11, 8, 13, 19, 17, 18, 14, 12, 11, 8}, { 8, 10, 10, 10, 15, 17, 20, 17, 12, 13, 10, 9}, { 9, 11, 11, 9, 12, 17, 20, 19, 12, 11, 9, 10}, { 7, 8, 9, 9, 11, 17, 19, 17, 16, 10, 8, 7}, { 8, 8, 7, 8, 10, 16, 18, 16, 11, 11, 9, 7}, { 7, 6, 8, 9, 11, 15, 16, 16, 10, 10, 7, 7}, { 7, 7, 8, 8, 10, 15, 15, 14, 10, 9, 8, 5}}; String[] monate = {"Jan", "Feb", "Mar","Apr", "Mai","Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"}; int[] jahre ={2011, 2012, 2013, 2014, 2015, 2016, 2017}; /* 1) Durchschnitt pro Jahr finden */ int[] ds_jahr = new int[umsatz.length]; // Die for−Schleife durchlaeuft nacheinander jedes Jahr for (int i = 0; i < umsatz.length; i++){ int sum = umsatz[i][0]; // pro Jahr wird jeder Monat durchlaufen for (int j = 1; j < umsatz[i].length; j++){ sum += umsatz[i][j]; } // Beim Berechnen des Durchschnitts darauf achten, dass einer der Terme in der Division nach double gecastet wird, um die Nachkommastelle nicht einfach abzuschneiden, bevor Math. round angewendet werden kann

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

2

InfTech 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

WS 2018/19

Übungsblatt 4 (Block 1)

ds_jahr[i] = (int)Math.round(sum/(double)umsatz[i].length); System.out.println(jahre[i]+":\tDS "+ ds_jahr[i]); } System.out.println(); /* 2) Differenz zu (linearen) Trend bestimmen */ double[] differenz_zu_trend = new double[ds_jahr.length]; double dx_dy = (ds_jahr[ds_jahr.length − 1] − ds_jahr[0]) / (( double) ds_jahr.length − 1); System.out.println("Trend: " + dx_dy); /* Trend = −0.5 −> Umsatz nimmt ueber die Jahre ab: Rezession */ for (int i = 0; i < differenz_zu_trend.length; i++){ differenz_zu_trend[i] = ds_jahr[i] − (ds_jahr[0] + dx_dy * i); System.out.println(jahre[i]+":\tDifferenz zu Trend "+ differenz_zu_trend[i]); } /* Jahr mit der groessten Differenz: 2013 */ System.out.println(); /* 3) Durchschnitt pro Monat finden */ int[] ds_monat = new int[umsatz[0].length]; // for−Schleife durchlaeuft jeden Monat for (int i = 0; i < umsatz[0].length; i++){ int sum = umsatz[0][i]; //pro Monat werden die 5 Jahre durchlaufen for (int j = 1; j < umsatz.length; j++){ sum += umsatz[j][i]; } ds_monat[i] = (int)Math.round(sum/(double)umsatz.length); System.out.println(monate[i]+":\tDS "+ ds_monat[i]); } System.out.println(); /* 4) Durchschnitt pro Monat zentrieren */ double[] ds_monat_zentriert = new double[ds_monat.length]; int sum_ds_monat = 0; for (int i = 0; i < ds_monat.length; i++){ sum_ds_monat += ds_monat[i]; } double ds_ds_monat = ((double) sum_ds_monat)/ds_monat.length; for (int i = 0; i < ds_monat_zentriert.length; i++){ ds_monat_zentriert[i] = ds_monat[i] − ds_ds_monat; System.out.println(monate[i]+":\tDS zentriert "+ ds_monat_zentriert[i]); }

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

3

InfTech

WS 2018/19

80 81 82 83 84

Übungsblatt 4 (Block 1)

/* Sommermonate weisen einen hoeheren Umsatz auf. Branche eventuell Landwirtschaft (in Deutschland). */ } }

Aufgabe 2: Aktienkurs

2 Punkte

Erweitern Sie das vorgegebene Java-Programm Aktienkurs.java, in welchem ein Aktienkurs auf lokale Maxima untersucht werden soll. In einem double-Array sind die diskreten Werte für aufeinanderfolgende Tage eines Aktienkurses gegeben. Der Arrayindex steht hierbei für die Tageszahl. Es sollen alle lokalen Maxima3 abhängig vom Tag aufsteigend zusammen mit der Zahl des Tages sinnvoll ausgegeben werden. Gehen Sie dabei wie folgt vor: • Es soll geprüft werden, ob der erste Tag ein lokales Maximum ist. • Es sollen über eine Schleife die lokalen Maxima innerhalb des Arrays gefunden werden. • Es soll geprüft werden, ob der letzte Tag ein lokales Maximum ist. Hinweis: Gehen Sie bei der Suche nach lokalen Maxima davon aus, dass der Aktienkurs nicht stabil ist und sich jeden Tag ändert. Musterlösung: 1 2 3

public class Aktienkurs { public static void main(String args[]) { double aktienkurs[] = {1.3, 1.5, 2.2, 1.6, 4.8, 0.9, 0.2, 0.1, 0.4, 0.7, 1.2, 1.5, 1.6, 1.7, 1.4, 1.5, 2.0};

4 5 6 7 8 9 10 11 12 13 14

System.out.println("Aktienkurs ZWEI"); System.out.println("Lokale Maxima des Kurses:"); // gebe lokale Maxima des Arrays aus if (aktienkurs[0] > aktienkurs[1]) { // betrachte Rand System.out.println("Tag 0 mit dem Kurswert "+aktienkurs[0]); } for (int i = 1; i < aktienkurs.length−1; i++) { if (aktienkurs[i−1] < aktienkurs[i] && aktienkurs[i+1] < aktienkurs [i]) { System.out.println("Tag "+i+" mit dem Kurswert "+aktienkurs[i]); } }

15 16 17 18 19

if (aktienkurs[aktienkurs.length−1] > aktienkurs[aktienkurs.length −2]) { // betrachte Rand System.out.println("Tag "+(aktienkurs.length−1)+" mit dem Kurswert "+aktienkurs[aktienkurs.length−1]); }

20 21 22 3

}

Ein lokales Maximum einer Funktion ist ein Wert, der in einer Umgebung größer als die Werte seiner Umgebung ist. Es können also mehrere lokale Maxima gefunden werden, aber nur ein globales Maximum.

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

4

InfTech 23

WS 2018/19

Übungsblatt 4 (Block 1)

}

Aufgabe 3: Quersummen

2 Punkte

Implementieren Sie ein Java-Programm QuersummenInArray.java. Ihr Programm soll in der main-Methode: • ein vom Nutzer eingegebenes Integer-Array arrayUntersuchen einlesen, • alle Quersummen benachbarter Stellen in arrayUntersuchen bestimmen und dabei die Anzahl der Vorkommen der unterschiedlichen Quersummen zählen. Hinweis: Die größte vorkommende Quersumme ist die der kompletten Zahlenreihe. Diese gibt außerdem an, wie viele unterschiedliche Quersummen in der Zahlenreihe maximal vorkommen können. • Schlussendlich soll die Anzahl der Vorkommen pro Quersumme ausgegeben werden. Sorgen Sie für eine sinnvolle Konsolenausgabe. Beispiel: In der Zahlenreihe 1, 1, 3, 2, 4 kommt die Quersumme 1 zweimal, Quersumme 2 zweimal, Quersumme 3 einmal, Quersumme 4 zweimal, Quersumme 5 zweimal, Quersumme 6 zweimal, Quersumme 7 einmal, Quersumme 9 einmal, Quersumme 10 einmal und die Quersumme 11 einmal vor. 1 ⇑ ⇑ ⇑ ⇑ ⇑

1 ⇑ ⇑ ⇑ ⇑ ⇑ ⇑ ⇑ ⇑

3

2

4

⇑ ⇑ ⇑

⇑ ⇑



⇑ ⇑



⇑ ⇑ ⇑ ⇑ ⇑ ⇑

⇑ ⇑ ⇑ ⇑

⇑ ⇑ ⇑

untersuchte Stellen eine zwei drei vier fünf eine zwei drei vier eine zwei drei eine zwei eine

Quersumme 1 2 5 7 11 1 4 6 10 3 5 9 2 6 4

Die Anzahl der Vorkommen können an den Zeilen abgelesen werden. Hinweis 1: Nutzen Sie zum Einlesen eines Integer-Array die Methoden askIntArray oder readIntArray der Terminal-Klasse. Der Nutzer kann die Array-Elemente per Komma getrennt eingeben. Musterlösung: 1 2 3 4 5 6 7 8 9 10

public class QuersummenInArray{ public static void main(String[] args){ int[] arrayUntersuchen = Terminal.askIntArray("Eingabe des zu untersuchenden Arrays: "); int maximaleQuersumme = 0; for (int i=0; i < arrayUntersuchen.length; i++){ maximaleQuersumme += arrayUntersuchen[i]; } int[] anzahlGefunden = new int[maximaleQuersumme];

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

5

InfTech

WS 2018/19

11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Übungsblatt 4 (Block 1)

for (int i=0; i < arrayUntersuchen.length; i++){ int quersumme = 0; for (int j=i; j < arrayUntersuchen.length; j++){ quersumme += arrayUntersuchen[j]; anzahlGefunden[quersumme−1] += 1; } } System.out.println("Anzahl der gefundenen Quersummen:"); for (int i=0; i < anzahlGefunden.length; i++){ if (anzahlGefunden[i] != 0){ System.out.println("Quersumme " + (i+1) + " : " + anzahlGefunden[i]); } } } }

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

6...


Similar Free PDFs