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

Вниз

Помогите плиз отсортировать Массив.   Найти похожие ветки 

 
Rradion   (2003-05-01 19:53) [0]

Надо отсртировать числа в массиве. Если CB1.ItemIndex = 0 то начиная с меньшего, если CB1.ItemIndex = 1 то соответственно с большего.

Алгоритм провереный, из книжки. А он, падла, всё равно не сортирует :(

Написал, к примеру, 5 1 3. Нажал "сортировать по малому", а он, в место 1 3 5 , выдаёт 5 3 3 , если нажимаю ещё раз, то вообше 5 123012301230 123012301230.

procedure TForm1.Button4Click(Sender: TObject);
begin
N:= ListBox1.Items.Count;
SetLength(MassTMP,1);
SetLength(Mass,ListBox1.Items.Count); /// BUILD MASS ///
For i:=0 to ListBox1.Items.Count-1 do
begin
Mass[i].recitem1 := ListBox1.Items[i]; /// VSJO IZ LB V MASS ///
Mass[i].recitem2 := ListBox2.Items[i]; /// VSJO IZ LB V MASS ///
Mass[i].recitem3 := ListBox3.Items[i]; /// VSJO IZ LB V MASS ///
Mass[i].recitem4 := ListBox4.Items[i]; /// VSJO IZ LB V MASS ///
Mass[i].recitem5 := StrToInt ( ListBox5.Items[i] ); ////////////
end; /////////////////////////////// FU, POLOZHILI... //////////


If CB1.ItemIndex = 0 then ///// esli po MALOMU ( main )
begin
for i:=2 to N do
for j:=N downto i do
if Mass[j-1].recitem5 < Mass[j].recitem5 then
begin
MassTMP[0].recitem5 :=Mass[j].recitem5;
Mass[j-1].recitem5 :=MassTMP[0].recitem5;
end;
end;


If CB1.ItemIndex = 1 then ///// esli po BOLJSHOMU ( max )
begin
for i:=2 to N do
for j:=N downto i do
if Mass[j-1].recitem5 > Mass[j].recitem5 then
begin
MassTMP[0].recitem5 :=Mass[j].recitem5;
Mass[j-1].recitem5 :=MassTMP[0].recitem5;
end;
end;



For i:=0 to ListBox1.Items.Count-1 do ///// KLADJOM VSJO IZ MASSIVA V LISTBOX
begin
ListBox1.Items[i]:=Mass[i].recitem1;
ListBox2.Items[i]:=Mass[i].recitem2;
ListBox3.Items[i]:=Mass[i].recitem3;
ListBox4.Items[i]:=Mass[i].recitem4;
ListBox5.Items[i]:=IntToStr(Mass[i].recitem5);
end;


end;


Спасибо!


 
DrPass ©   (2003-05-01 21:50) [1]

Молодой человек! Если вы не можете сами написать алгоритм пузырьковой сортировки, а сдираете его из книжки (причем с ошибкой, книжки тоже лохи часто пишут) и даже не можете исправить - то вам нужно было поступать на филфак или религиоведение.
If CB1.ItemIndex = 0 then ///// esli po MALOMU ( main )
begin
for i:=2 to N do
for j:=N downto i do
if Mass[j-1].recitem5 < Mass[j].recitem5 then
begin
MassTMP[0].recitem5 :=Mass[j].recitem5;
Mass[j].recitem5:=Mass[j-1].recitem5;
Mass[j-1].recitem5 :=MassTMP[0].recitem5;
end;
end;
Попробуй исправить второй фрагмент -"по-большому" (звучит, как дефекация :-) Если получится, значит, не все потеряно


 
Fenik ©   (2003-05-02 00:58) [2]

Что, прямо так в книге написано??? Что за книга?
???????????????
N:= ListBox1.Items.Count;
...
SetLength(Mass, ListBox1.Items.Count); /// BUILD MASS ///
For i:=0 to ListBox1.Items.Count-1 do

???????????????

SetLength(MassTMP,1);

???????????????

Вы хоть знаете, что значит "падла"?


 
Rradion   (2003-05-02 13:17) [3]

"СОРТИР. ПО БОЛьШОМУ" это думано сортировка начиная с наибольшего ;) ... шутачкис.

А с алгоритмом в натуре дуреё! Ну вот, всё как ДрПасс написал.

If CB1.ItemIndex = 0 then ///// esli po MALOMU ( min )
begin
for i:=2 to N do
for j:=N downto i do
if Mass[j-1].recitem5 < Mass[j].recitem5 then
begin
MassTMP[0].recitem5 :=Mass[j].recitem5;
Mass[j].recitem5:=Mass[j-1].recitem5;
Mass[j-1].recitem5 :=MassTMP[0].recitem5;
end;
end;


Опять ввожу 5 1 3 , нажимаю "по малому :) " а он, в место 1 3 5 , выдаёт 5 3 1. Нажимаю ещё раз, теперь уже 5 123012301230 3. Если нажать ещё то вместо 3, получаем 84208516......


 
Rradion   (2003-05-02 14:57) [4]

Да... попробовал написать просто програмку с одним ЛистБоксом, Едитом и двумя кнопками. Первая кнопка кладёт цифру из Едита в ЛБ, а вторая строит из ЛБ Массив, сортирует его и кладёт обратно.

VAR
Tmp,N,i,j:integer;
Mass:array of integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

N:= ListBox1.Items.Count;

SetLength(Mass,N); /// BUILD MASS ///

For i:=0 to ListBox1.Items.Count-1 do
Mass[i]:= StrToInt (ListBox1.Items[i]); /// VSJO IZ LB V MASS ///

for i:=2 to N do
for j:=N downto i do
if Mass[j-1]>Mass[j] then
begin
Tmp:=Mass[j];
Mass[j]:=Mass[j-1];
Mass[j-1]:=Tmp;
end;

For i:=0 to ListBox1.Items.Count-1 do
ListBox1.Items[i]:= IntToStr(Mass[i]);


end;

end.


Получается следуюшие Project test.exe raised exception class EInvalidPointer with message "Invalid pointer operation". Process stopped. Use Step ot Run to continue.

Хоть в петлю лезь :)


 
Palladin ©   (2003-05-02 16:34) [5]

лезь
если не понимаешь чего пишешь, то лезь

подскажу только что ошибка здесь
for i:=2 to N do
for j:=N downto i do
if Mass[j-1]>Mass[j] then
begin
Tmp:=Mass[j];
Mass[j]:=Mass[j-1];
Mass[j-1]:=Tmp;
end;



 
MsGuns ©   (2003-05-02 16:55) [6]

>SetLength(Mass,N); /// BUILD MASS ///

Создали динамический массив с N элементами, индексируемыми так: 0,1,2,... N -1

for i:=2 to N do
for j:= N downto i do

Вот он и вылетает

Вообще-то для "передора" элементов массивов рекомендуется вместо
for i:=0 to N-1
использовать конструкцию
for i:=LOW(MyArray) to HIGH(MyArray) do






 
Rradion   (2003-05-02 18:47) [7]

Ура! Работает, спасибо!
А книгу то ету наш припод писал... вроди умный человек ;) .

If CB1.ItemIndex = 1 then ///// SORTIR. PO BOLJSHOMU ( max )
begin
for i:= 1 to N do
for j:=N-1 downto i do
if Mass[j-1].recitem5 < Mass[j].recitem5 then
begin
MassTMP[0].recitem5 :=Mass[j].recitem5;
Mass[j].recitem5:=Mass[j-1].recitem5;
Mass[j-1].recitem5 :=MassTMP[0].recitem5;
end;
end;


 
evvcom ©   (2003-05-04 01:20) [8]


> А книгу то ету наш припод писал... вроди умный человек ;)


Не все преподы - умные люди, хотя и не стоит вроде говорить об этом, чтобы не развращать ленивых студентов.
Один из моих преподов в те далекие времена задал мне на переэкзаменовке один простенький вопрос: "Где хранится программа, написанная пользователем, в то время, когда она выполняется?" Я естественно ответил "В ОЗУ". После очень долгих разбирательств, выяснения всех известных мне типов памяти, он наконец подвел меня к "правильному" ответу и сидит ждет. Я с большим трудом выдавил из себя, но в виде вопроса: "В ПЗУ что-ли?" Тут он радостный, что у меня еще не все потеряно, что есть надежды на мое дальнейшее благополучное обучение, воскликнул "Ну наконец-то, правильно!" поставил трешку и отпустил. Были и другие преподы, но менее "выдающиеся", так что...



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

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

Наверх




Память: 0.5 MB
Время: 0.012 c
9-46558
DWA
2002-11-30 16:08
2003.05.15
Поменять разрешение


14-46954
SergeySH
2003-04-24 17:46
2003.05.15
Помогите перевести на Паскаль!


14-46905
RavenD
2003-04-28 15:18
2003.05.15
Как по Break у выйти из нескольких блоков?


1-46712
.::D.e.M.o.N.i.X::.
2003-05-04 05:40
2003.05.15
Как поймать сообщения консоли?


14-46936
ZeroDivide
2003-04-23 16:06
2003.05.15
Delphi challenge. Авторские права и стимул соревнований