![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте! В программировании совсем новичок и столкнулась с ним только в универе, поэтому появилась куча проблем. Начну по порядку.
В теории: написана программа(сырая, но все же), в которой можно регулировать размерность массива с клавиатуры, вводить свои числа, генерировать рандомные числа, и при нажатии на кнопку «найти минимум», она находит минимальное положительное значение и закрашивает ячейку. На практике: с размерностью какой-то косяк, он хорошо виден на скрине: ![]() К тому же, закрашивание ячейки не происходит по нажатии кнопки, а срабатывает, когда сам вводишь минимальное значение, и то не всегда. (да, там, наверное, нужно объединить две процедуры но как это сделать, я не знаю). Вот, вроде бы вся проблема, помогите, пожалуйста((( Вот код: Код:
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. |