Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачка на последовательность
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
kent
Помогите решить задачу, а то никак не получается ... sad.gif
Задача состоит в следующем: Дано целое число N и набор из N вещественных чисел. Если данный набор образует убывающую последовательность, то вывести 0; в противном случае вывести номер первого числа, нарушающего закономерность.
Вот всё что я додумался сделать:

var d:array [-1000..1000] of Real;
    N,i,k,t:Integer;
begin
     WriteLn;
     Write('Введите целое число N:');
     ReadLn(N);
     Write('Введите набор из N вещественных чисел:');
     t:=0;
     for i:=1 to N do
     begin
        t:=t+1;
        Read(d[i]);
        if d[i-1]<d[i] then
          k:=t
        else
          k:=0;
      end;
      WriteLn('k=',k);
      ReadLn;
end.


Но код работает не правильно, подскажите плиз как решить...
volvo
k := 0;
for i:=1 to N do begin
  ReadLn(d[i]); { именно ReadLn, а не Read !!! }
  if (i > 1) and (d[i-1]<d[i]) and (k = 0) then k:=i
end;


Только вот смысл такого объявления:
d:array [-1000..1000] of Real;
не совсем понятен... Зачем первые 1000 элементов (с отрицательными индексами)? Просто так?
kent
Большое спасибо volvo!!!

Цитата
Только вот смысл такого объявления:
d:array [-1000..1000] of Real;
не совсем понятен... Зачем первые 1000 элементов (с отрицательными индексами)? Просто так?

Да в принципе, так ещё можно и с отрицательными числами проверить...
volvo
По-моему, ты путаешь отрицательные числа и индексы... То, что ты написал, примерно равняется:
d:array [0..2000] of Real;
, только начало всего этого массива сдвинуто на 1000 элементов влево (за 0), и первый элемент массива будет не d[0], а d[-1000]...
volvo
Кстати, если тебе не нужно СОХРАНЯТЬ эту последовательность, то можно обойтись вообще без массива. Только с двумя переменными.
kent
Цитата(volvo @ 2.07.05 16:58)
По-моему, ты путаешь отрицательные числа и индексы... То, что ты написал, примерно равняется:
d:array [0..2000] of Real;
, только начало всего этого массива сдвинуто на 1000 элементов влево (за 0), и первый элемент массива будет не d[0], а d[-1000]...

Я этого не знал честно говоря, паскалем занимаюсь всего лишь две недели.
Спасибо что поправил...
Archon
Цитата
d:array [0..2000] of Real;
И не от нуля надо, а от единицы.
Цитата
for i:=1{<--- } to N do


и вообще зачем массив?

Предыдущие сообщения читаем ВНИМАТЕЛЬНО !!!
kent
Цитата
Кстати, если тебе не нужно СОХРАНЯТЬ эту последовательность, то можно обойтись вообще без массива. Только с двумя переменными.

А как не подскажешь? Массив это первое что пришло мне в голову...
Archon
kent, кстати, у тебя выводится последнее, а не первое число, нарушающее последовательность, и переменная t - совершенна лишняя (вместо неё можно ставить i).

Вот вариант без массива:
var new, old : Real;
    N,i,k : Integer;
begin
     WriteLn;
     Write('Введите целое число N:');
     ReadLn(N);
     Write('Введите набор из N вещественных чисел:');
     ReadLn(old);
     k := 0;
     for i := 2 to N do begin
       ReadLn(new);
       if (k = 0) and (new >= old) then k := i;
       old := new;
     end;
     WriteLn('k=', k);
     ReadLn;
end.


2 volvo: прошу прощения, когда я последний раз обновлял страницу, твоего поста ещё не было.
volvo
Цитата(Archon @ 2.07.05 16:43)
kent, кстати, у тебя выводится последнее, а не первое число, нарушающее последовательность, и переменная t - совершенна лишняя (вместо неё можно ставить i).


Естественно, когда ты писАл вот это, ВТОРОГО поста тоже еще не было?
Устное предупреждение.
klem4
Такой вопрос : обязательно вводить всю последовательность ? Ведь можно остановить ввод, когда найдено первое несоответствие, или по заданию обязательно полностью ввести сначала ?
kent
Archon, спасибо за вариант без массива!!!
-Archon-
Незачто. :D :D :D
Гость
Помогите адаптировать эту задачю под delphi 7!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.