Матрица MxN


Задача:

В прямоугольной матрице, размерностью n*m, заполненной случайным образом числами из промежутка [-40,30], найти сумму и количество элементов каждого столбца с заданным условием (хранить эти значения в массивах): элементы, кратные k1 или k2.


Код:


program M_x_N;
type
 Tmatrix = array[1..1] of integer; {тип для динамических массивов}
var
 Matrix: ^Tmatrix;	{матрица m x n}
 Sums: ^Tmatrix;	{массив для сумм элементов в столбцах}
 Nums: ^Tmatrix;	{массив для количества кратных элементов}
 i,j,k1,k2,m,n: integer;

Begin
Write('Введите n:');
Readln(n);
Write('Введите m:');
Readln(m);
Write('Введите k1:');
Readln(k1);
Write('Введите k2:');
Readln(k2);


GetMem(Matrix,n * m * sizeOf(integer)); {выделение памяти под все массивы}
GetMem(Sums,n * sizeOf(integer));	{-//-}
GetMem(Nums,n * sizeOf(integer));	{-//-}

for j:=1 to n do begin
 Nums^[j]:= 0;		{обнуление массивов}
 Sums^[j]:= 0;		{-//-}
                 end;
Writeln;
Writeln('Матрица:');

Randomize;	{для произвольной генерации чисел}
for i:=1 to m do begin		{цикл по всей матрице}
 for j:=1 to n do begin
                  Matrix^[(j-1)*n+i]:=Random(71)-40;	{инициализация элементов 
		      					(Random(71) - это числа 0..70)}
                  Write( (Matrix^[(j-1)*n+i]):4 );	{вывод на экран}
                  if (Matrix^[(j-1)*n+i] mod k1 = 0) or (Matrix^[(j-1)*n+i] mod k2 = 0) then 
                      begin	{если элемент кратен}
                      Sums^[j]:= Sums^[j] + Matrix^[(j-1)*n+i]; {прибавляем в массив сумм}
                      Nums^[j]:= Nums^[j] + 1;		{и увеличиваем кол-во на 1}
                      end;
                  end;
                 Writeln;
                 end;
Writeln('Число элементов кратных ', k1,' и ',k2,':');	{вывод}

for j:=1 to n do
 Write( (Nums^[j]):4 );

Writeln;
Writeln('Сумма по столбцам:');

for j:=1 to n do
 Write( (Sums^[j]):4 );

FreeMem(Sums,n * sizeOf(integer));		{освобождение памяти}
FreeMem(Nums,n * sizeOf(integer));
FreeMem(Matrix,n * m * sizeOf(integer));

Readln;
End.




Hosted by uCoz