Главная страница
    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]

ща поставлю паскаль и сделаю тебе прогу


 
Cawa ©   (2006-11-27 14:10) [41]

Writeln("---");
for i:=1 to size-1 do
begin
min:=i;
for j:=i+1 to size do
if m[j]< m[min] then min:=j;
buf:=m[i];
m[i]:=m[min];
m[min]:=buf;

end;
for k:=1 to size do writeln(m[k]:2:0);


 
Cawa ©   (2006-11-27 14:12) [42]

в [30] я уже давал верный вариант сортировки


 
Shell   (2006-11-27 14:16) [43]

Прости не заметил, щас проверю


 
Anatoly Podgoretsky ©   (2006-11-27 14:16) [44]

> alex810  (27.11.2006 13:33:14)  [14]

Вы не увлеклись нотации читать в технической конференции, тем более что в Потрепаться было несколько тем на эту тему, совсем недавно.


 
Anatoly Podgoretsky ©   (2006-11-27 14:17) [45]

> Андрей Сенченко  (27.11.2006 13:35:15)  [15]

То же самое, переходите в конференцию Прочее и начинайте новую мегаветку


 
alex810 ©   (2006-11-27 14:18) [46]

Получай у меня все работает
program mas;
uses crt;
const
SIZE=5;
var
a:array[1..SIZE] of integer;
k:integer;
i:integer;
changed:boolean;
buf:integer;
begin
for i:=1 to SIZE do
readln(a[i-1] );
repeat
Changed:=FALSE;
for k:=1 to SIZE-1 do
if a[k] > a[k+1] then
begin
buf := a[k]; a[k] := a[k+1]; a[k+1] := buf;
changed := TRUE;
end;
until not changed;
for i:=1 to SIZE do
writeln(a[i]);
writeln("Maccив отсортирован.");
end.


 
Palladin ©   (2006-11-27 14:21) [47]


> [46] alex810 ©

и что ты хочешь сказать это с delphi не совметимо?


 
alex810 ©   (2006-11-27 14:22) [48]

Я такого не говорил попросили на паскале


 
Shell   (2006-11-27 14:25) [49]

>alex810 ©   (27.11.06 14:18) [46]
Массив должен быбираться случайным образом от -1000 до 1000 а не вводиться с клавиатуры.
>Cawa ©   (27.11.06 14:12) [42]
Нет всё равно не работает. Из начально массив выглядит так:
938
485
9
-227
-76
После сортировки он выглядит так
-227
-76
485
9

938
Хотя должен выглядить так
-227
-76
9
485

938


 
alex810 ©   (2006-11-27 14:38) [50]

Попробуй это

program mas;
uses crt;
const
SIZE=5;
var
a:array[1..SIZE] of integer;
k:integer;
i:integer;
changed:boolean;
buf:integer;
begin
clrscr;
for i:=1 to SIZE do a[i-1]:=(random(2000))-1000;
repeat
Changed:=FALSE;
for k:=1 to SIZE-1 do
if a[k] < a[k+1] then
begin
buf := a[k]; a[k] := a[k+1]; a[k+1] := buf;
changed := TRUE;
end;
until not changed;
for i:=1 to SIZE do
write(a[i]," ");
write("Maccив отсортирован.");
readkey;
end.

Результат у меня во всяком случае
722 0 -455 -595 -938 Maccив отсортирован.


 
Anatoly Podgoretsky ©   (2006-11-27 14:39) [51]

> Shell  (27.11.2006 14:25:49)  [49]

Вот теперь конкретный пример и сразу все ясно, сортировка работает, только это текстовая сортировка, а нужна двоичная.


 
Cawa ©   (2006-11-27 14:40) [52]

Результат у меня верный что-то ты у себя намутил, вот код

const
size=5;
var i,j,min,k:integer;
s,n,a:integer;
M:array[1..20]of real;
buf:real;
begin

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
if m[j]< m[min] then min:=j;
buf:=m[i];
m[i]:=m[min];
m[min]:=buf;
end;
for k:=1 to size do writeln(m[k]:2:0);

readln;
end.


 
Shell   (2006-11-27 14:43) [53]

Всем огромное спасибо!
Всё получилось, я наконец то до думал.


 
alex810 ©   (2006-11-27 14:44) [54]


> Вот теперь конкретный пример и сразу все ясно, сортировка
> работает, только это текстовая сортировка, а нужна двоичная.
>

Кто сказал что нужна двоичная. И как это переводить числа в двоичный код а потом двоичные числа сортировать???


 
Cawa ©   (2006-11-27 14:49) [55]

2 alex810 под двоичной имеется ввиду сортировка числовая по их конкретным значениям, а не по их строковым эквивалентам


 
Anatoly Podgoretsky ©   (2006-11-27 14:54) [56]

> alex810  (27.11.2006 14:44:54)  [54]

> Кто сказал что нужна двоичная

Автор сказал, в той теме, на которую я ссылаюсь.



Страницы: 1 2 вся ветка

Текущий архив: 2006.12.17;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.043 c
8-1146657387
MaFon
2006-05-03 15:56
2006.12.17
Кто-нибудь работал с DSPack?


2-1164701152
NewOne
2006-11-28 11:05
2006.12.17
Печать с формы


15-1164377403
Loginov Dmitry
2006-11-24 17:10
2006.12.17
Весело


2-1164460129
asdqwer
2006-11-25 16:08
2006.12.17
Открытие файла, не закрытого другой программой


15-1163509008
TauRus
2006-11-14 15:56
2006.12.17
Помощь по заданию на Паскале.Поможет кто-то?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский