Задан числовой массив A[m*n].Некоторый элемент этого массива назовём Седловой точкой,если он является одновременно наименьшим в своей строке и наибольшим в своем столбце.Напечатать номера строки и столбца Сндловой точки и напечатать число 0,если такой точки нет.
Помогите с алгоритмом!!!!!
Двумерный массив в Delphi!!!!!
[syntax="delphi"]
for i:= 0 to n do
bigin
t:= mas[i,0];
s:= 1;
for j:= 0 to m do
if t > mas[i,j] then
begin
t:= mas[i,j];
str:= i;
stl:= j;
end;
for z:= 0 to n do
begin
if (t < mas[z,j]) and (z <> str) then
s:= 0;
end;
if s = 1 then
label1.Caption:= IntToStr(str) + ' , ' + IntToStr(stl) + '; ';
end;
if label1.Caption = ' ' then
label1.Caption:= '0';
[/syntax]
PS: вроде должна правильно работать, если что пиши
for i:= 0 to n do
bigin
t:= mas[i,0];
s:= 1;
for j:= 0 to m do
if t > mas[i,j] then
begin
t:= mas[i,j];
str:= i;
stl:= j;
end;
for z:= 0 to n do
begin
if (t < mas[z,j]) and (z <> str) then
s:= 0;
end;
if s = 1 then
label1.Caption:= IntToStr(str) + ' , ' + IntToStr(stl) + '; ';
end;
if label1.Caption = ' ' then
label1.Caption:= '0';
[/syntax]
PS: вроде должна правильно работать, если что пиши
-
- Сообщения: 509
- Зарегистрирован: 03 янв 2009, 23:17
- Откуда: Voronezh
- Контактная информация:
Можно расходиться от текущего элемента в разные стороны, пока выполняются условия:
[syntax="delphi"]
program Project;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
ArrNxM: array of array of Integer;
N, M, i, j, k: Integer;
fl: Boolean;
ch: Char;
begin
repeat
//*
Write('N: ');
ReadLn(N);
Write('M: ');
ReadLn(M);
//добавьте проверку вводимых границ массива
//*
SetLength(ArrNxM, N, M);
Randomize;
for i := 0 to N - 1 do
begin
for j := 0 to M - 1 do
begin
ArrNxM[i, j] := Random(50);
Write(ArrNxM[i, j]: 4);
end;
WriteLn;
end;
for i := 0 to N - 1 do
for j := 0 to M - 1 do
begin
fl := True;
for k := j + 1 to M - 1 do
if not (ArrNxM[i, j] < ArrNxM[i, k]) then
begin
fl := False;
Break;
end;
if not fl then
Continue
else
for k := 0 to j - 1 do
if not (ArrNxM[i, j] < ArrNxM[i, k]) then
begin
fl := False;
Break;
end;
if not fl then
Continue
else
for k := i + 1 to N - 1 do
if not (ArrNxM[i, j] > ArrNxM[k, j]) then
begin
fl := False;
Break;
end;
if not fl then
Continue
else
for k := 0 to i - 1 do
if not (ArrNxM[i, j] > ArrNxM[k, j]) then
begin
fl := False;
Break;
end;
if fl then
WriteLn('Point: ', ArrNxM[i, j], ', Indexes: ', i, ',', j);
end;
if not fl then
WriteLn(0);
SetLength(ArrNxM, 0, 0);
Write('Continue? (y/n) ');
ReadLn(ch);
until UpCase(ch) <> 'Y';
end.
[/syntax]
Angel666, что заключать код в тэги не учили?
[syntax="delphi"]
program Project;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
ArrNxM: array of array of Integer;
N, M, i, j, k: Integer;
fl: Boolean;
ch: Char;
begin
repeat
//*
Write('N: ');
ReadLn(N);
Write('M: ');
ReadLn(M);
//добавьте проверку вводимых границ массива
//*
SetLength(ArrNxM, N, M);
Randomize;
for i := 0 to N - 1 do
begin
for j := 0 to M - 1 do
begin
ArrNxM[i, j] := Random(50);
Write(ArrNxM[i, j]: 4);
end;
WriteLn;
end;
for i := 0 to N - 1 do
for j := 0 to M - 1 do
begin
fl := True;
for k := j + 1 to M - 1 do
if not (ArrNxM[i, j] < ArrNxM[i, k]) then
begin
fl := False;
Break;
end;
if not fl then
Continue
else
for k := 0 to j - 1 do
if not (ArrNxM[i, j] < ArrNxM[i, k]) then
begin
fl := False;
Break;
end;
if not fl then
Continue
else
for k := i + 1 to N - 1 do
if not (ArrNxM[i, j] > ArrNxM[k, j]) then
begin
fl := False;
Break;
end;
if not fl then
Continue
else
for k := 0 to i - 1 do
if not (ArrNxM[i, j] > ArrNxM[k, j]) then
begin
fl := False;
Break;
end;
if fl then
WriteLn('Point: ', ArrNxM[i, j], ', Indexes: ', i, ',', j);
end;
if not fl then
WriteLn(0);
SetLength(ArrNxM, 0, 0);
Write('Continue? (y/n) ');
ReadLn(ch);
until UpCase(ch) <> 'Y';
end.
[/syntax]
Angel666, что заключать код в тэги не учили?
Нет религии выше истины
А для каких это компонентов написано?!???
dr.Jekill писал(а):Тут не использовано ни одного компонента. Это консольное приложение.
Быстро учить матчасть!
Так мне надо составить с компонентами,с Buttonom,stringgrid и т.д.
dr.Jekill писал(а):Всё в Ваших руках! Help yourself!
Вы просили помочь с алгоритмом - помогли.
А так нужно что-то и самому делать.
так у меня программа почти готова,просто попросил помочь вот с эти моментом,так как не понимаю как сделать что бы выводилось номер строки или номер столбца седловой точки.может давайте я вам скину то что я сделал,а вы глянете?!?!?
Angel666 писал(а):[syntax="delphi"]
for i:= 0 to n do
bigin
t:= mas[i,0];!!!
s:= 1;
for j:= 0 to m do
if t > mas[i,j] then
begin
t:= mas[i,j];
str:= i;
stl:= j;
end;
for z:= 0 to n do
begin
if (t < mas[z,j]) and (z <> str) then
s:= 0;
end;
if s = 1 then
label1.Caption:= IntToStr(str) + ' , ' + IntToStr(stl) + '; ';
end;
if label1.Caption = ' ' then
label1.Caption:= '0';
[/syntax]
PS: вроде должна правильно работать, если что пиши
там где !!!выдаёт ошибку