alarm
Задайте вопрос
Информатика
Painfire

Пусть задан массив Аi={34, 16, 16, 2, 2, 0, -4, -4}, фрагмент программыL:=1; r:=n; flag:=false;Repeatm:=(l+r)div 2;if a[m]>key then l:=m+1else if a[m]=key then flag:=trueelse r:=m-1;until flag or (l>r);Чему будет равно значение переменной m после выполнения цикла, при key=-4?

ответы: 1
Зарегистрируйтесь, чтобы добавить ответ
Ответ:

т. к. 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.

71
Carlsen
Чтобы ответить необходимо зарегистрироваться.

Другие вопросы: - Информатика

Задання 2. Створіть проект Магаз

Задание 1. Подсчитайте, Как узна

Получите от пользователя два цел

Десятичное число 511 записано в

4. Напишите программу которая вы

Добрый день посчитайте . Оче

Контакты
Реклама на сайте