Доброго времени суток всем
Задание : "Удалить задданую строку из матрицы 3х4 и уплотнить матрицу"
проблема в том,что я не понимаю как обратить к i+1 элементу матрицы через ptr?..
вот код..
program z1;
uses crt;
const
n=3;
m=4;
var
a:array [1..n,1..m] of integer;
i,j,q:integer;
procedure dels (pa:pointer;n:integer;m:integer);
type
pint= ^integer;
var
si,i,j,k:integer;
function PR(P:pointer):pint;
begin
PR:=ptr(seg(p^),ofs(p^)+((i-1)*n+(j-1))*SI);
end;
begin
si:=sizeof(integer);
writeln('Vvedite stroky kot. hotite ydalit');
readln(k);
for i:=k to n do
begin
for j:=1 to m do
{pr(pa)^:=pr(pa+1)^; вот тут и проблема...я знаю что так прибавлять нельзя,просто для примера написал.}
end;
end;
procedure workingP;
begin
clrscr;
writeln('Vvedite massiv');
for i:=1 to n do
for j:=1 to m do
begin
write('A[',i,j,']=');
read(a[i,j]);
end;
writeln('Vash massiv');
for i:=1 to n-1 do
begin
for j:=1 to n do
write(a[i,j],' ');
writeln;
end;
Dels(@a,n);
readkey;
end;
begin
workingp;
end.
сам же пользуешься конструкцией
PR:=ptr(seg(p^),ofs(p^)+((i-1)*n+(j-1))*SI);
не пойму..извините,Просто целый день ешё другу писал программу,просто у него задолжность ввиде практики,не сдаст завтра задание - отчислят..Вот выживаю.Динамические сктруктуры сделал,а с этим опять застрял.
Я меняю i-1 на i+1,но не пойму как надо потом обратиться ,что бы заменились строки?..
Так не проще:
program z1;
uses crt;
const
n = 3;
m = 4;
type
tv = array[1 .. m] of integer;
var
a: array[1 .. n] of tv;
procedure dels(pa: pointer; n, m: integer);
type
ptv = ^tv;
function pr(p: pointer; i: integer): ptv;
begin
pr := ptv(ptr(seg(p^),ofs(p^)+(i-1)*sizeof(tv)));
end;
var i, k: integer;
begin
writeln('Vvedite stroky kot. hotite ydalit');
readln(k);
for i:=k to n do
pr(pa, i)^ := pr(pa, i + 1)^;
end;
procedure workingP;
var i, j: integer;
begin
clrscr;
writeln('Vvedite massiv');
for i:=1 to n do
for j:=1 to m do begin
write('A[',i,j,']=');
read(a[i,j]);
end;
writeln('Vash massiv do');
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;
Dels(@a,n,m);
writeln('Vash massiv posle');
for i:=1 to n - 1 do begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;
readkey;
end;
begin
workingP;
end.
function PR(P:pointer):pint;
begin
PR:=ptr(seg(p^),ofs(p^)+((i-1)*n+(j-1))*SI);
end;
Я извиняюсь меред коллегами, каким-то образом я не заметил, что тема дублирована, и ответил в нее, хотя все уже было отвечено..
М | Объединяю оба варианта темы. |