In einem bestimmten Intervall alle Primzahlen ausgeben?
Hallo liebe Community ich habe folgendes Problem, ich habe die Aufgabe ein Programm zu schreiben, welches mir aus dem Intervall von 20-30 ausgibt wie viele Primzahlen dort enthalten sind und welche es sind. Anstatt mir aber, 2 als Anzahl und 23 und 29 als Primzahlen auszugeben, gibt mir das Programm 77 als Anzahl und dann ne Menge Zahlen aus. Ich verstehe jedoch nicht warum.
Quellcode:
procedure TForm1.StartClick(Sender: TObject);
var
A, B, C, ANFANGS_WERT, END_WERT, ANZAHL : Cardinal;
IST_PRIMZAHL : Boolean;
PRIM_FELD : array[1..100] of Cardinal;
begin
ANZAHL := 0;
ANFANGS_WERT := StrToInt(Eingabe1.Text);
END_WERT := StrToInt(Eingabe2.Text);
for A := ANFANGS_WERT to END_WERT do
begin
IST_PRIMZAHL := true;
for B := 2 to (A div 2) do
begin
C := A mod B;
if C = 0 then
begin
IST_PRIMZAHL := false;
end
else if IST_PRIMZAHL = true then
begin
Inc(ANZAHL);
PRIM_FELD[ANZAHL] := A
end
else IST_PRIMZAHL := true;
end;
end;
Ausgabe.items.add(' Primzahlen: ' + IntToStr(ANZAHL));
for A := 1 to ANZAHL do
begin
Ausgabe.Items.Add(IntToStr(PRIM_FELD[A]));
end;
end;
1 Antwort
Vom Fragesteller als hilfreich ausgezeichnet
Das
"begin
Inc(ANZAHL);
PRIM_FELD[ANZAHL] := A
end"
muss natürlich außerhalb der for-Schleife (für B) stehen. Außerdem sollte die Variable Ist_primzahl, wenn sie einmal auf false steht, erst für das nächte A wieder auf true gesetzt werden können, die Zeile "else IST_PRIMZAHL := true;" muss also auch weg. Dann könnte es gehen.