Двумерные массивы

1. Найти столбец с наибольшей и наименьшей суммой элементов. Вывести на печать найденные столбцы и суммы их элементов.

 

program lab6z1;
uses crt;
const n=3;m=3;
var a:array [1..n,1..m] of integer;
    i,j,kmax,k,kmin,s,smax,smin:integer;
begin
randomize;
smax:=-maxint;
smin:=maxint;
kmax:=0;
kmin:=0;
For i:=1 to n do
   for j:=1 to m do
     a[i , j]:=random(20);
For i:=1 to m do
  begin
  writeln;
  for j:=1 to n do
  write(‘a(‘,i,’,’,j,’)= ‘,a[i , j],’  ‘);
  end;
For j:=1 to m do
   begin
   s:=0;
   k:=0;
  for i:=1 to n do
     begin
     s:=s+a[i,j];
     k:=k+1;
     if (k=n) and (s>smax) then begin
     smax:=s;kmax:=j;end;
     if (k=n) and (s<smin) then begin
     smin:=s;kmin:=j;end;
     end;
   end;
   writeln;
   writeln(‘Максимальная сумма элементов в ‘,kmax,’ столбце’,’ и она равна ‘,smax);
   writeln(‘Минимальная сумма элементов в ‘,kmin,’ столбце’,’ и она равна ‘,smin);
end.

 

2. Заполнить двумерный массив целыми числами от 1 до 100 по спирали.

 

program lab6z2;
uses crt;
const
  n = 10; m =10;
var
 s: array[1..n,1..m] of integer;
 i,j,k,p: integer;
begin
 i:=0; k:=0; p:=1;
 while i<n*m do
  begin
    inc(k);
    for j:=k to m-k+1 do
     begin
       inc(i);
       s[k,j]:=p;
       inc(p);
     end;
  for j:=k+1 to n-k+1 do
   begin
     inc(i);
     s[j,m-k+1]:=p;
     inc(p);
   end;
  for j:=m-k downto k do
   begin
     inc(i);
     s[n-k+1,j]:=p;
     inc(p);
   end;
  for j:=n-k downto k+1 do
   begin
     inc(i);
     s[j,k]:=p;
     inc(p);
   end
 end;
 for i:=1 to n do
  begin
    for j:=1 to m do
     write(s[i,j]:4,’ ‘);
  writeln;
 end;
 readln;
end.

 

3. Дана вещественная матрица размерности n * m. Поменять местами строки с максимальным и минимальным элементами.

program lab6z3;uses crt;
var a:array[1..1000,1..1000] of real;
i,j,n,m,maxi,mini:integer;
max,min,b:real;
begin
max:=-maxint;
min:=maxint;
randomize;
writeln(‘Введите к-во строк и столбцов’); readln(n,m);
writeln(‘Автозаполнение массив А …’);
for i:=1 to n do
   for j:=1 to m do
       a[i,j]:=random(50);
for i:=1 to n do
      begin
           for j:=1 to m do write(a[i,j]:8:1);
           writeln;
      end;
for i:=1 to n do
   for j:=1 to m do
     if a[i,j]>max then
       begin
        max:=a[i,j]; maxi:=i;
       end;
writeln(‘max элемент: ‘,max,’, строка: ‘,maxi);
{поиск min}
for i:=1 to n do
   for j:=1 to m do
     if a[i,j]<min then
       begin
        min:=a[i,j]; mini:=i;
       end;
writeln(‘min элемент: ‘,min,’, строка: ‘,mini);
for j:=1 to m do
    begin
    b:=a[maxi,j];
    a[maxi,j]:=a[mini,j];
    a[mini,j]:=b;
    end;
for i:=1 to n do
      begin
           for j:=1 to m do write(a[i,j]:8:1);
           writeln;
      end;
end.

 

4. Задан массив А[1:m, 1:n]. Некоторый элемент этого массива назовем Седловой точкой, если он является одновременно наименьшим в своей строке и наибольшим в своем столбце. Напечатать номер строки и столбца какой-нибудь Седловой точки и напечатать число 0, если такой точки нет.

 

program lab6z4;
var i,j,k,n,m,st,max,jj:integer;
a:array[1..100,1..100]of integer;
begin
randomize;
writeln(‘Введите к-во строк и столбцов’); readln(n,m);
writeln(‘Автозаполнение массив А …’);
for i:=1 to n do
   for j:=1 to m do
       a[i,j]:=random(50);
for i:=1 to n do
  begin
    for j:=1 to m do write(‘  a[‘,i,’,’,j,’]=’,a[i,j]:4);
    writeln;
  end;
for j:=1 to m do
  begin
     max:=a[1,j];st:=1;k:=0;
     for i:=1 to n do
       if a[i,j]>max then
         begin
            max:=a[i,j];st:=i;
         end;
     for jj:=1 to m do
     if (max>a[st,jj])and(j<>jj)then k:=1;
     if k=0 then
     begin
     write(‘Седловая точка[‘,st,’,’,j,’]- число: ‘,a[st,j]);
     halt;
     end;
  end;write(‘0’);
  end.

 

Добавить комментарий