Kezdőoldal » Számítástechnika » Programozás » Prímszámok kiírása Pascalban?

Prímszámok kiírása Pascalban?

Figyelt kérdés
Nos a kérdés adott, addig eljutottam hogy a beirt számről megmondja h prim-e vagy nem de azt hogy tudom megcsinálni hogy 1 től pl 1000 ig elkezdi "keresni?

2015. aug. 8. 17:02
1 2 3
 21/26 tabaki ***** válasza:
Jó'van, már megint ernyedt vagyok egy kissé, még egy fontos: Figyeld meg, hogy SimkoL programja csak a szám négyzetgyökéig vizsgál, vajon miért?
2015. aug. 8. 23:58
Hasznos számodra ez a válasz?
 22/26 anonim ***** válasza:

Ha x -től y -ig kellenek a prímszámok ennél jobb módszer nincs:

[link]

2015. aug. 9. 00:25
Hasznos számodra ez a válasz?
 23/26 anonim ***** válasza:

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.

2015. aug. 9. 06:38
Hasznos számodra ez a válasz?
 24/26 anonim ***** válasza:

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.

2015. aug. 9. 07:08
Hasznos számodra ez a válasz?
 25/26 SimkoL ***** válasza:

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.

2015. aug. 9. 11:02
Hasznos számodra ez a válasz?
 26/26 A kérdező kommentje:
Köszönöm mindenkinek a válaszokat! :D
2015. aug. 9. 11:57
1 2 3

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!