По условию задачи надо отсортировать одномерный массив, заданный случайным образом (n=100), а затем исходную и полученную матрицу вывести на форму (процесс сортировки выводится на экран пошагово).
Очень надеюсь на вашу помощь. Подскажите, как, с чего следует начинать.. какой элемент я должна использовать для ввода массива? Заранее большое спасибо!
Попыталась написать.. но прога не работает.. посмотрите, пожалуйста..
вывод массива написала в метку. подскажите, как организовать вывод на форму?
спасибо!
Прикрепленные файлы
______.rar ( 7.2 килобайт )
Кол-во скачиваний: 223
После исправления самых грубых ошибок:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label2: TLabel;
StringGrid2: TStringGrid;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:array[0..99] of integer; //чтобы нумерация совпала со стринггридовской. и чтобы не вводить 100 чисел!
i:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=0 to 99 do //меняем счетчики
begin //не забывай про бегин/энд!
a[i]:=random(i);
//a[i]:=StrToInt(StringGrid1.Cells[i,0]); это не нужно - ты же заполнила массив рэндомом!
// А вот вывод пригодился бы. Допишем.
StringGrid1.Cells[i,0]:=IntToStr(a[i]);
end;
end;
//если ввод рэндомом - это вообще не нужно. тем более что ввод в стринггрид у тебя заблокирован.
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
#8,'0'..'9':;
#13:
if StringGrid1.Col<StringGrid1.ColCount-1 then
StringGrid1.Col:=StringGrid1.Col+1;
else key:=chr(0);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
const
size=100;
var
//a:array[1..size] of integer; это еще что такое?
// у нас есть глобальная переменная с тем же именем. вот с ней и работаем, раз объявили.
j,buf,i,k:integer;
begin
//for i:=1 to size do
//a[i]:=StrToInt(StringGrid1.Cells[i-1,0]) ; уже все давно заполнено. не повторяемся.
//стандартная пузырьковая сортировка. что ты делала - не поняла...
for i:=0 to size-1 do //с нуля
for j:=0 to size-2 do
if a[j]<a[j+1] then
begin //тут он нужнее, чем там, куда ты поставила.
buf:=a[j];
a[j]:=a[j+1];
a[j+1]:=buf;
end;
for k:=0 to size-1 do //интересно, а зачем тебе для этого цикла отдельная переменная к?
// Label2.Caption:=Label2.Caption+''+IntToStr(a[k]); вот изврат... может, все же в стринггрид?
//Label2.caption:=Label2.Caption+#13;
StringGrid2.Cells[k,0]:=IntToStr(a[k]);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;
end.
Спасибо! только сортировка не работает.. ((
подскажите,пожалуйста, что делать с выводом.. исходная матрица и пошаговая сортировка обязательно должны выводиться на форму! как это можно осуществить?
//стандартная пузырьковая сортировка. что ты делала - не поняла...
for i:=0 to size-1 do //с нуля
for j:=0 to size-2 do
if a[j]<a[j+1] then
begin //тут он нужнее, чем там, куда ты поставила.
buf:=a[j];
a[j]:=a[j+1];
a[j+1]:=buf;
end;
for i := size - 1 downto 1 do
for j := 0 to i - 1 do
if a[j] < a[j + 1] then begin
//swap
end;
klem4, а ты уверен, что она теперь сможет объяснить, зачем нужны проходы в разных направлениях и откуда берутся границы циклов?
по-моему, не всегда нужно гнаться за оптимальностью - сначала объяснить самое простое, школьное. а потом уже при желании совершенствовать. а так можно и поразрядную написать - еще быстрее работать будет.