1. Алгоритм, определяющий является ли число простым.
2. Циклическое увеличение/уменьшение столбцов диаграммы (компонент TChart).
Реализован пунк 1 и увеличение столбцов, а дальше не знаю помогите пожалуйста.
Код:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, TeeProcs, TeEngine, Chart, Series, DateUtils;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Edit1: TEdit;
Chart1: TChart;
Series1: TBarSeries;
Chart2: TChart;
Series2: TBarSeries;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TPrimeThrd = class(TThread)
private
FTestNumber: integer;
FresultString: string;
protected
function IsPrime: boolean;
procedure UpdateResults;
procedure Execute; override;
public
property TestNumber: integer write FTestNumber;
end;
var
Form1: TForm1;
T1:TPrimeThrd;
F:bool;
const
rCircle=100; //радиус круга - траектории
implementation
function TPrimeThrd.IsPrime: boolean;
var
iter: integer;
begin
result := true;
if FTestNumber < 0 then
begin
result := false;
exit;
end;
if FTestNumber <= 2 then
exit;
for iter := 2 to FTestNumber - 1 do
begin
sleep(50);
if (FTestNumber mod iter) = 0 then
begin
result := false;
{exit;}
end;
end;
end;
procedure TPrimeThrd.Execute;
begin
if IsPrime then
FresultString:=IntToStr(FTestNumber)+ ' число простое'
else
FresultString:=IntToStr(FTestNumber)+ ' число не является простым';
Synchronize(UpdateResults);
end;
procedure TPrimeThrd.UpdateResults;
begin
Form1.Memo1.Lines.Add(FresultString);
end;
{$R *.dfm}
procedure distance(x1,y1,x2,y2: integer);
var
d: real;
begin
d:=sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
T1:=TPrimeThrd.Create(True);
T1.FreeOnTerminate:=True;
try
T1.TestNumber:=StrToInt(Edit1.Text);
T1.Resume;
except on EConvertError do
begin
T1.Free;
ShowMessage('Недопустимое число')
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
number, iter: integer;
isprime: bool;
begin
isprime:= true;
number:=StrToInt(Edit1.Text);
if number<0 then isprime:=false;
if number>=2 then
for iter:=2 to number-1 do
begin
sleep(50);
if (number mod iter)=0 then
begin
isprime:=false;
end;
end;
if isprime then
Memo1.Lines.Add(IntToStr(Number)+' число простое')
else
Memo1.Lines.Add(IntToStr(Number)+' число не является простым')
end;
procedure TForm1.FormActivate(Sender: TObject);
Var
i,Z:Integer;
begin
series1.clear;
for i:=1 to 500 do
BEGIN
Z:=random(10);
Application.ProcessMessages();
sleep (100);
Series2.AddXY(i, Z, '', clRed);
END;
end;
end.