Урок 15. Задача №9. Решение.
Primary tabs
Напишите функцию, которая определяет являются ли значения переданного массива целых чисел уникальными относительно друг друга, если среди них есть не уникальные элементы - то тогда удалите их, сдвинув значения влево, заполняя оставшиеся справа ячейки нулями.
Протестируйте работу функции на массиве из 7 случайных элементов из диапазона от 1 до 15-ти.
Например для:|1|-3|5|-3|9|5|8|получим:
|1|9|8|0|0|0|0|
type
IntArr = array[1..7] of integer;
function FillArray(other_arr: IntArr): IntArr;
var i, min, max: integer;
begin
randomize();
min := 1;
max := 15;
for i := 1 to length(other_arr) do
other_arr[i] := min + random(max);
result := other_arr;
end;
function RebuildArr(new_arr: IntArr; a, b: integer): IntArr;
var i, j: integer;
otherArr: IntArr;
begin
i := 1;
j := 1;
while(i <= length(new_arr)) do
begin
if(i = a) then
i += 1;
if(i = b) then
i += 1;
otherArr[j] := new_arr[i];
j += 1;
i += 1;
end;
result := otherArr;
end;
function UniqNumb(copy_arr: IntArr): IntArr;
var i, j, k, len_arr, max_len: integer;
begin
i := 1;
len_arr := length(copy_arr);
while(i <= len_arr) do
begin
max_len := high(copy_arr);
for j := 1 to len_arr do
begin
if(i = j) then
continue;
if(copy_arr[i] = copy_arr[j]) then
begin
copy_arr := RebuildArr(copy_arr, i, j);
copy_arr[max_len] := 0;
max_len -= 1;
copy_arr[max_len] := 0;
max_len -= 1;
len_arr -= 2;
i := 0;
break;
end;
end;
i += 1;
end;
result := copy_arr;
end;
procedure ShowArray(arr_first: IntArr);
var i: integer;
begin
writeln('arr = ');
for i := 1 to length(arr_first) do
write('|', arr_first[i], '|', ' ');
writeln();
end;
var a: integer;
arr: IntArr;
begin
arr := FillArray(arr);
write('Original ');
ShowArray(arr);
writeln();
arr := UniqNumb(arr);
write('Correct original ');
ShowArray(arr);
readln(); // Удержание консоль
end.// Завершение программы - Log in to post comments
- 1958 reads