есть программка. она читает размеры матрицы, ее члены, печатает их, должна менять первый и последний столбик местами и опять печатает.
{$R-}
Type
TType = Word;
Type
PVector = ^TVector;
TVector = Array[1 .. 1] of TType;
PDynMatrix = ^TDynMatrix;
TDynMatrix = Array[1 .. 1] of PVector;
function max (const a:PVector):integer;
Var
i: Word;
begin
max:=0;
For i := 1 To round(SizeOf(PVector) / SizeOf(TType)) Do
if max< a^[i] then max:=a^[i];
end;
procedure ChPos(PV1, PV2:PVector);
var
p:pointer;
begin
p:=PV1;
PV1:=PV2;
PV2:=p;
end;
Var
mxDynamic: PDynMatrix;
n, m,i, j: Word;
Begin
write ('m='); ReadLn(m);{размеры}
write ('n='); ReadLn(n);//векторы
GetMem(mxDynamic, m * SizeOf(PVector));{память}
For i := 1 To n Do
GetMem(mxDynamic^[i], n * SizeOf(TType));
For i := 1 To n Do Begin{чтение}
WriteLn;
For j := 1 To m Do begin
write (' a[',i,',',j,']=');
ReadLn(mxDynamic^[I]^[J]);
end;
End;
For i := 1 To n Do Begin{печать}
WriteLn;
For j := 1 To m Do begin
write (' a[',i,',',j,']=');
WriteLn(mxDynamic^[I]^[J]:4);
end;
End;
ChPos(mxDynamic^[1],mxDynamic^[n]);//МЕНЯЮ, а оно не меняется
For i := 1 To n Do Begin{печать}
WriteLn;
For j := 1 To m Do begin
write (' a[',i,',',j,']=');
WriteLn(mxDynamic^[I]^[J]:4);
end;
End;
readln;
read;
For i := 1 To m Do
FreeMem(mxDynamic^[i], m * SizeOf(TType));
For i := 1 To n Do
FreeMem(mxDynamic, n * SizeOf(PVector));
End.
особо не вникал, но в ChPos параметры мне кажется надо передавать с приставкой var
Ты бы уточнил, ты хочешь хранить матрицу как вектор СТРОК, или как вектор СТОЛБЦОВ (потому что со своими индексами m, n, i, j ты разбирайся сам, это ТЕБЕ известно что они обозначают, написать, чтобы было понятно всем - ты не соизволил)?
Если как вектор СТОЛБЦОВ - то ты неправильно ее заполняешь, если как вектор строк - то неправильно меняешь местами столбцы. В любом случае справедливо следующее:
1)
ты забыл:
procedure ChPos(VAR PV1, PV2:PVector); { <-- Var здесь }
GetMem(mxDynamic, m * SizeOf(PVector));{ Выделил M элементов, так будь добр}
For i := 1 To M Do { <--- Заполнять тоже M, а не N (исправлено, у тебя было N) }
GetMem(mxDynamic^[i], n * SizeOf(TType));
For i := 1 To m Do
FreeMem(mxDynamic^[i], m * SizeOf(TType));
For i := 1 To n Do
FreeMem(mxDynamic, n * SizeOf(PVector));
res:=false;{сортируем}
while ( not res) do begin
res:=true;
for i:=1 to (m-1) do begin
if sum(mxDynamic^[i]) < sum(mxDynamic^[i+1]) then begin
ChPos(mxDynamic^[i],mxDynamic^[i+1]);
res:=false;
end;
end;
end;