Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
7-47021
HAlexx
2003-03-19 12:02
2003.05.15
Замена нажатой кнопки


3-46576
AlexAlex
2003-04-21 13:21
2003.05.15
Проблемы с типом Float на Informix при переходе PC ->Sun


9-46557
Fog
2002-12-09 12:50
2003.05.15
GlUt


14-46929
NetBreaker666
2003-04-25 15:06
2003.05.15
Админам:


1-46743
tytus
2003-05-05 09:34
2003.05.15
invalidate





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