• Keine Ergebnisse gefunden

Übungsstunde 6

N/A
N/A
Protected

Academic year: 2022

Aktie "Übungsstunde 6"

Copied!
25
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übungsstunde 6

Einführung in die Programmierung I

(2)

Probleme bei Übung 5

[TODO Assistent]

(3)

Nachbesprechung Übung 6

(4)

256

5 6 4 5 5 6 3

hoehen.txt

Plateau längstes

Plateau

(5)
(6)

Person(int alter, double gewicht,

double groesse, boolean istMaennlich,

double schulterBreite, double brustTiefe, double brustBreite) {

this.alter = alter;

this.gewicht = gewicht;

this.groesse = groesse;

this.istMaennlich = istMaennlich;

this.schulterBreite = schulterBreite;

this.brustTiefe = brustTiefe;

this.brustBreite = brustBreite;

} public class Person {

int alter; // Jahre double gewicht; // kg double groesse; // cm boolean istMaennlich;

double schulterBreite; // cm double brustTiefe; // cm double brustBreite; // cm

String beschreibung() {

}

double bodyMassIndex() {

return 10000 * gewicht / (groesse * groesse);

}

‘this.alter ’ um Konflikt mit

Parameter ‘alter’ zu vermeiden

(7)

static double partnerQualitaet(Person p1, Person p2) { double distanz = Math.pow(p1.groesse - p2.groesse, 2) + 0.2 * Math.abs(p1.brustTiefe * p1.brustBreite - p2.brustTiefe * p2.brustBreite)

+ 0.5 * Math.pow(p1.schulterBreite - p2.schulterBreite, 2);

return 1 / (1 + distanz);

}

(8)

P

P

P

P

P

P

0 1 2 3 4 5

3 5 4 0 2 1

personen

partner

Paar-Einteilung:

(P

, P

), (P

, P

), (P

, P

)

int[] partner = new int[personen.length];

// erste naive Einteilung

for(int i = 0; i < personen.length; i += 2) { partner[i] = i + 1;

partner[i + 1] = i;

}

(9)

Einteilung 1:

(P

, P

) (P

, P

) (P

, P

)

Einteilung 2:

(P

, P

) (P₁, P₅) (P

, P

)

// wiederholtes Mischen von zufälligen Paaren int n = 10000000;

Random r = new Random();

while (n-- > 0) {

// Wahl unterschiedlicher Paare int p1 = r.nextInt(partner.length);

int p2;

do {

p2 = r.nextInt(partner.length);

} while(p2 == p1 || partner[p1] == p2);

mischePaareWennBesser(personen, partner, p1, p2);

}

(10)

static void mischePaareWennBesser(Person[] personen, int[] partner, int p1, int p2) { double alteQ = partnerQualitaet(personen[p1], personen[partner[p1]])

+ partnerQualitaet(personen[p2], personen[partner[p2]]);

double neueQ = partnerQualitaet(personen[p2], personen[partner[p1]]) + partnerQualitaet(personen[p1], personen[partner[p2]]);

if (neueQ > alteQ) {

int pp1 = partner[p1];

// p1 kriegt Partner von p2 partner[p1] = partner[p2];

partner[partner[p1]] = p1;

// p2 kriegt Partner von p1 partner[p2] = pp1;

partner[partner[p2]] = p2;

} }

2 Paare auswählen (P

, P

)

(P

, P

)

Paare mischen (P

, P

)

(P

, P

)

(11)

Vorbesprechung Übung 7

(12)

Aufgabe 1: Linked List

null

(13)
(14)

Überprüfen von fehlerhaften Bedingungen:

(15)

Aufgabe 2: Unit-Tests für die Linked List

public class LinkedIntListTest {

@Test

public void testGet() {}

@Test

public void testSet() {}

@Test

public void testIsEmpty() {}

@Test

public void testAddFirst() {}

@Test

public void testAddLast() {}

@Test

public void testRemoveFirst() {}

@Test

public void testRemoveLast() {}

@Test

public void testClear() {}

@Test

public void testToArray() {}

}

LinkedIntListTest.java

(16)

LinkedIntList list =

new LinkedIntList();

list.addFirst(1);

list.addFirst(2);

list.addFirst(3);

assertArrayEquals(new int[]{3, 2, 1}, list.toArray());

Beispiel:

Praktisch!

(17)

testRandom() vom Übungsblatt

@Test

public void testRandom() {

Random rand = new Random(42);

LinkedIntList ll = new LinkedIntList();

for(int n = 0; n < 9721; n++) { int choice = rand.nextInt(6);

int value = rand.nextInt();

if(choice == 0)

ll.addFirst(value);

else if(choice == 1) ll.addLast(value);

else if(choice == 2 && !ll.isEmpty()) ll.removeFirst();

else if(choice == 3 && !ll.isEmpty()) ll.removeLast();

else if(choice == 4 && !ll.isEmpty()) ll.set(rand.nextInt(ll.size), value);

else if(choice == 5 && value % 5 == 0) ll.clear();

}

String msg = "There is a bug in your LinkedIntList";

assertFalse(msg, ll.isEmpty());

assertEquals(msg, 5, ll.size);

int[] expect = new int[]{-1759285598, -424345731, -1746103561,

-1623993329, -1831395423};

assertArrayEquals(msg, expect, ll.toArray());

}

(18)

Linked List Person Person Person

Linked List Person

Linked List Person Person Person

Linked List Person Person

Histogramm

(19)

LinkedPersonList PersonNode PersonNode PersonNode

LinkedPersonList PersonNode

LinkedPersonList PersonNode PersonNode PersonNode

LinkedPersonList PersonNode PersonNode

Histogramm

(20)

Demo zu Aufgabe b)

(21)

42.9 17.7 28.0 21 65.6 174.0 1 43.7 16.9 30.8 23 71.8 175.3 1 40.1 20.9 31.7 28 80.7 193.5 1 44.3 18.4 28.2 23 72.6 186.5 1 42.5 21.5 29.4 22 78.8 187.2 1

body.dat.txt

(22)

[147.0, 149.6) ├─╫─┤

[149.6, 152.2) ├──────╫──────────────┤

[152.2, 154.8) ├──────╫────────────┤

[154.8, 157.4) ├───────╫────────┤

[157.4, 160.0) ├──────╫──────────────────┤

[160.0, 162.6) ├─────────────╫───────────────────┤

[162.6, 165.2) ├─────────╫─────────────────────────────────┤

[165.2, 167.8) ├─────────╫────────────────┤

[167.8, 170.4) ├───────────╫─────────────────┤

[170.4, 173.0) ├─────────────╫──────────────────────────┤

[173.0, 175.6) ├──────────────╫───────────────┤

[175.6, 178.2) ├────────────────╫─────────────────────────────┤

[178.2, 180.8) ├──────────────╫──────────┤

[180.8, 183.4) ├─────────╫─────────┤

[183.4, 186.0) ├────────────╫───────────────┤

[186.0, 188.6) ├──────────╫───────────┤

[188.6, 191.2) ├───────────╫───────────────┤

[191.2, 193.8) ├─────────╫──────┤

[193.8, 196.4) [196.4, 199.0) ├─╫─┤ Minimum Maximum

Durchschnitt

(23)

Aufgabe 4: Self-avoiding Random Walks

(24)

Zusatzübungen

(25)

s

2D-Array

int [] [] array2d = new int [zeilen] [spalten];

Ein 2D-Array ist ein lineares Array von Zeilen. Der new Operator initialisiert die Elemente der Zeilen mit dem Nullwert des Typs, z.B. 0 für int.

0 0 0 0

0 0 0 0

0 0 0 0

array2d[z][s] selektiert Zeile z und darin das s-te Element (die s-te Spalte)

z

Referenzen

ÄHNLICHE DOKUMENTE

Programm sollte “false” zurückgeben, weil es keine Subsequenz in s gibt, welche zwei “b” enthält.... Aufgabe

als Tipps probiert …?.. Aufgabe 5: Pong.. a) Erstellen Sie zwei weitere Klassen Player und Ball , welche alle Informationen zu Spieler und Ball beinhalten. Ein Spieler hat eine

Schreiben Sie ein Programm, das eine Datei mit ganzen Zahlen einliest und dann die Zahlen als Liste druckt:. 1. Dann drucken Sie den Durchschnitt

Schreiben Sie eine Methode sortedInt, die zwei int Parameter a, b entgegen nimmt und sie der Grösse nach sortiert (aufsteigend) zurück

Tests sollten fehlschlagen, falls die Implementierung fehlerhaft ist, und erfolgreich durchlaufen, falls keine Fehler vorhanden sind. Als Hilfe können Sie sich die Lösung der

Individuelles Feedback zu einzelnen Aufgaben (vorerst) via E-Mail Musterlösung wird am selben Tag der Abgabe in SVN veröffentlicht.. ● Separates Projekt uX-sol; gleich auschecken

● Tests sollten interessante Parameter für die Methoden testen. ● Beispiel

Schreiben Sie eine Methode sortedInt, die zwei int Parameter a, b entgegen nimmt und sie der Grösse nach sortiert (aufsteigend) zurück