Test 1: Programmierung I – Circle-Klasse und Quersumme
Test 1: Programmierung I
Datum: Montag, 29. September 2008
Name: ____________________________________________________________
Abschnitt A: Die Klasse Circle
Angesichts der Circle-Klasse, die mit den folgenden Attributen und Methoden bereits implementiert wurde, arbeiten Sie mit den Signaturen der einzelnen Verfahren wie folgt:
Definition der Klasse Circle
private int radius; private int x, y;public Circle(int x, int y, int radius)public Circle() // mit Nullen füllen ...static double area(Circle c)public String toString()public int getX()public int getY()public int getRadius()void setX(int x1)void setY(int y1)void setRadius(int r1)void wachsen(int anteil)
Aufgabenstellung
Nutzen Sie die vorherige Klasse für folgende Lösung:
- Erstellen Sie zwei Objekte vom Typ
Circle:c1mit dem ersten Konstruktor und Zufallswerten zwischen 1 und 10, sowiec2mit dem zweiten Konstruktor. - Berechnen Sie die Fläche von
c1mit einer statischen Methode. - Berechnen Sie den Umfang von
c1(Hinweis: Der Umfang ist 2 * 3,14159 * Radius). - Geben Sie die Attribute von
c1auf dem Bildschirm aus. - Bearbeiten Sie den Radius von
c1, indem ein von der Tastatur gelesener Wert addiert wird. - Erweitern Sie den Radius von
c1um 10 % mit der wachsen-Methode. - Stellen Sie die grafischen Objekte mit ihren Attributen und deren Änderungen dar. Berücksichtigen Sie dabei Grafik-Variablen und Werte sowie die Bildschirmausgabe mit den entsprechenden Zeilenumbrüchen.
Abschnitt B: Quersumme einer Zahl
Es soll ein versteckter Wert in einer fünfstelligen Nummer gefunden werden, die von der Tastatur gelesen wird. Dieser Wert ist die Summe aller ihrer Ziffern. Beschreiben Sie die Ein- und Ausgaben anhand eines schrittweisen numerischen Beispiels und schreiben Sie anschließend den Code für den verborgenen Betrag.
Beispiele:
13512 -> Quersumme -> 12
11111 -> Quersumme -> 5
Code-Implementierung (Teil A)
Klasse Programm (public static void main() throws Exception {
Scanner lesen = new Scanner(System.in);
Circle c1 = new Circle((int)(Math.random() * 10), (int)(Math.random() * 10), (int)(Math.random() * 10)); // 3 Punkte
Circle c2 = new Circle(); // 1 Punkt
double flaeche, umfang;
int tastatur;
flaeche = Circle.area(c1); // 3 Punkte
umfang = 2 * 3.14159 * c1.getRadius(); // 3 Punkte
System.out.println(c1); // 1 Punkt
System.out.println("Wert eingeben, um Radius zu addieren:");
tastatur = lesen.nextInt(); // 1 Punkt
c1.setRadius(c1.getRadius() + tastatur); // 4 Punkte
c1.wachsen(10); // 2 Punkte
})
Wertetabelle / Trace
c1 | c2 | Tastatur | Bereich (Fläche) | Perimeter (Umfang)
x = x1 | x = 0 | Wert | 3,14159 * r1 * r1 | 2 * 3,14159 * r1
y = y1 | y = 0 | (0,4) | (0,4) | (0,4)
r1 = 0,4 | Radius = 0 | (0,4)
r1 + Wert (0,3)
(r1 * Wert) * 0,1 (0,3) | Insgesamt: 3,0 Punkte
Bildschirmausgabe
x = x1, y = y1, Radius = r1"Eingegebener Wert zur Radius-Erhöhung ="
Wert (0,4 Punkte). Sum-Sonde 1 (21 Punkte)
Lösung Teil B
Eingabe: fünfstellige Ganzzahl (1 Punkt)
Ausgabe: eine ganze Zahl (1 Punkt)
Numerischer Lösungsweg
sum = 13512 % 10 // sum = 2 (0,2)
n = 13512 / 10 // 1351 (0,33)
sum = sum + 1351 % 10 // sum = 2 + 1 = 3 (0,2)
n = 1351 / 10 // 135 (0,33)
sum = sum + 135 % 10 // sum = 3 + 5 = 8 (0,2)
n = 135 / 10 // 13 (0,33)
sum = sum + 13 % 10 // sum = 11 (0,2)
sum = sum + 13 / 10 // Summe = 12 (0,2)
sum = 1
Code-Implementierung (Teil B)
Klasse Programm2 (0,2)
public static void main() throws Exception (0,2)
{
Scanner lesen = new Scanner(System.in); (0,2)
int sum = 0, n; (0,4)
System.out.println("Wert eingeben");
n = lesen.nextInt(); // Beispiel: 13512 (1)
sum = n % 10; (1)
n = n / 10; (1)
sum = sum + n % 10; (1)
n = n / 10; // 135 (1)
sum = sum + n % 10; (1)
n = n / 10; (1)
sum = sum + n % 10; (1)
sum = sum + n / 10; (1 + sum = 2)
System.out.println("Summe = " + sum);
}
1 ... 13 PROG2 18