Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Обработка последовательностей значений

Автор: status 21.11.2006 1:52

Задача : Дана последовательность чисел. Построить последовательность номеров позиций, откуда начинаются подряд идущие значения, расположенные в порядке убывания.

Помогите пожалуйста, я не совсем понимаю что и как надо сделать в этой задаче! Объясните пожалуйста как решить эту задачу. unsure.gif

Автор: volvo 21.11.2006 1:55

Зайди вот сюда: http://forum.pascal.net.ru/index.php?s=&showtopic=2694&view=findpost&p=32774
может, это чем-то поможет... (сам принцип поиска для возрастающей и для убывающей последовательности - одинаков)

Автор: status 21.11.2006 1:59

спасибо , сейчас посмотрю!

Автор: status 21.11.2006 3:22

Пересмотрел всё , видимо мне не дано сообразить её! помогите решить!

Автор: 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;

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 22.11.2006 3:57

Наверно я неправильно выразился или просто не понел!

Вот мне в визуальной програме дана последовательность которая вводится в ListBox и надо построить новую последовательность номеров позиций, откуда начинаются подряд идущие значения, расположенные в порядке убывания и вывести в другой ListBox .

На сколько я понимаю это решение должно быть гораздо проще предложеного. На сколько я правильно всё понимаю??! unsure.gif

Автор: 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

ПОМОГИТЕ ПОЖАЛУЙСТА! unsure.gif

Автор: Reptile 29.11.2006 21:54

Вылазиш за пределы Listbox1.Items