Задача 11 Урок 15
Primary tabs
Напишите функцию, которая определяет являются ли значения переданного массива целых чисел уникальными относительно друг друга, если среди есть неуникальные элементы, то удалите их, сдвинув значения влево, заполняя оставшиеся справа ячейки нулями.
Протестируйте работу функции на массиве из 7 случайных элементов из диапазона от 1 до 15-ти.
Например для:|1|-3|5|-3|9|5|8|
получим:|1|9|8|0|0|0|0|
program lesson15_11;
type
myArr = array[1..7] of integer;
function unique(a: myArr): myArr;
var
b: myArr;
i, j, temp: integer;
begin
j := 1;
for i := low(a) to high(a) - 1 do
begin
temp := a[i];
while j < high(a) do
begin
if temp = a[j + 1] then
begin
a[i] := 0;
a[j + 1] := 0;
end;
j := j + 1;
end;
j := i + 1;
end;
for i := low(b) to high(b) do
b[i] := 0;
j := 1;
for i := low(a) to high(a) do
if a[i] > 0 then
begin
b[j] := a[i];
j := j + 1;
end;
result := b;
end;
var
arr, newArr: myArr;
i: integer;
begin
randomize();
for i := low(arr) to high(arr) do
begin
arr[i] := 1 + random(15);
write(arr[i], '|');
end;
writeln();
newArr := unique(arr);
for i := low(newArr) to high(newArr) do
write(newArr[i], '|');
readln();
end.- Log in to post comments
- 3610 reads
vedro-compota
Sun, 08/08/2021 - 11:53
Permalink
попробуйте переделать без
попробуйте переделать без дополнительного массива
_____________
матфак вгу и остальная классика =)
Aleksandr
Thu, 08/12/2021 - 19:44
Permalink
решение
program lesson15_11; type myArr = array[1..7] of integer; function unique(a: myArr): myArr; var i, j, temp, nul: integer; begin j := 1; nul := 0; for i := low(a) to high(a) - 1 do begin temp := a[i]; while j < high(a) do begin if temp = a[j + 1] then begin a[i] := 0; a[j + 1] := 0; end; j := j + 1; end; j := i + 1; end; for i := low(a) to high(a) do if a[i] = 0 then nul := nul + 1; for j := 1 to nul do for i := low(a) to high(a) - 1 do if (a[i] = 0) then begin a[i] := a[i + 1]; a[i + 1] := 0; end; result := a; end; var arr, newArr: myArr; i: integer; begin randomize(); for i := low(arr) to high(arr) do begin arr[i] := 1 + random(15); write(arr[i], '|'); end; writeln(); newArr := unique(arr); for i := low(newArr) to high(newArr) do write(newArr[i], '|'); readln(); end.vedro-compota
Thu, 08/12/2021 - 20:32
Permalink
for j := 1 to nul do
-- попробовать
сейчас сложность k*N
можно добавиться сложности N + k
Начальные преобразования:
1 3 2 3 5 6 5
1 0 2 0 0 6 0
Далее можно за один цикла перейти к ситуации:
_____________
матфак вгу и остальная классика =)
Aleksandr
Tue, 08/17/2021 - 19:47
Permalink
решение
program lesson15_11; type myArr = array[1..15] of integer; function unique(a: myArr): myArr; var i, j, temp, index: integer; begin j := 1; for i := low(a) to high(a) - 1 do begin temp := a[i]; while j < high(a) do begin if temp = a[j + 1] then begin a[i] := 0; a[j + 1] := 0; end; j := j + 1; end; j := i + 1; end; index := -1; i := low(a); while i <= high(a) do begin if (a[i] = 0) and (index = -1) then index := i else if (a[i] <> 0) and (index <> -1) then begin a[index] := a[i]; a[i] := 0; i := index + 1; // возвращаемся назад index := -1; continue; end; i := i + 1; end; result := a; end; var arr, newArr: myArr; i: integer; begin randomize(); for i := low(arr) to high(arr) do begin arr[i] := 1 + random(15); write(arr[i], '|'); end; writeln(); newArr := unique(arr); for i := low(newArr) to high(newArr) do write(newArr[i], '|'); readln(); end.vedro-compota
Thu, 08/19/2021 - 20:58
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)