Двумерный массив
Задана матрица m*n. Найти сумму двух макс. значений элементов в каждом рядке!
type
TIntArray = array of integer;
function CountSumms(AMatrix: array [0..m] of array [0..n] of integer): TIntArray;
var
FirstMax, SecondMax, MaxJ: integer;
begin
SetLength(Result, m);
for i := 0 to m do
begin
FirstMax := 0;
SecondMax := 0;
MaxJ := 0;
for j := 0 to n do
begin
if AMatrix[i, j] > FirstMax then
begin
FirstMax := AMatrix[i, j];
MaxJ := j;
end;
end;
for j := 0 to n do
begin
if (AMatrix[i, j] > SecondMax) and (AMatrix[i, j] <= FirstMax) and (j <> MaxJ) then
SecondMax := AMatrix[i, j];
end;
Result := FirstMax + SecondMax;
end;
end;[/highlight]
Может быть это не самое изящное и идеальное решение, к тому же скорее всего с ошибками (должны же Вы сделать что то сами %) ), но идея, думаю понятна. =)
только можно еще вопрос ...а зачем надо maxJ??
[highlight=pascal]
// Обнуляем все переменные
FirstMax := 0;
SecondMax := 0;
MaxJ := 0;
// В этом цикле находим максимальное число в "рядке"
for j := 0 to n do
begin
if AMatrix[i, j] > FirstMax then
begin
FirstMax := AMatrix[i, j];
MaxJ := j;
end;
end;
// А в этом второе наибольшее, которое может быть равно первому,
// но не должно совпадать. Поэтому и сделал проверку по индексу.
// MaxJ - индекс первого числа. Он не должен совпасть со вторым.
for j := 0 to n do
begin
if (AMatrix[i, j] > SecondMax) and (AMatrix[i, j] <= FirstMax) and (j <> MaxJ) then
SecondMax := AMatrix[i, j];
end;
// Результат - массив чисел
Result := FirstMax + SecondMax;
[/highlight]
Еще раз огомное спасибо!! Теперь мне все ясно!! Вы меня спасли))