. Дана таблиця БД з полями: назва овочевої культури, сорт, кількість рослин, вага врожаю, час дозрівання, кількість поливок, опис обробки хімікатами, очікуваний прибуток від продажу. Як відібрати овочі першого сорту, у яких вага не більше від заданої, а прибуток від продажу не менший від заданого? ( )
n = 6; // число строк
m = 6; // число столбцов
var
a: array[1..n, 1..m] of integer; // основной массив
Rext: array[1..n, 1..2] of integer; // номера столбцов с min и max в строках
Cext: array[1..2, 1..m] of integer; // номера строк с min и max в столбцах
i, j, amin, amax: integer;
begin
// заполняем массив А случайными числами
Randomize;
writeln('Исходный массив');
for i := 1 to n do
begin
for j := 1 to m do
begin
a[i, j] := random(100) - 50;
write(a[i, j]:4);
end;
writeln;
end;
// Заполняем массив Rext n x 2
for i := 1 to n do
begin
amin := 10000; //заведомо больше a[i,j]
amax := -10000; //заведомо меньше a[i,j]
for j := 1 to m do
begin
if amin > a[i, j] then begin
amin := a[i, j]; Rext[i, 1] := j
end;
if amax < a[i, j] then begin
amax := a[i, j]; Rext[i, 2] := j
end
end;
end;
// Заполняем массив Cext 2 x m
for j := 1 to m do
begin
amin := 10000; //заведомо больше a[i,j]
amax := -10000; //заведомо меньше a[i,j]
for i := 1 to n do
begin
if amin > a[i, j] then begin
amin := a[i, j]; Cext[1, j] := i
end;
if amax < a[i, j] then begin
amax := a[i, j]; Cext[2, j] := i
end
end
end;
writeln;
// Ищем седловые точки
writeln('*** Седловые точки ***');
for i := 1 to n do
begin
j := Rext[i, 1];
if Cext[2, j] = i then
write('[', i, ',', j, '] ')
else begin
j := Rext[i, 2];
if Cext[1, j] = i then
write('[', i, ',', j, '] ')
end
end;
writeln
end.
Тестовое решение
Исходный массив
10 25 38 38
45 32 42 36
-39 -6 9 48
-25 -37 40 30
*** Седловые точки ***
[2,2]
N = 5;
var
i, j: integer;
a: array[1..N, 1..N] of integer;
min, max: array[1..N] of integer;
begin
writeln('Исходный массив: ');
for i := 1 to N do begin
for j := 1 to N do begin
a[i, j] := Random(10);
write(a[i, j] : 3);
if (j = 1) or (max[i] > a[i, j]) then max[i] := a[i, j];
if (i = 1) or (min[j] < a[i, j]) then min[j] := a[i, j];
end;
writeln;
end;
writeln('Седловые точки: ');
for i := 1 to N do
for j := 1 to N do
if max[i] = min[j] then writeln('[', i, '; ', j, ']');
end.