Здравствуйте! В программировании совсем новичок и столкнулась с ним только в универе, поэтому появилась куча проблем. Начну по порядку.
В теории: написана программа(сырая, но все же), в которой можно регулировать размерность массива с клавиатуры, вводить свои числа, генерировать рандомные числа, и при нажатии на кнопку «найти минимум», она находит минимальное положительное значение и закрашивает ячейку.
На практике: с размерностью какой-то косяк, он хорошо виден на скрине:
К тому же, закрашивание ячейки не происходит по нажатии кнопки, а срабатывает, когда сам вводишь минимальное значение, и то не всегда. (да, там, наверное, нужно объединить две процедуры но как это сделать, я не знаю). Вот, вроде бы вся проблема, помогите, пожалуйста(((
Вот код:
Код:
unit Unit1_MxN;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
matr=array[1..10,1..10] of shortint;
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
StringGrid1: TStringGrid;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
m,n: byte;
min:integer;
implementation
{$R *.dfm}
function randomreal (mini, max:single):single;
begin
randomreal:=mini+(max-mini)*random;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
m:= strtoint(edit1.Text);
n:=strtoint(edit2.text);
Stringgrid1.Height:= stringgrid1.defaultrowheight*(m+1)+m;
stringgrid1.Width:= stringgrid1.DefaultColWidth*(n+1)+n;
stringgrid1.Visible:= true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
for m:= 0 to 3 do
for n:= 0 to 3 do
stringgrid1.cells[n,m]:=inttostr(-127+random(255));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i:integer;
a:array[1..10] of integer;
begin
min:=1;
for i:= 2 to 10 do
if (0 <= a[i]) and (a[i] < a[min]) then min:=i;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if StringGrid1.Cells[acol,arow]<>'' then
begin
if StrToInt(StringGrid1.Cells[acol,arow]) = min then
begin
StringGrid1.Canvas.Brush.Color:=clGreen;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[Acol,Arow]);
end;
end;
end;
end.