|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Удаление элемента из одномерного массива
Мне задали курсач на тему "Определение опорного плана транспортной задачи методом дифференцированных рент" и мне нужно написать программу для вычисления таких задач.
В процессе написания программы, я столкнулся с проблемой... в общем у меня есть одномерный массив состоящий из 5 элементов. В идеале в массиве нужно найти наименьший по значению элемент, записать его значение в другую переменную и искать следующий наименьший элемент тем же способом(цикл).И этот цикл заканчивается тогда когда переменная z1=0. Я нашел в массиве и записал ПЕРВЫЙ наименьший элемент, а все последующие... что бы я не делал, ничего не получается. Программа либо зацикливается, либо вообще ниче не работает... Подскажите как лучше сделать, очень надо... Последний раз редактировалось TheVenom, 29.12.2011 в 21:03. Причина: Очень срочно: |
#2
|
||||
|
||||
Ваш код приведите, пожалуйста.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
TheVenom (30.12.2011)
|
#3
|
|||
|
|||
Если надо удалить элемент, то тут такой вопрос - а какой массив у вас, статический или динамический. Подготовительные работы одинаковые, т.е. надо все элементы после удаляемого сдвинуть на 1 позицию влево, т.е. A[3] -> A[2], A[4] -> A[3], A[5]->A[4], именно в таком порядке, т.е.
Код:
var I, Idx : Integer; begin Idx := 2; // remove 2nd item For I := Idx To High(A)-1 Do A[i] := A[I+1]; а вот потом либо надо переразмерить массив, либо признак конца массива уменьшить на 1. |
#4
|
||||
|
||||
Либо я чего-то непонимаю, либо вы не так объясняете. Наименьший элемент ищется элементарно:
Код:
Min := Arr[1]; for i := 2 to N do if Arr[i] < Min then Min := Arr[i]; Но зачем вообще так делать, если можно просто отсортировать массив по убыванию и все. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
TheVenom (30.12.2011)
|
#5
|
|||
|
|||
или отсортировать и выбирать по порядку
|
#6
|
|||
|
|||
проблема состоит не в том чтобы найти наименьший элемент, а в том чтобы найти "следующий" наименьший элемент. У меня была идея сделать это с помощью цикла, так чтобы в конце цикла массив сокращался(т.е. наименьший элемент удалялся), но в этом случае программа по каким то причинам зацикливается, выводит ошибку или вообще выводит какие то левые цифры непонятно откуда. Вот мой код посмотрите, что с ним можно сделать...
Код:
procedure TForm1.BitBtn2Click(Sender: TObject); var byteArray : Array of Byte; i:integer; min1,x1,yy1,z1: Integer; begin SetLength(byteArray, 5); for i := 0 to 4 do byteArray[i] := i * 5; byteArray[0] := StrToInt(Edit1.Text); byteArray[1] := StrToInt(Edit2.Text); byteArray[2] := StrToInt(Edit3.Text); byteArray[3] := StrToInt(Edit4.Text); byteArray[4] := StrToInt(Edit5.Text); z1:=0; min1:= byteArray[0]; for i := 1 to 4 do if byteArray[i] < min1 then min1 := byteArray[i]; if (min1 = byteArray[0]) then Edit1.Color:=clLime; if (min1 = byteArray[1]) then Edit2.Color:=clLime; if (min1 = byteArray[2]) then Edit3.Color:=clLime; if (min1 = byteArray[3]) then Edit4.Color:=clLime; if (min1 = byteArray[4]) then Edit5.Color:=clLime; x1:= StrToInt(Edit21.Text); if (min1 = byteArray[0]) then yy1:= StrToInt(Edit16.text); if (min1 = byteArray[1]) then yy1:= StrToInt(Edit17.text); if (min1 = byteArray[2]) then yy1:= StrToInt(Edit18.text); if (min1 = byteArray[3]) then yy1:= StrToInt(Edit19.text); if (min1 = byteArray[4]) then yy1:= StrToInt(Edit20.text); z1:=x1-yy1-z1; Label16.Caption:= IntToStr(z1); end; Последний раз редактировалось Admin, 29.12.2011 в 20:32. |
#7
|
||||
|
||||
Код:
for i := 0 to 4 do byteArray[i] := i * 5; Код:
byteArray[0] := StrToInt(Edit1.Text); byteArray[1] := StrToInt(Edit2.Text); byteArray[2] := StrToInt(Edit3.Text); byteArray[3] := StrToInt(Edit4.Text); byteArray[4] := StrToInt(Edit5.Text); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
TheVenom (30.12.2011)
|
#8
|
|||
|
|||
Допустим, min1 = byteArray[0] , тогда мне нужно в конце цикла удалить byteArray[0] из массива и икать следующий наименьший элемент до тех тор пока z1 не станет =0, т.е. "until (z1=0);". Как мне лучше это сделать?
|
#9
|
|||
|
|||
Цитата:
|
#10
|
|||
|
|||
Как вариант - находишь наименьший элемент, сделал с ним всё что нужно, присвоил ему значение наибольшего элемента, опять нашел наименьший и т.д.
|
#11
|
|||
|
|||
Хм... в принципе да, но все же хотелось бы сделать по нормальному)))
|
#12
|
|||
|
|||
просто я подумал и понял что этот вариант не подойдет(((
Цитата:
|