Задание: Дан двумерный массив. В каждой строке все его элементы, не равные нулю, переписать (сохраняя порядок) в начало строки, а нулевые элементы - в конец строк массива. Новый массив не заводить.
Этапы решения задачи:
1. Математическая модель: Необходимо "просматривать" массив построчно и находить в каждой строке пару (0:число), а затем менять их местами между собой и так до тех пор, пока в строке таких пар не окажется.
2. Схема алгоритма приведена на рисунке К.1, Логика программы представлена на рисунке К.2..
3. Листинг программы.
program example4;
var
V:array[1..100,1..100] of integer;
m,n,i,j,c: integer;
flag: boolean;
begin
write('Введите размерность массива m-n'); readln(m,n);
for i:=1 to m do
for j:=1 to n do begin
write('V[',i,',',j,']= '); readln(V[i,j]); {заполнение массива элементами, с помощью ввода с клавиатуры}
end;
for i:=1 to m do
repeat {поиск пары: нулевой и ненулевой элемент и замена их местами}
flag:= true;
for j:=1 to n-1 do
if (V[i,j]=0) and (V[i,j+1]<>0) then
begin
c:=V[i,j]; V[i,j]:=V[i,j+1]; V[i,j+1]:=c;
flag:= false;
end
until flag;
for i:= 1 to m do begin
for j:=1 to n do write(V[i,j]:2); {вывод элементов массива на экран}
writeln;
end;
readln;
end.
4. Результаты тестирования программы.
Рисунок К.1–Схема алгоритма | Рисунок К.2–Логика алгоритма программы |