![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Ситуация следующая. Нужно дописать программу. Первый столбец при нажатии первой кнопки должен рандомно заполняться числами. При нажатии второй кнопки, второй столбец должен упорядочить эти числа в порядке возрастания. Первое получилось. но при нажатии второй кнопки, он ставит все числа так же, как в первом столбце. Пожалуйста подскажите, что дописать нужно.
Код:
unit GLAV_FM;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TFM_GLAV = class(TForm)
TABL: TStringGrid;
POLE_N: TEdit;
KN_ZAP: TButton;
KN_SORT: TButton;
procedure KN_ZAPClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure KN_SORTClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FM_GLAV: TFM_GLAV;
implementation
{$R *.dfm}
CONST
MAX_N = 300
;
TYPE
T_M = ARRAY [ 1 .. MAX_N ] OF WORD
;
VAR
N : WORD
;
PROCEDURE PP_SORT ( K: WORD ; VAR M : T_M );
BEGIN
// сделать
END
;
procedure TFM_GLAV.FormCreate(Sender: TObject);
VAR
I: WORD
;
begin
N := STRTOINT ( POLE_N.Text )
;
IF N > MAX_N THEN
BEGIN
N := MAX_N;
POLE_N.Text := INTTOSTR ( N )
END
;
TABL.RowCount := N + 1
;
FOR I := 1 TO N DO
BEGIN
TABL.Cells [ 0 , I ] := INTTOSTR ( I )
;
TABL.Cells [ 1 , I ] := INTTOSTR ( ROUND ( 1 + 498 * RANDOM ) )
END
end;
procedure TFM_GLAV.KN_SORTClick(Sender: TObject);
VAR
I: WORD
;
CHISLA : T_M
;
begin
FOR I := 1 TO N DO
BEGIN
CHISLA [ I ] := STRTOINT ( TABL.Cells [ 1 , I ] )
;
PP_SORT ( N, CHISLA )
;
TABL.Cells [ 2 , I ] := INTTOSTR ( CHISLA [ I ] )
END
end;
procedure TFM_GLAV.KN_ZAPClick(Sender: TObject);
VAR
I: WORD
;
begin
N := STRTOINT ( POLE_N.Text )
;
IF N > MAX_N THEN
BEGIN
N := MAX_N;
POLE_N.Text := INTTOSTR ( N )
END
;
TABL.RowCount := N + 1
;
FOR I := 1 TO N DO
BEGIN
TABL.Cells [ 0 , I ] := INTTOSTR ( I )
;
TABL.Cells [ 1 , I ] := INTTOSTR ( ROUND ( 1 + 498 * RANDOM ) )
END
end;
end.Последний раз редактировалось Radichek, 21.06.2012 в 17:56. |
|
#2
|
||||
|
||||
|
Строки 79 - 86. Надо заменить на:
Код:
FOR I := 1 TO N DO CHISLA [ I ] := STRTOINT ( TABL.Cells [ 1 , I ] );// Тут загружаем список PP_SORT ( N, CHISLA ); // Тут отправляем на сортировку FOR I := 1 TO N DO TABL.Cells [ 2 , I ] := INTTOSTR ( CHISLA [ I ] ); // Тут выводим что получилось |
|
#3
|
|||
|
|||
|
Ребят, стыдно признаться, но реально не шарю, помогите пожалуйста. От этого зависит завтрашний экзамен.
|
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
|||
|
|||
|
В будущем естественно. Но завтра экзамен, а его нужно сдать) Помогите)
|
|
#6
|
|||
|
|||
|
Вот исходник. Тут все, до того, как я начал изменять.
|
|
#7
|
|||
|
|||
|
А че, простейшие сортировки не проходили. Классический пузырек, например? Вообще, рекомендую все делать в массиве, а в StringGrid только выводить результаты.
Вот сортировка: Код:
procedure SortArray(var A : Array Of Integer);
var
I, J, Swp : Integer,
begin
For I := Low(A) To High(A)-1 Do
For J := I + 1 To High(A) Do
If A[i]>A[J] Then
Begin
Swp := A[i];
A[i] := A[J];
A[J] := Swp;
End;
end; |
|
#8
|
||||
|
||||
|
Я вот так сделал
Код:
unit GLAV_FM;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TFM_GLAV = class(TForm)
TABL: TStringGrid;
POLE_N: TEdit;
KN_ZAP: TButton;
KN_SORT: TButton;
procedure KN_ZAPClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure KN_SORTClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FM_GLAV: TFM_GLAV;
implementation
{$R *.dfm}
CONST
MAX_N = 300
;
TYPE
T_M = ARRAY [ 1 .. MAX_N ] OF WORD
;
VAR
N : WORD
;
PROCEDURE PP_SORT ( K: WORD ; VAR M : T_M );
procedure ma(var a,b:word);
var t:word;
begin
if (a>b) then
begin
t:=a;
a:=b;
b:=t;
end;
end;
var i,j:integer; AA,BB:word;
BEGIN
for i := 1 to k - 1 do
for j := 1 to k - 1 do
begin
AA:=M[j];
BB:=M[j+1];
ma(AA,BB);
M[j]:=AA;
M[j+1]:=BB;
end;
// сделать
END
;
procedure TFM_GLAV.FormCreate(Sender: TObject);
VAR
I: WORD
;
begin
N := STRTOINT ( POLE_N.Text )
;
IF N > MAX_N THEN
BEGIN
N := MAX_N;
POLE_N.Text := INTTOSTR ( N )
END
;
TABL.RowCount := N + 1
;
FOR I := 1 TO N DO
BEGIN
TABL.Cells [ 0 , I ] := INTTOSTR ( I )
;
TABL.Cells [ 1 , I ] := INTTOSTR ( ROUND ( 1 + 498 * RANDOM ) )
END
end;
procedure TFM_GLAV.KN_SORTClick(Sender: TObject);
VAR
I: WORD
;
CHISLA : T_M
;
begin
FOR I := 1 TO N DO CHISLA [ I ] := STRTOINT ( TABL.Cells [ 1 , I ] ) ;
PP_SORT ( N, CHISLA );
FOR I := 1 TO N DO TABL.Cells [ 2 , I ] := INTTOSTR ( CHISLA [ I ] )
end;
procedure TFM_GLAV.KN_ZAPClick(Sender: TObject);
VAR
I: WORD
;
begin
N := STRTOINT ( POLE_N.Text )
;
IF N > MAX_N THEN
BEGIN
N := MAX_N;
POLE_N.Text := INTTOSTR ( N )
END
;
TABL.RowCount := N + 1
;
FOR I := 1 TO N DO
BEGIN
TABL.Cells [ 0 , I ] := INTTOSTR ( I )
;
TABL.Cells [ 1 , I ] := INTTOSTR ( ROUND ( 1 + 498 * RANDOM ) )
END
end;
end. |
|
#9
|
||||
|
||||
|
Я хотел как то разнообразить ))))))))
|
|
#10
|
|||
|
|||
|
Ребята, помогите, пожалуйста. Все сделал как описано выше, почему то результат не меняется.
|
|
#11
|
||||
|
||||
|
Цитата:
|