Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизКак рассортировать? Найти похожие ветки
← →
Werka (2006-11-27 12:44) [0]Мне нужно написать программу для сортировки массива из 20 целых чисел заполненные случайными образам в диапазоне от -1000 до 1000. Вывести его на экран. Упорядочить по возрастанию, и вывести на экран снова уже упорядоченный.
Я смог вывести его на экран, но как его упорядочить по возрастанию я не знаю вот то что у меня получилось:
uses crt;
var i,j:integer;
s,n,a:real;
M:array[1..20]of real;
begin
clrscr;
randomize;
a:=0;
for i:=1 to 20 do begin
a:=random(2000);
M[i]:=a-1000;
writeln(M[i]:2:0)
end;
Writeln("---");
for j:=1 to 20 do begin
end;
readln;
end.
Пожалуйста помогите мне доделать этк прогу.
← →
alex810 © (2006-11-27 12:47) [1]Сортировка массива простым выбором
procedure TForm1.ButtonlClick(Sender: TObject);
const
SIZE=10;
var
a:array[1..SIZE] of integer;
min:integer; { номер минимального элемента в части
массива от i до верхней границы массива }
j:integer; { номер элемента, сравниваемого с минимальным }
buf:integer; { буфер, используемый при обмене элементов массива }
i,k:integer;
begin
// ввод массива
for i:=l to SIZE do
a[i]:=StrToInt(StringGridl.Cells[i-1,0]) ; Iabel2.caption:="";
for i:=l to SIZE-1 do begin
{ поиск минимального элемента в части массива от а[1] до a[SIZE]} min:=i;
for j:=i+l to SIZE do if a[j] < a [min]
then min:=j;
{ поменяем местами a [min] и a[i] }
buf:=a[i]; a[i]:=a[min]; a[min]:=buf;
{ вывод массива }
for k:=l to SIZE do
Label2.caption:=label2.caption+" "+IntTostr(a[k]);
Label2.caption:=label2.caption+#13; end;
Label2.caption:=label2.caption+#13+"MaccMB отсортирован.";
end;
← →
Shell (2006-11-27 12:55) [2]А на паскале как это будет выглядить
← →
StriderMan © (2006-11-27 13:00) [3]QuickSort. в любой книжке есть. Дональд Кнут например - рекомендую.
← →
alex810 © (2006-11-27 13:04) [4]program mas;
uses crt;
const
SIZE=20;
var
a:array[1..SIZE] of integer;
min:integer; { номер минимального элемента в части
массива от i до верхней границы массива }
j:integer; { номер элемента, сравниваемого с минимальным }
buf:integer; { буфер, используемый при обмене элементов массива }
i,k:integer;
begin
clrscr;
// ввод массива
for i:=l to SIZE do readln(a[i]);
for i:=l to SIZE-1 do
begin
{ поиск минимального элемента в части массива от а[1] до a[SIZE]} min:=i;
for j:=i+l to SIZE do if a[j] < a [min]
then min:=j;
{ поменяем местами a [min] и a[i] }
buf:=a[i]; a[i]:=a[min]; a[min]:=buf;
{ вывод массива }
for k:=l to SIZE do writeln(a[k]);
writeln("MaccMB отсортирован.");
end;
Тут массив необходимо вводить вручную
<Цитата>
← →
Андрей Сенченко © (2006-11-27 13:04) [5]http://alglib.sources.ru/sorting/
Метод пузырька, как гарантия твердой "4", вроде никем не отменялся.
← →
Leonid Troyanovsky © (2006-11-27 13:06) [6]
> Shell (27.11.06 12:55) [2]
> А на паскале как это будет выглядить
%delphi%\Demos\Threads\thrddemo.dpr
--
Regards, LVT.
← →
alex810 © (2006-11-27 13:08) [7]
> QuickSort. в любой книжке есть. Дональд Кнут например -
> рекомендую.
Что вы тут всем советуете книги почитать человек просит реальной помощи
Сортировка массива методом обмена
procedure TForm1.Button1Click(Sender: TObject);
const
SIZE=5;
var
a:array[1..SIZE] of integer;
k:integer; // текущий элемент массива
i:integer; // индекс для ввода и вывода массива
changed:boolean; // TRUE, если в текущем цикле были обмены
buf:integer; // буфер для обмена элементами массива
begin
// ввод массива
for i:=1 to SIZE do
a[i] := readln([i-1, 0] );
// сортировка массива repeat
Changed:=FALSE; // пусть в текущем цикле нет обменов
for k:=l to SIZE-1 do
if a[k] > a[k+l] then
begin // обменяем k-й и k+1-й элементы
buf := a[k]; a[k] := a[k+l]; a[k+l] := buf;
changed := TRUE;
end;
// вывод массива
for i:=l to SIZE do
writeln(a[i]);
until not changed; // если не было обменов, значит
// массив отсортирован
writeln("Maccив отсортирован.");
end;
← →
alex810 © (2006-11-27 13:09) [8]
> procedure TForm1.Button1Click(Sender: TObject);
Замени на
program mas2;
uses crt
← →
Андрей Сенченко © (2006-11-27 13:11) [9]Удалено модератором
← →
Anatoly Podgoretsky © (2006-11-27 13:11) [10]> Shell (27.11.2006 12:55:02) [2]
Если дельфи за паскаль тянет, то в папке демос есть пример аж трех методов сортировки.
← →
alex810 © (2006-11-27 13:15) [11]Удалено модератором
← →
Steep © (2006-11-27 13:27) [12]
> %delphi%\Demos\Threads\thrddemo.dpr
> Если дельфи за паскаль тянет, то в папке демос есть пример
> аж трех методов сортировки.
Конечно человек который сам не может сделать сортировку сразу поймет что такое Thread и шустро его перетянет в паскаль вместе с 3-мя методами сортировки...
← →
Андрей Сенченко © (2006-11-27 13:27) [13]Удалено модератором
← →
alex810 © (2006-11-27 13:33) [14]Удалено модератором
← →
Андрей Сенченко © (2006-11-27 13:35) [15]Удалено модератором
← →
Steep © (2006-11-27 13:37) [16]Удалено модератором
← →
alex810 © (2006-11-27 13:37) [17]Удалено модератором
← →
Shell (2006-11-27 13:39) [18]Посмотрите вроде правильно сделал, но программа не работает
uses crt;
const
SIZE=20;
var
a:array[1..SIZE] of integer;
min,t:integer;
j:integer;
buf:integer;
i,k:integer;
begin
clrscr;
randomize;
t:=0;
for i:=1 to size do begin
t:=random(2000);
a[i]:=t-1000;
writeln(a[i]:2)
end;
for i:=1 to SIZE-1 do
begin
min:=i;
for j:=i+1 to SIZE do if a[j] < a [min]
then min:=j;
buf:=a[i]; a[i]:=a[min]; a[min]:=buf;
for k:=1 to SIZE do writeln(a[k]);
end;
readln;
end.
← →
Steep © (2006-11-27 13:39) [19]Короче хорош флудить...
давайте лучше помогать кому-нить...
← →
alex810 © (2006-11-27 13:40) [20]Удалено модератором
← →
Андрей Сенченко © (2006-11-27 13:40) [21]Удалено модератором
← →
Steep © (2006-11-27 13:42) [22]a:array[1..SIZE] of integer;
так почему-же
a[i]:=t-1000;
может быть отрицательное?
← →
Shell (2006-11-27 13:42) [23]Нет просто скажите где ошибка.прога запускается и выдаёт очень большое кол-во цифр
← →
umbra © (2006-11-27 13:43) [24]2 Shell (27.11.06 13:39) [18]
> но программа не работает
а скомпилировать? а запустить? :)
← →
Steep © (2006-11-27 13:44) [25]почему for i:=1 to SIZE-1
у тебя ж массив не с 0?
← →
Андрей Сенченко © (2006-11-27 13:44) [26]Shell (27.11.06 13:42) [23]
Ошибку Тебе назвали в [22].
Как-нибудь нам увидеть "большое количество цифр" можно ?
← →
alex810 © (2006-11-27 13:45) [27]
> a:array[1..SIZE] of integer;
> так почему-же
> a[i]:=t-1000;
> может быть отрицательное?
отрицательное число тоже может быть целым
← →
Shell (2006-11-27 13:45) [28]Да не доглядел, но если поставить тип real то возникнит куча ошибок которые я не знаю как испровлять, а мне обязательно нужны числа от -1000 до 1000
← →
Cawa © (2006-11-27 13:45) [29]попробу так сортировать
for i:=1 to SIZE-1 do
begin
min:=i;
for j:=i+1 to SIZE do
begin
if a[j] < a [min] then min:=j;
buf:=a[i]; a[i]:=a[min]; a[min]:=buf;
end;
end;
for k:=1 to SIZE do writeln(a[k]);
readln;
← →
Cawa © (2006-11-27 13:47) [30]ссори вот так
for i:=1 to SIZE-1 do
begin
min:=i;
for j:=i+1 to SIZE do
if a[j] < a [min] then min:=j;
buf:=a[i]; a[i]:=a[min]; a[min]:=buf;
end;
for k:=1 to SIZE do writeln(a[k]);
readln;
← →
Cawa © (2006-11-27 13:49) [31]т.е. из тобой приведенного кода вынести
for k:=1 to SIZE do writeln(a[k]);
из циклов.
← →
Steep © (2006-11-27 13:49) [32]Удалено модератором
← →
alex810 © (2006-11-27 13:52) [33]Удалено модератором
← →
Cawa © (2006-11-27 13:55) [34]Удалено модератором
← →
alex810 © (2006-11-27 13:56) [35]Удалено модератором
← →
Shell (2006-11-27 13:59) [36]Я не совсем пойму это место, мы находим самый маленьки член
a[min]:=buf;
Но на экран выводим изночальный массив
for k:=1 to SIZE do writeln(a[k]);
← →
alex810 © (2006-11-27 14:00) [37]
> Я не совсем пойму это место, мы находим самый маленьки член
> a[min]:=buf;
> Но на экран выводим изночальный массив
> for k:=1 to SIZE do writeln(a[k]);
Выводит уже отсортированный массив
← →
Shell (2006-11-27 14:02) [38]Ничего подобнго сам попробуй
← →
Shell (2006-11-27 14:03) [39]Откамплиируй и зацени, они вы водятся такиеже как и изночально
uses crt;
const
size=5;
var i,j,min,k:integer;
s,n,a:integer;
M:array[1..20]of real;
buf:real;
begin
clrscr;
randomize;
a:=0;
for i:=1 to size do begin
a:=random(2000);
M[i]:=a-1000;
writeln(M[i]:2:0)
end;
Writeln("---");
for i:=1 to size-1 do
begin
min:=i;
for j:=i+1 to size do
begin
if m[i]< m[min] then min:=j;
buf:=m[i];
m[i]:=m[min];
m[min]:=buf;
end;
end;
for k:=1 to size do writeln(m[k]:2:0);
readln;
end.
← →
alex810 © (2006-11-27 14:06) [40]ща поставлю паскаль и сделаю тебе прогу
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.041 c