Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi: Общие вопросы > Как заполнить массив данными другого массива?


Автор: Katerina1993 17.11.22, 17:39
Существует два массива один на 300 элементов второй на 14. Мне нужно заполнить один массив до конца данными другого массива при этом оставляя интервал каждые две ячейки. Эту проблему мне удалось решить с помощью mod. Однако мне нужно сделать так чтобы когда закончился второй массив он с последней позиции где прервался (в первом массиве) начался заполнятся заново и так пока не достигнет до конца первого массива (т.е. придел 300 ячейка). Вот скриншот:

img1.jpg (, : 73)

Как это сделать? Мой код, где заполнение происходит один раз (только первые 14 элементов).
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure FormShow(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
      Data : array of Integer;
      Data2 : array of Integer;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormShow(Sender: TObject);
    var i,j,k,m:Integer;
    begin
    SetLength(Data,300);
    SetLength(Data2,14);
     
    for k := Low(Data2) to High(Data2) do
    begin
     Data2[k]:=k;
    end;
     
    for i := Low(Data) to High(Data) do
    begin
      Data[i]:=0;
    end;
    m:=0;
    for j := Low(Data) to High(Data) do
    begin
     
     if (j mod 3 = 1) and (m<=High(Data2)) then
     begin
       Data[j]:=Data2[m];
       Inc(m);
     end;
    end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var j:Integer;
    begin
    for j := Low(Data) to High(Data) do
    begin
     Memo1.Lines.Add(IntToStr(Data[j]));
    end;
    end;
     
    end.

Автор: macomics 17.11.22, 17:57
Заменить
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     if (j mod 3 = 1) and (m<=High(Data2)) then
     begin
       Data[j]:=Data2[m];
       Inc(m);
     end;
на
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     if j mod 3 = 1 then
     begin
       Data[j]:=Data2[m];
       Inc(m);
       if m > High(data2) then m := Low(Data2);
     end;

Автор: Katerina1993 22.11.22, 10:51
Проверила, работает.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)