Решение №9 из главы 15.Напишите функцию, которая определяет являются ли значения переданного массива целых чисел уникальными
Primary tabs
Напишите функцию, которая определяет являются ли значения переданного массива целых чисел уникальными относительно друг друга, если среди есть неуникальные элементы - то они удалите их, сдвинув значения влево, заполняя оставшиеся справа ячейки нулями.
Протестируйте работу функции на массиве из 7 случайных элементов из диапазона от 1 до 15-ти.
Например для:1 |1|-3|5|-3|9|5|8|получим:
1 |1|9|8|0|0|0|0|
program pascal_array_unique_zero; type b = array[ 1..10 ] of integer; // секция обьявления типов function fill_array( new_arr : b ): b; // заполнение массива var i, min, max : integer; begin // начало тела функции min := 5; max := 20; randomize; for i:= low( new_arr ) to high( new_arr ) do begin new_arr[i] := random( max - ( min + 1 ) - min ); write( new_arr[i], ' ' ); end; fill_array := new_arr; // возвращаем массив в глобальную область end; // завершение тела функции { функция сдвигa значений массива } function change_arr( in_arr : b; number : integer ): b; var k : integer; begin // начало тела функции for k := number to high( in_arr ) - 1 do begin in_arr[k] := in_arr[k+1]; end; in_arr[high( in_arr )] := 0; change_arr := in_arr; // возвращаем массив end; // завершение тела функции function get_array( list_in : b ) : b; // обход массива var i, j, n, k : integer; begin // начало тела функции n := 0; i := 1; k := 2; while( i < length( list_in ) - n ) do // внешний цикл begin j := k; while( j <= length( list_in ) - n ) do // вложенный цикл begin if( list_in[i] = list_in[j] ) then // если равны begin list_in := change_arr( list_in, j ); // вызов функции n += 1; // увеличиваем значение end else j += 1; // увеличиваем счетчик end; i += 1; // увеличиваем счетчик внешнего цикла k += 1; // увеличиваем счетчик вложенного цикла if( length( list_in ) - n ) = 1 then // досрочный выход из внешнего цикла break; end; get_array := list_in; // возвращаем значение функции end; // завершение тела функции procedure conclusion_array( new_arr : b ); // процедура вывода массива var l : integer; begin // начало тела процедуры for l:= low( new_arr ) to high( new_arr ) do write( new_arr[l], ' ' ); end; // завершение тела процедуры var arr : b; begin // начало основной программы arr := fill_array( arr ); // вызов функции writeln(); // перенос строки conclusion_array( get_array( arr ) ); // вызов процедуры readln(); end. // завершение основной программы
- Log in to post comments
- 4374 reads
vedro-compota
Wed, 07/15/2020 - 19:36
Permalink
Прокомментировать назначение
Прокомментировать назначение переменных:
_____________
матфак вгу и остальная классика =)
sergio
Thu, 07/16/2020 - 22:32
Permalink
1
vedro-compota
Wed, 07/15/2020 - 19:39
Permalink
k := 2;
-- внешний цикл тоже можно оптимизировать.
_____________
матфак вгу и остальная классика =)
vedro-compota
Sat, 07/18/2020 - 20:38
Permalink
j явно лишняя переменная
j явно лишняя переменная
_____________
матфак вгу и остальная классика =)