Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Массивы

13K
05 февраля 2006 года
kudrjash
9 / / 08.01.2006
Нашел статейку по вводу одномерных массивов из случайных чисел. Можно ли переделать код для массива nxn, чтобы ввести его в StringGrid?

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.
247
06 февраля 2006 года
wanja
1.2K / / 03.02.2003
Цитата:
Originally posted by kudrjash
Можно ли переделать код для массива nxn, чтобы ввести его в StringGrid?


Можно, разрешаю:D А если серьезно, то ничего сложного в этом нет:
for i:=0 to n
for j:=0 to n do
StringGrid1.Cells[i,j]:=IntToStr(a[i,j]);

13K
06 февраля 2006 года
kudrjash
9 / / 08.01.2006
А может кто поможет решить задачку?
Дана действительная квадратная матрица порядка n, все ее элементы различны. Найти наименьший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении этих диагоналей.
Заранее спасибо
7.8K
07 февраля 2006 года
DrCoder
106 / / 27.01.2006
Ну, товарищь, ты даешь :)))
-это ж математика...
1)индексы элемента a[i,j] главной диагонали удовлетворяют условию i = j
2)индексы элемента a[i,j] побочной диагонали удовлетворяют условию i = n - j + k, где k - индекс первого элемента (если они нумеруются не с нуля)
3) индексы элемента a[i,j], который стоит на пересечении, -следует полагать должы удовлетворять обоим условиям

а само решение заключается в переборе всех элементов матрицы и по трем выше указанным условиям выполнении соответствующих действий, типа определения максимального элемента и т.п.
247
07 февраля 2006 года
wanja
1.2K / / 03.02.2003
Да, и еще n должно быть нечетным.
13K
07 февраля 2006 года
kudrjash
9 / / 08.01.2006
Ну вот я нашел этот минимальный элемент среди элементов на диагоналях min. А теперь как мне по менять местами центральный элемент и этот минимальный.

Код:
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;
247
08 февраля 2006 года
wanja
1.2K / / 03.02.2003
Еще бы неплохо запомнить его индексы:D
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог