По условию задачи надо отсортировать одномерный массив, заданный случайным образом (n=100), а затем исходную и полученную матрицу вывести на форму (процесс сортировки выводится на экран пошагово). Очень надеюсь на вашу помощь. Подскажите, как, с чего следует начинать.. какой элемент я должна использовать для ввода массива? Заранее большое спасибо!
volvo
9.11.2006 13:15
Цитата
Подскажите, как, с чего следует начинать
С поиска по форуму... Сначала надо думать не о том,
Цитата
какой элемент я должна использовать для ввода массива
, а об алгоритме решения задания. И только потом в соответствии с придуманным или найденным алгоритмом на него навешивается интерфейс...
А вот теперь разбирайся в логике работы, выбирай подходящие компоненты, и пиши программу на Дельфи
Pautina
10.11.2006 23:55
Попыталась написать.. но прога не работает.. посмотрите, пожалуйста.. вывод массива написала в метку. подскажите, как организовать вывод на форму? спасибо!
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.
Pautina
11.11.2006 4:55
Спасибо! только сортировка не работает.. (( подскажите,пожалуйста, что делать с выводом.. исходная матрица и пошаговая сортировка обязательно должны выводиться на форму! как это можно осуществить?
klem4
11.11.2006 12:58
Цитата
//стандартная пузырьковая сортировка. что ты делала - не поняла... 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;
мисс_граффити
11.11.2006 15:21
klem4, а ты уверен, что она теперь сможет объяснить, зачем нужны проходы в разных направлениях и откуда берутся границы циклов? по-моему, не всегда нужно гнаться за оптимальностью - сначала объяснить самое простое, школьное. а потом уже при желании совершенствовать. а так можно и поразрядную написать - еще быстрее работать будет.
подскажите,пожалуйста, что делать с выводом.. исходная матрица и пошаговая сортировка обязательно должны выводиться на форму! как это можно осуществить?
ну, тут у тебя 2 пути: либо на каждом шаге выводить в новый стринггрид, либо изменять содержимое старого - но тогда придется вставить паузу, иначе человек не успеет ничего воспринять...
klem4
11.11.2006 15:46
Цитата
а ты уверен, что она теперь сможет объяснить ...
Просто ты написала
Цитата
стандартная пузырьковая сортировка
Но она ведь выглядит не так как приведенный далее тобой код ? А то человек скажет что вот мол пузырек, а ему в ответ
Если я что-то не так понял, то извиняюсь.
volvo
11.11.2006 16:33
Цитата
либо на каждом шаге выводить в новый стринггрид, либо изменять содержимое старого
Простите, а вариант с записью в следующую строку StringGrid-а что, уже отменили? Кстати, самый нормальный для восприятия: надо просмотреть результаты - СкроллБар к твоим услугам...
мисс_граффити
11.11.2006 17:22
Цитата(klem4 @ 11.11.2006 11:46)
Но она ведь выглядит не так как приведенный далее тобой код ? А то человек скажет что вот мол пузырек, а ему в ответ Если я что-то не так понял, то извиняюсь.
Специально посмотрела. в школьном учебнике такой вариант идет как пузырьковая (да и нам его давали как базовую пузырьковую, а все остальное - уже модификации). У Вирта - описанный тобой. У Кнута - сразу с флажком.... То есть отслеживать, были ли вообще перестановки.
volvo, ой. фигня получилась. я это и хотела сказать.... написала в "новую стринггрида", (пропустив слово "строку"), потом перед отправкой просматривала на наличие опечаток - "исправила" на согласованное предложение. надо было в смысл вникнуть. наляпать на форму несколько сот компонентов - это бы мне в голову вряд ли пришло.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.