IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задачка на последовательность, никак не могу решить
kent
сообщение 2.07.2005 15:32
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Мужской
Реальное имя: Андрей

Репутация: -  1  +


Помогите решить задачу, а то никак не получается ... 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.


Но код работает не правильно, подскажите плиз как решить...

Сообщение отредактировано: kent - 2.07.2005 15:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 2.07.2005 15:43
Сообщение #2


Гость






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
сообщение 2.07.2005 15:50
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Мужской
Реальное имя: Андрей

Репутация: -  1  +


Большое спасибо volvo!!!

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

Да в принципе, так ещё можно и с отрицательными числами проверить...

Сообщение отредактировано: kent - 2.07.2005 15:51
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 2.07.2005 15:58
Сообщение #4


Гость






По-моему, ты путаешь отрицательные числа и индексы... То, что ты написал, примерно равняется:
d:array [0..2000] of Real;
, только начало всего этого массива сдвинуто на 1000 элементов влево (за 0), и первый элемент массива будет не d[0], а d[-1000]...
 К началу страницы 
+ Ответить 
volvo
сообщение 2.07.2005 16:14
Сообщение #5


Гость






Кстати, если тебе не нужно СОХРАНЯТЬ эту последовательность, то можно обойтись вообще без массива. Только с двумя переменными.
 К началу страницы 
+ Ответить 
kent
сообщение 2.07.2005 16:16
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Мужской
Реальное имя: Андрей

Репутация: -  1  +


Цитата(volvo @ 2.07.05 16:58)
По-моему, ты путаешь отрицательные числа и индексы... То, что ты написал, примерно равняется:
d:array [0..2000] of Real;
, только начало всего этого массива сдвинуто на 1000 элементов влево (за 0), и первый элемент массива будет не d[0], а d[-1000]...

Я этого не знал честно говоря, паскалем занимаюсь всего лишь две недели.
Спасибо что поправил...

Сообщение отредактировано: kent - 2.07.2005 16:19
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 2.07.2005 16:16
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Цитата
d:array [0..2000] of Real;
И не от нуля надо, а от единицы.
Цитата
for i:=1{<--- } to N do


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

Предыдущие сообщения читаем ВНИМАТЕЛЬНО !!!

Сообщение отредактировано: volvo - 2.07.2005 16:18


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kent
сообщение 2.07.2005 16:20
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Мужской
Реальное имя: Андрей

Репутация: -  1  +


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

А как не подскажешь? Массив это первое что пришло мне в голову...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 2.07.2005 16:43
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


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: прошу прощения, когда я последний раз обновлял страницу, твоего поста ещё не было.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 2.07.2005 16:45
Сообщение #10


Гость






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


Естественно, когда ты писАл вот это, ВТОРОГО поста тоже еще не было?
Устное предупреждение.
 К началу страницы 
+ Ответить 
klem4
сообщение 2.07.2005 16:47
Сообщение #11


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Такой вопрос : обязательно вводить всю последовательность ? Ведь можно остановить ввод, когда найдено первое несоответствие, или по заданию обязательно полностью ввести сначала ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kent
сообщение 2.07.2005 19:23
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Мужской
Реальное имя: Андрей

Репутация: -  1  +


Archon, спасибо за вариант без массива!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Archon-
сообщение 2.07.2005 20:06
Сообщение #13


Гость






Незачто. :D :D :D
 К началу страницы 
+ Ответить 
Гость
сообщение 29.04.2013 23:49
Сообщение #14


Гость






Помогите адаптировать эту задачю под delphi 7!
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 23:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"