|
|
#1
|
|||
|
|||
Седловые точки
условие:
матрица А имеет седловую точку 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. |
#2
|
|||
|
|||
ICQ - 324-783-266
Пиши, сейчас сделаем |