Решение №7 из главы 15.Заполните массив из 5 элементов случайными числами из любого диапазона. Далее пользователь вводит
Primary tabs
Заполните массив из 5 элементов случайными числами из любого диапазона.
Далее пользователь вводит в цикле значения от 1 до 5 -- удаляйте из массива очередной элемент с позиции очередного введенного пользователем числа, сдвигая оставшиеся элементы второго массива влево, заполняя то, что справа нулями. Распечатывайте промежуточной состояние массива, после каждого удаления.Цикл должен работать до тех пор, пока в массиве не останется ненулевых элементов или пока пользователь не введет число большее чем 5 или меньшее чем 1.
Например:
|1|3|7|5|4| // исходный массив 3 // ввод пользователя |1|3|5|4|0| // промежуточный результат 3 // ввод пользователя |1|3|4|0|0| // промежуточный результат 2 // ввод пользователя |1|4|0|0|0| // промежуточный результат 1 // ввод пользователя |4|0|0|0|0| // промежуточный результат 1 // ввод пользователя<pre class="brush: delphi"></pre> |0|0|0|0|0| // промежуточный результат // Cообщение о завершении, т.к. все элементы удалены-- в данном случае программа завершилась, так как удалены все элементы.
Если бы пользователь ввел число 10 или -5 - то это тоже была бы ситуация для завершения, но элементы в массиве ещё бы остались.
program pascal_array_zero_delete; type arr_int = array[1..5] of integer; // секция обьявления типов { функция заполнения массива } function fill_array(): arr_int; var i, min, max : integer; filling_array : arr_int; begin // начало тела функции randomize(); min := 5; max := 25; for i := 1 to high( filling_array ) do begin filling_array[i] := random( max - ( min + 1 ) - min ); end; fill_array := filling_array; // возврат значения функции end; // завершение тела функции { функция сдвига массива } function shift_arr( var in_arr : arr_int; len_arr, number : integer ): arr_int; var k : integer; begin // начало тела функции if( number = len_arr ) then in_arr[len_arr] := 0 else begin for k := number to len_arr - 1 do begin in_arr[k] := in_arr[k+1]; end; in_arr[len_arr] := 0; end; shift_arr := in_arr; // возврат значения функции end; // завершение тела функции { процедура вывода массива } procedure print_arr( arr_in : arr_int ); var j : integer; begin // начало тела процедуры for j := 1 to high( arr_in ) do begin write( arr_in[j], ' ' ); end; end; // завершение тела процедуры { процедура изменения и вывода массива } procedure get_array( count_in, sign_in, change_len_arr : integer; arr_change : arr_int ); var value_in : integer; begin // начало тела процедуры while( count_in < 5 ) do begin writeln( 'input a value between 1 to 5: ' ); readln( value_in ); if( value_in >= 1 ) and ( value_in <= 5 ) then begin if( count_in = 0 ) then begin print_arr( shift_arr( arr_change, change_len_arr, value_in )); // вызов процедуры change_len_arr -= 1; count_in += 1; end else begin if( value_in <= change_len_arr ) then begin print_arr( shift_arr( arr_change, change_len_arr, value_in )); // вызов процедуры change_len_arr -= 1; count_in += 1; end else print_arr( arr_change ); // вызов процедуры end; end else break; end; writeln; writeln('end'); end; // завершение тела процедуры { основная программа } var arr_change : arr_int; // секция обьявления переменных count, sign, change_len : integer; begin // начало тела основной программы count := 0; sign := 1; arr_change := fill_array(); // вызов функции заполнения массива change_len := high( arr_change ); // длинна массива print_arr( arr_change ); // вызов функции вывода массива get_array( count, sign, change_len, arr_change ); // вызов процедуры readln(); end. // завершение тела основной программы
- Log in to post comments
- 3895 reads
sergio
Sat, 07/25/2020 - 21:48
Permalink
скорректировал решение
vedro-compota
Sat, 07/25/2020 - 20:20
Permalink
оптимизация
-- подумать может ли не быть при истинной первой части выражения, ложность второй части, и затем оптимизировать, уменьшить вложенность:
_____________
матфак вгу и остальная классика =)
sergio
Sat, 07/25/2020 - 23:05
Permalink
исправил
исправил
sergio
Sun, 07/26/2020 - 16:29
Permalink
убрал передачу по ссылке и лишний if
vedro-compota
Wed, 07/29/2020 - 19:28
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)