Первая часть задания элементарна и выполняется стандартным способом.
Заводим себе такие переменные:
var Min, Max: real;
var x, y, xMin, yMin, yMin, yMax: integer;
При этом предполагается, что сам двумерный массив уже объявлен (будем для определённости считать, что это переменная array[1:M, 1:N]).
Две первых - это значения максимального и минимального элементов. Их тип может быть и целым, просто в задании не указано, из каких чисел - целых или вещественных - сформирован массив, так что чисто для общности я их объявил как вещественные.
xMin, yMin, yMin, yMax - координаты, которые надо найти в задании. x, y - индексы.
Теперь - как делается сам поиск (это как раз и есть стандартный приём).
Берём в качестве исходной точки значение первого элемента массива, и поочерёдно сравниваем с ним все остальные. Если какой-то следующий больше этого, то мы его делаем текущим максимальным и дальше сравниваем с ним. Если меньше - делаем текущим минимальным и опять же сравниваем остальные с ним:
Min := array[1,1];
Max := array [1,1];
(*это как раз то самое начальное присваивание*)
for y := 1 to N do begin
_ for x := 1 to M do begin
_ _ if array[x, y] > Max then
_ _ begin
_ _ _ Max := array[x, y]; Xmax := x; Ymax := y
_ _ end;
_ _ if array[x, y] < Min then begin
_ _ _ Min := array[x, y]; Xmin := x; Ymin := y
_ _ end;
_ end (*внутренний for*);
end; (*внешний for*)
По выходе из обоих циклов заведённые нами переменные будут содержать имено то, что надо: значения максимума и минимума и соответствующие индексы элементов. (На символы подчёркивания не обращайте внимания - просто тут не отображаются пробелы в начале строки, так что нормально структурированную программу не написать).
Ну вот, это первая часть задания, самая простая. Теперь займёмся десертом...
Для четырёх новых одномерных массивов нам, вестимо, потребуется четыре новых переменных. Хоть то, что я дальше напишу, не является "хорошим стилем программирования", но зато это просто и понятно.
Во-первых, определим новый типа данных, представляющий собой пару "число - флаг", где флаг (булева переменная) как раз и показывает, встречается это число ещё раз или нет:
type Pair = record
_ value: real;
_ unique: boolean
end;
Итак, заводим себе четыре новых переменных. Если ширина исходного массива (М) заранее известна, причём известна и программе - ну, где-то в самом начале объявлена как константа, - это совсем просто:
var vector1, vector2, vector3, vector4: array [1..M] of Pair;
Запихать туда элементы исходного массива тоже не штука:
for x := 1 to M do begin
_ vector1[x].value := array[x, 1]; vector1[x].unique := true
end;
Ровно то же самое надо сделать и для остальных векторов, соответственно меняя второй индекс в переменной array. И лучше это оформить в виде процедуры, которой в качестве аргументов передаются вектор и номер строки.
Теперь собсно проверка на уникальность: тупо перебираем элементы вектора и смотрим, если ли в следующих элементах такой же. Если есть, то и для этого, и для найденного флажок unique обращается в false:
for x := 1 to M-1 do begin
_ for y := x+1 to M do begin
_ _ if vector[x].value = vector[y].value then begin
_ _ _ vector[x].unique := false; vector[y].unique := false
_ _ end;
_ end;
end;
Я специально написал просто vector, потому что такая проверка тоже должна быть оформлена как процедура, для которой vector - внутренняя переменная (передаваемый ей аргумент).
Обратите внимание, что второй цикл (внутренний) начинается со следующего элемента после текущего. Зачем это надо - попробуйте догадаться сами.
Ну и всё. Теперь для всех элементов, которые не являются уникальными, флаг unique будет иметь значение "ложь", что и можно потом установить проверкой. И вывести на печать только те, у которых значение флага - "истина".