8. Übung - oth-regensburg.de

Werbung
Programmieren in Java
8. Übung
Lösungen
1. Aufgabe
a)
public class Complex extends Object
{
private double u;
private double v;
Complex()
{ u = 0; v = 0; }
Complex(double x, double y)
{
u = x;
v = y;
}
// Realteil
public double real()
{
return u;
}
// Imagiaerteil
public double imaginaer()
{
return v;
}
// Betrag
public double betrag()
{
return Math.sqrt(u * u + v * v);
}
// Addition zweier komplexer Zahlen
public Complex plus(Complex z)
{
return new Complex(u + z.u,v + z.v);
}
// Subtraktion zweier komplexer Zahlen
public Complex minus(Complex z)
{
return new Complex(u - z.u,v - z.v);
}
// Multiplikation zweier komplexer Zahlen
public Complex mal(Complex z)
{
return new Complex(u * z.u - v * z.v,
u * z.v + v * z.u);
}
// Multiplikation einer komplexen Zahl mit einer " double"-Zahl
public Complex mal(double x)
{
return new Complex(u * x, v * x);
}
public Complex teilenDurch(Complex z)
{
double rz = z.betrag();
return new Complex((u * z.u + v * z.v) / (rz * rz),
(v * z.u - u * z.v) / (rz * rz));
1
Programmieren in Java
}
public String toString()
{
if (v >= 0)
return (String.valueOf(u) + " + " + String.valueOf(v) + "i");
else
return (String.valueOf(u) + " - " + String.valueOf(-v) + "i");
}
}
b)
public class ComplexTest extends Object
{
public static void main(String args[])
{
Complex u, v, w, z;
u = new Complex(1,2);
System.out.println("u: " + u);
v = new Complex(3,-4.5);
/* System.out.println("v: " + v.real() + " + "
+ v.imaginaer() + "i"); */
System.out.println("v: " + v);
// Addiere u und v
z = v.plus(u);
System.out.println("v + u: " + z);
// Subtraktion u - v
z = u.minus(v);
System.out.println("u - v: " + z);
// Multiplikation u * v
z = u.mal(v);
System.out.println("u * v: " + z);
// Multiplikation v * u
z = v.mal(u);
System.out.println("v * u: " + z);
// Multiplikation mit einer Gleitpunktzahl
double x = 5.1;
z = v.mal(x);
System.out.println("v * x: " + z);
// Teilen u durch v
z = u.teilenDurch(v);
System.out.println("u / v: " + z);
// Teilen v durch u
z = v.teilenDurch(u);
System.out.println("v / u: " + z);
}
}
2. Aufgabe
a)
class Rational
{
// Instanzvariable
long num = 0L;
// Numerator
long den = 1L;
// Denominator
// Private Methoden
private long ggT(long m, long n)
{
long rest = m % n;
2
Programmieren in Java
while (rest > 0)
{
m = n;
n = rest;
rest = m % n;
}
return n;
}
// Konstruktoren
public Rational(double x)
{
double wert1;
double wert2;
// Verschieben des Dezimalpunkts um 8 Stellen nach rechts
wert1 = 100000000L * x;
// Verschieben des Dezimalpunkts um 7 Stellen nach rechts
wert2 = 10000000L * x;
// wert1 - wert2 = 90000000 * x
// Abschneiden zu einer " long"-Zahl, Entfernen des gebrochenen Teils
// Approximation von x durch Numerator/90000000
num = (long) (wert1 - wert2);
den = 90000000L;
// Reduzieren
reduzieren();
}
public Rational(long num, long den)
{
super();
this.num = num;
this.den = den;
if (den == 0)
{
System.out.println("Ein Null-Denominator ist falsch");
System.out.println("Denominator wird auf 1 gesetzt");
this.den = 1;
}
}
// Instanzmethoden
// Addition
public Rational plus(Rational r)
{
Rational temp = new Rational(num * r.den + den * r.num, den * r.den);
return temp;
}
// Subtraktion
public Rational minus(Rational r)
{
Rational temp = new Rational(num * r.den - den * r.num, den * r.den);
return temp;
}
// Multiplikation
public Rational mal(Rational r)
{
Rational temp = new Rational(num * r.num, den * r.den);
return temp;
}
// Division
public Rational teilenDurch(Rational r)
{
Rational temp = new Rational(num * r.den, den * r.num);
return temp;
}
public void reduzieren()
3
Programmieren in Java
{
long teiler;
long absnum;
// absoluter Wert des Numerators
absnum = (num <0) ? -num : num;
if (num == 0)
den = 1;
else
{
// Finde den groessten gemeinsamen Teiler von absnum und dem Denominator
teiler = ggT(absnum,den);
// Fall „teiler == 1“, ist die rationale Zahl reduziert,anderenfalls
// teile Numerator und Denominator durch ihren groessten gemeinsamen
// Teiler
if (teiler > 1)
{
num /= teiler;
den /= teiler;
}
}
}
// Konvertieren rationale Zahl in " double"-Zahl
public double rationalIndouble()
{
return (double) num / den;
}
// Ausgabe
public String toString()
{
return String.valueOf(num) + '/' + String.valueOf(den);
}
}
b)
class RationalTest
{
public static void main(String args[])
{
System.out.println("Approximation Double-Zahl in rationale Zahl");
double d = 0.75;
Rational v = new Rational(d);
System.out.println("v: " + v);
System.out.println("Erzeugen einer rationalen Zahl");
Rational u = new Rational(2,3);
System.out.println("u: " + u);
System.out.println("Die zugehoerige double-Zahl ist: "
+ u.rationalIndouble());
System.out.println("Rechnen mit rationalen Zahlen");
Rational z;
z = u.plus(v);
System.out.println("u + v: " + z);
z = u.minus(v);
System.out.println("u - v: " + z);
z = v.minus(u);
System.out.println("v - u: " + z);
z = u.mal(v);
System.out.println("u * v: " + z);
z = u.teilenDurch(v);
System.out.println("u / v: " + z);
z = v.teilenDurch(u);
System.out.println("v / u: " + z);
}
}
4
Programmieren in Java
3. Aufgabe
public class Turtle
{
// Instanzvariable
private double turtleR, turtleX, turtleY, turtleTheta;
// Konstruktor
public Turtle()
{
this(0.0,0.0,100,0);
}
public Turtle(double turtleX, double turtleY,
double turtleR, double turtleTheta)
{
this.setzeTurtleX(turtleX);
this.setzeTurtleY(turtleY);
this.setzeTurtleR(turtleR);
this.setzeTurtleTheta( turtleTheta);
}
// Instanzmethoden
public double holeTurtleX()
{
return turtleX;
}
public void setzeTurtleX(double turtleX)
{
this.turtleX = turtleX;
}
public double holeTurtleY()
{
return turtleY;
}
public void setzeTurtleY(double turtleY)
{
this.turtleY = turtleY;
}
public double holeTurtleR()
{
return turtleR;
}
public void setzeTurtleR(double turtleR)
{
this.turtleR = turtleR;
}
public double holeTurtleTheta()
{
return turtleTheta;
}
public void setzeTurtleTheta(double turtleTheta)
{
this.turtleTheta = turtleTheta;
}
public void schritt()
{
turtleX += turtleR * Math.cos(turtleTheta*Math.PI/180);
turtleY += turtleR * Math.sin(turtleTheta*Math.PI/180);
}
public void wende(double winkel)
{
turtleTheta += winkel;
5
Programmieren in Java
}
}
a)
import java.awt.*;
import java.applet.*;
public class Vieleck extends Applet
{
// Turtle-Objekt
Turtle turtle;
// Abmessung des Fensters
Dimension d;
// Anzahl der Ecken
/* int eckenZahl = 12; */
int eckenZahl = 3;
public void init()
{
d = getSize();
// turtle = new Turtle(d.width/2-25,3*d.height/4,100,0);
turtle = new Turtle(d.width/4,3*d.height/4,200,0);
}
public void paint(Graphics g)
{
double xAlt;
double yAlt;
g.setColor(Color.yellow);
g.fillRect(0,0,d.width-1,d.height-1);
g.setColor(Color.black);
for (int i = 0; i < eckenZahl; i++)
{
xAlt = turtle.holeTurtleX();
yAlt = turtle.holeTurtleY();
turtle.schritt();
g.drawLine((int) xAlt, (int) yAlt,(int) turtle.holeTurtleX(),
(int) turtle.holeTurtleY());
turtle.wende(-360/eckenZahl);
}
}
}
b) import java.awt.*;
import java.applet.*;
public class Vieleck extends Applet
{
// Turtle-Objekt
Turtle turtle;
// Abmessung des Fensters
Dimension d;
// Anzahl der Ecken
/* int eckenZahl = 12; */
int eckenZahl = 3;
public void init()
{
d = getSize();
// turtle = new Turtle(d.width/2-25,3*d.height/4,100,0);
turtle = new Turtle(d.width/4,3*d.height/4,200,0);
}
public void paint(Graphics g)
{
double xAlt;
double yAlt;
6
Programmieren in Java
g.setColor(Color.yellow);
g.fillRect(0,0,d.width-1,d.height-1);
g.setColor(Color.black);
for (int i = 0; i < eckenZahl; i++)
{
xAlt = turtle.holeTurtleX();
yAlt = turtle.holeTurtleY();
turtle.schritt();
g.drawLine((int) xAlt, (int) yAlt,(int) turtle.holeTurtleX(),
(int) turtle.holeTurtleY());
turtle.wende(-360/eckenZahl);
}
}
}
<HTML>
<HEAD>
<TITLE>1. Turtle-Anwendung</TITLE>
</HEAD>
<BODY>
<APPLET CODE="Vieleck.class" WIDTH=320 HEIGHT=320>
</APPLET>
</BODY>
</HTML>
b)
import java.awt.*;
import java.applet.*;
public class Quadratrosette extends Applet
{
// Turtle-Objekt
Turtle turtle;
// Abmessung des Fensters
Dimension d;
public void init()
{
d = getSize();
turtle = new Turtle(d.width/2,d.height/2,100,0);
}
public void paint(Graphics g)
{
g.setColor(Color.yellow);
g.fillRect(0,0,d.width-1,d.height-1);
for (int i = 0; i < 36; i++)
{
zeichneQuadrat(g);
turtle.wende(10);
}
}
public void zeichneQuadrat(Graphics g)
{
g.setColor(Color.black);
for (int i = 0; i < 4; i++)
{
double xAlt = turtle.holeTurtleX();
double yAlt = turtle.holeTurtleY();
turtle.schritt();
g.drawLine((int) xAlt, (int) yAlt,(int) turtle.holeTurtleX(),
(int) turtle.holeTurtleY());
turtle.wende(90);
}
7
Programmieren in Java
}
}
<HTML>
<HEAD>
<TITLE>2. Turtle-Aufgabe</TITLE>
</HEAD>
<BODY>
<APPLET CODE="Quadratrosette.class" WIDTH=300 HEIGHT=300>
</APPLET>
</BODY>
</HTML>
c)
import java.awt.*;
import java.applet.*;
public class Aufg3c extends Applet
{
// Turtle-Objekt
Turtle turtle;
// Abmessung des Fensters
Dimension d;
// Seitenlaenge
int seitenlaenge = 20;
public void init()
{
d = getSize();
turtle = new Turtle(d.width/2,d.height/2,seitenlaenge,0);
}
public void paint(Graphics g)
{
double xAlt;
double yAlt;
g.setColor(Color.yellow);
g.fillRect(0,0,d.width-1,d.height-1);
g.setColor(Color.black);
for (int i = 0; i < 29; i++)
{
xAlt = turtle.holeTurtleX();
yAlt = turtle.holeTurtleY();
turtle.schritt();
g.drawLine((int) xAlt, (int) yAlt,(int) turtle.holeTurtleX(),
(int) turtle.holeTurtleY());
seitenlaenge +=10;
turtle.setzeTurtleR(seitenlaenge);
turtle.wende(90);
}
}
}
<HTML>
<HEAD>
<TITLE>3. Turtle-Anwendung</TITLE>
</HEAD>
<BODY>
<APPLET CODE="Aufg3c.class" WIDTH=320 HEIGHT=320>
</APPLET>
</BODY>
</HTML>
8
Herunterladen