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, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type
TfmPrim = class(TForm)
sgTabla: TStringGrid;
lbPrim: TLabel;
btKilepes: TButton;
procedure FormCreate(Sender: TObject);
procedure btKilepesClick(Sender: TObject);
procedure sgTablaDrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmPrim: TfmPrim;
implementation
{$R *.dfm}
procedure TfmPrim.btKilepesClick(Sender: TObject);
begin
Close;
end;
Function Prime(S: Word): Boolean;
Var J: Word;
Begin
Prime:= False; If S In [0,1] Then Exit; Prime:= True;
For J:= 2 To Trunc(Sqrt(S)) Do If (S Mod J)=0 Then
Begin Prime:= False; Break End;
End;
procedure TfmPrim.FormCreate(Sender: TObject);
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(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
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 State) Or (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.