Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2009, 19:42   #1
pancho
Пользователь
 
Аватар для pancho
 
Регистрация: 25.01.2009
Сообщений: 18
По умолчанию Как объединить массивы

возникла маленькая проблемка..запутался совсем
у меня даны 2 массива,мне нужно их объединить в 1 с условием,что 2ой массив нужно впихнуть в 1ый между 3 и 4ыми элементами массива.
Код:
Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    ListBox3: TListBox;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
       Var  X:array [1..6] of real = (4,1,16,0,3.2,12);
            Y:array [1..3] of real = (4,5.1,6);
            Z:array [1..length(X)+length(Y)] of real;
procedure TForm1.Button1Click(Sender: TObject);
Var i,j:integer;
begin
    for i := 1 to length(X) do Form1.ListBox1.Items.Add(FloatToStr(X[i]));
    for j := 1 to length(Y) do Form1.ListBox2.Items.Add(FloatToStr(Y[j]));
end;

procedure TForm1.Button2Click(Sender: TObject);
Var i,j,k:integer;
begin
   {for k := 1 to 3 do
     begin
       Z[k]:=X[k];
       Form1.ListBox3.Items.Add(FloatToStr(Z[k])) ;
     end;
       for j := 3 to length(Y) do
          begin
            Z[1+j]:=Y[j-3];
            Form1.ListBox3.Items.Add(FloatToStr(Z[1+j]));
          end;
       for i := length(Y) to length(Z) do
           begin
             Z[i]:=X[i];
              Form1.ListBox3.Items.Add(FloatToStr(Z[i]))
           end;}
 //выше какая то фигня-я начал просто писать руками сам массив т_т


end;

end.
помогите пожалуйста..мозги отказывают уже..заранее спасибо)
учусь по ходу написания программы..кхх)

Последний раз редактировалось Stilet; 20.11.2009 в 09:40.
pancho вне форума Ответить с цитированием
Старый 19.11.2009, 20:05   #2
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
нужно впихнуть в 1ый
ну так вставляй по 1 и смещай элементы 1 массива вправо
только 1 массив побольше объяви!
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 19.11.2009, 21:52   #3
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

добавлю, что код оформляется тегом [CODE], и логичнее будет сначала сместить все элементы 2-го массива сразу на нужное кол-во позиций, а потом вставлять 1-ый
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 19.11.2009, 22:05   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
логичнее будет сначала сместить все элементы 2-го массива сразу на нужное кол-во позиций, а потом вставлять 1-ый
Как это - "сместить"? А что заносить в "пустые" позиции?
Поскольку массивы одномерные, то по условию логично будет заполнить массив Z (первые три элемента) тремя элементами массива Х, затем добавить все элементы массива Y, и наконец, добавить оставшиеся элементы массива Х, начиная с четвертого...
mihali4 вне форума Ответить с цитированием
Старый 19.11.2009, 22:51   #5
pancho
Пользователь
 
Аватар для pancho
 
Регистрация: 25.01.2009
Сообщений: 18
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Как это - "сместить"? А что заносить в "пустые" позиции?
Поскольку массивы одномерные, то по условию логично будет заполнить массив Z (первые три элемента) тремя элементами массива Х, затем добавить все элементы массива Y, и наконец, добавить оставшиеся элементы массива Х, начиная с четвертого...
так и надо делать,но я никак не соображу как сделать..
сначала мы бегаем по пустому массиву Z,первые 3 элемента забиваем X и тд,это ясно..а вот как потом забить оставшуюся часть массива X-не пойму..((
учусь по ходу написания программы..кхх)
pancho вне форума Ответить с цитированием
Старый 19.11.2009, 23:49   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Вот что я надумал ))

Код:
Var
  X:array [1..6] of real = (4,1,16,0,3.2,12); 
  Y:array [1..3] of real = (4,5.1,6); 
  Z:array [1..length(X)+length(Y)] of real; 

procedure TForm1.Button2Click(Sender: TObject); 
Var
  i, j, k: Integer; 
begin 
  j := 0;
  k := 0;

  for i := 0 to length(X)+length(Y) - 1 do
  begin
    if (i < 3) or (i > Length(Y)) then
    begin
      Z[i] := X[j];
      Inc(j);
    end
    else
    begin
      Z[i] := Y[k];
      Inc(k);
    end;
  end;
end;

end.
psycho-coder вне форума Ответить с цитированием
Старый 20.11.2009, 01:08   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Идея верна, но...
if (i < 3) or (i > Length(Y)+3) then !!!
и
Код:
else
    begin
      Z[i] := Y[k];
      Inc(k);
    end
Пардон, но это - бесконечный цикл
С вылетом по ошибке размерности...
mihali4 вне форума Ответить с цитированием
Старый 20.11.2009, 01:44   #8
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Пардон, но это - бесконечный цикл
С вылетом по ошибке размерности...
Разве?
Код:
//Единственное что нужно учесть, у меня первый эл. нулевой а по условиям ТС 1
  X:array [1..6] of real = (4,1,16,0,3.2,12); // <<< вот тут 
  Y:array [1..3] of real = (4,5.1,6); // <<<

  // Фактически от 0(нуля) до 8-ми по данному условию (9 проходов)
  //for i := 0 to length(X)+length(Y) - 1 do 
1  for i := 0 to 8 do 
    begin
2    if (i < 3) or (i > Length(Y) + 3) then
      begin
3      Z[i] := X[j];
4      Inc(j);
      end
      else
      begin
5      Z[i] := Y[k];
6      Inc(k);
      end;
   end;
I проход
1: i=0; j=0; k=0;
2: (Length(Y) + 3) > i < 3;
3: Z[0] = X[0]; Z[1 (первый эл.)] = 4;
4: j = 1;

II
1: i=1; j=1; k=0;
2: (Length(Y) + 3) > i < 3;
3: Z[1] = X[1]; Z[2] = 1;
4: j = 2;

III
1: i=2; j=2; k=0;
2: (Length(Y) + 3) > i < 3;
3: Z[2] = X[2]; Z[3] = 16;
4: j = 3;

IV
1: i=3; j=3; k=0;
2: nop;
5: Z[3] = Y[0]; Z[4] = 4;
6: k = 1;

V
1: i=4; j=3; k=1;
2: nop;
5: Z[4] = Y[1]; Z[5] = 5.1;
6: k = 2;

VI
1: i=5; j=3; k=2;
2: nop;
5: Z[5] = Y[2]; Z[6] = 6;
6: k = 3;

VII
1: i=6; j=3; k=3;
2: (i > Length(Y) + 3);
3: Z[6] = X[3]; Z[6] = 0;
4: j = 4;

VIII
1: i=7; j=4; k=3;
2: (i > Length(Y) + 3);
3: Z[7] = X[4]; Z[7] = 3.2;
4: j = 5;

IX
1: i=8; j=5; k=3;
2: (i > Length(Y) + 3);
3: Z[8] = X[5]; Z[8] = 12;
4: j = 6;

Все

От mihali4:
Да, виноват, промашка вышла Видно, пора было уже спать ложиться...

Последний раз редактировалось mihali4; 20.11.2009 в 16:15.
psycho-coder вне форума Ответить с цитированием
Старый 20.11.2009, 15:44   #9
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

ну а вот вам мой вариант без доп массива правда в консоли,но думаю под форму переделать труда не составит
Код:
type vector = array[1..100] of Integer;
   var a:vector;
       b:vector;
        j,i,k,n:Integer;
begin
  randomize;
  readln(k);{размерность массива a}
  Readln(n); {размерность массива b}
  for i:=1 to k do  // заполняем массив a
   a[i]:=Random(20);
  for i:=1 to n do
  b[i]:=Random (20); // заполняем массив b
  for i:=1 to n do write(b[i]:4); // выводим массив b
  Writeln;
  for i:=1 to k do write(a[i]:4);// выводим массив a
  Writeln;
  for i:=n downto 1 do // идем  по массиву b с конца
    begin
      k:=k+1;       // увеличиваем размер массива а на 1
      for j:= k downto 4 do   // все элементы с 4
        a[j]:=a[j-1];         //сдвигаем на одну позицию вправо
      a[4]:=b[i];             // 4 элементу присваем текущее значение массива b
    end;
  for i:=1 to k do          //выводим получившийся массив
    write(a[i]:4);
  readln;
end.
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 20.11.2009, 17:45   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
for j:=0 to 2 do             mrez[j]:=m2[j];
for j:=0 to len(m1)-1 do mrez[j+3]:=m1[j];
for j:=3 to len(m2)-1 do mrez[j+3+len(m1)]:=m2[j];
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как объединить объкты TShape max404 Общие вопросы Delphi 5 18.10.2009 21:47
Паскаль.Двумерные массивы,объединить два массива в один с сортировкой столбцов по возрастанию. valord Помощь студентам 6 02.06.2009 11:13
Как объединить idHTTP1.Get и WebBrowser1? DemonXT Работа с сетью в Delphi 5 09.04.2009 12:04
Скажите как объединить ячейки alex_base БД в Delphi 2 08.11.2007 20:07
Как объединить файлы? CMP Помощь студентам 6 07.05.2007 21:52