| 
| 
 | Вопрос # 2 867/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!дан одномерный массив, отсортированный по возрастанию. нужно вставить в него элемен S, при этом не нарушая упорядочености.
 Заранее спасибо!!!
 
|  |   Вопрос задал: I{ () T (статус: Посетитель)Вопрос отправлен: 31 мая 2009, 08:46
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Проще пареной репы.Допустим, массив динамический. Тогда:
 
 procedure InsertElement(var A: TDynArray; const X: Integer);
var
  Index, Place: Integer;
begin
  // Нахожу место, куда вставлять элемент. Как только текущий элемент
  // будет не меньше Х - мосто найдено
  Place:= Length(A);
 
  for Index:= 0 to Length(A) - 1 do
    if A[Index] >= X
      then begin
             Place:= Index;
             Break;
           end;
 
  // Сдвигаю элементы в строноу конца массива, начиная с A[Place + 1]
  SetLength(A, Length(A) + 1); // <-- увеличиваю длину массива на 1
  for Index:= Length(A) - 1 downto Place + 1 do
    A[Index]:= A[Index - 1];
 
  // Вставляю Х на место Place
  A[Place]:= X;
end;Код отлажен. Тестовое приложение - в прицепе к ответу.
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 31 мая 2009, 10:19
 
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 31 мая 2009, 11:24; участников в обсуждении: 4. 
|   | Ozz (статус: Посетитель), 31 мая 2009, 09:40 [#1]:Т.е. идут например числа от 1 до 8, тебе надо вставить число 5? Если да, то добавь этот элемент в массив и опять отсортируй... |  
|   | Dron (статус: Студент), 31 мая 2009, 10:11 [#2]:Да зачем сортировать заново? Циклом идём по массиву и сравниваем текущий элемент с тем, который нужно вставить. Если текущий стал больше (в случае, если массив по возрастанию), то вставляем наш элемент в предыдущую позицию. С уважением. |  
|   | I{ () T (статус: Посетитель), 31 мая 2009, 10:48 [#3]:но как добавить?? я код не могу написать как добавить((?? массив по возрастанию у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | min@y™ (статус: Доктор наук), 31 мая 2009, 11:24 [#4]: Цитата: но как добавить?? я код не могу написать как добавить((?? массив по возрастанию  
 Ты мой ответ смотрел?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |