Prüfen ob Zahl Primzahl - Struktogramm?
Hallo,
ich wollte mal fragen ob mein Struktogramm so korrekt ist:
Meine Logik:
Eine Zahl ist ja eine PZ wenn sie nur durch sich selbst und 1 teilbar ist. Also wende ich die modulo funktion an und teste alle zahlen die zwischen 2 und der hälfte der Zahl liegen, ob ein Rest von 0 rauskommt. Kommt ein Rest von 0 raus heißt das, dass die Zahl keine Primzahl ist, da sie ja durch mind. eine weitere Zahl ausser 1 und sich selbst teilbar ist. Habe ich nun das i bis Zahl/2 hochgezählt, kann es sich bei der Zahl nurnoch um eine PZ handeln.
MFG
3 Antworten
- Du musst nicht bis zur Hälfte von x prüfen, sondern nur bis zur (aufgerundeten) Wurzel.
- Du musst keine while-Schleife verwenden, sondern kannst eine for-Schleife verwenden. Du kennst Start- und Endbedingung sowie Inkrement.
- "while" und "break" sind sprachspezifische Schlüsselworte ("for" übrigens auch). Die würde ich aus einem Struktogram rauslassen.
- anstelle der Prüfung auf i < x/2 am Ende würde ich eine boolsche Variable "isPrime" mitschleppen, die anfangs true ist, bei Bedarf im entsprechenden Zweig auf "false" gesetzt und dann am Ende ausgewertet wird. So hast du auch das EVA-Prinzip sauberer eingehalten und hast nicht eine Ausgabe an einer Stelle, an der eigentlich noch die Verarbeitung ist.
- Dein Programm würde feststellen, dass 1 eine Primzahl ist. Das ist ein Fehler.
Ich würde sagen, dein Struktogram ist größtenteils nicht falsch, aber noch ein bisschen verbesserungswürdig. Manche Sache sieht man auch erst mit etwas Erfahrung und/oder wenn man es selbst programmiert.
Danke für deine Erläuterungen. Irgendwie finde ich while-Schleifen besser als for Schleifen^^. Auf das mit der aufgerundeten Wurzel wäre ich von selbst nicht gekommen - Danke!
Kann man so machen. Eine kleine Optimierung wäre noch möglich, denn wenn eine Zahl nicht durch zwei teilbar ist, braucht man die geraden Zahlen gar nicht mehr weiter zu testen.
Ich bin kein Mathematiker, aber ich glaube¹⁾, dass das richtig ist. Denk dran, dass grade Zahlen auch keine Primzahl sind (ab 3 oder höher), verdoppelt auch noch mal die Geschwindigkeit i+2 zu nehmen statt i+1.
______________
¹⁾ Mathe: Sechs; Religion: Sehr gut! → "Ich glaube die Antwort ist..."