Egyszerű Pascal program; valaki meg tudná nézni, hol hibáztam?
A prímszámokat kell kiíratnom n-ig egy régi könyv folyamatábrája alapján. Jelenleg a prímszámok közé ír pár nem prímet is. Így néz ki most:
begin
write('Melyik termeszetes szamig irjuk ki a primeket? ');
readln(n);
write('2 3 ');
p:=5;
q:=3;
for k:=3 to n do begin
repeat p:=p+2;
until(p/q<>int(p/q)) and (p<=n);
repeat q:=q+2;
until sqr(q)>p;
write(p, ' ');
end;
readln;
end.
Az alapjának ennek kéne maradni, hogy az ábrára hasonlítson. Minden segítséget nagyon köszönök!:)
A saját verzióm:
function prim_e(n: QWord): Boolean;
var v, j: QWord;
prime: Boolean;
begin
Result := False;
if not Odd(n) then Exit;
prime := True;
v := Round(Sqrt(n));
j := 3;
while (prime) and (j <= v) do
begin
prime := (n mod j) <> 0;
Inc(j, 2);
end;
Result := prime;
end;
"Az a 'break;' de bántja a szemem :)"
Akkor használj szemüveget. ;)
Ha megtaláljuk a szám osztóját az azt megelőző számok között, akkor felesleges továbbmenni, így a belső ciklusból kiléphetünk.
"Eleve úgy írunk feltételt, hogy ne kellessen."
* Sóhajt *
Kérdező meg közben köddé vált? Vagy még mindig a folyamatábrát másolgatja?
Régi könyvekről szólván: Egy szúette, megfakult weboldalon találtam egy vénséges ó-cé nyelvű varázsigét, amelyet itt most megpróbálok a dallamosabb pascal nyelven, Kérdező változóneveivel interpretálni:
var
n, p, q : qword;
k : byte;
begin
write('Melyik termeszetes szamig irjuk ki a primeket? ');
readln(n);
for p := 1 to n do
begin
k := 0;
for q := 1 to n do
if p mod q = 0 then Inc(k);
if k = 2 then Write(p, ' ');
end;
readln;
end.
Lehet, hogy nem egészen korrekt a fordítás, de néhány próba alapján, mintha működne. Azért találtam érdekesnek, mert első benyomásra a kérdés programja is valami trükkös megoldás nem egészen sikerült kódba öntésének tűnik.
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!