Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Primzahlen erkennen
Mosh-Josh - So 26.02.06 13:31
Titel: Primzahlen erkennen
Da ich nächste Woche Klausur schreibe und wir erst seit wenigen Wochen mit Delphi 6.0 arbeiten, hat uns unser Lehrer ein Arbeitsblatt gegeben. Eine Aufgabe lautet: Erstelle eine Konsolenanwendung, die Primzahlen erkennt wenn du sie eingibst!
Ich habe ein bisschen herumprobiert, allerdings gibt die Konsole bei jeder ungeraden Zahl die Meldung "Primzahl" und bei jeder geraden Zahl "Keine Primzahl" aus. Kann mir jemand helfen?
Hier der Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var zahl,teiler:integer; primzahl:boolean;
begin primzahl:=true; teiler:=2; writeln('Bitte geben sie eine Zahl ein!'); readln(zahl); Repeat if zahl mod teiler = 0 then primzahl:=false; teiler:=teiler+1 until not primzahl or primzahl; if primzahl then writeln('Die Zahl ist eine Primzahl!'); if not primzahl then writeln('Die Zahl ist keine Primzahl!'); readln;
end. |
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetztModeriert von
Christian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 26.02.2006 um 13:36
MiChri - So 26.02.06 16:05
Hallo
in Zeile 12 steht bei dir
Delphi-Quelltext
1:
| until not primzahl or primzahl; |
Das ist natülich immer wahr. Besser wäre vielleicht
Delphi-Quelltext
1:
| until not primzahl or (teiler>=zahl); |
Gruß
Christian
PS: Optimierungen mit Wurzel oder gar Miller-Rabin lasse ich mal lieber aus
Tilo - So 26.02.06 21:43
statt
ginge auch:
DaRkFiRe - So 26.02.06 22:43
Ich werfe mal folgendes ein:
Sei v die zu prüfende Zahl
prim = wahr
Von i = 2 bis v/2:
Wenn (v % i = 0), dann: prim = falsch, Schleife abbrechen
GTA-Place - So 26.02.06 23:41
Es reicht schon bis sqrt(v); (Wurzel von v).
Hux - Mi 01.03.06 09:03
Hier mal eine Funktion aus dem Easy Delphi Helper, dann kannste es mit deinem Algorithmus vergleichen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| Function IsPrim(zahl : Integer): boolean; var i: integer; begin result := true; If zahl = 1 then begin result := false; exit; end; For i := 2 to (zahl div 2) do begin If ((zahl mod i) = 0) then begin result := false; exit; end; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!