Pascal, Динамические структуры данных.Матрица, размещена в динамической памятиЗадание звучит так:Дана матрица размера N*M (N меньше =150, M меньше =200). .Элементы 1й строки циклически сдвинуть на 1 позицию вправо, 2й строки на...
Pascal, Динамические структуры данных.
Матрица, размещена в динамической памяти
Задание звучит так:
Дана матрица размера N*M (N<=150, M<=200). .Элементы 1й
строки циклически сдвинуть на 1 позицию вправо, 2й строки на 2
позиции, 3й строки на 3 позиции и т. д
просьба, написать программу, с комментариями, т.к. с указателями толком не разобрался. заранее спасибо.
Турбо-Паскаль
Ответ(ы) на вопрос:
uses Crt;
type
MCo = array[1..200] of longint; {строка массива - до 200 столбцов}
DV = ^MCo; {указатель на строку массива}
MR = array[1..150] of DV; {массив указателей на строки}
var
a: MR; {Создается массив указателей на строки}
n,m:longint;
procedure ShiftCycle(row: longint; k: longint);
var
i, j, e: longint;
begin
for i := 1 to k do
begin
e := a[row]^[m];
for j := m - 1 downto 1 do a[row]^[j + 1] := a[row]^[j];
a[row]^[1] := e
end;
end;
var
i, j, e: longint;
begin
ClrScr;
writeln('Введите число строк и столбцов массива');
readln(n,m);
writeln('Введите элементы массива');
for i := 1 to n do
begin
getmem(a[i], m * sizeof(longint)); {Фактическое выделение памяти под i-ю строку строку массива}
writeln('Строка ',i,':');
for j := 1 to m do read(a[i]^[j])
end;
writeln;
for i := 1 to n do
begin
ShiftCycle(i, i);
for j := 1 to m do write(a[i]^[j]:4);
writeln;
freemem(a[i], m * sizeof(longint)) {Освобождение памяти из-под i-й строки массива}
end
end.
Тестовый прогон:
Введите число строк и столбцов массива
4 5
Введите элементы массива
Строка 1:
1 2 3 4 5
Строка 2:
6 7 8 9 10
Строка 3:
11 12 13 14 15
Строка 4:
16 17 18 19 20
5 1 2 3 4
9 10 6 7 8
13 14 15 11 12
17 18 19 20 16
Не нашли ответ?
Похожие вопросы