unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
StringGrid2: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
A: array of array of integer;
B: array of integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin
Cells[0,0]:='9';
Cells[0,1]:='-3';
Cells[0,2]:='4';
Cells[0,3]:='-11';
Cells[0,4]:='22';
Cells[1,0]:='-5';
Cells[1,1]:='-6';
Cells[1,2]:='8';
Cells[1,3]:='15';
Cells[1,4]:='1';
Cells[2,0]:='2';
Cells[2,1]:='19';
Cells[2,2]:='-8';
Cells[2,3]:='12';
Cells[2,4]:='-20';
Cells[3,0]:='16';
Cells[3,1]:='-13';
Cells[3,2]:='0';
Cells[3,3]:='-1';
Cells[3,4]:='7';
Cells[4,0]:='3';
Cells[4,1]:='17';
Cells[4,2]:='-15';
Cells[4,3]:='24';
Cells[4,4]:='-12';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, n :integer;
min, imin, jmin, min1, imin1, jmin1, min2, imin2, jmin2, buff :integer;
begin
n:=5;
with StringGrid1 do
begin
ColCount:=n;
RowCount:=n;
end;
SetLength(A, n, n);
min1:=A[1,1];
imin1:=1;
jmin1:=1;
min2:=A[1,1];
imin2:=1;
jmin2:=1;
for i:=0 to n-1 do
begin
for j:=0 to n-1 do
begin
A[i,j]:=StrToInt(StringGrid1.Cells[i,j]);
end;
end;
for i:=0 to n-1 do
begin
for j:=0 to n-1 do
begin
if i=j then
begin
if A[i,j]<min1 then
begin
min1:=A[i,j];
imin1:=i;
jmin1:=j;
Edit2.Text:=IntToStr(min1);
end;
end;
if j=n-1-i then
begin
if A[i,j]<min2 then
begin
min2:=A[i,j];
imin2:=i;
jmin2:=j;
Edit3.Text:=IntToStr(min2);
end;
end;
if min1<min2 then
begin
min:=min1;
imin:=imin1;
jmin:=jmin1;
end
else if min2<min1 then
begin
min:=min2;
imin:=imin2;
jmin:=jmin2;
end;
Edit1.Text:=IntToStr(min);
Edit4.Text:=IntToStr(imin);
Edit5.Text:=IntToStr(jmin);
????????????????????????????????
? if (i=j) and (j=n-1-i)then ?
? begin ?
? buff:=A[i,j]; ?
? A[i,j]:=min; ?
? end; ?
????????????????????????????????
StringGrid2.Cells[i,j]:=IntToStr(A[i,j]);
end;
end;
end;
Массивы
var
Form1: TForm1;
implementation
{$R *.dfm}
//**********************************************************//
// Функция UnicNumb возвращает случайное число //
//**********************************************************//
function UnicNumb(Range: integer): integer;
begin
Result := Random(Range);
while Flag[Result] do
Result := Random(Range); //ищем какого числа еще нет
Flag[Result] := true; //это чтобы не было повторений
end;
//-----Процедура заполнения массива случайными числами------
procedure FillArray(Range: integer; var Massiv: array of integer);
var
i: integer;
Flag: array of boolean; //массив флагов для отслеживания было уже число или нет
begin
SetLength(Flag, Length(Massiv));
for i := 0 to Length(Massiv) - 1 do
begin
Massiv := UnicNumb(Flag, Range) - 5;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, N: integer;
A: array of integer;
begin
N:=StrToInt(Edit1.Text);
ListBox1.Clear;
SetLength(A, N);
FillArray(N, A);
for i:=0 to Length(A)-1 do
begin
ListBox1.Items.Add(IntToStr(A));
end;
end;
end.
Цитата:
Originally posted by kudrjash
Можно ли переделать код для массива nxn, чтобы ввести его в StringGrid?
Можно ли переделать код для массива nxn, чтобы ввести его в StringGrid?
Можно, разрешаю:D А если серьезно, то ничего сложного в этом нет:
for i:=0 to n
for j:=0 to n do
StringGrid1.Cells[i,j]:=IntToStr(a[i,j]);
Дана действительная квадратная матрица порядка n, все ее элементы различны. Найти наименьший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении этих диагоналей.
Заранее спасибо
-это ж математика...
1)индексы элемента a[i,j] главной диагонали удовлетворяют условию i = j
2)индексы элемента a[i,j] побочной диагонали удовлетворяют условию i = n - j + k, где k - индекс первого элемента (если они нумеруются не с нуля)
3) индексы элемента a[i,j], который стоит на пересечении, -следует полагать должы удовлетворять обоим условиям
а само решение заключается в переборе всех элементов матрицы и по трем выше указанным условиям выполнении соответствующих действий, типа определения максимального элемента и т.п.
Да, и еще n должно быть нечетным.
Ну вот я нашел этот минимальный элемент среди элементов на диагоналях min. А теперь как мне по менять местами центральный элемент и этот минимальный.
Еще бы неплохо запомнить его индексы:D