Код
const
MaxSize=100;
var
A: array[1..MaxSize] of integer; {Массив элементов}
I,
MinElem, {Минимальный искомый элемент}
MinElemN, {Сколько раз встретился этот элемент}
GranElem, {Граничный минимальный элемент.
Требуется в случае если в первом поиске ElemN>1}
MaxN: integer; {Количество элементов в массиве A}
begin
{Ввод массива}
writeln('Найти минимальный элемент, встречающийся в массиве один раз');
repeat
write('Задайте число элементов в массиве <1..',MaxSize,') ');
readln(MaxN);
if (MaxN <= 0) or (MaxN > MaxSize) then
writeln('Вы ошиблись! Повторите!');
until (MaxN > 0) and (MaxN <= MaxSize);
for I := 1 to MaxN do
begin
writeln('Введите числа:');
for i := 1 to MaxN do
begin
write(i:4,': ');
readln(A[i]);
end;
{Первоначальный поиск находит минимальный элемент MinElem. Здесь же проверка,
однократно ли он встречается в массиве.
Если элемент встречается неоднократно, повторный поиск.
Теперь в поиске участвуют только элементы большие, чем GranElem с учетом знака}
MinElem:=A[1];
for i:=2 to MaxN do
if A[i]<MinElem then
MinElem:=A[i];
for i:=1 to MaxN do
if A[i]=MinElem then
MinElemN:=MinElemN+1;
{Вывод результата если минимальный элемент только однажды}
if MinElemN>1 then
begin {если с первого раза не нашли}
{Пока "как бы минимальный" элемент встречается более одного раза, повторяем.}
while MinElemN > 1 do
begin
writeln('Отбрасываем промежутчный минимальный элемент ',MinElem);
MinElemN:=0;
GranElem:=MinElem;
MinElem:=MAXINT;
{"Двойные" элементы не участвуют в поиск, они отсекаются условием A[i]>GranElem }
for i:=1 to MaxN do
if (A[i]<MinElem) and (A[i]>GranElem) then
MinElem:=A[i];
for i:=1 to MaxN do
if A[i]=MinElem then
MinElemN:=MinElemN+1;
end; {while}
end; {Для условия "если с первого раза не нашли"}
writeln('Минимальный элемент равен ',MinElem);
readln;
end;
end.