Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 867

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
дан одномерный массив, отсортированный по возрастанию. нужно вставить в него элемен S, при этом не нарушая упорядочености.
Заранее спасибо!!!

I{ () T Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

Ozz (статус: Посетитель), 31 мая 2009, 09:40 [#1]:

Т.е. идут например числа от 1 до 8, тебе надо вставить число 5? Если да, то добавь этот элемент в массив и опять отсортируй...
Dron

Dron (статус: Студент), 31 мая 2009, 10:11 [#2]:

Да зачем сортировать заново? Циклом идём по массиву и сравниваем текущий элемент с тем, который нужно вставить. Если текущий стал больше (в случае, если массив по возрастанию), то вставляем наш элемент в предыдущую позицию.
С уважением.
I{ () T

I{ () T (статус: Посетитель), 31 мая 2009, 10:48 [#3]:

но как добавить?? я код не могу написать как добавить((?? массив по возрастанию
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

min@y™ (статус: Доктор наук), 31 мая 2009, 11:24 [#4]:

Цитата:

но как добавить?? я код не могу написать как добавить((?? массив по возрастанию


Ты мой ответ смотрел?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:49
Выполнено за 0.03 сек.