Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрица
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Анастасия-
Помогите, будте добры!!!!!!!!!!!!!!!!!
Дана матрица размера 5 на 10ю найти минимальный\максимальный среди тех строк\столбцов, которые упорядочены либо по возрастанию, либо по убыванию. если такие строки\столбцы отсутствуют,то вывести 0.

я конечно чего-й-то написала, но не работают некоторые процедуры.
еще такой вопрос как сократить количество этих самых процедур????

program matrix21;
type matrix=array[1..50,1..50] of integer;
var
   a:matrix;
   i,j,p,p2,r,r2,s,d,max:integer;
{************************************************}
procedure ybuBaniestroki(a:matrix; var r:integer; var max:integer);
begin
{ystanoBka fla*ka}
r:=0;
for i:=1 to 4 do begin
    for j:=1 to 9 do begin
         if a[i,j+1]>=a[i,j] then r:=1; {Smena fla*ka} end;
         begin if r=0 then writeln('Stroka #',i,' ybuBaet');
         end;

    end;
end;
{*************************************************}
procedure Bozrastaniestroki(a:matrix; var p:integer);
begin
{ystanoBka fla*ka}
p:=0;
for i:=1 to 4 do begin
         for j:=1 to 9 do begin
         if a[i,j+1]<=a[i,j] then p:=1; {Smena fla*ka} end;
         begin
         if p=0 then writeln('Stroka ',i,' Bozrastaet');
         end;
         for j:=2 to 5 do
             max:=a[i,1];
             begin if a[i,j]>max then max:=a[i,j];
             end;
             writeln('max=',max:5);
end;
end;
{**************************************************}
procedure ybuBaniestolbca(a:matrix; var r2:integer);
begin
{ystanoBka fla*ka}
r2:=0;
for i:=1 to 4 do begin
         for j:=1 to 9 do begin
         if a[i+1,j]>=a[i,j] then r2:=1; {Smena fla*ka} end;
         begin
         if r2=0 then writeln('Stolbec ',j,' ybuBaet');
         end;
end;
end;
{**************************************************}
procedure Bozrastaniestolbca(a:matrix; var p2:integer);
begin
{ystanoBka fla*ka}
p2:=0;
for i:=1 to 4 do begin
         for j:=1 to 9 do begin
         if a[i+1,j]<=a[i,j] then p:=1; {Smena fla*ka} end;
         begin
         if p=0 then writeln('Stroka ',j,' Bozrastaet');
         end;
end;
end;
{*************************************************}
procedure BuBodnylj(p,r,p2,r2:integer; var s:integer);
begin
s:=0;
if (p=0) and (r=0) and (r2=0) and (p2=0) then writeln('0');
end;
{*************************************************}

begin
     {BBod matricu}
     writeln('BBedite elementu matricu razmera 5*10');
     for i:=1 to 5 do begin
         for j:=1 to 10 do begin
         write('a[',i,',',j,']=');
         readln(a[i,j]) end;
     end;
     writeln;

     {BuBod matricu}
     writeln('Bawa matrica');
     for i:=1 to 5 do begin
         for j:=1 to 10 do write(a[i,j]:5);
         writeln;
     end;
     {Obrawenie k proceduram}
     ybuBaniestroki(a,r,max);
     Bozrastaniestroki(a,p);
     ybuBaniestolbca(a,r2);
     Bozrastaniestolbca(a,p2);
     BuBodnylj(p,r,p2,r2,s);
end.

М
Теги используем...

volvo
Через функции (а не процедуры), можно... Переводить на процедуры не буду, ибо это извращение. Нужно - делай сама...

program matrix21;
type matrix=array[1..50,1..50] of integer;

const
  strOrder: array[boolean] of string = (
    ' A_Z', ' Z_A'
  );

function checkLine(a:matrix; m, n: integer; order: boolean): integer;
var
  flag: boolean;
  min, max: integer;
  i, j, count: integer;
begin
  count := 0;
  for i:=1 to m do begin
    flag := true;
    for j:=1 to n-1 do
      if (a[i, j+1] >= a[i,j]) = order then flag := false;

    if flag then begin
      inc(count);
      writeln('Stroka #', i, strOrder[order]);
      min := a[i, 1]; max := min;
      for j := 2 to n do begin

        if min > a[i, j] then min := a[i, j];
        if max < a[i, j] then max := a[i, j];

      end;
      writeln('min = ', min, ' max = ', max);
    end;
  end;
  checkLine := count;

end;

function checkColumn(a:matrix; m, n: integer; order: boolean): integer;
var
  flag: boolean;
  min, max: integer;
  i, j, count: integer;
begin
  count := 0;
  for j:=1 to n do begin
    flag := true;
    for i:=1 to m-1 do
      if (a[i+1, j] >= a[i,j]) = order then flag := false;

    if flag then begin
      inc(count);
      writeln('Stolbec #', i, strOrder[order]);
      min := a[1, j]; max := min;
      for i := 2 to m do begin

        if min > a[i, j] then min := a[i, j];
        if max < a[i, j] then max := a[i, j];

      end;
      writeln('min = ', min, ' max = ', max);
    end;
  end;
  checkColumn := count;

end;


var
  i, j: integer;
  a: matrix;

begin
     {BBod matricu}
     writeln('BBedite elementu matricu razmera 5*10');
     for i:=1 to 5 do begin
         for j:=1 to 10 do begin
         write('a[',i,',',j,']=');
         readln(a[i,j]) end;
     end;
     writeln;

     {BuBod matricu}
     writeln('Bawa matrica');
     for i:=1 to 5 do begin
         for j:=1 to 10 do write(a[i,j]:5);
         writeln;
     end;
     {Obrawenie k proceduram}
     if
       checkLine(a, 5, 10, false) +
       checkLine(a, 5, 10, true) +
       checkColumn(a, 5, 10, false) +
       checkColumn(a, 5, 10, true) = 0 then writeln('0');
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.