modyfikacja programu Delphi/Pascal

0

program który grupuje liczby pierwsze po 20 w wierszach wypisuje je w listboxie.

function pierwsza (arg:integer):Boolean;
var I :Integer;
begin
pierwsza :=true;
for I:=2 to round(sqrt(arg)) do
if(arg mod I)=0 then pierwsza := false
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
S : string;
k,l,m : Integer;

begin
m := 0;
S := '';
k:=StrToInt(Edit1.Text);

for l:=2 to k do
begin
if pierwsza(l) then
begin
m:=m+1;
s:=s+inttostr(l)+' ';
end;
if l=k then listbox1.Items.Add(s);
if (m mod 20)=0 then
begin
listbox1.Items.add(s);
s:=' ';
end;
end;
end;
end.

mam mały problem z tym programem gdy jest do wypisania więcej niz 20 liczb program powinien przeskakiwac do kolejnej linijki i dalej je wypisywać
prawie tak działa tylko dopisuje niepotrzebna spacje nie wiem jak ją zlikwidować.
Proszę o Pomoc.

0
function pierwsza (arg:integer):Boolean;
var I :Integer;
begin
   pierwsza :=true;
   for I:=2 to round(sqrt(arg)) do
      if(arg mod I)=0 then pierwsza := false
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  S : string;
  k,l,m : Integer;

begin
  m := 0;
  S := '';
  k:=StrToInt(Edit1.Text);

 for l:=2 to k do
  begin
   if pierwsza(l) then
      begin
       m:=m+1;
       s:=s+inttostr(l)+' ';
      end;
       if l=k then listbox1.Items.Add(s);
        if (m mod 20)=0 then
       begin
       listbox1.Items.add(s);
       s:=''; //<---tutaj spacje dodawałeś
       end;
     end;
   end;
end.

pozdrawiam
paweld

0

Spoko Dzięki ale jeszcze chodzi mi o to aby nie było "entera" pomiedzy tymi wierszami...

0

Mam dejavu, był przecież taki post calkiem niedawno. Podałem tam gotowe rozwiązanie. Wiem, że tutaj
wyszukiwarka aktualnie jest tragiczna, ale jak nie chce się Tobie samodzielnie kombinować, to poszukaj.

0

Aj Rafale, trzymasz się...
Pierwszy topic o tym programie '2011-01-07 21:41'.
A teraz czwarty...Ale w którymś tam dostałeś ten poprawny kod.
Ten, co masz teraz wygląda jak zlepka tamtych.

0

Dobra masz, daje ostatni raz, jak znowu będzie post o wypisywaniu po 20 liczb w wierszu ListBoxa to
sobie szukajcie aż znajdziecie lenie uparte.. Daje in english, bo po polsku do niektórych nie dociera.

function IsFirstNumber(Arg : integer) : boolean;
var
  I : Integer;
begin
  IsFirstNumber := True;
  for I := 2 to Round(Sqrt(Arg)) do
    if (Arg mod I) = 0 then
      IsFirstNumber := False;
end;

procedure TForm1.Button1Click(Sender : TObject);
const
  HowManyInRow = 20;
var
  I, X, Row, Counter : integer;
begin
  Row := 0;
  Counter := 0;
  ListBox1.Items.Clear;
  X := StrToInt(Edit1.Text);
  if X > 0 then
    ListBox1.Items.Add('');
  for I := 1 to X do
  begin
    if IsFirstNumber(I) = True then
    begin
      COunter := Counter + 1;
      ListBox1.Items[Row] := ListBox1.Items[Row] + IntToStr(I) + ' ';
    end;
    if Counter = HowManyInRow then
    begin
      COunter := 0;
      Row := Row + 1;
      ListBox1.Items.Add('');
    end;
  end;
end;
0

wiem że już odpowiadałeś ale czy nie mozna poprawić tego mojego programu(chyba że się nie da???) było by to dla mnie prostsze do zrozumienia ponieważ chce to zrozumien a nie uczyc sie na pamieć...

0

rafal3290: już kiedyś komentowałem każdą linię własnego kodu, to mordęga - ciężko tłumaczyć takie banały, napisz
czego konkretnie nie rozumiesz. Zmienne dałem z angielska, ale nazwane przystępnie, Wiadomo, że Row = Wiersz,
Counter = Licznik. Zwykła pętla for, dwa warunki if. Nic skomplikowanego. Jak nie wiesz jak coś działa to wpisujesz
w google, na przykład: delphi StrToInt ...i dzięki temu znajdziesz dodatkowe informacje na temat danego elementu.

0

Po pierwsze nie rozumiem dlaczego program nie zapamietuje poprzednich wyników chciałnym aby wypisywał w następnej linijce.

0

To musisz się pozbyć Listbox1.Items.Clear oraz dorobić warunek odpowiedni żeby istawialo Row na := 0 jeżeli Items.Count = 0
albo na Items.Count - 1 jeżeli jest większa niż 0. Ogolnie to powinieneś poczytac podstawy i spróbować saodzielnie coś zrobić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1