максимальный элемент массива из заданного интервала

)(aTaBbl4
Сообщения: 18
Зарегистрирован: 01 мар 2009, 14:37

26 мар 2009, 18:03

Помогите плз! Выбрать в заданной матрице максимальный элемент из заданного интервала! (интервал любой).
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

26 мар 2009, 18:21

Непонятно, интервала чего?
В рассмотрение не берутся элементы, значения которых не входят в нейкий интервал?
)(aTaBbl4
Сообщения: 18
Зарегистрирован: 01 мар 2009, 14:37

26 мар 2009, 19:50

Ну да, допустим интервал от -12 до 33 и в этом интервале_найти MAX_элемент_матрицы
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

27 мар 2009, 00:22

Пусть Hi и Lo - границы интервала, N,M-размер, A(i,j) - массив

Код: Выделить всё

...
found=false
i=1: j=2
for i=1 to N: for j=1 to M
  if A(i,j)>=Lo and A(i,j)<=Hi then
    if found then 
      if A(i,j)>Max then Max=A(i,j)
    else
      Max=A(i,j) 
    end if
  end;
next:next
if found then
  print Max
else
  print "Нет чисел принадлежащих данному интервалу"
end if
)(aTaBbl4
Сообщения: 18
Зарегистрирован: 01 мар 2009, 14:37

27 мар 2009, 10:20

Что значит found=false??
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

27 мар 2009, 11:41

переменная found (по-русски "найден") изначально показывает, что пока не найдено ни одного элемента. Этот флаг помогает
1) внутри цикла отделить событие нахождения первого элемента в интервале, от события нахождения остальных
2) после цикла - определить найдено ли решение вообще.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

27 мар 2009, 11:46

Ну если так, тогда

Код: Выделить всё

...
found=false
i=1: j=2
for i=1 to N: for j=1 to M
  if A(i,j)>=Lo and A(i,j)<=Hi then
    if found then 
      if A(i,j)>Max then Max=A(i,j)
    else
      Max=A(i,j)
      Found = true 
    end if
  end;
next:next
if found then
  print Max
else
  print "Нет чисел принадлежащих данному интервалу"
end if
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

27 мар 2009, 11:54

somewhere, спасибо за испраление.
)(aTaBbl4, строку "i=1: j=2" надо еще убрать... Хотел поначалу while написать и со второго элемента пойти.
)(aTaBbl4
Сообщения: 18
Зарегистрирован: 01 мар 2009, 14:37

27 мар 2009, 13:09

Все_равно_непонятно_вод_прога
CLS
DO
INPUT "kol strok"; n
LOOP UNTIL (n >= 2) AND (n <= 15)
DO
INPUT "kol stolbcov"; m
LOOP UNTIL m >= 2 AND m <= 15
DIM a(n, m)
FOR i = 1 TO n
FOR j = 1 TO m
a(i, j) = INT(RND * 100 - 50)
PRINT USING "####"; a(i, j);
NEXT j
PRINT
NEXT i
INPUT "levii interval"; L
INPUT "pravii interval"; R
found = false
i = 1: j = 2
FOR i = 1 TO n: FOR j = 1 TO m
IF a(i, j) >= L AND a(i, j) <= R THEN
IF found THEN
IF a(i, j) > max THEN max = a(i, j)
ELSE
END IF
END IF
NEXT: NEXT
max = a(i, j)
IF found THEN
PRINT max
ELSE
PRINT "max element v intervale"
END IF
И_индекс_вне_диапозона.....
И можно ли решить без found = false, первый раз об таком слышу... =)
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

27 мар 2009, 13:33

ELSE
END IF
END IF
Пропущено две строки, внимательно читайте, а лучше пытайтесь понять алгоритм.
И можно ли решить без found = false, первый раз об таком слышу... =)
Можно, если предварительно сформировать новый (или использовать этот же) массив, применив к нему фильтр по диапазону значений. А уже потом использовать стандартный поиск максимума. Но данный способ не рационален для этой задачи.
It's a long way to the top if you wanna rock'n'roll
Ответить