Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2012, 19:10   #1
Артур_1993
 
Регистрация: 28.11.2012
Сообщений: 3
Вопрос Поиск седловых точек в двумерном массиве

Здравствуйте форумчане, поманите пожалуйста студенту с лабораторной работой!

Задание:
Для матрицы размером NxM вывести на экран все ее седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце, или наоборот. Массивы представлять на форме в виде компонентов TStringGrid, в которых 0-й столбец и 0-ю строку использовать для отображения индексов массивов.

Заранее большое спасибо, всем кто поможет! :-)
Артур_1993 вне форума Ответить с цитированием
Старый 28.11.2012, 19:51   #2
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Вам во фриланс. Рублей за 250 кто-нибудь может и сделает. Кто-нибудь, кто знает Delphi.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 28.11.2012, 20:01   #3
Артур_1993
 
Регистрация: 28.11.2012
Сообщений: 3
По умолчанию

Можно только алгоритм поиска и вывода седловых точек написать, а остальное я могу сам сделать!

ЗЫ: Так то вроде я не ошибся разделом форума! Помощь студентам...а за деньги я могу найти и так кто может сделать! :-)
Артур_1993 вне форума Ответить с цитированием
Старый 28.11.2012, 20:28   #4
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
ЗЫ: Так то вроде я не ошибся разделом форума! Помощь студентам...а за деньги я могу найти и так кто может сделать! :-)
Так-то вроде бы слово помощь подразумевает что вы уже что-то сделали и запутались, а мы вам помогаем.

Цитата:
Можно только алгоритм поиска и вывода седловых точек написать, а остальное я могу сам сделать!
Алгоритм:
1. Создаем матрицу A размерностью NxM и заполняем её случайными числами
2. Создаем массивы B и С размерностью N (кол-во строк)
3. Ищем в каждой i-й строке минимальный и максимальный элемент и записываем номер столбца этого минимального элемента в B[i], а максимального в C[i]
4. Проходим по массиву B[i], достаем из каждого i-го элемента номер столбца и находим в нем индекс максимального элемента в столбце. Если полученный индекс равен i, то это седловая точка.
5. Повторить для массива C то же самое, только в столбцах искать минимальный элемент.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 28.11.2012, 21:22   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
program Project1;
{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

type
  tdarr = array of array of integer;

var
  a: tdarr;
  n, m: integer;

procedure fillarr(var a: tdarr; n, m: integer);
var
  i, j: integer;
begin
  for i := 1 to n do
    for j := 1 to m do
      a[i, j] := random(11) - 5;
end;

procedure printarr(const a: tdarr; n, m: integer);
var
  i, j: integer;
begin
  for i := 1 to n do
  begin
    for j := 1 to m do
      write(a[i, j]:4);
    writeln;
  end;
end;

procedure extraprintarr(const a: tdarr; n, m: integer);
var
  i, j: integer;
begin
  write('   |');
  for j := 1 to m do
    write(a[0, j]:4);
  writeln('|');
  for j := 0 to m + 1 do
    write('----');
  writeln;
  for i := 1 to n do
  begin
    write(a[i, 0]:3, '|');
    for j := 1 to m do
      write(a[i, j]:4);
    write('|', a[i, m + 1]:3);
    writeln;
  end;
  for j := 0 to m + 1 do
    write('----');
  writeln;
  write('   |');
  for j := 1 to m do
    write(a[n + 1, j]:4);
  writeln('|');
end;

procedure printsaddlepoints(const a: tdarr; n, m: integer);
var
  i, j: integer;
begin
  for i := 1 to n do
  begin
    for j := 1 to m do
      if (a[0, j] = a[i, m + 1]) or (a[n + 1, j] = a[i, 0]) then
      begin
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
          FOREGROUND_RED or FOREGROUND_INTENSITY);
        write(a[i, j]:4);
      end
      else
      begin
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
          FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_BLUE);
        write(a[i, j]:4);
      end;
    writeln;
  end;
end;

procedure findminmax(var a: tdarr; n, m: integer);
var
  i, j: integer;
begin
  for i := 1 to n do
  begin
    a[i, 0] := a[i, 1];
    a[i, m + 1] := a[i, 1];
    for j := 2 to m do
      if a[i, j] < a[i, 0] then
        a[i, 0] := a[i, j]
      else if a[i, j] > a[i, m + 1] then
        a[i, m + 1] := a[i, j];
  end;
  for j := 1 to m do
  begin
    a[0, j] := a[1, j];
    a[n + 1, j] := a[1, j];
    for i := 2 to n do
      if a[i, j] < a[0, j] then
        a[0, j] := a[i, j]
      else if a[i, j] > a[n + 1, j] then
        a[n + 1, j] := a[i, j];
  end;
end;

begin
  randomize;
  writeln('Input matrix size (nxm):');
  readln(n, m);
  setlength(a, n + 2, m + 2);
  fillarr(a, n, m);
  writeln('Matrix:');
  printarr(a, n, m);
  findminmax(a, n, m);
  writeln;
  writeln('Matrix with min and max:');
  extraprintarr(a, n, m);
  writeln;
  writeln('Saddle points:');
  printsaddlepoints(a, n, m);
  setlength(a, 0, 0);
  readln;

end.
Текстовый вариант программы.
Должен цветом показать седловые точки, но при рандоме очень трудно получить такие точки (для проверки можно заполнить единичками всю матрицу).

Или ручной ввод:
Код:
procedure fillarr(var a: tdarr; n, m: integer);
var
  i, j: integer;
begin
  for i := 1 to n do
    for j := 1 to m do
    begin
      write('a[', i, ', ', j, '] = ');
      readln(a[i, j]);
    end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 28.11.2012 в 21:49.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
матризы определить индексы всех ее седловых точек Sylar9 Общие вопросы C/C++ 2 06.01.2012 16:09
Поиск столбца с макс. суммой элементов в двумерном массиве. oRik24 Помощь студентам 3 21.06.2011 13:20
Поиск Максимума в двумерном массиве NSvirus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 20.09.2009 18:04
Нахождение седловых точек ViNcHeStEr Помощь студентам 4 08.04.2009 18:42