По условию задачи надо отсортировать одномерный массив, заданный случайным образом (n=100), а затем исходную и полученную матрицу вывести на форму (процесс сортировки выводится на экран пошагово). Очень надеюсь на вашу помощь. Подскажите, как, с чего следует начинать.. какой элемент я должна использовать для ввода массива? Заранее большое спасибо!
Попыталась написать.. но прога не работает.. посмотрите, пожалуйста.. вывод массива написала в метку. подскажите, как организовать вывод на форму? спасибо!
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;
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
klem4, а ты уверен, что она теперь сможет объяснить, зачем нужны проходы в разных направлениях и откуда берутся границы циклов? по-моему, не всегда нужно гнаться за оптимальностью - сначала объяснить самое простое, школьное. а потом уже при желании совершенствовать. а так можно и поразрядную написать - еще быстрее работать будет.
Цитата
только сортировка не работает.. ((
Правда?
Цитата
подскажите,пожалуйста, что делать с выводом.. исходная матрица и пошаговая сортировка обязательно должны выводиться на форму! как это можно осуществить?
ну, тут у тебя 2 пути: либо на каждом шаге выводить в новый стринггрид, либо изменять содержимое старого - но тогда придется вставить паузу, иначе человек не успеет ничего воспринять...
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
либо на каждом шаге выводить в новый стринггрид, либо изменять содержимое старого
Простите, а вариант с записью в следующую строку StringGrid-а что, уже отменили? Кстати, самый нормальный для восприятия: надо просмотреть результаты - СкроллБар к твоим услугам...
Но она ведь выглядит не так как приведенный далее тобой код ? А то человек скажет что вот мол пузырек, а ему в ответ Если я что-то не так понял, то извиняюсь.
Специально посмотрела. в школьном учебнике такой вариант идет как пузырьковая (да и нам его давали как базовую пузырьковую, а все остальное - уже модификации). У Вирта - описанный тобой. У Кнута - сразу с флажком.... То есть отслеживать, были ли вообще перестановки.
volvo, ой. фигня получилась. я это и хотела сказать.... написала в "новую стринггрида", (пропустив слово "строку"), потом перед отправкой просматривала на наличие опечаток - "исправила" на согласованное предложение. надо было в смысл вникнуть. наляпать на форму несколько сот компонентов - это бы мне в голову вряд ли пришло.
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!