Динамический массив - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д