Modyfikacja programu w delphi(2 pytania)

0

{Użytkownik do pola edycyjnego ma wpisa liczbe n zdefiniuj
odpowiednią funkcje i uzywając jej wypisz w listboxie
wszystkie te liczby pierwsze mniejsze od N(grupujac je po
20 w listboxie)foofooktórych suma cyfr jest liczbą pierwsza.) }

// nie wiem jak zrobić podkreśloną część polecenia

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

    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);
Const CoIleEnter=20;

Var I, Q: Integer;
     x: Integer;
     pom:Integer;
Begin
 x:=StrToInt(Edit1.Text);
 I := 0;
 Q := 1;
   For pom:=1 to x-1 do // dlaczego trzeba zrobi x-1(Jesli robiłem do x to wypisywało mi 1 liczbe za dużo

 Begin
  Inc(Q);
  if Pierwsza(Q) Then
  Begin
   Inc(I);
   ListBox1.Items.Add(IntToStr(Q));
   if (I Mod CoIleEnter) = 0 Then
    ListBox1.Items.Add('');
  End;
 End;
End;
end.

dwa pytania

  1. Jak napisac poprawnie ten program(treść w komentarzu na górze)
    2)dlaczego trzeba zrobić x-1 miejsce odznaczone komentarzem
    Proszę o odpowiedz.
0

Pomijając bałaganiarskie formatowanie, a właściwie jego brak, program dziala chyba tak, jak sobie to
założyłeś, zobacz jak to może wyglądać bardziej elegancko sformatowane po ludzku w moim postcie,
pod adresem: Wypisywanie liczb w listboxie jeżeli zaś chodzi o
pętle for to na przykład pętla od 1 do 3 wykona się do 3 włącznie, także nie wiem dlaczego dajesz w
kodzie tam - 1. Na pewno działający kod z pętlą for ... to, zamieścilem poniżej. I podejrzewam, że z
pewnością sam być wykombinował taki kod, tylko trzeba trochę chęci, lecz znowu "wygrało" lenistwo.

//...
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;

procedure TForm1.Button1Click(Sender : TObject);
const
  CoIleEnter = 20;
var
  I, X, Licznik, Wiersz : integer;
begin
  Wiersz := 0;
  Licznik := 0;
  ListBox1.Items.Clear;
  ListBox1.Items.Add('');
  X := StrToInt(Edit1.Text);
  for I := 1 to X do
  begin
    if Pierwsza(I) then
    begin
      Licznik := Licznik + 1;
      ListBox1.Items[Wiersz] := ListBox1.Items[Wiersz] + IntToStr(I) + ' ';
      if Licznik = CoIleEnter then
      begin
        Licznik := 0;
        Wiersz := Wiersz + 1;
        ListBox1.Items.Add('');
      end;
    end;
  end;
end;

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