Const N = 3; M = 4; Var A:array[1..N,1..M] of integer; i,j,iMin,jMin:integer; Begin Randomize; iMin:=1; jMin:=1; WriteLn('Исходный массив:'); For i:= 1 to N do Begin For j:= 1 to M do Begin A[i,j]:=random(76)-30; if A[i,j] < A[iMin,jMin] then Begin iMin:=i; jMin:=j End; Write(A[i,j]:3,' ') End; WriteLn; End; WriteLn('Min = A[',iMin,',',jMin,'] = ',A[iMin,jMin]); End.
т.к. 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.
N = 3;
M = 4;
Var
A:array[1..N,1..M] of integer;
i,j,iMin,jMin:integer;
Begin
Randomize;
iMin:=1;
jMin:=1;
WriteLn('Исходный массив:');
For i:= 1 to N do
Begin
For j:= 1 to M do
Begin
A[i,j]:=random(76)-30;
if A[i,j] < A[iMin,jMin] then
Begin
iMin:=i;
jMin:=j
End;
Write(A[i,j]:3,' ')
End;
WriteLn;
End;
WriteLn('Min = A[',iMin,',',jMin,'] = ',A[iMin,jMin]);
End.
Исходный массив:
-11 -3 -16 44
-1 -10 38 -20
33 -22 17 10
Min = A[3,2] = -22