Arbeitsblatt 1.12.2011 Aufgabe 1: Wachstum Auf einem Schiff befinden sich 1000 Passagiere. Einer von ihnen wird von einer ansteckenden, langwierigen Krankheit befallen. Durch Ansteckung werden immer mehr Passagiere krank. Nennen wir K die Anzahl der Kranken und G die Anzahl der Gesunden, so gilt K + G = 1000. Der Zuwachs an Kranken hängt von der Anzahl der Begegnungen zwischen Kranken und Gesunden ab. Jeder Gesunde kann K Kranken begegnen, beim Frühstück, beim Mittagessen, in den Gängen des Schiffs usw.. Da es G Gesunde gibt, sind insgesamt K * G Begegnungen möglich. Wir machen daher den Ansatz, dass der Zuwachs an Kranken von dem Produkt K * G abhängt. Nicht jede Begegnung führt zu einer Ansteckung. Daher schreiben wir: ZUWACHS := W * K * G, dabei ist W der Ansteckungsfaktor. Was bedeutet W= 1 (0.5, 0.001, 0)? Im Laufe einer Woche finden durchschnittlich alle G * K Begegnungen statt, und der Ansteckungsfaktor W ist erfahrungsgemäß W = 0.0009. Stellen Sie ein Programm auf und bestimmen Sie, wie viele Passagiere nach 1,2, .. 15 Wochen krank sein werden. Aufgabe 2: Zahlenbewertung Es ist für einen positiven ganzzzahligen Zahlenwert zu bestimmen, • ob die Zahl eine gerade oder ungerade Zahl ist, • ob die ganze Zahl eine Primzahl ist und • ob die Zahl eine Fibonacci-Zahl ist. ( Eine Primzahl ist eine positive ganze Zahl, die ohne Rest nur durch sich selbst oder 1 teilbar ist. Eine Zahl ist dann Primzahl, wenn die Restwerte von n/2, n/3, n/4, ... , n/n-1 von 0 verschieden sind.) (Fibonacci-Zahlen sind Bestandteile einer Zahlenfolge, bei der jede Zahl gleich der Summe der vorhergehenden zwei Zahlen ist. Fi = Fi-1 + Fi-2 ) Ergänzen Sie die Methoden public boolean istGerade(), public boolean istPrimzahl(), public boolean istFibonacci() an den angegebenen Stellen. public class ZahlenTest { private int n; public ZahlenTest(int value){ n = value; } public boolean istFibonacci() { // hier Quelltext einfügen } public boolean istPrimzahl() { // hier Quelltext einfügen } public boolean istGerade() { // hier Quelltext einfügen } } Aufgabe 3: Wachstum Bei einer Population von Drosophila-Fliegen, die in einem Glasbehälter untergebracht und mit hinreichend Nahrung versorgt wurden, stellt man eine Entwicklung der Individuenzahl fest, die sich nach der Rekursionsformel mit n = 0, 1, 2, ..., r = 0.8; und s = 0.008 näherungsweise berechnen. Entwickeln Sie ein Simulationsprogramm, mit dem die Veränderungen der Individuenanzahl in Abhängigkeit von den Parametern r und s verfolgt werden können. Geben Sie die Entwicklung der Population nach jeder Generation aus. Beenden Sie die Simulation, wenn keine Veränderung der Anzahl der Fliegen mehr zu erkennen ist, jedoch maximal nach 10000 Generationen. Aufgabe 4: Reihenentwicklung Berechnen Sie die Zahl e durch eine Reihenentwicklung. Die iterative Berechnung erfolgt nach folgender Formel: Die geforderte Genauigkeit für die Berechnung ist zu übergeben. Die Entwicklung und die Anzahl der Iterationsschritte sind auszugeben. Das Ergebnis ist zurückzugeben. Aufgabe 5: Teilbarkeit Analysieren Sie eine eingegebene Zahl auf die Teilbarkeit durch ihre Ziffern. Es ist eine ganze Zahl einzulesen. Für alle Ziffern dieser Zahl ist festzustellen, ob die Zahl durch diese Ziffern teilbar ist. Für jede Ziffer ist das Ergebnis auf der Konsole auszugeben. Die Anzahl der Teiler ist als Rückgabewert zu übergeben. Aufgabe 6: Fehler finden Ändern Sie die unten stehende Auftragsvorlage so ab, dass das Programm fehlerfrei läuft und vom System akzeptiert wird. Beachten Sie dabei neben den Syntaxfehlern auch logische Fehler (also Fehler, die zwar ein Ergebnis liefern, welches aber falsch ist). Zum Testen müssen Sie nach Eingabe der Änderungen in das Fenster auf den "Einreichen"-Button klicken. Aufgabenstellung Zwei verschiedene natürliche Zahlen a und b heißen befreundet, wenn die Summe der von a verschiedenen Teiler von a gleich b ist und die Summe der von b verschiedenen Teiler von b gleich a ist. Ein Beispiel für ein solches befreundetes Zahlenpaar ist (a,b) = (220,284), denn a = 220 hat die Teiler 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 und es gilt 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284 = b Weiterhin hat b=284 die Teiler 1, 2, 4, 71, 142 und es gilt 1 + 2 + 4 + 71 + 142 = 220 = a Es soll ein Java-Programm geschrieben werden, das jeweils zwei Zahlen einliest, entscheidet, ob diese miteinander befreundet sind und entsprechend true oder false zurückgibt. /** * Klasse Zahlenfreunde zur Ermittlung befreundeter Zahlen * * @author Rita * @version 22.11.11 */ public class Zahlenfreunde { /** * Diese Methode findet heraus, ob zwei Zahlen befreundet sind * * @param a, b Zahlen, die ueberprueft werden sollen * @return wahr oder falsch */ public String befreundeteZahlenF(int a, int b) { boolean ergebnis; int teilera = 0, teilerb = 0; for (int i = 1; i <= a/2; i++) //Durchsuchen auf moegliche Teiler { if (a % i == 0) teilera = teilera + i; } if (teilera == b) { for (int i = 1; i <= b; i++) //Durchsuchen auf moegliche Teiler { if (b % i == 0) teilerb = teilerb + i; } if (teilerb == a) ergebnis = true; return ergebnis; } } }