Динамический массив - Pascal (89723)

Узнай цену своей работы

Формулировка задачи:

Все как обычно просто. Задаем двумерный массив(любой) и считаем сумму положительных элементов по столбцам. Выводим результат в виде одномерного массива. И все это с динамическим выделением памяти. Входной файл взял для удобства ввода чисел, выглядит так: 3 - число столбцов 3 - число строк 1 1 1 1 1 1 1 1 1 Вот что получилось
И не могу понять почему же у меня в памяти одномерного массива все что угодно кроме правильного ответа.
Я понял почему ответ не правильный. В памяти мусор. Тогда вопрос как очистить динамическую память.

Решение задачи: «Динамический массив»

textual
Листинг программы
{$R-}
program DynamicArray;
 
TYPE
BType=integer;
Type
IndexRow=^MyRow;
MyRow=array [0..0] of BType;{ "Строка" динамической матрицы }
IndexArray=^MyArray;
MyArray=array [0..0] of IndexRow;{ Сама матрица - представляется как массив указателей на "строки" }
 
 
var
DynamicArray1:IndexArray;{двумерный массив }
DynamicArray2:IndexRow; {одномерный}
Column,Row,i,j,l,k:integer;
InFile,OutFile:text;
 
BEGIN
Assign (InFile,'in.txt');
Assign (OutFile,'out.txt');
Reset(InFile);
Rewrite(OutFile);
Readln(InFile,Column);
Readln(InFile,Row);
{Выделяем память по массивы}
GetMem(DynamicArray1,Row*sizeof(IndexRow));
for i:=0 to Column-1 do
GetMem(DynamicArray1^[i],Column*sizeof(BType));
GetMem(DynamicArray2,column*sizeof(BType));
{Обнуляем содержимое памяти}
DynamicArray1^[i]^[j]:=0;
for k:=0 to column-1 do
 DynamicArray2^[k]:=0;
for i:=0 to row-1 do
 for j:=0 to column-1 do
 DynamicArray1^[i]^[j]:=0;
 
for i:=0 to row-1 do begin
  for j:=0 to column-1 do
      Read(InFile,DynamicArray1^[i]^[j]);
end;
for i:=0 to row-1 do begin
  for j:=0 to column-1 do
 Write(OutFile,'a[',i,',',j,']=',DynamicArray1^[i]^[j],'  ');
 Writeln(OutFile,'');
end;
Writeln(OutFile,'');
k:=0;
for j:=0 to column-1 do begin
  for i:=0 to row-1 do
    if DynamicArray1^[i]^[j]>0 then begin
        DynamicArray2^[k]:=DynamicArray2^[k]+DynamicArray1^[i]^[j];
        end;
k:=k+1;
end;
 
Writeln (OutFile,'');
 
for k:=0 to column-1 do
Writeln(OutFile,'symma [',k,'] stolba s[',k,']=',DynamicArray2^[k]);
 
close(OutFile);
{Освобождаем зарезервированную память}
for i:=0 to Column-1 do
FreeMem(DynamicArray1^[i],column*sizeof(BType));
FreeMem(DynamicArray1,Row*sizeof(IndexRow));
FreeMem(DynamicArray2,column*sizeof(BType));
Readln;
END.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы