![]() |
|
|
#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. |
#2
|
||||
|
||||
![]() Цитата:
Могу посоветовать тебе выложить сюда архив с программой, так больше шансов, что форумчане тебе на все твои косяки укажут + подскажут по мелочам. Google в помощь |
#3
|
|||
|
|||
![]() Попробуй исправить эти функции так:
Код:
procedure TfMain.btn1Click(Sender: TObject); begin m:= strtoint(e1.Text); n:=strtoint(e2.text); Stringgrid1.colcount := m; stringgrid1.rowcount := n; end; procedure TfMain.btn3Click(Sender: TObject); var i, j : integer; begin min := 130; // Чтобы при повторной прорисовке не выбирался минимальный for i:= 0 to m-1 do for j:= 0 to n-1 do stringgrid1.cells[i,j] := inttostr(-127+random(255)); end; procedure TfMain.btn4Click(Sender: TObject); var i, j, k, l : integer; a : array[1..10] of integer; begin min := 130; for i := 0 to m-1 do for j := 0 to n - 1 do if (0 < strtoint(stringgrid1.cells[i,j])) and (strtoint(stringgrid1.cells[i,j]) < min) then min := strtoint(stringgrid1.cells[i,j]); StringGrid1.Repaint; end; Последний раз редактировалось Admin, 28.10.2011 в 17:14. |
#4
|
|||
|
|||
![]() _taddy, Ооооо, спасибо! *_* большое спасибо р.р так помогли!
|