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

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

13 май 2011, 19:47

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

13 май 2011, 20:14

[syntax="delphi"]
unit Unit1;

interface

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

type
base=array[1..100,1..100] of integer;
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label4: TLabel;
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
asort,a:base;
n,m,j,i:integer;
Sed:integer;//Седловая точка

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);//Ввод количества строк массива и вывода номера строки в Stringgrid cells[0,1]
Var
i:integer;
begin
n:=strtoint(edit1.Text);
stringgrid1.RowCount:=n+1;
for i:=1 to n do
stringgrid1.Cells[0,i]:=inttostr(i);

end;

procedure TForm1.Edit2Change(Sender: TObject);//Ввод количества столбцов массива и вывода номера столбца в Stringgrid1.Cells[i,0]
Var
j:integer;
begin
m:=strtoint(edit2.Text);
stringgrid1.ColCount:=m+1;
for j:=1 to m do
stringgrid1.Cells[j,0]:=inttostr(j);
end;


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



procedure TForm1.Button3Click(Sender: TObject);
Var
mas:base;
begin
randomize;
for i:=1 to n do
for j:=1 to m do
begin
stringgrid1.cells[i,j]:=floattostr(random(100));
mas[i,j]:=strtoint(stringgrid1.Cells[i,j]);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

end.
[/syntax]


Вот мне осталось только для Button1 написать алгоритм,который будет всё высчитывать и выводить ответ в Label......а мне ничего в голову не приходит!!!
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

13 май 2011, 20:32

Egor777 писал(а): Вот мне осталось только для Button1 написать алгоритм,который будет всё высчитывать и выводить ответ в Label......а мне ничего в голову не приходит!!!
Да, в чем проблема-то?!
Я же написал Вам как находить седловые точки - Вы что не можете вставить готовый код в обработчик?
Уберите этот страшный тип base, опишите глобальный массив ArrNxM как у меня и выводите индексы не через WriteLn, а так:

Код: Выделить всё

Label.Caption:=Label.Caption+'Point: '+IntToStr(ArrNxM[i])+',Indexes: '+IntToStr(i)+','+IntToStr(j)+#13#10;
ВСЁ!!!
А после этого учить матчасть! Усиленно и вдумчиво!
Egor777
Сообщения: 9
Зарегистрирован: 12 май 2011, 23:15

13 май 2011, 20:47

Так как я вставлю тот готовый алгоритм,если там переменные другие,и мне надо,что бы при нажатие Button1,у меня выводился ответ в Label4.мне надо что бы всё это получилось на форме со Stringgrid-ом,а не в консли.
Egor777
Сообщения: 9
Зарегистрирован: 12 май 2011, 23:15

15 май 2011, 16:42

Помагите кто может!!!!завтра надо уже здать!!
Angel666
Сообщения: 37
Зарегистрирован: 17 май 2009, 23:51

15 май 2011, 17:25

unit Unit1;

interface

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

type
base=array[1..100,1..100] of integer;
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label4: TLabel;
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
asort,a:base;
n,m,j,i, k:integer;
ArrNxM: array of array of Integer;
fl: Boolean;
Sed:integer;//Седловая точка

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);//Ввод количества строк массива и вывода номера строки в Stringgrid cells[0,1]
Var
i:integer;
begin
n:=strtoint(edit1.Text);
stringgrid1.RowCount:=n+1;
for i:=1 to n do
stringgrid1.Cells[0,i]:=inttostr(i);

end;

procedure TForm1.Edit2Change(Sender: TObject);//Ввод количества столбцов массива и вывода номера столбца в Stringgrid1.Cells[i,0]
Var
j:integer;
begin
m:=strtoint(edit2.Text);
stringgrid1.ColCount:=m+1;
for j:=1 to m do
stringgrid1.Cells[j,0]:=inttostr(j);
end;


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



procedure TForm1.Button3Click(Sender: TObject);
Var
mas:base;
begin
SetLength(ArrNxM, N, M);
randomize;
for i:=1 to n do
for j:=1 to m do
begin
stringgrid1.cells[i,j]:=floattostr(random(100));
mas[i,j]:=strtoint(stringgrid1.Cells[i,j]);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
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
Label4.Caption:=Label4.Caption+'Point: '+IntToStr(ArrNxM)+',Indexes: '+IntToStr(i)+','+IntToStr(j)+#13#10;
end;
if not fl then
Label4.Caption:='0';
end;

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

15 май 2011, 19:29

Спасибо Большое!!!!!))
Zhak
Сообщения: 5
Зарегистрирован: 24 июн 2014, 08:09

24 июн 2014, 08:11

Народ нужна помощь помогите решить задачку
Заполнить квадратный массив размером nхn таким образом, чтобы:
а) его элементы имели значения, симметричные относительно главной диагонали;
б) его элементы имели значения, симметричные относительно побочной диагонали.

Буду благодарен
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

24 июн 2014, 10:33

for i:=1 to n do
for j:=1 to n do
a[i,j]:=1;
Удовлетворяет обоим условиям.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Zhak
Сообщения: 5
Зарегистрирован: 24 июн 2014, 08:09

25 июн 2014, 08:28

Хыиуду писал(а):for i:=1 to n do
for j:=1 to n do
a[i,j]:=1;
Удовлетворяет обоим условиям.
Ответ не правильный
Ответить