Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Дана матрица. Определить номера строк и столбцов в


Автор: eppi 8.5.2014, 10:30
Матрица А имеет седловую точку Аij, если Аij является минимальным элементом в 1-й строке и максимальным j-м столбце. Дана целочисленная прямоугольная матрица. Определить:
A. сумму элементов в тех строках, которые содержат хотя бы один отрицатель¬ный элемент (оформить в виде функции);
B. номера строк и столбцов всех седловых точек матрицы (оформить в виде процедуры).



Заранее благодарю  smile 

Автор: Poseidon 8.5.2014, 10:43
Для домашних заданий, контрольных и курсовых существует http://forum.vingrad.ru/Vingrad-help-center.html.

Тема перенесена! 

Автор: Pawl 8.5.2014, 19:24
Код

program Project2;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

type
  matr = array [1 .. 10, 1 .. 10] of integer;
  mas = array [1 .. 100] of integer;

var
  i, j, n, m, z: integer;
  mat: matr;
  s: mas;

function sum(a: matr; r, c: integer; var p: integer): mas;
var
  k: integer; sm: mas;
begin
  p := 1;
  for i := 1 to r do
  begin
    for j := 1 to c do
    begin
      if a[i, j] < 0 then
      begin
        sm[p] := 0;
        for k := 1 to c do
        begin
          sm[p] := sm[p] + a[i, k];
        end;
        p := p + 1;
         break;
      end;
    end;
  end;
  sum := sm;
end;

procedure nomera(a: matr; r, c: integer);
var
  minrow, maxrow: integer;
  // номера минимального и максимального элементов в строке
  mincol, maxcol: integer; //
begin
  writeln('координаты седловых точек:');
  for i := 1 to r do
  begin
    // находим минимальный и максимальный элементы в строке
    minrow := 1;
    maxrow := 1;
    for j := 1 to c do
    begin
      if a[i, minrow] > a[i, j] then
        minrow := j;
      if a[i, maxrow] < a[i, j] then
        maxrow := j;
    end;
    // проверяем столбцы минимального и максимального элемента в строке
    // мы можем сделать это в одном цикле, т.к в столбце мин. элем. нам нужен
    // только макс. элем., а в столбце макс. элем. только мин.элем
    mincol := 1;
    maxcol := 1;
    for j := 1 to c do
    begin
      if a[mincol, maxrow] > a[j, maxrow] then
        mincol := j;
      if a[maxcol, minrow] < a[j, minrow] then
        maxcol := j;
    end;
    // ответ
    if mincol = i then
      writeln('№ строки: ', i, ' № столбца: ', maxrow);
    if maxcol = i then
      writeln('№ строки: ', i, ' № столбца: ', minrow);
  end;
end;

begin
  writeln('введите размеры матрицы');
  readln(n, m);
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      writeln('введите ', i, '-й ', j, '-й элемент матрицы');
      readln(mat[i, j]);
    end;
  end;
  writeln;
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      write(mat[i, j], ' ');
    end;
    writeln;
  end;
  s := sum(mat, n, m, z);
  if z > 1 then
  begin
    writeln;
    for i := 1 to z - 1 do
    begin
      writeln(s[i]);
    end;
  end;
  writeln;
  nomera(mat, n, m);
  readln;
end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)