Задача 11 Урок 15
Primary tabs
Напишите функцию, которая определяет являются ли значения переданного массива целых чисел уникальными относительно друг друга, если среди есть неуникальные элементы, то удалите их, сдвинув значения влево, заполняя оставшиеся справа ячейки нулями.
Протестируйте работу функции на массиве из 7 случайных элементов из диапазона от 1 до 15-ти.
Например для:|1|-3|5|-3|9|5|8|получим:
|1|9|8|0|0|0|0|
type inArr = array[1..9] of Integer; var a: array [1..9] of integer; L,z, i, min, max: integer; // a[i] - основной массив // x[k] - вспомогательный процедурный массив для работы с оснвовным procedure SS2(x: inArr; L,z: integer); var k,c: integer; begin c := L; //счетчик записи нулей справа k := 1; //счетчик записи уникальных значений слева for i := low(x) to high(x) do begin if(x[i] <> z) then // если элемент массива не равен числу заменителю(из функции) begin a[k] := x[i]; //слева пишем число k := k + 1; // меняем счетчик end else begin a[c] := 0; // иначе пишем 0 справа c := c - 1; //меняем счетчик end; end; for i := low(a) to high(a) do //цикл вывода на экран итогового массива begin write(a[i], ' '); end; end; function SS1(x: inArr; L: integer): integer; // изменяет основной массив и возвращает число на которое изменены все неуникальныеэлементы var k,z: integer; flag: boolean; begin flag:=true; for k := 1 to L do // цикл прохода в зависимости от длины массива (L) begin for i := low(x) to high(x) do begin if((x[k] = x[i]) and (i<>k) and (flag)) then //условие для заопоминания первого дубликата begin z:=x[k]; //запоминаем дубликат flag:=false; // меняем флаг чтобы больше не запоминать другие дубликаты end; if((x[k] = x[i]) and (i<>k)) then //условие нахождения дубликатов begin a[k] := z; // заменяем все дубликаты на первый найденый end; end; write(a[k], ' '); // вывода на экран промежуточного массива end; result := z; end; begin min := 1; max := 15; randomize(); for i := 1 to 9 do a[i] := random(max - min + 1) + min; for i := low(a) to high(a) do //цикл вывода на экран начального массива begin write(a[i], ' '); L := i; // узнаем длину массива для отправки в функцию. end; writeln(); z := SS1(a,L); writeln(); SS2(a,L,z); readln(); end. // алгоритм // 1. генерируем массив // 2. выводим на экран и считаем число элементов(размер массива) // 3. вызываем функцию сс1 и передаем туда массив и его размер // 4. в функции изменяем начальный массив заменяя все повторяющиеся элементы(даже если их пары разные) // на одинаковое число(первый попавшийся неуникальный элемент) и запоминаем это число // 5. функция возвращает это число(на которое заменены все неуникальные элементы) // 6. вызываем процедуру cc2 и передаем в нее новый массив, размер массива, то самое число. // 7. в процедуре сверяем с этим числом массив и отличающиеся значения записываем слева а справа только нули
Пример работы:
7 15 3 8 3 7 15 2 1 7 7 7 8 7 7 7 2 1 8 2 1 0 0 0 0 0 0
- Log in to post comments
- 1778 reads
vedro-compota
Sun, 09/05/2021 - 13:29
Permalink
дать подрограммам нормальные
дать подрограммам нормальные имена
_____________
матфак вгу и остальная классика =)
jl8qy9kd_pro
Mon, 09/06/2021 - 18:38
Permalink
RE
Пример работы:
vedro-compota
Wed, 09/08/2021 - 20:13
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)