![]() |
|
|
#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
|
||||
|
||||
|
Цитата:
Могу посоветовать тебе выложить сюда архив с программой, так больше шансов, что форумчане тебе на все твои косяки укажут + подскажут по мелочам. |
|
#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, Ооооо, спасибо! *_* большое спасибо р.р так помогли!
|