программа выводит на экран матрицу размерности от 4 на 4 до 9 на 9, такую ,что элементы матрицы могут принимать значение от 1 до 9 ив строках цифры не могут повторятся,в столбцах могут — Pascal(Паскаль)

-вывести на экран элементы этой матрицы с наименьшими значениями,
начиная с a(1,1) и продолжая в строку ниже строго в направлениях: вниз,влево-вниз,вправо-вниз
-вывести сумму значений этих «наименьших» элементов.

например:

1 2 3 4
2 3 1 4
4 3 1 2
2 3 4 1


{ а(1 1) первый , идем вниз а(2 1) , оттуда можно в последний столбец в а(3 4) , а оттуда в а(4 4)}

a(1 1) + a(2 1) + a(3 4) + a(4 4)

1 + 2 + 2 + 1 = 6

Program xa;
uses
  crt;
function min(a,b:byte):byte;
begin
  if a<b then
    min:=a
  else
    min:=b;
end;
 
var
  matr:array [1..9,1..9] of byte;
  mas:array [1..9] of byte;
  m:set of byte;
  i,j,n,tmp,sum,jj:byte;
begin
  randomize;
  repeat
    clrscr;
    Writeln('VVedute N. N>3 u N<10');
    Write('N=');
    readln(n);
  until (n>3) and (n<10);
  for i:=1 to n do
  begin
    m:=[];
    for j:=1 to n do
    begin
      repeat
        tmp:=random(9)+1;
      until not (tmp in m);
      m:=m+[tmp];
      matr[i,j]:=tmp;
    end;
  end;
  clrscr;
  Writeln('MatpuL/a ');
  writeln;
  for i:=1 to n do
  begin
    for j:=1 to n do
      Write(matr[i,j], ' ');
    writeln
  end;
  sum:=matr[1,1];
  jj:=1;
  mas[1]:=1;
  for i:=2 to n do
  begin
    if jj=1 then
      tmp:=min(min(matr[i,n],matr[i,jj]),matr[i,jj+1])
    else
      if jj=n then
        tmp:=min(min(matr[i,n-1],matr[i,n]),matr[i,1])
      else
        tmp:=min(min(matr[i,jj-1],matr[i,jj]),matr[i,jj+1]);
    for j:=1 to n do
      if matr[i,j]=tmp then
        mas[i]:=j;
    inc(sum,tmp);
    jj:=mas[i];
  end;
  writeln;
  Writeln('HaLLIb /7yt''');
  writeln;
  for i:=1 to n do
  begin
    for j:=2 to mas[i] do
      write('  ');
    writeln(matr[i,mas[i]])
  end;
  writeln;
  Writeln('Sum= ',sum);
  readkey
end.

Вариант 2

Program xa;
uses
  crt;
function min(a,b:byte):byte;
begin
  if a<b then
    min:=a
  else
    min:=b;
end;
 
var
  matr:array [1..9,1..9] of byte;
  mas:array [1..9] of byte;
  m:set of byte;
  i,j,n,tmp,sum,jj:byte;
  c:char;
begin
  randomize;
  repeat
    n:=4+random(6);
    for i:=1 to n do
    begin
      m:=[];
      for j:=1 to n do
      begin
        repeat
          tmp:=random(9)+1;
        until not (tmp in m);
        m:=m+[tmp];
        matr[i,j]:=tmp;
      end;
    end;
    clrscr;
    Writeln('MatpuL/a ');
    writeln;
    for i:=1 to n do
    begin
      for j:=1 to n do
        Write(matr[i,j], ' ');
      writeln
    end;
    sum:=matr[1,1];
    jj:=1;
    mas[1]:=1;
    for i:=2 to n do
    begin
      if jj=1 then
        tmp:=min(min(matr[i,n],matr[i,jj]),matr[i,jj+1])
      else
        if jj=n then
          tmp:=min(min(matr[i,n-1],matr[i,n]),matr[i,1])
        else
          tmp:=min(min(matr[i,jj-1],matr[i,jj]),matr[i,jj+1]);
      for j:=1 to n do
        if matr[i,j]=tmp then
          mas[i]:=j;
      inc(sum,tmp);
      jj:=mas[i];
    end;
    writeln;
    Writeln('HaLLIb /7yt''');
    writeln;
    for i:=1 to n do
    begin
      for j:=2 to mas[i] do
        write('  ');
      writeln(matr[i,mas[i]])
    end;
    writeln;
    Writeln('Sum= ',sum);
    Writeln;Writeln('}l{elaete povtoput'' deuctvuia? (Y/N)');
    c:=readkey
  until (c<>'y') and (c<>'Y') and (c<>#13);
end.

Leave a Comment

52 − = 42