If (i1>i2)
If (i1>i2) Or (j1>j2) Then Exit;
l:=(i1+i2) div 2; m:=(j1+j2) div 2;
p:=p+1; {p - счетчик числа сравнений, начальное значение нуль
при каждом новом поиске, глобальная переменная }
If A[l,m]=X Then Begin { элемент X найден}
pp:=true End
Else Begin If X>A[l,m] Then Begin{ поиск в 3-й части}
Poick(l+1,m,i2,j2);
Poick(l,m+1,l,j2)
End
Else Begin { поиск в 1-й части}
Poick(l,j1,l,m-1);
Poick(i1,j1,l-1,m)
End;
{ поиск во 2-й части }
Poick(l+1,j1,i2,m-1);
Poick(i1,m+1,l-1,j2);
End;
End;
Основная программа достаточно очевидна, поэтому приводить ее текст вряд ли целесообразно. Пример исходной матрицы A, результирующей матрицы C и значения ls:
A C ls=5.88
1 2 3 4 5 4 3 6 9 12
6 7 8 9 10 5 4 5 10 11
11 12 13 14 15 2 3 1 5 7
16 17 18 19 20 9 11 3 2 4
21 22 23 24 25 9 10 5 3 4
Для этой же матрицы A значение ls можно уменьшить за счет некоторой модификации процедуры Poick. Попробуйте.
о94_2 Суть решения.
If длина(Y)<длина(X) Then <Поменять значения
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа