Algorithmen und Programmierung II
Übungsblatt 3 - Musterlösung
Aufgabe 1
static double sin(double x, double eps) {
if (x == 0.) return 0.;
double res = 0;
double pot = x;
double x2 = x*x;
double fak = 1;
double summand = x;
for (int i = 1; summand >= Math.abs(res*eps/100); i += 2) {
summand = pot/fak;
if ((i-1) % 4 == 0)
res += summand;
else
res -= summand;
pot *= x2;
fak *= (i+1) * (i+2);
}
return res;
}
Test mit verschiedenen Werten für
x/eps: Je kleiner x ist, desto schneller gehen die berechneten
Glieder
gegen 0. Obwohl der Näherungswert in die Abbruchbedingung eingeht
und im betrachteten Intervall auch die Näherungswerte mit x gegen
0 gehen, fallen die Glieder so stark, dass das Verfahren mit kleinerem
x schneller terminiert. Bei x=0.001 bleibt der berechnete
Näherungswert im Rahmen der Rechengenauigkeit schon ab 2
Interationsschritten konstant, bei x=0.1 ab ca. 5 (eps=10-8),
bei x=1 ab ca. 8 Schritten (eps=10-8) und bei x = pi/2 ab 10
Schritten (eps=10-10). x=0 stellt einen Sonderfall dar. Hier
ist der Näherungswert identisch mit dem tatsächlichen Wert
sin(x)=0.
Aufgabe 2
public static int show(int number, int base) {
int result = 0;
int power = 1;
while(number > 0) {
result += number % base * power;
number /= base;
power *= 10;
}
return result;
}
Aufgabe 3
static void zahlZuText(int zahl) {
switch(zahl) {
case 0: System.out.print("null"); break;
case 1: System.out.print("eins"); break;
case 11: System.out.print("elf"); break;
case 12: System.out.print("zwoelf"); break;
case 16: System.out.print("sechzehn"); break;
case 17: System.out.print("siebzehn"); break;
default:
if (zahl % 10 > 0) {
switch(zahl % 10) {
case 1: System.out.print("ein"); break;
case 2: System.out.print("zwei"); break;
case 3: System.out.print("drei"); break;
case 4: System.out.print("vier"); break;
case 5: System.out.print("fuenf"); break;
case 6: System.out.print("sechs"); break;
case 7: System.out.print("sieben"); break;
case 8: System.out.print("acht"); break;
case 9: System.out.print("neun"); break;
}
if (zahl / 10 > 1)
System.out.print("und");
}
switch(zahl / 10) {
case 1: System.out.print("zehn"); break;
case 2: System.out.print("zwanzig"); break;
case 3: System.out.print("dreissig"); break;
case 4: System.out.print("vierzig"); break;
case 5: System.out.print("fuenfzig"); break;
case 6: System.out.print("sechzig"); break;
case 7: System.out.print("siebzig"); break;
case 8: System.out.print("achtzig"); break;
case 9: System.out.print("neunzig"); break;
}
}
System.out.println();
}