Двумерный массив в Delphi!!!!!

Egor777
Сообщения: 9
Зарегистрирован: 12 май 2011, 23:15

12 май 2011, 23:24

Задан числовой массив A[m*n].Некоторый элемент этого массива назовём Седловой точкой,если он является одновременно наименьшим в своей строке и наибольшим в своем столбце.Напечатать номера строки и столбца Сндловой точки и напечатать число 0,если такой точки нет.

Помогите с алгоритмом!!!!!
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

13 май 2011, 00:40

Необходимо найти все седловые точки, если их несколько?
Нет религии выше истины
Angel666
Сообщения: 37
Зарегистрирован: 17 май 2009, 23:51

13 май 2011, 01:38

[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: вроде должна правильно работать, если что пиши
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

13 май 2011, 01:57

Можно расходиться от текущего элемента в разные стороны, пока выполняются условия:
[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, что заключать код в тэги не учили?
Нет религии выше истины
Egor777
Сообщения: 9
Зарегистрирован: 12 май 2011, 23:15

13 май 2011, 18:56

А для каких это компонентов написано?!???
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

13 май 2011, 19:14

Тут не использовано ни одного компонента. Это консольное приложение.
Быстро учить матчасть!
Нет религии выше истины
Egor777
Сообщения: 9
Зарегистрирован: 12 май 2011, 23:15

13 май 2011, 19:24

dr.Jekill писал(а):Тут не использовано ни одного компонента. Это консольное приложение.
Быстро учить матчасть!

Так мне надо составить с компонентами,с Buttonom,stringgrid и т.д.
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

13 май 2011, 19:32

Всё в Ваших руках! Help yourself! :)
Вы просили помочь с алгоритмом - помогли.
А так нужно что-то и самому делать.
Нет религии выше истины
Egor777
Сообщения: 9
Зарегистрирован: 12 май 2011, 23:15

13 май 2011, 19:38

dr.Jekill писал(а):Всё в Ваших руках! Help yourself! :)
Вы просили помочь с алгоритмом - помогли.
А так нужно что-то и самому делать.


так у меня программа почти готова,просто попросил помочь вот с эти моментом,так как не понимаю как сделать что бы выводилось номер строки или номер столбца седловой точки.может давайте я вам скину то что я сделал,а вы глянете?!?!?
Egor777
Сообщения: 9
Зарегистрирован: 12 май 2011, 23:15

13 май 2011, 19:43

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: вроде должна правильно работать, если что пиши

там где !!!выдаёт ошибку
Ответить