Programmiertechnik Übungen zu Klassen und

Werbung
Prof. Dr. Oliver Haase
Karl Martin Kern
Achim Bitzer
Programmiertechnik
Übungen zu Klassen und -methoden
Übung 1
Ein Verfahren, den größten gemeinsamen Teiler (ggT) zweier Zahlen a und b,
a <= b, zu bestimmen, besteht darin, für alle Zahlen zwischen 1 und a zu
testen, ob sie sowohl a als auch b teilen. Die größte solche Zahl ist der ggT
von a und b.
Schreiben Sie eine Java-Methode, die den ggT zweier positiver Zahlen nach
der oben beschriebenen Brute-Force-Methode berechnet.
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
Übung 2
Der Euklidische Algorithmus zur Berechnung des größten gemeinsamen
Teilers zweier Zahlen gründet sich auf die folgende Beobachtung:
ggT(a,b) = ggT(a %b, b)
Desweiteren ist zu beachten, dass
ggT(a,0) = a
und
ggT(a,b) = ggT(b,a)
Schreiben Sie basierend auf diesen Beobachtungen einen
rekursiven Algorithmus zur Berechnung des größten gemeinsamen
Teilers zweier beliebiger natürlicher Zahlen.
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
Übung 3
Bestimmen Sie die Ausgabe des folgenden Programms:
public
public class
class BooleanMethods
BooleanMethods {{
public
public static
static boolean
boolean test1(int
test1(int val)
val) {{
System.out.println("test1("
System.out.println("test1(" ++ val
val ++ ")");
")");
System.out.println("result:
"
+
(val
System.out.println("result: " + (val << 1));
1));
return
val
<
1;
return val < 1;
}}
public
public static
static boolean
boolean test2(int
test2(int val)
val) {{
System.out.println("test2("
System.out.println("test2(" ++ val
val ++ ")");
")");
System.out.println("result:
"
+
(val
System.out.println("result: " + (val << 2));
2));
return
val
<
2;
return val < 2;
}}
public
public static
static boolean
boolean test3(int
test3(int val)
val) {{
System.out.println("test3("
System.out.println("test3(" ++ val
val ++ ")");
")");
System.out.println("result:
"
+
(val
System.out.println("result: " + (val << 3));
3));
return
val
<
3;
return val < 3;
}}
public
public static
static void
void main(String
main(String args[])
args[]) {{
if(test1(0)
if(test1(0) &&
&& test2(2)
test2(2) &&
&& test3(2))
test3(2))
System.out.println("expression
System.out.println("expression is
is true");
true");
else
else
System.out.println("expression
is
Prof. Dr. Oliver
Haase, HTWG Konstanz
System.out.println("expression
is false");
false");
Karl
Martin Kern, Seitenbau GmbH
}
} Bitzer, Seitenbau GmbH
Achim
}
Übung 4
public
public class
class Signatur
Signatur {{
public
public static
static void
void hoppla(long
hoppla(long x,
x, double
double y,
y, double
double z)
z) {{
System.out.println("ldd");
System.out.println("ldd");
}}
public
public static
static void
void hoppla(long
hoppla(long x,
x, long
long y,
y, double
double z)
z) {{
System.out.println("lld");
System.out.println("lld");
}}
public
public static
static void
void hoppla(long
hoppla(long x,
x, long
long y,
y, long
long z)
z) {{
System.out.println("lll");
System.out.println("lll");
}}
public
public static
static void
void hoppla(double
hoppla(double x,
x, long
long y,
y, double
double z)
z) {{
System.out.println("dld");
System.out.println("dld");
}}
public
public static
static void
void main
main (String[]
(String[] args)
args) {{
long
long aa == 333;
333;
double
b
=
double b = 4.44;
4.44;
hoppla(a,a,a);
hoppla(a,a,a); //
// Aufruf
Aufruf 11
hoppla(b,b,b);
hoppla(b,b,b); //
// Aufruf
Aufruf 22
welche Aufrufe sind
hoppla(a,a,b);
hoppla(a,a,b); //
// Aufruf
Aufruf 33
hoppla(b,b,a);
zulässig, welche
hoppla(b,b,a); //
// Aufruf
Aufruf 44
hoppla(a,b,a);
//
Aufruf
5
hoppla(a,b,a); // Aufruf 5
Ausgaben erzeugen
hoppla(a,b,b);
//
Aufruf
6
hoppla(a,b,b); // Aufruf 6
hoppla(b,a,b);
hoppla(b,a,b); //
// Aufruf
Aufruf 77
hoppla(b,a,a);
// Aufruf 8
Prof. Dr. Oliver
Haase, HTWG Konstanz // Aufruf 8
hoppla(b,a,a);
Karl}Martin Kern, Seitenbau GmbH
}Bitzer, Seitenbau GmbH
Achim
}
sie?
Übung 5
Was ist falsch in den folgenden Programmzeilen?
public
public static
static void
void quadrat(double
quadrat(double x)
x) {{
return
return Math.pow(x,
Math.pow(x, 2);
2);
}}
double[][]
double[][] matrix3x3
matrix3x3 == {{ 1.0,
1.0, 2.0,
2.0, 3.0,
3.0,
4.0,
4.0, 5.0,
5.0, 6.0,
6.0,
7.0,
8.0,
9.0
7.0, 8.0, 9.0 };
};
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
Übung 6
Was ist das Problem mit den folgenden Methoden?
public
public static
static int
int komisch(int
komisch(int n)
n) {{
if
if (( nn ==
== 00 ))
return
return 1;
1;
else
else
return
return nn ** komisch(n-1)
komisch(n-1) ** komisch(n-2);
komisch(n-2);
}}
public
public static
static int
int sum(int[]
sum(int[] z)
z) {{
//
// berechnet
berechnet die
die Summe
Summe der
der Komponenten
Komponenten des
des Feldes
Feldes zz
int
int ss == 0,
0, ii == 0;
0;
while
while (( ii << z.length
z.length ))
ss == ss ++ z[++i];
z[++i];
return
s;
return s;
}}
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
Übung 7
Warum führt das folgenden Programmfragment zu einem Laufzeitfehler?
public
public static
static int
int kehrwertFakul(int
kehrwertFakul(int n)
n) {{
//
// liefert
liefert 1/n
1/n ** 1/
1/ (n-1)
(n-1) ** ...
... ** 1/3
1/3 ** 1/2
1/2
return
return 1/n
1/n ** kehrwertFakul(n-1);
kehrwertFakul(n-1);
}}
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
Zusatzübung
Schreiben Sie ein Java-Programm, das eine beliebige Anzahl von double–Werten
einliest und so in ein Feld abspeichert, dass gleiche Werte hintereinander angeordnet
sind und alle positive Zahlen vor allen negativen Zahlen stehen. Gehen Sie wie folgt vor:
●
●
●
Schreiben Sie eine Methode enter (mit Parametern d, k und dFeld), die den
double-Wert d vor der k-ten Komponente in das Feld einfügt und das dabei
entstehende (um eine Komponente verlängerte) Feld als Ergebnis zurückliefert. Ist k
gleich der Länge von dFeld, dann ist d nach der letzten Komponente des Feldes dFeld
einzufügen.
Schreiben Sie eine Methode position (mit Parametern d und dFeld), die zunächst
feststellt, ob der double-Wert d in dFeld bereits gespeichert ist. Wenn dies der Fall ist,
soll der Feldindex zurückgeliefert werden. Ist d noch nicht in dFeld enthalten, dann soll
für positive Werte d die Position 0 und für alle anderen Werte die Position n
zurückgeliefert werden, wobei n die Feldlänge ist.
Schreiben Sie eine main-Methode, die in einer Schleife double-Werte einliest, und
unter Verwendung von position und enter an der richtigen Stelle in ein Feld einfügt.
Die Schleife soll bei der Eingabe von 0 abgebrochen werden. Danach ist das Feld
auszugeben.
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
Herunterladen