Задана прямоугольная матрица B размера m x n .Выполнить над матрицей В действия.
       | 2    1   7   5 |
B= |8    9  11  3 |
       |-3  -4  18   7 |

1.Найти сумму элементов строк и столбцов, на пересечении которых лежат отрицательные элементы.
2.Вычислить суммы элементов строк, номера которых определяются номерами ненулевых элементов заданного вектора (для этого пользователю требуется задать вектор)
3.Сформировать матрицу С из строк В расположив их так, чтобы количество отрицательных элементов в строке возростало с увеличением номера строки.
4.Построить матрицу С=А*В*В, где А - прямоугольная матрица размера n x m, а В квадратная матрица (m x m) .(для этого пользователю требуется задать матрицу А и В, и вывести С как матрицу)
5.Сформировать из столбцов В матрицу С , в которой столбцы расположены в порядке возростания сумм их элементов.
6.Вычислить суммы элементов строк, номера которых задаются целочисленным вектором.
7. Если количество ненулевых элементов В меньше , чем (m x n)/3 , сформировать матрицу С размерами к х 3 в первом столбце которой содержатся ненулевые элементы матрицы В , а во втором и третьем столбцах - их координаты в исходной матрице.( (m x n)/3 - число, число к  число не нулевых элементов в матрице В.)

ПОМОГИТЕ ОФОРМИТЬ ВСЁ ЧЕРЕЗ ПРОЦЕДУРЫ БЕЗ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ

1

Код:
uses crt;
Const
Nmax=8;
NMAXIMUM=999999;
var i,j,m,n,k,p:integer;
    A,B,C:array[1..Nmax,1..Nmax] of real;
    v:array[1..Nmax] of real;
    sum,sum1,sum2:real;


begin

 writeln('Vvedite kol-vo strok v matrice B (do ',Nmax,')');readln(m);
 writeln('Vvedite kol-vo stolbcov v matrice B (do ',Nmax,')');readln(n);

 writeln;



 for i:=1 to m do
 for j:=1 to n do
 begin
 write('B[',i,',',j,']: ');readln(B[i,j]);
 end;

 writeln;
 writeln(' matrica B :');
 writeln;


 for i:=1 to m do
 begin
 for j:=1 to n do write(B[i,j]:9:1,' ');
   writeln;
 end;

 begin
   for i:=1 to m do
   for j:=1 to n do
   if B[i,j]<0 then
    begin

      sum1:=0;
       begin
        for k:=1 to n do
         begin
          sum1:=sum1+B[i,k];
         end;
       end;

      sum2:=0;
       begin
        for p:=1 to m do
         begin
          sum2:=sum2+B[p,j];
         end;
       end;
      sum:=sum1+sum2;

     writeln('Summa stroki ',i,' i stolbca ',j,'  = ',sum:5:2)
    end;

  end;


readln;
end.

2

Код:
uses crt;
Const
Nmax=8;
var i,j,m,n,g,o,l:integer;
    A,B,C:array[1..Nmax,1..Nmax] of real;
    v:array[1..Nmax] of real;
    sm,sum,summax,summin:real;


begin

 writeln('Vvedite kol-vo strok v matrice B (do ',Nmax,')');readln(m);
 writeln('Vvedite kol-vo stolbcov v matrice B (do ',Nmax,')');readln(n);
 writeln('Vvedite kol-vo elementov vektora v');readln(g);
 writeln;



 for i:=1 to m do
 for j:=1 to n do
 begin
 write('B[',i,',',j,']: ');readln(B[i,j]);
 end;

 writeln;
 writeln(' matrica B :');
 writeln;


 for i:=1 to m do
 begin
 for j:=1 to n do write(B[i,j]:9:1,' ');
   writeln;
 end;

 for i:=1 to g do
 begin
 write('V[',i,']=');readln(v[i]);
 end;

writeln;

for i:=1 to m do
begin
if v[i]<>0 then
 begin
  sm:=0;
  for j:=1 to n do
  sm:=sm+B[i,j];
  writeln('Summa v stroke # ',i,'=',sm);
 end;
 end;
readln;
clrscr;
end.

3

Код:
uses crt;
Const
NMAX=4;
type matr=array[1..NMAX,1..NMAX+2] of integer;

procedure Vvod_B(var B:matr);{создание и вывод на экран исходной матрицы}
var i,j,k,l,m,n,x:integer;
begin

 writeln('Vvedite kol-vo strok v matrice B ');readln(m);
 writeln('Vvedite kol-vo stolbcov v matrice B ');readln(n);
 writeln;



 for i:=1 to m do
 for j:=1 to n do
 begin
 write('B[',i,',',j,']: ');readln(B[i,j]);
 end;

 writeln;
 writeln(' matrica B :');
 writeln;

 for i:=1 to m do
 begin
 for j:=1 to n do write(B[i,j]:5,' ');
   writeln;
 end;
end;

procedure Summ_Str(var B:matr);
var i,j,k,l,m,n,x:integer;
begin
for i:=1 to m do
 begin
  k:=0;
  for j:=1 to n do
  if b[i,j]<0 then k:=k+1;{считаем количество отрицательных в строке}
  b[i,n+1]:=k;{записывем его в первый дополнительный столбец}
  b[i,n+2]:=i;{во аторой дополнительный записываем номер строки}
 end;
 end;
 procedure Sort_Str(Var B:matr);
 var i,j,l,x,m,n:integer;
 begin
for i:=1 to m-1 do
for j:=i+1 to m do
if b[i,n+1]>b[j,n+1]then{по возрастанию знасений в предпоследнем столбце}
for l:=n+1 to n+2 do{сортируем оба дополнительных столбца}
 begin
  x:=b[i,l];
  b[i,l]:=b[j,l];
  b[j,l]:=x;
 end;
 end;

procedure Vyvod_C3(var B,C:matr);
var i,j,m,n:integer;
begin
writeln;
writeln(' matrica C :');
writeln;

for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    c[i,j]:=b[b[i,n+2],j];
{строке массива С присваиваем значения строки с номером в последнем столбце массива В}
    write(c[i,j]:9);
   end;
  writeln;
 end;
 end;

var B,C:matr;
begin
clrscr;
Vvod_B(B);
Summ_Str(B);
Sort_Str(B);
Vyvod_C3(B,C);
readln;
end.
end.

4

Код:
uses crt;
const
n=4;
m=3;
type
matr=array[1..n,1..m] of integer;
procedure Vvod(var B:matr;x:integer;c:char);
var i,j:integer;
begin
writeln('Vvedite ',x*m,' Elementov Matrici ',c,':');
for i:=1 to x do
for j:=1 to m do
 begin
  write('el[',i,',',j,']=');
  readln(B[i,j]);
 end;
end;
procedure Vyvod(var B:matr;x:integer;c:string);
var i,j:integer;
begin
writeln('Matrica ',c,':');
for i:=1 to x do
 begin
   for j:=1 to m do
   write(B[i,j]:4,' ');
   writeln;
 end;
end;
procedure UmnMatr(m1,m2:matr;x:integer;var m3:matr);
var p,j,i:integer;
begin
for p:=1 to x do
for j:=1 to m do
   begin
     m3[p,j]:=0;
     for i:=1 to m do
       begin
         m3[p,j]:=m3[p,j]+m1[p,i]*m2[i,j];
       end;
   end;
end;
var a,b,c,d:matr;
begin
clrscr;
Vvod(a,n,'A');
Vvod(b,m,'B');
clrscr;
Vyvod(a,n,'A');
Vyvod(b,m,'B');
UmnMatr(a,b,n,d);
Vyvod(d,n,'D=A*B');
UmnMatr(d,b,n,c);
Vyvod(c,n,'C=A*B*B');
readln
end.

5

Код:
uses crt;
const
NMAX=4;
type matr=array[1..NMAX+2,1..NMAX] of integer;{2 лишних строки для сортировки}
procedure Vvod_B(var B:matr);{создание и вывод на экран исходной матрицы}
var i,j,m,n:integer;
begin

 writeln('Vvedite kol-vo strok v matrice B ');readln(m);
 writeln('Vvedite kol-vo stolbcov v matrice B ');readln(n);
 writeln;



 for i:=1 to m do
 for j:=1 to n do
 begin
 write('B[',i,',',j,']: ');readln(B[i,j]);
 end;

 writeln;
 writeln(' matrica B :');
 writeln;

 for i:=1 to m do
 begin
 for j:=1 to n do write(B[i,j]:9,' ');
   writeln;
 end;
end;
procedure Summ_Stb(var B:matr);{подсчет суммы в столбцах}
var i,j,sm,m,n:integer;
begin

for j:=1 to n do
 begin
  sm:=0;
  for i:=1 to m do
  sm:=sm+B[i,j];
  B[m+1,j]:=sm;{в первую дополнительную строку запишем суммы в столбцах}
  B[m+2,j]:=j;{во второю номера столбцов}
 end;
end;
procedure Sort_Stb(var B:matr);{сортировка номеров столбцов по возрастанию суммы}
var i,j,l,x,m,n:integer;
begin
for i:=1 to n-1 do
for j:=i+1 to n  do
if B[m+1,i]>B[m+1,j]then
for l:=m+1 to m+2 do
 begin
  x:=B[l,i];
  B[l,i]:=B[l,j];
  B[l,j]:=x;
 end;
end;
procedure Vyvod_C(var B,m1:matr);{вывод результирующей матрицы}
var i,j,m,n:integer;
begin
writeln('Matrica C:');
writeln;
for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    m1[i,j]:=B[i,B[m+2,j]];
{каждой строке новой матрицы присваиваем знвчения строк,
указанных в последней строке исходной матрицы после сортировки}
    write(m1[i,j]:4);
   end;
  writeln;
 end;
end;
var B,C:matr;
begin
clrscr;
randomize;
Vvod_B(B);
Summ_Stb(B);
Sort_Stb(B);
Vyvod_C(B,C);
readln;
end.

6

Код:
uses crt;
const
m=3;{размеры матрицы по условию}
n=4;
type
mas=array[1..50] of integer;{целочисленный вектор}
str=array[1..n] of integer;{массивы-строки матрицы}
matr=array[1..m] of str;{матрица-массив строк}
procedure VvodMatr(var mt:matr);
var i,j:integer;
begin
writeln('Введите ',m*n,' элементов матрицы:');
for i:=1 to m do
for j:=1 to n do
 begin
  write('el[',i,',',j,']=');
  readln(mt[i,j]);
 end;
end;
procedure VyvodMatr(var mt:matr);
var i,j:integer;
begin
writeln('Матрица:');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(mt[i,j]:3,' ');
  writeln;
 end;
end;
procedure VvodMas(var ms:mas;var x:integer);
var i:integer;
begin
write('Размер массива x=');
readln(x);
writeln('Введите ',x,' элементов массива:');
for i:=1 to x do
 begin
  write('el[',i,']=');
  readln(ms[i]);
 end;
end;
procedure VyvodMas(var ms:mas;x:integer);
var i:integer;
begin
writeln('Массив:');
for i:=1 to x do
write(ms[i],' ');
writeln;
end;
function Summ(s:str):integer;
var i,sm:integer;
begin
sm:=0;
for i:=1 to n do
sm:=sm+s[i];{считаем сумму в массиве-строке матрицы}
Summ:=sm;
end;
procedure SummStr(mt:matr;ms:mas;x:integer;var sm:integer);
var i,j:integer;
begin
for i:=1 to m do
for j:=1 to x do
if i=ms[j] then{если номер строки есть в векторе}
 begin
  writeln('Сумма в строке ',i,'=',Summ(mt[i]));{считаем и выводим сумму}
  break;{дальше не ищем, чтоб не было повторов}
 end;
end;
var a:matr;
    v:mas;
    k,sm:integer;
begin
clrscr;
VvodMatr(a);
VvodMas(v,k);
clrscr;
VyvodMatr(a);
VyvodMas(v,k);
SummStr(a,v,k,sm);
readln
end.

7

Код:
uses CRT;
Const
Nmax=12;
var
B,C:array[1..Nmax,1..Nmax] of integer;
i,j,m,n,y:integer;

procedure Vvod_B;

begin

 writeln('Vvedite kol-vo strok v matrice B ');readln(m);
 writeln('Vvedite kol-vo stolbcov v matrice B ');readln(n);
 writeln;



 for i:=1 to m do
 for j:=1 to n do
 begin
 write('B[',i,',',j,']: ');readln(B[i,j]);
 end;

 writeln;
 writeln(' matrica B :');
 writeln;

 for i:=1 to m do
 begin
 for j:=1 to n do write(B[i,j]:5,' ');
   writeln;
 end;
 read;
end;


procedure Pere;

begin
y:= 0;

     begin
          for i:=1 to m do
          begin
               for j:=1 to n do
               begin
                    if B[i,j]<>0 then
                    begin
                         y:=y+1;
                         c[y,1]:=B[i,j];
                         c[y,2]:=i;
                         c[y,3]:=j;


                    end;
               end;
          end;
          read;
     end;

end;

procedure Vivod_C;

 begin
 writeln;
 writeln('Matrica C :');
 writeln;
  for i:=1 to y do
   begin
    for j:=1 to 3 do
     write(C[i,j]:5,' ');
     writeln;
   end;
   readln;
 end;




begin
 clrscr;
 Vvod_B;
 Pere;
 Vivod_C;
end.