Prímszámok kiírása Pascalban?
Ha x -től y -ig kellenek a prímszámok ennél jobb módszer nincs:
Az előző válaszban amit Válaszadó belinkelt, ott a Pascal kód is, mármint a szita algoritmusé. Gondolom az menni fog, hogy N értékét bekéred, hogy csak addig menjen, valamint fájl helyett képernyőre írod az eredményt.
Amit egyik előző válaszomban említettem, mármint a függvény hívogatását ciklusban, ezt megírtam.
program primszam;
uses Crt;
var
i, n : longint;
function prim_e (szam : longint):boolean;
var v, i : longint;
prime : boolean ;
begin
v := Trunc(Sqrt(szam)) + 1;
prime := (szam mod 2) <> 0;
i := 3;
while(prime) and (i <= v) do
begin
prime := (szam mod i) <> 0;
Inc(i, 2);
end;
prim_e := prime;
end;
begin
clrscr;
Write('Írja be "N" értékét : ');
ReadLn(n);
for i := 1 to n do
if prim_e(i) then Write(i:5);
ReadLn;
end.
Nagyon úgy tűnik, hogy hibás a szitázó algoritmus, legalábbis nekem végtelen ciklust eredményezett és semmit nem írt ki...
Tartok tőle, nemcsak az a hiba, hogy 2x deklarálták a "n"-t, egyszer konstansként aztán változóként...
Átírtam de hiába és az eredeti sem ad kimenetet, egyetlen számot se ír a fájlba...
program Eratoszthenesz_szitaja;
var n,i,j,p:longint;
a:array[1..10000] of boolean; {logikai tömböt hozunk létre}
Begin
Write('Kérem N értékét : ');
ReadLn(n);
a[1]:=false; {az a[1] hamisat vesz fel mivel az 1 nem prímszám}
for i:=2 to n do {feltöltjük a tömböt igaz értékekkel}
a[i]:=true;
p:=2;
while p*p <= n do begin
if a[p] then begin
{prímet találtunk, a többszöröseit kiszitáljuk}
j:=p*p;
while j <= n do begin
a[j]:=false;
j:=j+p;
end;
end;
end;
for i:=1 to n do {kiíratjuk azokat az elemeket amelyek igazak maradtak, vagyis prímszámok}
if a[i] then
write(i,' ');
End.
Valóban hibás az a Pascal kód, a while ciklusban kimaradt p növelése. Itt van javítva, kicsit pofásítva:
program Eratoszthenesz_szitaja;
{$APPTYPE CONSOLE} //Ez a Delphi miatt van
uses SysUtils; //Ez is
var n, i, j, p:longint;
a: array of boolean;
begin
Write('Kérem N értékét: ');
ReadLn(n);
SetLength(a, n + 1);
a[1] := False;
for i := 2 to n do a[i] := True;
p := 2;
while p * p <= n do
begin
if a[p] then
begin
j := p * p;
while j <= n do
begin
a[j] := False;
Inc(j, p);
end;
end;
Inc(p);
end;
for i := 1 to n do if a[i] then Write(i, ' ');
SetLength(a, 0);
ReadLn;
end.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!