Вопрос задан 16.06.2023 в 03:00. Предмет Информатика. Спрашивает Титов Кирилл.

Пусть задан массив Аi={34, 16, 16, 2, 2, 0, -4, -4}, фрагмент программы L:=1; r:=n; flag:=false;

Repeat m:=(l+r)div 2; if a[m]>key then l:=m+1 else if a[m]=key then flag:=true else r:=m-1; until flag or (l>r); Чему будет равно значение переменной m после выполнения цикла, при key=-4?
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Шапка Макс.

т.к. n заранее не дано(и это все лишь фрагмент кода) то m при разных n будет получаться разный. n лежит в промежутке [-2;8]

потому, что тут m:=(l+r)div 2; при n<-2 получается индекс <0

и при n>8  в цикле индекс >7

а массив у нас всего 8 элементов

Поэтому в цикле я вывел все значения m при всех возможных значениях n

Надеюсь понятно объяснил.

при n=-2   m=0

при n=-1   m=0

при n=0   m=0

при n=1   m=1

при n=2   m=2

при n=3   m=3

при n=4   m=4

при n=5   m=5

при n=6   m=6

при n=7   m=6

при n=8   m=6

Pascal

var

 a:array [0..7] of integer = (34, 16, 16, 2, 2, 0, -4, -4);

 l, n, m, key, r:integer;

 flag:boolean;

begin

 for n:=-2 to 8 do begin

   key:=-4;

   L:=1;

   r:=n;

   flag:=false;

   Repeat

     m:=(l+r)div 2;

     if a[m]>key then

       l:=m+1

     else

      if a[m]=key then

        flag:=true

      else

        r:=m-1;

   until flag or (l>r);

   writeln('при n=',n,'   m=', m);

 end;

end.


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для понимания значения переменной m после выполнения цикла, необходимо проанализировать код.

В данном фрагменте программы используется алгоритм бинарного поиска, предполагая, что массив a[] уже отсортирован в порядке убывания (с учетом условия l:=1; r:=n;).

Переменная key задает значение, которое мы ищем в массиве. В данном случае key=-4.

В начале цикла устанавливаются начальные значения для переменных l, r и flag. Затем выполняется цикл, пока flag равен false и l не станет больше r.

На каждой итерации цикла значение m вычисляется как среднее между l и r (m:=(l+r)div 2). Затем происходит проверка условий.

  • Если a[m] > key, то мы знаем, что значение key находится во второй половине массива, поэтому устанавливаем l:=m+1 для сужения диапазона поиска.
  • Если a[m] = key, то мы нашли искомый элемент, поэтому устанавливаем flag:=true, и цикл прекращается.
  • Если a[m] < key, то мы знаем, что значение key находится в первой половине массива, поэтому устанавливаем r:=m-1 для сужения диапазона поиска.

Цикл продолжается до тех пор, пока flag равен false и l не станет больше r.

В данном случае, при key=-4, первое условие (a[m] > key) не выполняется ни на одной итерации цикла, так как все значения в массиве меньше -4.

При первой итерации цикла: l=1, r=8, m=(1+8)div 2=4. Так как a[4]=2 < key=-4, выполняется ветвь "else r:=m-1", и значение r становится равным 3.

При второй итерации цикла: l=1, r=3, m=(1+3)div 2=2. Так как a[2]=16 > key=-4, выполняется ветвь "if a[m]>key then l:=m+1", и значение l становится равным 3.

Теперь условие l > r не выполняется, поэтому цикл прекращается.

Таким образом, после выполнения цикла значение переменной m будет равно 2.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос