Очень нужна ваша помощь
|
|
Dasha_S | Дата: Четверг, 10.04.2008, 05:53 | Сообщение # 1 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Дан одномерный массив числовых значений, насчитывающий n элементов. Определить, образуют ли элементы массива, расположенные перед нулевым элементом, возрастающую последовательность. Препод сказал, что надо решать с использованием логической переменной f. Брать за первое условие что f:=true (возрастает), а потом выходить на цикл...
Сообщение отредактировал Dasha_S - Четверг, 10.04.2008, 05:53 |
|
| |
Alexander | Дата: Четверг, 10.04.2008, 06:02 | Сообщение # 2 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Code f:=true; i:=2; while Arr[i]<>0 do begin if Arr[i]<Arr[i-1] then begin f:=false; break; end; Inc(i); end; if f then WriteLn('Образуют') else WriteLn('Не образуют'); P.S. Предполагается, что массив описан как Arr[1..n] of ...; и что в нём есть нулевой элемент. P.S.S. Я так понял, что под нулевым элементом подразумевается элемент равный нулю.
Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Четверг, 10.04.2008, 06:08 |
|
| |
Dasha_S | Дата: Четверг, 10.04.2008, 06:30 | Сообщение # 3 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Вот что у меня в итоге получилось... но после ввода массива он мне ничего не выдает... program mas; var i,n:integer; f:boolean; a:array [0..10] of integer; begin write ('n'); readln (n); for i:=1 to n do begin write ('a[',i,']='); readln (a[i]); end; дальше вообще ничего не выдает... f:=true for i:=1 to n do while a[i]<>0 do if a[i]<a[i+1] then поменяла знаки, чтобы он первый элемент тоже считал begin f:=false; break; end; if f then WriteLn('Образуют') else WriteLn('Не образуют'); end.
|
|
| |
Alexander | Дата: Четверг, 10.04.2008, 06:53 | Сообщение # 4 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Quote for i:=1 to n do while a[i]<>0 do Не... Так делать не нужно. Выберите один цикл, второй тут явно лишний, правельно pavel предлагал уделять больше времени оптимизации. Я вам показывал как обойтись одним циклом while. Тем более, что после встречи нулевого элемента цикл нужно прервать, а т.к. у вас их 2, то прервётся только 1, а значит результат будет не верным. Quote if a[i]<a[i+1] then поменяла знаки, чтобы он первый элемент тоже считал Это тоже не верно, в моём варианте "i" шло от двух и до последнего ненулевого элемента, сравнивая их с предыдущими. А у вас идёт с первого до последнего ненулевого, но сравнивает их с последующим, т.е. последнее сравнение будет с нулём. Ой, так почему у вас "a[i]<a[i+1]"??? У вас ведь по возрастанию! Значит если последующий(i+1) меньше, то выходим! Учитывая выше сказанное попробуйте исправить ошибки. Если не получится, то пишите.
Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Четверг, 10.04.2008, 06:56 |
|
| |
Dasha_S | Дата: Четверг, 10.04.2008, 07:12 | Сообщение # 5 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| изменила, но теперь он в любом случае выдает "не образует" program mas; var i,n:integer; f:boolean; a:array [1..10] of integer; begin write ('n'); readln (n); for i:=1 to n do begin write ('a[',i,']='); readln (a[i]); end; f:=true; i:=2; while a[i]<>0 do if a[i]>a[i-1] then begin f:=false; break; end; inc(i); end; if f then WriteLn('Образуют') else WriteLn('Не образуют'); end.
|
|
| |
Alexander | Дата: Четверг, 10.04.2008, 07:32 | Сообщение # 6 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Да что же вам это место никак не даётся?! Смотрите, вам нужно, чтобы элементы шли по возрастанию, т.е. второй элемент был больше первого, а третий больше второго и т.д. Вот какому условию должен удовлетворять каждый i-тый элемент возрастающей последовательности: i-1 < i < i+1. Если элемент не удовлетворяет этому условию, то это не возрастающая последовательность. А вы сначала проверяли "if a[i]<a[i+1]", теперь проверяете "a[i] >a [i-1]" и если верно, то прерываете цикл, говоря, что последовательность не возрастающая. В действительности, если предыдущий больше последующего, то последовательность не возрастающая. И в цикле while составной оператор, вы begin забыли.
Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Четверг, 10.04.2008, 07:33 |
|
| |
Dasha_S | Дата: Четверг, 10.04.2008, 07:48 | Сообщение # 7 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| это ужас какой-то, потому что в час ночи мозг отказывается работать =)) я изменила условие на if (a[i-1]<a[i]) and (a[i]<a[i+1]) then но он все равно "не образовывает" выдает...
|
|
| |
Alexander | Дата: Четверг, 10.04.2008, 08:01 | Сообщение # 8 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Условие должно быть "a[i]<a[i-1]" смотрите мой первый пост. это условие ВЫХОДА из цикла. При условии, что каждый элемент удовлетворяет условию a[i-1]<a[i], последовательность возрастающая, а мы ищем место, где это условие НЕ выполняется. Если мы такого места не находим, то последовательность возрастающая. P.S. Мы кстати решали для неубывающей последовательности . Для возрастающей условие будет "a[i]<=a[i-1]". P.S.S. если вам срочно нужно, то я могу просто готовый вариант выложить.
Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Четверг, 10.04.2008, 08:02 |
|
| |
Dasha_S | Дата: Четверг, 10.04.2008, 08:07 | Сообщение # 9 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Ооо!!! Она заработала!!! А я почувствовала себя истинной блондинкой! Alexander, огромное-преогромное спасибо!!!!!!!!!!!
|
|
| |
Pavel | Дата: Среда, 23.04.2008, 16:09 | Сообщение # 10 |
Приближенный
Группа: Модераторы
Сообщений: 210
Статус: Offline
| Молодчина, Alexander!
|
|
| |
Pavel | Дата: Среда, 23.04.2008, 16:13 | Сообщение # 11 |
Приближенный
Группа: Модераторы
Сообщений: 210
Статус: Offline
| Такое ощущение, что вы, Dasha_S, начинаете решать задачу прямо в среде разработки, если что не дается на лету, то пишем алгоритм словами или блок схемой. Потом проверяем тоже на бумажке. Вот у меня когда компа не было (аж 2 года) мне приходилось делать задачки на бумаге, а в институте только напечатать и получить верные решение. Это кстати заставляет думать. Я так думаю. Не сочтите за флуд.
|
|
| |
Alexander | Дата: Среда, 23.04.2008, 18:27 | Сообщение # 12 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Quote Это кстати заставляет думать. Ненавижу думать . Исключения- математика и программирование .
Скажем дружно- нафиг нужно!
|
|
| |