Начнем опять с определения, что в задаче дано. Мы имеем одномерный массив, состоящий из m элементов. Нужно получить число, определяющее количество различных чисел в массиве.
Понятно, что нужно сравнивать элементы между собой. Однако, лучше сравнивать текущий элемент не с предшествующими, а с последующими, до первого повторения. Если, пройдя до конца массива, мы не найдем одинакового, то количество различных элементов нужно увеличить на 1. Например, если дан массив: 5, 7, 5, то сравнивая первую пятерку со всеми остальными элементами, мы найдем ей равную (это третий элемент массива). Поэтому количество различных элементов не увеличиваем. Повторяя эти операции для второго и третьего элементов, мы не находим для них одинаковых. Поэтому количество различных элементов в массиве равно 2. Приведем текст программы:
Program Problem30_1; Var A: Array[1..250] Of Integer; m,i,j,s:Integer; b:Boolean; Begin Write('Задайте количество элементов массива: '); ReadLn(m); WriteLn('Укажите элементы массива'); For i:=1 To m Do Begin Write(i,'-й элемент: '); ReadLn(A[i]); End; s:=0; {Количество различных элементов} For i:=1 To m Do {Берем текущий элемент} Begin b:=False; {Считаем, что это число единственное} j:=i+1; {Проверку начинаем со следующего элемента} {Пока не просмотрены все элементы и не найден совпадающий} While (j<=m) And Not b Do Begin If A[i]=A[j] Then b:=True; {Есть совпадение!} j:=j+1; End; If Not b Then s:=s+1; {Если не было совпадения, то увеличиваем s} End; WriteLn('Количество различных элементов = ',s); End.