Урок 15. Задача №7. Решение.
Primary tabs
Заполните массив из 5 элементов случайными числами из любого диапазона.
Далее пользователь вводит в цикле значения от от 1 до 9 -- удаляйте из массива очередной элемент с позиции очередного введенного пользователем числа, сдвигая оставшиеся элементы второго массива влево, заполняя то, что справа нулями. Распечатывайте промежуточной состояние массива, после каждого удаления.Цикл должен работать до тех пор, пока в массиве не останется ненулевых элементов или пока пользователь не введет число большее чем 9 или меньшее чем 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 // ввод пользователя |0|0|0|0|0| // промежуточный результат// Сообщение о завершении, т.к. все элементы удалены
-- в данном случае программа завершилась, так как удалены все элементы.
Если бы пользователь ввел число 10 или -5 - то это тоже была бы ситуация для завершения, но элементы в массиве ещё бы остались.
type
MyArr = array[1..5] of integer;
function FillArray(other_arr: MyArr): MyArr;
var i, min, max: integer;
begin
randomize();
min := -10;
max := 10;
for i := 1 to length(other_arr) do
other_arr[i] := min + random(max - min + 1);
result := other_arr;
end;
function RebuildArr(copy_arr: MyArr; b: integer): MyArr;
var i, j: integer;
begin
i := 1;
j := 1;
while(i <= length(copy_arr)) do
begin
if(i = b) then
i += 1;
copy_arr[j] := copy_arr[i];
j += 1;
i += 1;
end;
result := copy_arr;
end;
procedure ShowArray(arr_first: MyArr);
var i: integer;
begin
writeln('arr = ');
for i := 1 to length(arr_first) do
write('|', arr_first[i], '|', ' ');
writeln();
end;
var a, k: integer;
arr: MyArr;
begin
arr := FillArray(arr);
ShowArray(arr);
k := high(arr);
while(k >= low(arr)) do
begin
writeln();
writeln('Enter integer from 1 until 5 : ');
readln(a);
if(a > 5) or (a < 1) then
begin
writeln('Error! You entered an invalid number! Try again.');
break;
end;
arr := RebuildArr(arr, a);
arr[k] := 0;
k -= 1;
writeln();
ShowArray(arr);
end;
writeln();
writeln('Programe is complited. All the elements of array deleted');
readln(); // Удержание консоль
end.// Завершение программы - Log in to post comments
- 4064 reads
vedro-compota
Wed, 06/03/2020 - 20:22
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)
vedro-compota
Wed, 06/03/2020 - 20:34
Permalink
while(k >= low(arr)) do--
-- уточнить
_____________
матфак вгу и остальная классика =)
Firons
Sat, 06/06/2020 - 18:32
Permalink
Исправлено.
type IntArr = array[1..5] of integer; function FillArray(other_arr: IntArr): IntArr; var i, min, max: integer; begin randomize(); min := -10; max := 10; for i := 1 to length(other_arr) do other_arr[i] := min + random(max - min + 1); result := other_arr; end; function RebuildArr(copy_arr: IntArr; b: integer): IntArr; var i, j: integer; begin i := 1; j := 1; while(i <= length(copy_arr)) do begin if(i = b) then i += 1; copy_arr[j] := copy_arr[i]; j += 1; i += 1; end; result := copy_arr; end; procedure ShowArray(arr_first: IntArr); var i: integer; begin writeln('arr = '); for i := 1 to length(arr_first) do write('|', arr_first[i], '|', ' '); writeln(); end; var k, poz: integer; arr: IntArr; begin arr := FillArray(arr); ShowArray(arr); k := high(arr); while(k >= low(arr)) do begin writeln(); writeln('Enter integer from 1 until 5 : '); readln(poz); if(poz > 5) or (poz < 1) then begin writeln('Error! You entered an invalid number! Try again.'); break; end; if(arr[poz] <> 0) then begin arr := RebuildArr(arr, poz); arr[k] := 0; k -= 1; end else writeln('Try again please.'); writeln(); ShowArray(arr); end; writeln(); writeln('Programe is complited. All the elements of array deleted'); readln(); // Удержание консоль end.// Завершение программыvedro-compota
Sat, 06/06/2020 - 20:17
Permalink
добавить оценку изначально
добавить оценку изначально нулевых k
_____________
матфак вгу и остальная классика =)
Firons
Sun, 06/07/2020 - 18:05
Permalink
Модифицировал решение.
type IntArr = array[1..5] of integer; function Check_on_Zero(arr_ch: IntArr): boolean; var i, a: integer; allZero: boolean; begin a := 0; allZero := false; for i := 1 to length(arr_ch) do if(arr_ch[i] = 0) then inc(a); if(a = high(arr_ch)) then allZero := true; result := allZero; end; function FillArray(other_arr: IntArr): IntArr; var i, min, max: integer; begin randomize(); min := -10; max := 10; for i := 1 to length(other_arr) do other_arr[i] := min + random(max - min + 1); result := other_arr; end; function RebuildArr(copy_arr: IntArr; b: integer): IntArr; var i, j: integer; begin i := 1; j := 1; while(i <= length(copy_arr)) do begin if(i = b) then i += 1; copy_arr[j] := copy_arr[i]; j += 1; i += 1; end; result := copy_arr; end; procedure ShowArray(arr_first: IntArr); var i: integer; begin writeln('arr = '); for i := 1 to length(arr_first) do write('|', arr_first[i], '|', ' '); writeln(); end; var k, poz: integer; arr: IntArr; begin k := high(arr); arr := FillArray(arr); ShowArray(arr); while(Check_on_Zero(arr) = false) do begin writeln(); writeln('Enter integer from 1 until 5 : '); readln(poz); if(poz > 5) or (poz < 1) then begin writeln('Error! You entered an invalid number! Try again.'); break; end; if(arr[poz] <> 0) then begin arr := RebuildArr(arr, poz); arr[k] := 0; k -= 1; end else writeln('Try again please.'); writeln(); ShowArray(arr); end; writeln(); writeln('Programe is complited. All the elements of array deleted'); readln(); // Удержание консоль end.// Завершение программы