Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.038 c
2-1164760887
Alek Aaz
2006-11-29 03:41
2006.12.17
Форматирование строк.


1-1162214256
Acme
2006-10-30 16:17
2006.12.17
Как написать в поле Label нижний индекс


15-1164306475
ZMan
2006-11-23 21:27
2006.12.17
Найти песенку


15-1164380325
ArtemESC
2006-11-24 17:58
2006.12.17
Очки - зло...


15-1164626305
miek
2006-11-27 14:18
2006.12.17
Будут ли OLPC в России?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский