Показать сообщение отдельно
  #1  
Старый 28.10.2011, 13:36
BinguelBinguel BinguelBinguel вне форума
Прохожий
 
Регистрация: 28.10.2011
Сообщения: 10
Репутация: 10
По умолчанию Проблемы с кодом!

Здравствуйте! В программировании совсем новичок и столкнулась с ним только в универе, поэтому появилась куча проблем. Начну по порядку.
В теории: написана программа(сырая, но все же), в которой можно регулировать размерность массива с клавиатуры, вводить свои числа, генерировать рандомные числа, и при нажатии на кнопку «найти минимум», она находит минимальное положительное значение и закрашивает ячейку.

На практике: с размерностью какой-то косяк, он хорошо виден на скрине:


К тому же, закрашивание ячейки не происходит по нажатии кнопки, а срабатывает, когда сам вводишь минимальное значение, и то не всегда. (да, там, наверное, нужно объединить две процедуры но как это сделать, я не знаю). Вот, вроде бы вся проблема, помогите, пожалуйста(((

Вот код:
Код:
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.
Ответить с цитированием