Kezdőoldal » Számítástechnika » Programozás » Free pascal-ban ez a prímszámk...

Free pascal-ban ez a prímszámkereső program miért nem jó?

Figyelt kérdés

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.


2010. aug. 10. 12:37
 1/5 anonim ***** válasza:

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.

2010. aug. 10. 13:14
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:
köszönöm a válaszod free pascalban is jó az a kód amit írtál viszont egy olyan válasznak jobban örülnék ami ez én kódomat javítaná, mert még sajnos nem tudom mi az a round(sqrt(i/2))és az int(i/j). Így végül is jó a feladat csak én nem értem meg ebből hogy hogy is működik. Szóval ha ki lehetne kerülni ezeket a round(sqrt())-t és az int()-et annak örülnék, vagy még jobb lenne ha valaki elmagyaráznák hogy azok a függvények mit is csinálnak.
2010. aug. 10. 13:34
 3/5 anonim ***** válasza:

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]

2010. aug. 10. 18:02
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:

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).

2010. aug. 10. 18:31
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:
Egyébként nekem nagy számoknál a négyzetgyök keresése nagyon lelassította, míg ha csak 2-vel osztottam akkor 2 milliárdnál nagyobb számmal is végzett 10 másodperc alatt.
2010. aug. 11. 09:03
Hasznos számodra ez a válasz?

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

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!