
28.12.2009, 06:20
|
Прохожий
|
|
Регистрация: 28.12.2009
Сообщения: 1
Репутация: 10
|
|
Седловые точки
условие:
матрица А имеет седловую точку Aij,если Aij является минимальным элементом в i-й строке и максимальным в j-столбце.Дана целочисленная прямаугол. матрица.Определить:Номера строк и столбцов всех седловых точек...
-для начала я просто хотел определить седловые точки,но определяется неправельно.Или по одному параметру(по мин строке) или по другому параметру(макс столбце) и бывает совпадает все вместе..
Ну а по заданию мне нужно только, чтоб выводила только в мемо: номер строки и столбца ,где находится эта проклятая седловая точка.
Исправьте в коде только после , function Sed(A:matr;x,y:byte):string;.. вознагрожу за помощь достойно..пожалуйсто помогите ..
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Button1: TButton;
Button2: TButton;
StringGrid1: TStringGrid;
Edit1: TEdit;
Label3: TLabel;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label4: TLabel;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
type matr=array[0..100,0..100]of integer;
var A:matr;
x,y:byte;
implementation
{$R *.dfm}
function Vvod(var A:matr;var x,y:byte):integer ;
var i,j:byte;
begin
randomize;
for i:=0 to y-1 do
for j:=0 to x-1 do
A[i,j]:=random(8);
end;
function Vivod(mt:matr;x,y:byte;StringGrid1:TstringGrid):integer;
var i,j:integer;
begin
for i:= 0 to y-1 do
for j:=0 to x-1 do
StringGrid1.Cells[j,i]:=FloatToStr(A[i,j]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo2.Clear;
StringGrid1.ColCount:=StrToInt(Edit1.Text);
StringGrid1.RowCount:=StrToInt(Edit2.Text);
x:= strtoint(edit1.text);
y:= strtoint(edit2.text);
Vvod(A,x,y);
Vivod(A,x,y,StringGrid1);
end;
{задача}
function Sed(A:matr;x,y:byte):string;
var
i,j,k,tempi,tempj,max,min,countsed:integer;
fl:boolean;
begin
countsed:=0;
for i:=1 to x do
begin
min:=a[i,1];
tempi:=1;
tempj:=1;
for j:=2 to y do
if a[i,j]<min then
begin
min:=a[i,j];
tempi:=i;
tempj:=j;
end;
k:=1;
fl:=true;
repeat
if a[k,tempj]>min then
fl:=false;
inc(k)
until
(k>x) or (fl=false);
if fl then
begin
result:='Элемент А['+inttostr(A[tempi,tempj])+']является седловой точкой';
inc(countsed)
end;
end;
if countsed=0 then
begin
result:='В заданной матрице седловых точек нет...';
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
memo2.Lines.Add((Sed(A,x,y)));
end;
end.
|