Der Algorithmus wird in einer Schleife realisiert, welche beendet wird, wenn die eingelesene Zahl (number) negativ ist. Die zwei größten Werte werden in Variablen (biggest und secondBiggest) gespeichert. In der Schleife wird überprüft ob die eingelesene Zahl über einem der Werte in den Variablen liegt. Eine weitere Variable (counter) wird zur Überprüfung, wie viele Zahlen eingelesen wurden, genutzt. Nach Beendigung der Schleife werden die Werte in den Variablen ausgegeben.
Die stilisierte Prosa finde ich zur Darstellung von Algorithmen relativ ungeeignet.
Schleifen- und Bedingungs-Strukturen können sehr schlecht dargestellt werden.
Der Leser muss den gesamten Text eingehend studieren und die versch. Schritte
bildlich zusammensetzen, um sich selbst ein vernünftiges Bild von der Struktur
schaffen zu können.
Schleifen- und Bedingungsstrukturen können in Abaufdiagrammen und Struktogrammen
wesentlich besser dargestellt werden. Bei vielen Bedingungen würde ich
das Ablaufdiagramm dem Struktogramm vorzuziehen, da beim Struktogramm der Platzbedarf
sehr groß wird.
Generell finde ich das Ablaufdiagramm geeigneter, da man flexibler bei der Darstellung
als beim Struktogramm ist.
Um die Primfaktoren und deren Häufigkeit für eine bestimmte ganze Zahl zu bestimmen muss geprüft werden, welche Primzahlen beginnend bei 2 Divisoren der geg. Zahl sind, wobei nach jeder Prüfung durch den gefundenen Divisor dividiert wird und die sich ergebende Zahl für die nächste Prüfung wieder beginnend bei 2 herangezogen wird. Dabei muss natürlich gemerkt werden, wie oft durch die entspr. Primzahl dividiert wird, dies ergibt die Häufigkeit.
Für das Einlesen der Zahlen wird die von Softwareentwicklung I zur Verfügung gestellte Klasse IO verwendet. Die Methode IO.readInt() gibt bei einer ungültigen Eingabe den Wert 0 zurück und liest keine Zahlen mehr ein, daher wird dies als Abbruchkriterium definiert.
/** * * Softwareentwicklung I - Exercise 1/2. * Finding prime factors of a number. * * @author Daniel Brunthaler * @version 1.0 * */ public class PrimeFactors { /** * Finds the prime factors of a number and puts it in a significant String. * * @param number which should be checked. * @return the prime factors of the number as a String in the format * p1^f1 * p2^f2 * p3^f3 * ... * where p is the prime number and f the frequency */ static String primeFactors(int number) { int factor_count; // frequency of prime factor String strFactors = ""; // prime factors and frequency in a String for (int factor = 2;factor <= number;factor++) { // start with prime factor = 2 and increase it until > number for (factor_count = 0;number % factor == 0;factor_count++) { number = number / factor; } if (factor_count > 0) { if (strFactors.length() > 0) { strFactors = strFactors + " * "; } strFactors = strFactors + factor + "^" + factor_count; } } if (strFactors.length() == 0) { return "number not valid!"; } else { return strFactors; } } public static void main(String[] args) { int number = IO.readInt(); while (number != 0) { System.out.println(primeFactors(number)); number = IO.readInt(); } } }