![]() |
|
|
Регистрация | << Правила форума >> | 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, спасибо за подсказки, в следующий раз постараюсь брать меньше переменных и более логические названия |