Разбор решения. Урок 15 Задача 13
Primary tabs
Разбор решения. Урок 15 Задача 13
1) Объявим переменные. Объявим тип - массив из пяти чисел. Если указать отдельно тип array в секции var и в процедуре, то в процедуре элементы будут считаться с нуля, а не с единицы. Заполним исходный массив случайными числами.
type Arr= array[1..5] of integer; var a: Arr; b: array[1..3] of integer; i,l, min,max: integer; procedure shiftArr(var promArr: Arr; k:integer); var j:integer; begin for j:=k to 4 do promArr[j]:=promArr[j+1]; promArr[high(promArr)]:=0; end; begin randomize(); min:=1; max:=8; for i:=low(a) to high(a) do begin a[i] := min + random(max - min + 1); write (a[i],' '); end; writeln(); b[1]:=3; b[2]:=4; b[3]:=6;
2) Вложенный цикл: проверка соответствия элемента исходного массива элементу массива пользователя. В случае совпадения - процедура shiftArr и разрыв вложенного цикла.
for i:=low(a) to high(a) do
for l:=low(b) to high(b) do
if a[i]= b[l] then
begin
shiftArr (a, i);
break;
end;
При таком решении возникает проблема: в случае, если элемент из исходного массива совпадает с элементом массива пользователя, следующий за ним элемент не проверяется, так как за счёт сдвига приобретает порядковый номер предыдущего элемента.
Самый простой способ решить эту проблему - перебирать исходный массив с конца. Тогда в случае сдвига порядковый номер изменится только у перебранных элементов.
for i:=high(a) downto low(a) do for l:=low(b) to high(b) do if a[i]= b[l] then begin
Чтобы не выйти за пределы исходного массива, добавляем проверку:
if i=high(a) then a[i]:=0 else shiftArr (a, i); break; end;
3)Выводим на экран, что получилось.
for i:=low(a) to high(a) do write(a[i],' '); readln(); end.
- Log in to post comments
- 110 reads