![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Попыталась написать, а кое-где нагло скопировать код для программы, но она все равно выдает ошибку, в чем причина - не знаю.
В теории: программа создает одноизмерный массив с заданным числом колонок, в ячейки можно вписывать числа самому, а можно сгенерировать кнопкой "рандом". - эта часть работает. Затем, при нажатии на кнопку "sort!", программа должна расскидать числа в порядке возростания. На практике: при нажатии на кнопку "сортировка" мне выдает ошибку...помогите разобраться, пожалуйста р.р Код:
unit Unit_grew;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
StringGrid1: TStringGrid;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:array[1..10] of integer;
i,prom,j,k, min:integer;
m,n:byte;
implementation
{$R *.dfm}
function randomreal (mini, max:single):single;
begin
randomreal:=mini+(max-mini)*random;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
m:= strtoint(edit1.text);
Stringgrid1.colcount := m;
stringgrid1.rowcount := n;
Stringgrid1.Height:= stringgrid1.defaultrowheight*(n+2)+n;
stringgrid1.Width:= stringgrid1.DefaultColWidth*(m+1);
end;
procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
for i:= 0 to m do
stringgrid1.cells[i,j]:=inttostr(-127+random(255));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
a:array[1..10] of integer;
min:integer;
j:integer;
buf:integer;
i,k:integer;
begin
for i:=1 to m do
a[i]:=StrToInt(StringGrid1.Cells[m-1,0]) ;
for i:=1 to m-1 do
begin
for j:=i+1 to m do
if a[j] < a [min]
then min:=j;
buf:=a[i]; a[i]:=a[min]; a[min]:=buf;
end;
end;
end. |
|
#2
|
|||
|
|||
|
одномерный массив можно было через memo сделать
глобальные переменные - заподло, касяк m, n все бы заменил на Stringgrid1.colcount, stringgrid1.rowcount сортировку сделать если на основе функции нахождения максимумального элемента за пару минут |
|
#3
|
|||
|
|||
|
Подправьте процедуры и уберите лишнее из глобальных переменных. Хорошо бы и m убрать, но смотрите сами.
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
m:= strtoint(edit1.text);
Stringgrid1.colcount := m;
stringgrid1.Width:= stringgrid1.DefaultColWidth*(m+1);
end;
procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
for i:= 0 to m-1 do
stringgrid1.cells[i,0]:=inttostr(-127+random(255));
end;
procedure TForm1.Button4Click(Sender: TObject);
var a : array of integer;
j, buf, i :integer;
begin
SetLength(a, m);
for i := 0 to m-1 do
a[i] := StrToInt(StringGrid1.Cells[i,0]) ;
for i := 0 to m - 1 do
for j := i + 1 to m-1 do
if a[j] < a[i] then
begin
buf := a[i];
a[i] := a[j];
a[j] := buf;
end;
for I := 0 to m - 1 do
StringGrid1.Cells[i,0] := IntToStr(a[i]);
end ; |
|
#4
|
|||
|
|||
|
_taddy, спасибо Вам! даже и не знаю, чтобы без Вас делала =)
Pyro, спасибо за подсказки, в следующий раз постараюсь брать меньше переменных и более логические названия |