т.к. 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.
язык программирования любой?
пишу на Python:
s = str(input())
s = sorted(s[:len(s)-1].split(', '))
for word in s:
print(word, ' ', end='')
Pascal:
var s, copy_s, word_s:string;
i, n, count:integer;
a:array of string ;
begin
count:=0;
write('Введите перечисление слов через запятую без пробелов, в конце поставьте точку: ');
readln(s);
copy_s:= s;
while pos(',', copy_s) > 0 do begin
n:= pos(',', copy_s);
delete(copy_s, n, 1);
count:=count+1;
end;
count:= count + 1;
SetLength(a, count);
for i:=1 to count-1 do begin
n:= pos(',', s);
word_s:= copy(s, 1, n-1);
delete(s, 1, n);
a[i]:=word_s;
end;
word_s:= copy(s, 1, length(s)-1);
a[count]:= word_s;
for i:=1 to count-1 do
if a[i] > a[i+1] then begin
word_s:=a[i];
a[i]:=a[i+1];
a[i+1]:=word_s;
end;
for i:=1 to count do
writeln(a[i]);
end.