Lazarus probléma

Fórumok

Most kezdtem egy Pascalt/Lazarus-t tanulni.
Egy olyan programocskát írok, ami kiírja az n-edik prímet (Lazarus-szal). Előtte megírtam a parancssoros verziót pascalban és c++ -ban is. Ha beírok egy számot, és a Számolj-ra kattintok, akkor tökéletesen működik. De ha utána beírok egy másik számot, és megint a Számoljra kattintok, akkor minden esetben 2 -t ír ki (Akár a 100. prímre is). Ezután, ha beírok egy számot, és megint a számolj-ra kattintok, akkor vagy kiír 2-t megint, és utána a többi próbálkozásnál már prímet ír ki, de nem az általam megadottodikat (Ezt hogy tudnám szebben megfogalmazni?:)), vagy (Ha jól néztem ez akkor történik, ha az első beírottnál kisebbet írok be) lenyomva marad a gomb, és csak dolgozik, kilépési kérésre nem reagál stb. (Talán a végtelen ciklsban marad? )

Mit rontottam el?

A forráskód szerintem lényeges része: (Ez fut le, ha a számolj-ra kattintok)

procedure TForm1.Button1Click(Sender: TObject);
begin
vegtelen := 5;
n := 1;
prime := 1;
text := Edit1.text;
Val(text, primk, primk);
while vegtelen = 5 DO
begin
n := n+1;
o := 1;
while o
begin
o := o+1;
if o = n then break;
m := n mod o;
if m = 0 then
begin
prime := 0;
break;
end
else
prime := 1;
end;

if prime = 1 then
prsz := prsz+1;
if primk = prsz then
begin
Str(n,text2);
Edit2.text := text2;
n := 1;
break;
prime := 0;
end;
end;
end;

Köszönöm: Zsolt

Hozzászólások

ezbiztosjo?
Val(text, primk, primk);

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Így első olvasásra: a prsz nevű változódnak nem adsz kezdőértéket.

Ne haragudj, ez így totál katyvasz.
Hol vannak a változódeklarációk?
Tán felvetted őket formváltozónak? Csak mert a metódus fejlécében nem közöltél változódeklarációt. Ha felvetted őket, akkor azok amíg a form létezik tartják az értéküket ergó oda vezethet amit leírsz. De ha felvetted őket, akkor az ilyesmiről gyorsan szokj le, mert objektumban csak olyan változókat tárolunk, amik logikailag oda tartoznak. Átmeneti munkaváltozókat javaslok minden metódusban deklarálni, és mindig adni kezdőértéket.
Ja, és indentáld a kódot, humán processzoroknak könnyebb úgy feldolgozni.
Ja, és használhatod a debuggert is watch-al, látni fogod step-enként hogy mi történik, és miről beszélek.

--
- Hogyan lehet tanulni? - Jól kell tudni kérdezni. - Hogyan lehet jól kérdezni? - Ahhoz sokat kell tudni...

Ajanlani tudom hogy tervezd is meg a programjaidat (pl Enterprise Architect) elore, ne utolag.