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
- 4867 megtekintés
Hozzászólások
ezbiztosjo?
Val(text, primk, primk);
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Így első olvasásra: a prsz nevű változódnak nem adsz kezdőértéket.
- A hozzászóláshoz be kell jelentkezni
Ez volt a gond, köszi.
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
Ajanlani tudom hogy tervezd is meg a programjaidat (pl Enterprise Architect) elore, ne utolag.
- A hozzászóláshoz be kell jelentkezni
Igen, ez jó ötlet :):):):) Ehhez soha nem volt kedvem, inkább rögtön bele a közepébe, és utána jönnek a hibák :)
- A hozzászóláshoz be kell jelentkezni