Форум: "Основная";
Текущий архив: 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.009 c