Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

Как рассортировать?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.031 c
2-1164619364
TIF
2006-11-27 12:22
2006.12.17
Помогите!!! Двоичное - в обычное


8-1142757370
Kano
2006-03-19 11:36
2006.12.17
Вставка анимированных gif


2-1164708881
MaXie
2006-11-28 13:14
2006.12.17
Присвоение события


2-1164614611
TrainerOfDolphins
2006-11-27 11:03
2006.12.17
Сумма значений поля подчинённой таблицы.


2-1164721063
KyRo
2006-11-28 16:37
2006.12.17
Как узнать что система не висит.