GAECHKA
Твоя помощница в решении задач

Динамические массивы - удаление строк с нулями

Приветствую всех. Нужна помощь.
Как в Free Pascal реализовать удаление строк с нулями через динамику? Я просто немного не догоняю, как это сделать...
0
вопрос задан

Источник


5 ответов
Решение
uses crt;
var a:array of array of integer;
    m,n,i,j,k:integer;
begin
clrscr;
write('m=');
readln(m);
write('n=');
readln(n);
setlength(a,m,n);
randomize;
writeln('Matrix 1');
for i:=0 to m-1 do
 begin
  for j:=0 to n-1 do
   begin
    a[i,j]:=-10+random(21);
    write(a[i,j]:4);
   end;
  writeln;
 end;
for i:=0 to m-1 do
 begin
  j:=0;
  while(j)and(a[i,j]0) do inc(j);
  if jthen
   begin
    if i-1 then
    for k:=i to m-2 do
    for j:=1 to n-1 do
    a[k,j]:=a[k+1,j];
    m:=m-1;
   end;
 end;
if m=0 then write('Vse stroki udaleny')
else
 begin
  writeln('Matrix 2');
  for i:=0 to m-1 do
   begin
    for j:=0 to n-1 do
    write(a[i,j]:4);
    writeln;
   end;
 end;
readln
end.
А как освобождать память потом, где ставить команду Dispose?
И что в ней должно быть?
где ставить команду Dispose?
А где в коде есть New, чтобы вызывать Dispose?
Её нет, но мой препод сказал: "Если есть команда выделения памяти, то должна быть и команда для её освобождения".
Динамические массивы— это тип данных с управля*емым временем жизни, поэтому можно не думать о своевременном освобождении выделенной им памя*ти — она будет освобождена автоматически, когда дан*ная переменная покинет область видимости.
..................................................
При необходимости память, выделенную под массив, можно осво*бодить самостоятельно (например, если массив ис*пользовал слишком большое ее количество). Для этого достаточно просто присвоить массиву значение nil. Например: A:= nil;
https://studopedia.su/15_70700_dinamicheskie-massivi-v-Pascal.html