Pascal: Priemgetallen berekenen

Status
Niet open voor verdere reacties.

wicherh

Gebruiker
Lid geworden
3 dec 2008
Berichten
188
Ik heb in Pascal een priemgetal bereken programma geschreven maar het werkt niet, de debugger zegt niks maar zodra ik het start en uitvoer typ ik hoeveel priemgetallen het moet berekenen in en dat crasht hij.
hier is mijn code:
Het is nog best wel basic is mijn 2e programma in pascal(eerste was Hello World :P)
Code:
program Priemcalc;
var
r: longint;
a: longint;
f: boolean;
i: longint;
j: longint;
k: real;
priemlist: array[1..1000] of longint;
begin
r := 1;
Writeln('How much priem to calculate?');
Readln(a);
priemlist[1] := 2;
for I := 1 to A do
begin
f:= false;

for j := 2 to round(sqrt(i))do
begin
k := I DIV priemlist[j];

If K = round(K) then
F := true;
end

if F <> true then
begin
Writeln(i);
priemlist[r] := i;
r := r + 1;
end;
end;
readln;
end.

Kan iemand dit probleem oplossen?
 
Uh...

Ik kan je wel een paar pointers geven:

* Gebruik variabele met een duidelijke naam, want nu is het niet te volgen ;) Dus: huidigGetal ipv i, bijvoorbeeld.
* Gebruiken indentatie zodat je kunt zien waar IF en FOR loops lopen, dus:
Code:
If ( a = 3 ) then
    print ( 'a is 3' );
else
    print ( 'a is niet 3' );
end
* Tijdens de eerste iteratie staat er:
for j := 2 to round(sqrt(i))do
en dat wordt dus
for j := 2 to 1 do

ik weet niet wat Pascal daarvan denkt, maar dat zou iets kunnen zijn?
 
* Tijdens de eerste iteratie staat er:
for j := 2 to round(sqrt(i))do
en dat wordt dus
for j := 2 to 1 do

ik weet niet wat Pascal daarvan denkt, maar dat zou iets kunnen zijn?

Hij wil priemgetallen controleren/genereren, dus aan jouw wijziging heeft hij niet zo veel.

Iets als onderstaande zou moeten werken:

Code:
bool test(long n)
{
  if(n <= 1) return false;

  long d = 2;
  while(d*d <= n)
    if(n % d++ == 0) return false;

  return true;
}
 
Mijn suggesties zijn heel handig om de code leesbaarder en makkelijker te debuggen te maken ;)

Dat is altijd handig, ook als het het huidige probleem niet oplost.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan