![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
status |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 35 Пол: Мужской Реальное имя: andrey Репутация: ![]() ![]() ![]() |
Задача : Дана последовательность чисел. Построить последовательность номеров позиций, откуда начинаются подряд идущие значения, расположенные в порядке убывания.
Помогите пожалуйста, я не совсем понимаю что и как надо сделать в этой задаче! Объясните пожалуйста как решить эту задачу. ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Зайди вот сюда: Массивы. Матрицы. Типичные задачи -> Как найти в массиве максимальную возрастающую последовательность символов?
может, это чем-то поможет... (сам принцип поиска для возрастающей и для убывающей последовательности - одинаков) |
status |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 35 Пол: Мужской Реальное имя: andrey Репутация: ![]() ![]() ![]() |
спасибо , сейчас посмотрю!
|
status |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 35 Пол: Мужской Реальное имя: andrey Репутация: ![]() ![]() ![]() |
Пересмотрел всё , видимо мне не дано сообразить её! помогите решить!
|
status |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 35 Пол: Мужской Реальное имя: andrey Репутация: ![]() ![]() ![]() |
А возможно решить эту задачу без использования массивов?
Сообщение отредактировано: status - 21.11.2006 18:32 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Можно... У меня в каждый момент времени сравниваются только 2 жлемента: текущий и предыдущий, поэтому:
const
n = 15;
function find_ascend(var max: integer): integer;
var curr, start: integer;
prevArr, nextArr: integer;
function check_max(i: integer): integer;
begin
if max < curr then
begin
max := curr;
check_max := i - curr + byte(i = pred(n))
end
else check_max := start
end;
var
i: integer;
begin
write('--> '); readln(prevArr);
max := 0; curr := 1;
start := 1;
for i := 1 to pred(n) do
begin
write('--> '); readln(nextArr);
if prevArr < nextArr then
inc(curr)
else
begin
start := check_max(i);
curr := 1
end;
prevArr := nextArr;
end;
start := check_max(i);
find_ascend := start
end;
var _start, _max: integer;
begin
_start := find_ascend(_max);
writeln('start = ', _start, ' len = ', _max)
end.
(от N лень было избавляться, просто организуй ввод так, чтобы при вводе определенного значения он прекращался)Как видишь, массивы не используются. |
status |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 35 Пол: Мужской Реальное имя: andrey Репутация: ![]() ![]() ![]() |
Наверно я неправильно выразился или просто не понел!
Вот мне в визуальной програме дана последовательность которая вводится в ListBox и надо построить новую последовательность номеров позиций, откуда начинаются подряд идущие значения, расположенные в порядке убывания и вывести в другой ListBox . На сколько я понимаю это решение должно быть гораздо проще предложеного. На сколько я правильно всё понимаю??! ![]() |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Ты опять недоговариваешь...
Допустим, вот содержимое твоего ListBox1: Цитата 2 Что должно быть в ListBox2? 3,4,5,6? С какой стати? Есть же еще одна последовательность, получается, что ЭТА - не является убывающей... 7,8,9? А почему именно ЭТА? Есть же более длинная?3 5 9 // индекс = 3 8 7 6 8 // индекс = 7 7 6 Ты ПОЛНОСТЬЮ условие поставь... Что ИМЕННО ты хочешь находить? Максимальную? Завершающую? Первую? Телепатов у нас нет... |
Michael_Rybak |
![]()
Сообщение
#9
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
|
status |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 35 Пол: Мужской Реальное имя: andrey Репутация: ![]() ![]() ![]() |
Цитата Если мне дано в Listbox1: 2 3 2 1 10 9 20 15 4 30 То в ListBox2 получится: 1 4 {номера позиций откуда начинаются подряд идущие значения, расположенные в порядке убывания} 6 Сообщение отредактировано: status - 23.11.2006 18:25 |
status |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 35 Пол: Мужской Реальное имя: andrey Репутация: ![]() ![]() ![]() |
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
i:=0;
Listbox2.Items.Clear;
Repeat
if StrToInt(Listbox1.Items[i])>StrToInt(Listbox1.Items[i+1]) then
begin
Listbox2.Items.Add(IntToStr(i));
While StrToInt(Listbox1.Items[i])>StrToInt(Listbox1.Items[i+1]) do inc(i)
end;
inc(i);
Until i=Listbox1.Items.Count-1;
end;
end.
Вот написал , ответ выдает но при этом и выдает какуюто ошибку! Проверте пожалуйста в чем могут быть проблемы! Эскизы прикрепленных изображений ![]() |
status |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 35 Пол: Мужской Реальное имя: andrey Репутация: ![]() ![]() ![]() |
ПОМОГИТЕ ПОЖАЛУЙСТА!
![]() |
Reptile |
![]()
Сообщение
#13
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 14 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вылазиш за пределы Listbox1.Items
|
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 4:55 |