Kezdőoldal » Számítástechnika » Programozás » Programozás tantárgyból lenne...

Programozás tantárgyból lenne szükségem segítségre (Pascal). A feladat : döntsük el egy számról, hogy prím-e! Hogyan oldanátok meg? (Kiegészítések lent)

Figyelt kérdés

A program az eldöntés tételéhez tartozik, while ciklussal kéne megoldani, de valahogy nem látom át, hogy kéne működnie.


Gondolatmenetem: Addig növeljük az i értékét, amíg n szám osztva i-vel 0 maradékot eredményez (mod)


ha az i kisebb mint n szám, akkor van maradék, tehát nem osztható minden n-nél kisebb számmal maradék nélkül.


Ez szinte biztos hogy részben rossz.



Igény esetén forráskód részletet felrakok.


Minden segítséget előre köszönök!



2013. nov. 4. 18:46
1 2
 1/14 anonim ***** válasza:
Úgy a legegyszerűbb, ha valahonnan kiírod a prímszámokat.. mondjuk 100-ig vagy 1000-ig.. és beteszed őket. Majd ha ezek valamelyikével egyenlő lesz a beírt szám, akkor más ciklust ad le, mintha nem egyenlő.
2013. nov. 4. 18:54
Hasznos számodra ez a válasz?
 2/14 A kérdező kommentje:
Köszönöm! Az a gáz, hogy matematikai szempontból kell megoldani, tehát maradékos osztás, meg feltétellel lép ki a ciklusból, ilyenek, mert csak úgy érvényes... Nem szeretném mással megoldatni, csak tájékozódnék, hogy jó felé tapogatózok-e?
2013. nov. 4. 18:57
 3/14 anonim ***** válasza:
Értem.. mi annak idején úgy csináltuk, ahogy írtam. Bár nem pascalba, hanem Lazarusba. Program kódot sajnos csak Python-ban találtam.
2013. nov. 4. 19:05
Hasznos számodra ez a válasz?
 4/14 coopper ***** válasza:

Szia.


Az ossztási ciklust elég az N szám gyökéig futtatni csak (Rosszabb esetben a szám feléig).


Másold a forráskód azon részét ami rossz szerinted és meglátjuk mit tudunk összehozni. (igy maximum csak saját magunk által megirt kóddal tudnánk segiteni)


Üdv.

2013. nov. 4. 19:14
Hasznos számodra ez a válasz?
 5/14 anonim ***** válasza:

Elég a szám gyökéig vizygálnod.


Viszont egy sokkal jobb megoldás: eratoszthenész szitája.

2013. nov. 4. 19:32
Hasznos számodra ez a válasz?
 6/14 A kérdező kommentje:

Köszönöm a segítségeket eddig, amíg a gyökös dologgal próbálkozom, felrakom a jelen forráskódot:

_______________________________________


program eldontes3;

uses wincrt;

const n=5;

var a,s,i: integer;

r: real;



begin

writeln('Ez a program eldonti egy számrol, hogy prímszám-e');


write(' kérem a számot: ');

readln(a);


i:=1;

while (a mod i<>0) and (i<=a) do

begin

inc(i);

end;


if (i<a) and (i<0) then writeln('nem')

else writeln('prímszám');


end.


_____________________________________


Vannak nem használt változók, mert a keretet másik programból szedtem át. Ezek már csak próbálkozások voltak.

2013. nov. 4. 19:41
 7/14 coopper ***** válasza:

Szia.


Akkor nézzük, hogyan határozod meg azt, hogy a szám prim-e :


Elkezdi az ember a számot elosztani 2-vel, 3-mal, 5-tel, 7-tel, stb, stb. és ha szám nem osztható, akkor prim.

Tehát magyarul a szám osztóit kell nyilvántartani, és ha ez az érték 0 akkor a szám prim, elenkező esetben nem prim.



1. Vedd fel a osztás számlálót és addj neki kezdőértéket. (ez a változó lehet boolean tipusu is mivel ha a számnak már egy osztója van akkor nem prim)

2. Határozd meg a szám gyökét vagy felét. (ciklus vége)

3. Inditsd a ciklust de ne 1-ről, hanem eleve 2-ről a a 2.pontban meghatározott számig. A ciklus feltétele ha a szám osztóinak darab száma 0 (1. pontban felvett változó) és a ciklusszámláló kisebb egyenlő a 2. pontban meghatározott számnál.

A ciklusban végezd el a mod-os osztást és ha osztható akkor növeld az 1. pontban felvett változót (ami miatt ki is fog lépni a ciklusból - egy egyszerű if).

(Ha az 1. pontban boolean változótt vettel fel akkor itt if helyett csak egy egyszerű értékadás)


Kilépés után vizsgáld az 1. pontban felvett változót és annak alapján határozd meg azt, hogy prim-e. (0 vagy nem, igaz vagy hamis)


Sok sikert.

Üdv.

2013. nov. 4. 20:01
Hasznos számodra ez a válasz?
 8/14 SimkoL ***** válasza:

Csak hogy én is beleugassak :)


function prim_e(const n: Integer) : boolean;

var i: Integer;

begin

prim_e:= True;

for i:= 2 to Round(Sqrt(n)) do

if (n mod i) = 0 then prim_e:= False

end;

2013. nov. 4. 20:46
Hasznos számodra ez a válasz?
 9/14 coopper ***** válasza:

Üdv.


Nem rossz, csak nem hatékony.


Mivel ha n értéke egy viszonylag nagy szám, és még ráadásul páros is akkor elvégzi az összes osztást a szám gyökéig, pedig nem kellene neki csak egy osztást elvégezni - a 2-vel való osztást - és aztán kilépnie.


üdv.

2013. nov. 4. 20:55
Hasznos számodra ez a válasz?
 10/14 SimkoL ***** válasza:

Igazságod van :)


function prim_e(const n: Integer) : boolean;

var i: Integer;

begin

prim_e:= True;

if Odd(n) = False then

begin

for i:= 2 to Round(Sqrt(n)) do

if (n mod i) = 0 then prim_e:= False;

end;

end;

2013. nov. 4. 21:08
Hasznos számodra ez a válasz?
1 2

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!