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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2008, 13:44   #1
ViNcHeStEr
Delphi
Форумчанин
 
Регистрация: 12.06.2008
Сообщений: 137
По умолчанию Нахождение седловых точек

Задание: Для матрицы размером NxM вывести на экран все ее седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот. Все седловые точки вывести в отдельный одномерный массив и выделить цветом в двумерном массиве.
Вложения
Тип файла: rar Sedlo.rar (7.2 Кб, 84 просмотров)
ViNcHeStEr вне форума Ответить с цитированием
Старый 27.11.2008, 18:14   #2
ViNcHeStEr
Delphi
Форумчанин
 
Регистрация: 12.06.2008
Сообщений: 137
По умолчанию

Всё, тему можно закрывать. Я сам кое-как разобрался с этой задачей.
ViNcHeStEr вне форума Ответить с цитированием
Старый 08.04.2009, 12:47   #3
Комп3
Новичок
Джуниор
 
Регистрация: 07.04.2009
Сообщений: 1
По умолчанию

Плиз,выложи код на задачку...а то у меня такая же)Заранее спасиб
Комп3 вне форума Ответить с цитированием
Старый 08.04.2009, 12:52   #4
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

тут посмотри
вступлю в команду разработчиков ПО на Delphi
maladoy вне форума Ответить с цитированием
Старый 08.04.2009, 18:42   #5
ViNcHeStEr
Delphi
Форумчанин
 
Регистрация: 12.06.2008
Сообщений: 137
По умолчанию

Код изначально не мой, нашёл на каком-то сайте. Был написан на Паскале. Я переделал для Делфи.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Label3: TLabel;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  Dim = 10;

var
  Form1: TForm1;
  a: Array [1..Dim, 1..Dim] of Integer;
  i, j, k, m, n, min_i, max_j, maxelement: Integer;
  b: boolean;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
m:=3;
n:=3;
edit1.Text:=inttostr(m);
edit2.Text:=inttostr(n);
   StringGrid1.ColCount:=m+1;
   StringGrid1.RowCount:=n+1;
Memo1.Clear;
   StringGrid1.Cells[0,0]:='Массив';

   for i:=1 to m do begin
    StringGrid1.Cells[i,0]:='m '+IntToStr(i);
                     end;

    for i:=1 to n do begin
    StringGrid1.Cells[0,i]:='n '+IntToStr(i);
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin try
m:=strtoint(edit1.Text);
n:=strtoint(edit2.Text);
  if (m > Dim)  or (n > Dim) or (m < 2) or (n < 2) then
  begin
  Edit1.Text:=FloatToStr(5);
  m:=5;
  Edit2.Text:=FloatToStr(5);
  n:=5;
  Memo1.Lines.Add('m и n должны быть меньше чем '+FloatToStrF(dim,ffFixed,0,0)+' и больше чем 1');
    Exit;
  end;
     StringGrid1.ColCount:=m+1;
   StringGrid1.RowCount:=n+1;
      StringGrid1.Cells[0,0]:='Массив';

   for i:=1 to m do begin
    StringGrid1.Cells[i,0]:='m '+IntToStr(i);
                     end;

    for i:=1 to n do begin
    StringGrid1.Cells[0,i]:='n '+IntToStr(i);
    end;
    except
  Edit1.Text:='ошибка!';
  Edit2.Text:='ошибка!';
       end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  randomize;
  for i := 1 to m do
    for j := 1 to n do
    begin
      a[i,j]:=random(100)+1;
    end;

  for i := 1 to m do
  begin
    for j := 1 to n do
    StringGrid1.Cells[i,j]:=FloatToStr(a[i,j]);
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  b := False;
  for i := 1 to m do
  begin
    min_i := 1;
    for k := 2 to n do if a[i, k] < a[i, min_i] then min_i := k;
    max_j := 1;
    for k := 2 to m do if a[k, min_i] > a[max_j, min_i] then max_j := k;
    if i = max_j then
    begin
      b := True;
    Memo1.Lines.Add('Седловая точка: А['+FloatToStrF(max_j,ffFixed,0,0)+','+FloatToStrF(min_i,ffFixed,0,0)+'] = '+FloatToStrF(a[max_j, min_i],ffFixed,0,0));
      for k := 1 to n do a[max_j, k] := 0;
      for k := 1 to m do a[k, min_i] := 0;
      Break;
    end;
  end;
    if b then
  begin
      Memo1.Lines.Add('Седловые точки найдены');
            Memo1.Lines.Add('');
  end
  else Memo1.Lines.Add('Седловые точки не найдены');
              Memo1.Lines.Add('');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.Clear;
edit1.Clear;
edit2.Clear;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
close;
end;



procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  begin
With TStringGrid(Sender),TStringGrid(Sender).Canvas Do
Begin
  b := False;
  for i := 1 to m do
  begin
    min_i := 1;
    for k := 2 to n do if a[i, k] < a[i, min_i] then min_i := k;
    max_j := 1;
    for k := 2 to m do if a[k, min_i] > a[max_j, min_i] then max_j := k;
if i = max_j then begin
      b := True;


if (acol=max_j) and (arow=min_i) then begin
FillRect(Rect);
Brush.Color:=Clred;
Font.Color:=Clyellow;
Font.Style:=[fsBold];
Font.Size:=14;

end;

TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol,ARow]);
    end;
  end;

end;


end;

end.
ViNcHeStEr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти такую точку, сумма расстояний от которой до остальных точек минимальна SIEGER Помощь студентам 3 18.11.2008 17:53
Получение координат точек касательной к окружности Stilet Помощь студентам 2 01.08.2008 15:12
Поверхность по массиву точек на OpenGL в Delphi Mixasik Помощь студентам 1 21.07.2008 16:41
Определить радиус и центр окружности на которой лежит наибольшее число точек. Zoratul Помощь студентам 2 11.01.2008 16:00