Free pascal-ban ez a prímszámkereső program miért nem jó?
program Primszam;
uses crt;
const n=1000;
var a: array[1..n] of integer;
i,b,c,d,g,h,z: integer;
begin
clrscr;
b:=0;
c:=0;
g:=1;
h:=0;
z:=0;
for i:=1 to n do begin
b:=b+1;
c:=c+1;
a[i]:=b;
for d:= 1 to n do begin
h:=h+1;
if a[i]/g = h then
begin
z:=z+1;
if z=2 then
writeln(a[i]);
end;
end;
end;
readln;
end.
Na előszöris...
Változó előtt Var...
Te az 1..1000 tartományban szeretnél prímszámokat keresni. Ez rendben van. De ehhez fölösleges létrehoznod egy tömböt, aminek az n. eleme n lesz...
Valamint osztókat keresel 1-től (ami mindig meglesz) a vizsgált számig (a négyzetgyökéig elég lenne), beleértve a számot is, ami szintén meglesz, tehát mindig találsz db osztót -> semmit sem fogsz prímnek venni. Már csak azért sem, mert a z-t minden egyes vizsgálat előtt kéne nullázni (a b:=b+1 előtt/után).
Ez TP7-ben működik:
program Primszam;
uses crt;
const N=1000;
Var i,osztok, j: integer;
begin
clrscr;
for i:=2 to N do begin
osztok:=0;
for j:=1 to round(sqrt(i/2)) do begin
if (i/j) = int(i/j) then begin
osztok:=osztok+1;
end;
end;
if osztok<2 then begin
writeln(i,' primszam.');
end
else begin
writeln (i,' nem primszam');
end;
end;
readln;
end.
Végre valaki aki tudni is akar, nem csak kész megoldást kézhez kapni :).Copyzom angolul mert lusta vagyok lefordítani, ha nem érted szóljál és elmondom magyarul.
Round(x) = Round rounds X to the closest integer, which may be bigger or smaller than X. //egészre kerekít
Sqrt(x) = Sqrt returns the square root of its argument X, which must be positive. //gyököt von
Int(x) = Int returns the integer part of any Real X, as a Real. //valós számnak visszadja az egész részét
Amúgy itt egy lista az eljárásokkal : [link]
A Round() a paraméter egészrészét adja vissza, mégpedig egész típussal (integer). Az int() ugyanez, csak real-ként adja vissza az egészrészt. Azért használtam az egyik helyen a round()-ot, mert ott a vizsgálat másik oldalán egész szám van, és ha szigorú típuskövetéssel dolgozol (TP-ben legalábbis ki/bekapcsolható), akkor beszólna. Ahol az int() van, ott meg az i/j real lesz.
Az sqrt pedig a szám négyzetgyökét adja vissza (real).
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!