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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2009, 18:09   #1
sauron99
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию Слияние двух массивов в Delphi

Народ помогите слить два массива в один, пробывал по такому коду, но пишет ошибку, метод слияния сдёр с паскаля. Помогите разобратся в чом проблем
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
n = 20 ;
var
i, j, k: Integer;
a: array [1..n] of integer;
b: array [1..n] of integer;
c: array [1..n] of integer;
begin
for i:=1 to n do
a[i]:=StrToInt(Memo1.Lines[i-1]);
for j:=1 to n do
b[j]:=StrToInt(Memo2.Lines[i-1]);
  i := 0;
  j := 0;
  k := 0;
  while ((i < Length(A)) and (j < Length(B))) do
  begin
    if (A[i] > B[j]) then
    begin
      C[k] := B[j];
      Inc(j);
    end else
    begin
      C[k] := A[i];
      Inc(i);
    end;
    Inc(k);
  end;
  while (i < Length(A)) do
  begin
    C[k] := A[i];
    Inc(k);
    Inc(i);
  end;
  while (j < Length(B)) do
  begin
    C[k] := B[j];
    Inc(k);
    Inc(j);
    for k:=1 to n do
    Memo3.Lines.Add(inttostr (C[k]));
  end;
sauron99 вне форума Ответить с цитированием
Старый 11.04.2009, 18:25   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Что за метод-то? Словами описать можете?
Код:
a: array [1..n] of integer;
b: array [1..n] of integer;
c: array [1..n] of integer;
C - результирующий массив. Так почему его размерность равна размерности каждого из исходных? Размерность должна быть 2*N.
Код:
for j:=1 to n do
b[j]:=StrToInt(Memo2.Lines[i-1]);
При чем тут i, если цикл по j?

Компилятор выдает достаточно ошибок, которые вы могли бы исправить и сами.

Если нужно просто пристыковать второй массив к первому (и записать все в третий массив), то так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
n = 20 ;
var
i, j, k: Integer;
realM,realN : integer;
a: array [1..n] of integer;
b: array [1..n] of integer;
c: array [1..n+n] of integer;
begin
realM := Memo1.Lines.Count;
realN := Memo2.Lines.Count;

for i:=1 to realM do
 a[i] := StrToInt(Memo1.Lines[i-1]);
for i:=1 to realN do
 b[i] := StrToInt(Memo2.Lines[i-1]);

for i:=1 to realM+realN do
 begin
 if i<=realM then
  c[i] := a[i]
 else c[i] := b[i-realM];
 end;

  for k:=1 to realM+realN do
    Memo3.Lines.Add(inttostr (C[k]));

end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 19:24   #3
sauron99
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Если нужно просто пристыковать второй массив к первому (и записать все в третий массив), то так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
n = 20 ;
var
i, j, k: Integer;
realM,realN : integer;
a: array [1..n] of integer;
b: array [1..n] of integer;
c: array [1..n+n] of integer;
begin
realM := Memo1.Lines.Count;
realN := Memo2.Lines.Count;

for i:=1 to realM do
 a[i] := StrToInt(Memo1.Lines[i-1]);
for i:=1 to realN do
 b[i] := StrToInt(Memo2.Lines[i-1]);

for i:=1 to realM+realN do
 begin
 if i<=realM then
  c[i] := a[i]
 else c[i] := b[i-realM];
 end;

  for k:=1 to realM+realN do
    Memo3.Lines.Add(inttostr (C[k]));

end;
Выдаёт ошибку на этой строке, а чо за ошибка не показыват
a[i] := StrToInt(Memo1.Lines[i-1]);

Последний раз редактировалось sauron99; 11.04.2009 в 19:27.
sauron99 вне форума Ответить с цитированием
Старый 11.04.2009, 19:32   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Выдаёт ошибку на этой строке, а чо за ошибка не показыват
И откуда вы тогда знаете, что это ошибка?
Если это действительно ошибка, то компилятор ее покажет.
У меня все работает.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 19:38   #5
sauron99
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
И откуда вы тогда знаете, что это ошибка?
Если это действительно ошибка, то компилятор ее покажет.
У меня все работает.
При запуске на слияние массивов выскакивает ошибка, и потом выделяется это строка синим цветом, а ошибку чот не кажет, вот ток недавно казал ошибки
sauron99 вне форума Ответить с цитированием
Старый 11.04.2009, 19:41   #6
sauron99
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию

Я попробывал сделать так:
Код:
const
n = 20 ;
var
i, k : Integer;
a: array [1..n] of integer;
b: array [1..n] of integer;
c: array [1..n+n] of integer;
begin

for i:=1 to n do
 a[i] := StrToInt(Memo1.Lines[i-1]);
for i:=1 to n do
 b[i] := StrToInt(Memo2.Lines[i-1]);

for i:=1 to n+n do
 begin
 if i<=n then
  c[i] := a[i]
 else c[i] := b[i-n];
 end;

  for k:=1 to n+n do
    Memo3.Lines.Add(inttostr (C[k]));

end;
Но массив выводит вообще хз какой, таких элементов даже в тех 2-х массивах нет
sauron99 вне форума Ответить с цитированием
Старый 11.04.2009, 19:41   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
При запуске на слияние массивов выскакивает ошибка
Так что выскакивает? Приведите текст того, что выскочило!
Я не телепат. Сказал же, что у меня никаких ошибок нет.
Если вам так трудно прочитать и переписать сюда текст ошибки, то сделайте скриншот.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 19:49   #8
sauron99
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Так что выскакивает? Приведите текст того, что выскочило!
Я не телепат. Сказал же, что у меня никаких ошибок нет.
Если вам так трудно прочитать и переписать сюда текст ошибки, то сделайте скриншот.

Выделяет вот эту строку синим цветом:
Код:
 a[i] := StrToInt(Memo1.Lines[i-1]);
и написано ещё это:
Код:
[Hint] Unit1.pas(140): Variable 'j' is declared but never used in 'TForm1.Button1Click'
Больше ничего не кажет
sauron99 вне форума Ответить с цитированием
Старый 11.04.2009, 20:07   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
и написано ещё это:
Код:

[Hint] Unit1.pas(140): Variable 'j' is declared but never used in 'TForm1.Button1Click'
Просто удалите объявление переменной j - она не используется.

По поводу основной ошибки: попробуйте заново создать проект. На форму киньте только 3 мемо и кнопку.
Может, вы что-нибудь изменили в коде?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 20:18   #10
sauron99
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Просто удалите объявление переменной j - она не используется.

По поводу основной ошибки: попробуйте заново создать проект. На форму киньте только 3 мемо и кнопку.
Может, вы что-нибудь изменили в коде?
В коде ничего не менял,
На форме 3 мемо, 2 кнопки на созддание массивов, и одна на запуск,
Массивы вводятся рандомно в таком виде:
1
2
3
4
5
...
Даж незнай в чом проблема может быть
sauron99 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести общие елементы двух массивов в другой. leshax Общие вопросы C/C++ 1 04.02.2009 20:57
Как получить из двух заданных массивов третий? + см. тему. (Delphi) Kawun Помощь студентам 11 16.11.2008 16:49
Слияние двух текстовых файлов nataly_ukr Общие вопросы Delphi 5 26.12.2007 16:45
Выбрать из двух массивов совпадение. *Иван* Microsoft Office Excel 7 22.11.2007 21:10
Объединение, пересечение, слияние массивов -=Domestos=- Помощь студентам 6 25.12.2006 21:06