2. Übungsblatt - Abgabe: 28. November

http://pp.info.uni-karlsruhe.de/lehre/W ... rn/b02.pdf
Benutzeravatar
salami
Beiträge: 179
Registriert: Mi 5. Nov 2008, 22:41
Wohnort: Karlsruhe

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von salami »

Baloo hat geschrieben:

Code: Alles auswählen

double e = (double) 1/3*(a+b+c);  //ergebnis: 0.5
Oder man zeigt dem Compiler, dass es eine Gleitkommazahl ist:

Code: Alles auswählen

double e = 1/3.0*(a+b+c);
Also entweder 1.0 oder 3.0 für double oder 1f oder 3f für float.
Noch kompakter:

Code: Alles auswählen

double e = (a+b+c)/3.0;
Thomas
Administrator
Beiträge: 383
Registriert: Do 23. Okt 2008, 20:16
Wohnort: Karlsruhe
Kontaktdaten:

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von Thomas »

hab hier ma meine Aufgabe 5 gepostet, kann mir mal jemand sagen ob die in die richtige richtung geht? fehler werden auf jeden fall drin sein^^
falls jemand die zeit und lust hätte sich das ma anzuschauen und zu sagen was falsch is, wär ich sehr dankbar ;)
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: auf Anzeigen klicken

Code: Alles auswählen

Aufgabe 5)


class Point {

 //Attribute
  double x ; //x-Koordinate des Punktes
  double y ; //y-Koordinate des Punktes
  
  //Konstruktor
  Point(double x, double y) {
  
  this.x = x;
  this.y = y;
}



class Triangle{

  //Attribute
  Point p1;
  Point p2;
  Point p3;
 
  //Konstruktor
  Triangle(Point p1, Point p2, Point p3) {
  
  this.p1 = p1;
  this.p2 = p2;
  this.p3 = p3;
  }
}

a)
void shift(double dx, double dy) {

  this.x = this.x + dx;
  this.y = this.y + dy;
}

void shift(double betrag) {

  this.p1 = this.p1 + betrag;
  this.p2 = this.p2 + betrag;
  this.p3 = this.p3 + betrag;
}


b)
//Rotationsmethode mit Winkel als Argument

void rotate(double angle) {

  double phi = Math.toRadians(angle);
  double xOld = this.x;
  double yOld = this.y;
  this.x = xOld * Math.cos(phi) - yOld * Math.sin(phi);
  this.y = xOld * Math.sin(phi) + yOld * Math.cos(phi);
}


//Ausführung der RotationsMethode mit Winkel als Argument

void rotate(double angle) {

  this.p1.rotate(angle);
  this.p2.rotate(angle);
  this.p3.rotate(angle);
}


c)
//Rotationsmethode mit Punkt und Winkel als Argument

void rotate(Point center, double angle) {

  double xOfCenter = center.x;
  double yOfCenter = center.y;
  this.shift(-xOfCenter, -yOfCenter);
  this.rotate(angle);
  this.shift(xOfCenter, yOfCenter);
}

//Ausführung der RotationsMethode mit Punkt und Winkel als Argument

void rotate(Point center, double angle) {

  this.p1.rotate(center, angle);
  this.p2.rotate(center, angle);
  this.p3.rotate(center, angle);
}

d)
//Hilfsmethode zum Quadrieren

private double square(double a) {

  return a * a;
}

//Berechnung des Umfangs

double umfang() {

  double s1 = Math.sqrt (square(p2.x-p1.x)+square(p2.y-p1.y))
  double s2 = Math.sqrt (square(p3.x-p1.x)+square(p3.y-p1.y))
  double s3 = Math.sqrt (square(p2.x-p3.x)+square(p2.y-p3.y))

  return s1+s2+s3
}


e)
//Hilfsmethode zum Quadrieren

private double square(double a) {

  return a * a;
}

//Flaechenberechnung

double flaeche() {

  double b = Math.sqrt (square(p2.x-p1.x)+square(p2.y-p1.y))
  double c = Math.sqrt (square(p3.x-p1.x)+square(p3.y-p1.y))
  double d = Math.sqrt (square(p2.x-p3.x)+square(p2.y-p3.y))
  double e = 0.5*(b+c+d)
  
  return Math.sqrt(e*(e-b)*(e-c)*(e-d))
}


f)
//Berechnung des Schwerpunkts
Point schwerpunkt() {
  
  //X-Koordinate des Schwerpunkts
  double schwerX = (p1.x+p2.x+p3.x)/3.0
  
  //Y-Koordinate des Schwerpunkts
  double schwerY = (p1.y+p2.y+p3.y)/3.0
  
  return new Point(schwerX, schwerY)
}
void
Beiträge: 4
Registriert: So 16. Nov 2008, 15:18

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von void »

Also prinzipiell sieht das schomal gut aus, aber ich würde die Methoden ruhig auch in die Klassen tun. Du kannst die sehr gut mit den "Dokumentationskommentaren" ausstatten um die erkennbar zu machen (dafür sind die da...). Geht in etwa so:

ANMERKUNG: Eigentlich macht man das so, dass die ersten * in jeder Reihe untereinander stehen. Geht aber iwie nich, kp warum.

Code: Alles auswählen

/**
 * In dieser Datei steht die Klasse bar. Dies ist ein
 * Dateikommentar weil er ganz am Anfang der Datei steht.
 * Unterscheide weiterhin, ob ein Kommentar mit /* oder /** beginnt.
 * Zwei Sterne bedeutet Doku-Kommentar, einer normaler Block-Kommentar.
 */

/**
 * Dies ist eine Klasse um was zu machen. Dies hier ist ein
 * Klassenkommentar, weil er direkt über dem Klassenkopf steht.
 */
public class bar {

  /**
   * Hier passiert vielleicht irgendwas. Das ist übrigens ein Methodenkommentar.
   *
   * @return irgend eine zahl
   * @param a eine zahl
   */
  public int foo(int a) {
    int irgendwas = ........;
    return irgendwas;
  } // of foo(int a)

} // of class bar

Das ist so der 'right way to do it' (Korrigiert mich falls das unsinn ist(!))

Aber was ganz anderes: Wie habt ihr bei der g die Tests gemacht? Ich hab jetzt einfach die Methoden durchgetestet und mach halt ne nette Ausgabe, aber das wird sehr viel Code (wohl >1 Seite für die main). Alternative wäre jUnit, aber ich kann mir nicht vorstellen, dass die erwarten, dass wir jetzt für dieses ÜB extra sone klobige Library lernen...
Opinions please?
|silent
Moderator
Beiträge: 88
Registriert: Di 28. Okt 2008, 13:15
Kontaktdaten:

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von |silent »

void hat geschrieben: Aber was ganz anderes: Wie habt ihr bei der g die Tests gemacht? Ich hab jetzt einfach die Methoden durchgetestet und mach halt ne nette Ausgabe, aber das wird sehr viel Code (wohl >1 Seite für die main). Alternative wäre jUnit, aber ich kann mir nicht vorstellen, dass die erwarten, dass wir jetzt für dieses ÜB extra sone klobige Library lernen...
Opinions please?
Moin void,

also die wollen sicherlich keine so ausführliche Sache. Einfach nur die Ausgabe mit einem beliebigem Dreieck, das soll uns glaub dabei helfen zu lernen wie Ein- und Ausgaben mit der Terminal-Klasse und allgemein funktionieren. Ich hab mir ein kleines Menü gebastelt, bei der du auswählen kannst was das Programm tun soll, vorher musst natürlich die Punkte eingeben und dann kannst folgendes machen:

Code: Alles auswählen

Geben Sie jetzt 3 Punkte für das Dreieck ein!
Punkt 1 X:1
Punkt 1 Y:1
Punkt 2 X:3
Punkt 2 Y:1
Punkt 3 X:1
Punkt 3 Y:3
Was möchten Sie tun?
----------------------------------
[0] Punkte anzeigen
[1] (a) Dreieck um (1.0/2.0) verschieben
[2] (b) Dreieck um 90.0° um Ursprung drehen
[3] (c) Dreieck um 90.0° um (1.0/2.0) drehen
[4] (d) Umfang des Dreiecks
[5] (e) Fläche des Dreiecks
[6] (f) Schwerpunkt des Dreiecks
[9] Programm beenden
----------------------------------
Geben Sie bitte jetzt eine Zahl ein: 0
Das is aber reine spielerei und muss nicht sein. Am einfachsten isses, wenn du nacheinander alle Operationen durchführst und nach jeder Operation die aktuellen Punkte/Werte anzeigst.
Bild
Benutzeravatar
GoukipK
Beiträge: 11
Registriert: So 2. Nov 2008, 23:03
Kontaktdaten:

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von GoukipK »

void hat geschrieben:

Code: Alles auswählen

  } // of foo(int a)

} // of class bar

Das ist so der 'right way to do it' (Korrigiert mich falls das unsinn ist(!))
Diese "Pepper"-Kommentare am Ende von Klassen / Methoden sollen wir weglassen.
Sollen wir uns gar nicht erst angewöhnen.
Nukleus
Beiträge: 27
Registriert: Mi 12. Nov 2008, 18:44

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von Nukleus »

GoukipK hat geschrieben:Diese "Pepper"-Kommentare am Ende von Klassen / Methoden sollen wir weglassen.
Sollen wir uns gar nicht erst angewöhnen.
Hehe, wenn Java einen Praeprozessor haette, waere es bei dem manchmal sinnvoll. aber sowas ham die ja nicht :bad:
Antworten

Zurück zu „Blatt 2 - Abgabe 28.11.08“