Решение №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
- 5155 reads
sergio
Sat, 07/25/2020 - 21:48
Permalink
скорректировал решение
program while_input_digit_delete_zero_array; 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; writeln(); end; procedure change_array( arr_change : arr_int ); var value_in, count_in, change_len_arr : integer; begin count_in := 0; change_len_arr := high( arr_change ); 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('end'); end; // завершение тела основной программы { основная программа } var arr_change : arr_int; // секция обьявления переменных begin // начало тела основной программы arr_change := fill_array(); // вызов функции print_arr( arr_change ); // вызов функции change_array( arr_change ); // вызов процедуры readln(); end. // завершение тела основной программыvedro-compota
Sat, 07/25/2020 - 20:20
Permalink
оптимизация
-- подумать может ли не быть при истинной первой части выражения, ложность второй части, и затем оптимизировать, уменьшить вложенность:
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 ); // вызов функции_____________
матфак вгу и остальная классика =)
sergio
Sat, 07/25/2020 - 23:05
Permalink
исправил
исправил
sergio
Sun, 07/26/2020 - 16:29
Permalink
убрал передачу по ссылке и лишний if
program while_input_digit_delete_zero_array; 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( 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; writeln(); end; procedure change_array( arr_change : arr_int ); var value_in, count_in, change_len_arr : integer; begin count_in := 0; change_len_arr := high( arr_change ); 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( value_in <= change_len_arr ) then begin arr_change := shift_arr( arr_change, change_len_arr, value_in ); print_arr( arr_change ); change_len_arr -= 1; count_in += 1; end else print_arr( arr_change ); // вызов функции end else break; end; writeln('end'); end; // завершение тела основной программы { основная программа } var arr_change : arr_int; // секция обьявления переменных begin // начало тела основной программы arr_change := fill_array(); // вызов функции print_arr( arr_change ); // вызов функции change_array( arr_change ); // вызов процедуры readln(); end. // завершение тела основной программыvedro-compota
Wed, 07/29/2020 - 19:28
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)