Prímszámok

 

         Írjunk programot, amely egy táblázatban (minél nagyobb értékig, de a tábla teljes terjedelmében látható legyen a képernyőn) megjeleníti a számokat, majd végignézi, hogy melyek a prímszámok, ezeket feketével írja ki, míg a nem prímeket ettől eléggé eltérő színnel. A táblázat egy StringGrid legyen, melynek a rögzített cellái ne legyenek láthatóak. A program 1540-ig (35*44) keresi meg a prímszámokat. A programon csak a rács oszlopai illetve sorai számának átírásával ettől különböző értékig történik a keresés (akár az értékek növelhetők is, csak akkor nem látszik minden szám egyszerre a képernyőn).

 

         A program futtatási képe:

 

 

A program listája:

 

unit UPrim;

interface

uses
  Windows, MessagesSysUtilsVariantsClasses,

  GraphicsControlsFormsDialogsGridsStdCtrls;

type
  TfmPrim = class(TForm)
    sgTablaTStringGrid;
    lbPrimTLabel;
    btKilepesTButton;
    procedure FormCreate(SenderTObject);
    procedure btKilepesClick(SenderTObject);
    procedure sgTablaDrawCell(SenderTObject; Col, Row: Integer;
      RectTRectStateTGridDrawState);
  private
    Private declarations }
  public
    Public declarations }
  end;

var
  fmPrimTfmPrim;

implementation

{$R *.dfm}

procedure TfmPrim.btKilepesClick(SenderTObject);
begin
  Close;
end;

Function Prime(S: Word): Boolean;
Var J: Word;
Begin
  Prime:= FalseIf S In [0,1] Then ExitPrime:= True;
  For J:= 2 To Trunc(Sqrt(S)) Do If (S Mod J)=0 Then
  Begin Prime:= FalseBreak End;
End;

procedure TfmPrim.FormCreate(SenderTObject);
Var I, J: Word;
begin
  With sgTabla Do
  Begin
    ColWidths[0]:= 0;
    RowHeights[0]:= 0;
    For I:= 0 To RowCount-2 Do For J:= 1 To ColCount-1 Do
    Cells[J,I+1]:= IntToStr((ColCount-1)*I+J);
  End;
end;

procedure TfmPrim.sgTablaDrawCell(SenderTObject; Col, Row: Integer;
  RectTRectStateTGridDrawState);
begin
  With sgTabla.Canvas.Brush Do
  Begin
    {kiválasztott cella}
    If gdSelected In State Then Color:= clYellow;
    {a táblázat belseje}
    If Not((gdSelected In StateOr (gdFixed In State)) Then
    Color:= clWindow;
  End;
  With sgTabla.Canvas.Font Do
  If Prime(StrToInt(sgTabla.Cells[Col,Row])) Then
  Color:= clBlack Else Color:= clFuchsia;
  sgTabla.Canvas.TextRect(Rect,Rect.Left+1,

                          Rect.Top+1,sgTabla.Cells[Col,Row]);
  If gdFocused In State Then sgTabla.Canvas.DrawFocusRect(Rect);
end;

end.