Удалить повторяющиеся элементы из массива

Задача

Из одномерного массива удалить все повторяющиеся элементы (дубликаты) так, чтобы каждое значение встречалось в массиве только один раз.

Решение

Проще всего решить данную задачу, используя второй массив, в котором и будут содержаться уникальные элементы.

Пусть исходный массив присвоен переменной a. В нем N - элементов. Второй массив обозначим b, количество элементов - M (сколько их мы не знаем, поэтому это переменная, а не константа).

Запишем первый элемент массива a в массив b. Переменной M присвоим 1.

Начинаем в цикле перебирать массив a, начиная со второго элемента и до конца (до N). Заранее предполагаем, что очередной элемент не встречается в массиве b, т. е. он не является повторяющимся. Отражаем это предположение в присвоении булевой переменной f значение True.

Во вложенном цикле перебираем все элементы массива b (до М). Если текущий элемент массива a совпадает по значению с каким-либо элементом массива b, то устанавливаем f в значение False. Это значит, что нам встретился дубликат, который должен быть удален.

После всех итераций внутреннего цикла проверяем значение f. Если оно осталось True, то элемент уникальный, его следует записать в массив b. Перед этим увеличиваем значение M на единицу (ведь количество элементов увеличилось).

const
    N = 10;
var
    a,b: array[1..N] of integer;
    i,j,M: byte;
    f: boolean;
begin
    randomize;
    for i:=1 to N do begin
        a[i] := random(10);
        write(a[i]:2);
    end;
    writeln;
 
    b[1] := a[1];
    M := 1;
    for i:=2 to N do begin
        f := true;
        for j:=1 to M do
            if a[i] = b[j] then 
                f := false;
        if f = true then begin
            M := M + 1;
            b[M] := a[i];
        end;
    end;
 
    for i:=1 to M do
		write (b[i]:2);
	writeln;
end.

Пример выполнения кода:

 1 8 0 3 7 0 7 9 5 0
 1 8 0 3 7 9 5

Тема

Одномерные массивы

Уровень

Комбинированные задачи

Последняя редакция