Допустим, у нас есть массив, содержащий различные численные значения. Требуется исключить из него одинаковые элементы.
Для упрощения задачи будем копировать значения из одного массива в другой. Если значение повторяется, то оно не копируется. Обычно массивы до заполнения не пусты, а могут быть заполнены, например, нулями. Если исходный (сжимаемый массив) содержит нули, то с учетом нижеследующего алгоритма второй массив их содержать не должен.
Рассмотрим непосредственно алгоритм копирования выбранных элементов.
const n = 20; var a: array[1..n] of integer; //сжимаемый массив s: array[1..n] of integer; //сжатый массив i,k,l: integer; flag: boolean; begin randomize; for i := 1 to n do begin a[i] := random(10); write (a[i]:3) end; writeln; for i := 1 to n do s[i]:=-1; k := 1; for i := 1 to n do begin flag := true; for l := 1 to k do if s[l] = a[i] then flag := false; if flag = true then begin s[k] := a[i]; k := k+1 end; end; for i := 1 to k-1 do write (s[i]:3); readln end.
Комментарии
Ответ
Ошибка. Почему-то из исходного массива не копируется ноль.Потому что изначально элементы массива
s[l]не пустые, а могут быть равны 0 и вот эта строчкавыполняется.
Решение простое при заполнении массива
a[i]заполнить еще и массивs[i]любыми НЕ допустимыми числами, т.е. если числа сжимаемого массива могут быть от 0 до 10, массивs[i]заполнить скажем -1.Спасибо за подсказку. Код
Спасибо за подсказку. Код задачи исправлен
Ошибка
Потому что алгоритм совершенно не рабочий и кривой!