Пятница, 24.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Очень нужна ваша помощь
Dasha_SДата: Четверг, 10.04.2008, 05:53 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Дан одномерный массив числовых значений, насчитывающий n элементов. Определить, образуют ли элементы массива, расположенные перед нулевым элементом, возрастающую последовательность.

Препод сказал, что надо решать с использованием логической переменной f. Брать за первое условие что f:=true (возрастает), а потом выходить на цикл...

Сообщение отредактировал Dasha_S - Четверг, 10.04.2008, 05:53
 
AlexanderДата: Четверг, 10.04.2008, 06:02 | Сообщение # 2
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: 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
Репутация: 0
Замечания: 0%
Статус: 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
Репутация: 16
Замечания: 0%
Статус: 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
Репутация: 0
Замечания: 0%
Статус: 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
Репутация: 16
Замечания: 0%
Статус: Offline
Quote
if a[i]>a[i-1] then

Да что же вам это место никак не даётся?! Смотрите, вам нужно, чтобы элементы шли по возрастанию, т.е. второй элемент был больше первого, а третий больше второго и т.д. Вот какому условию должен удовлетворять каждый 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
Репутация: 0
Замечания: 0%
Статус: Offline
это ужас какой-то, потому что в час ночи мозг отказывается работать =))
я изменила условие на
if (a[i-1]<a[i]) and (a[i]<a[i+1]) then

но он все равно "не образовывает" выдает...

 
AlexanderДата: Четверг, 10.04.2008, 08:01 | Сообщение # 8
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Условие должно быть "a[i]<a[i-1]" смотрите мой первый пост.
это условие ВЫХОДА из цикла.
При условии, что каждый элемент удовлетворяет условию a[i-1]<a[i], последовательность возрастающая, а мы ищем место, где это условие НЕ выполняется. Если мы такого места не находим, то последовательность возрастающая.
P.S. Мы кстати решали для неубывающей последовательности biggrin . Для возрастающей условие будет "a[i]<=a[i-1]".
P.S.S. если вам срочно нужно, то я могу просто готовый вариант выложить.


Скажем дружно- нафиг нужно!

Сообщение отредактировал Alexander - Четверг, 10.04.2008, 08:02
 
Dasha_SДата: Четверг, 10.04.2008, 08:07 | Сообщение # 9
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Ооо!!! Она заработала!!! А я почувствовала себя истинной блондинкой! biggrin
Alexander, огромное-преогромное спасибо!!!!!!!!!!!
 
PavelДата: Среда, 23.04.2008, 16:09 | Сообщение # 10
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Молодчина, Alexander!
 
PavelДата: Среда, 23.04.2008, 16:13 | Сообщение # 11
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Такое ощущение, что вы, Dasha_S, начинаете решать задачу прямо в среде разработки, если что не дается на лету, то пишем алгоритм словами или блок схемой. Потом проверяем тоже на бумажке. Вот у меня когда компа не было (аж 2 года) мне приходилось делать задачки на бумаге, а в институте только напечатать и получить верные решение. Это кстати заставляет думать. Я так думаю. biggrin Не сочтите за флуд.
 
AlexanderДата: Среда, 23.04.2008, 18:27 | Сообщение # 12
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote
Это кстати заставляет думать.

Ненавижу думать angry . Исключения- математика и программирование biggrin .


Скажем дружно- нафиг нужно!
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;