Задание 11 Урок 15
Primary tabs
Задание 11 Урок 15
Напишите функцию, которая определяет являются ли значения переданного массива целых чисел уникальными относительно друг друга, если среди есть неуникальные элементы, то удалите их, сдвинув значения влево, заполняя оставшиеся справа ячейки нулями.
Протестируйте работу функции на массиве из 7 случайных элементов из диапазона от 1 до 15-ти.
Например для:|1|-3|5|-3|9|5|8|
получим:|1|9|8|0|0|0|0|
type arr = array[0..6] of integer; var i,min,max : integer; first_array,second_array: arr; function check(f_array,s_array: arr): arr; var c,z,counter_number,first_number,second_number,number_zero : integer; label m1,m2; function shift(x: integer;var n_z: integer): arr;{функция смещения} var g : integer; begin for g := low(f_array) to high(s_array) do begin s_array[g] := f_array[g]; if g = x then break;{остановка итераций для сдвига} end; for g := (x) to (high(s_array)-1) do begin s_array[g] := f_array[g+1]; end; result := s_array; for g := low(f_array) to high(f_array) do f_array[g] := s_array[g]; n_z +=1;{счетчик 0-ей, чтоб сократить second_number и не считать 0-ые значения при проверке повторов} end; begin number_zero := 0; counter_number := 1; m1: for c := low(f_array) to high(f_array) do begin first_number := f_array[c]; for z :=(low(f_array)+counter_number) to (high(f_array)-number_zero) do begin second_number := f_array[z]; if first_number = second_number then// если есть повторения begin shift(c,number_zero); counter_number := 1; goto m1; end else if ((c = high(f_array)-1) and (z = high(f_array))) then{если нет повторов} begin goto m2; end; end; counter_number += 1;{счетчик смещения первого числа от второго постоянно на "+" 1, воизбежании искуственных совпадений, когда сравнивается одно и то же значение} end; result := s_array; begin for z := low(f_array) to high(f_array) do write('|', result[z],'|'); exit; end; m2: write('Массив уникален!'); end; begin min := 1; max := 15; randomize; for i := low(first_array) to high(second_array) do// ниц.массивов begin first_array[i] := min + random(max - min + 1); second_array[i] := 0;// используется при смещении для 0-ых значений end; for i := low(first_array) to high(second_array) do write('|',first_array[i],'|'); writeln(); check(first_array,second_array); readln(); end.
- Log in to post comments
- 4033 reads
vedro-compota
Sun, 12/20/2020 - 16:56
Permalink
замечание
переписать сдвиг без использования второго массива
_____________
матфак вгу и остальная классика =)
Dobrii_kot
Sat, 01/02/2021 - 14:08
Permalink
Исправлено
консоль
vedro-compota
Sun, 01/03/2021 - 15:14
Permalink
замечание
1) value_z и value_sh не необходимы на входе функции uniqueness()
--есть предположение, что на входе достаточно одного массива.
2)
-- возвращайте из функции boolean
_____________
матфак вгу и остальная классика =)
Dobrii_kot
Thu, 01/07/2021 - 15:50
Permalink
Исправлено
vedro-compota
Sun, 01/17/2021 - 14:34
Permalink
замечание
-- вынести реализацию в глобальное пространство (без вложенных функций)
_____________
матфак вгу и остальная классика =)
vedro-compota
Sun, 01/17/2021 - 14:34
Permalink
проверить логику решения
проверить логику решения по примеру:
_____________
матфак вгу и остальная классика =)
Dobrii_kot
Sat, 01/23/2021 - 12:33
Permalink
Исправлено
консоль
vedro-compota
Sat, 01/23/2021 - 16:17
Permalink
Просьба добавить
Просьба добавить альтернативное решение:
_____________
матфак вгу и остальная классика =)