Zadanie. Dany jest typ tab = array [1..n] of Integer, gdzie n > 0. W tablicach A i B typu tab zapisanych jest n prostokątów, w taki sposób, że A[k] i B[k] oznaczają długości boków k-tego prostokąta. Zakładając, że wszystkie te prostokąty mają równy obwód i że tablica A jest posortowana rosnąco (tablica B jest posortowana malejąco), napisz funkcję NajmniejszaPrzekątna(A,B: tab): Integer, która jako wynik zwróci indeks prostokąta o najmniejszej przekątnej. Jeśli jest ich kilka, to najmniejszy z nich. Przykładowe rozwiązania: Const n = 10; type tab = array[1..n] of Integer; function NajmniejszaPrzekatna(A,B: tab): Integer; {rozwiązanie w oparciu o analogię ciągu bitonicznego} var l,p,s: Integer; begin if n = 1 then NajmniejszaPrzekatna := 1 else begin l := 1; p := n; while l < p do begin s := (l + p) div 2; if sqr(A[s])+sqr(B[s]) > sqr(A[s+1])+sqr(B[s+1]) then {lub: if abs(A[k] - B[k]) > abs(A[k+1] - B[k+1]) then} l := s + 1 else p := s; end; NajmniejszaPrzekatna := l; end; end; function NajmniejszaPrzekatna2(A,B: tab): Integer; {poszukujemy w tablicy A elementu najbliższego jednej czwartej obwodu} var l,p,s,polobwodu: Integer; begin polobwodu := A[1] + B[1]; l := 1; p := n; while l < p do begin s := (l + p) div 2; if 2*A[s] < polobwodu then l := s + 1 else p := s; end; if l = 1 then NajmniejszaPrzekatna2 := 1 else if A[l-1] + A[l] >= polobwodu then NajmniejszaPrzekatna2 := l-1 else NajmniejszaPrzekatna2 := l; end;