Задача : Дана последовательность чисел. Построить последовательность номеров позиций, откуда начинаются подряд идущие значения, расположенные в порядке убывания.
Помогите пожалуйста, я не совсем понимаю что и как надо сделать в этой задаче! Объясните пожалуйста как решить эту задачу.
Пересмотрел всё , видимо мне не дано сообразить её! помогите решить!
status
21.11.2006 22:31
А возможно решить эту задачу без использования массивов?
volvo
21.11.2006 22:44
Можно... У меня в каждый момент времени сравниваются только 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;
var _start, _max: integer; begin _start := find_ascend(_max); writeln('start = ', _start, ' len = ', _max) end.
(от N лень было избавляться, просто организуй ввод так, чтобы при вводе определенного значения он прекращался)
Как видишь, массивы не используются.
status
22.11.2006 3:57
Наверно я неправильно выразился или просто не понел!
Вот мне в визуальной програме дана последовательность которая вводится в ListBox и надо построить новую последовательность номеров позиций, откуда начинаются подряд идущие значения, расположенные в порядке убывания и вывести в другой ListBox .
На сколько я понимаю это решение должно быть гораздо проще предложеного. На сколько я правильно всё понимаю??!
volvo
22.11.2006 4:12
Ты опять недоговариваешь...
Допустим, вот содержимое твоего ListBox1:
Цитата
2 3 5 9 // индекс = 3 8 7 6 8 // индекс = 7 7 6
Что должно быть в ListBox2? 3,4,5,6? С какой стати? Есть же еще одна последовательность, получается, что ЭТА - не является убывающей... 7,8,9? А почему именно ЭТА? Есть же более длинная?
Ты ПОЛНОСТЬЮ условие поставь... Что ИМЕННО ты хочешь находить? Максимальную? Завершающую? Первую? Телепатов у нас нет...
Michael_Rybak
22.11.2006 5:38
Цитата(volvo @ 21.11.2006 23:12)
Телепатов у нас нет...
То есть как это нет? А как же те, которые все время в отпуске?
status
22.11.2006 14:13
Цитата
Если мне дано в Listbox1: 2 3 2 1 10 9 20 15 4 30
То в ListBox2 получится: 1 4 {номера позиций откуда начинаются подряд идущие значения, расположенные в порядке убывания} 6
status
23.11.2006 22:40
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
29.11.2006 20:20
ПОМОГИТЕ ПОЖАЛУЙСТА!
Reptile
29.11.2006 21:54
Вылазиш за пределы Listbox1.Items
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.