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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2011, 11:34   #1
NoeJI
 
Регистрация: 01.10.2011
Сообщений: 5
По умолчанию Слияние!!!!!

Путем слияния возростаючего массива А и убывающего массива В создать массив С(по возростанию). Я могу сделать это с возростающими массивами. Как с убывающим сделать?!!!
Помогите пожалуйста
NoeJI вне форума Ответить с цитированием
Старый 29.10.2011, 11:35   #2
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Кидай сюда то что получилось и будем делать вместе)
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Старый 29.10.2011, 11:55   #3
NoeJI
 
Регистрация: 01.10.2011
Сообщений: 5
По умолчанию

Код:
const
    N = 7;
var
    arr1,arr2: array[1..N] of integer;
    arr3: array[1..N+N] of integer;
    i,j,k,m: byte;
begin
    writeln('Заполните первый массив:');
    for i := 1 to N do
        read(arr1[i]);
 
    writeln('Заполните второй массив:');
    for i := 1 to N do
        read(arr2[i]);
 
    i := 1; j := 1; k := 1;
    while (i <= N) and (j <= N) do begin
        if arr1[i] < arr2[j] then begin
            arr3[k] := arr1[i];
            i := i + 1
        end
        else begin
            arr3[k] := arr2[j];
            j := j + 1
        end;
        k := k + 1;
    end;
 
    while i <= N do begin
        arr3[k] := arr1[i];
        i := i + 1;
        k := k + 1
    end;
 
    while j <= N do begin
        arr3[k] := arr1[j];
        j := i + 1;
        k := k + 1
    end;
 
    writeln;
    for i := 1 to N+N do
        write(arr3[i]:4);
 
end.

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.10.2011 в 12:58.
NoeJI вне форума Ответить с цитированием
Старый 29.10.2011, 11:55   #4
NoeJI
 
Регистрация: 01.10.2011
Сообщений: 5
По умолчанию

типо такого
NoeJI вне форума Ответить с цитированием
Старый 29.10.2011, 12:14   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

ели убывающий массив читать в обратном порядке то получится возрастающий.
Цитата:
Я могу сделать это с возростающими массивами
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.10.2011, 12:16   #6
FullVenic
Пользователь
 
Регистрация: 19.07.2010
Сообщений: 59
По умолчанию

переверни убывающий массив на возростаючий а потом слей(оптимальное, правильное решение)
FullVenic вне форума Ответить с цитированием
Старый 29.10.2011, 12:57   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от FullVenic
переверни убывающий массив на возростаючий а потом слей(оптимальное, правильное решение)
решение рабочее, но абсолютно неэффективное!

Цитата:
Сообщение от evg_m
еcли убывающий массив читать в обратном порядке то получится возрастающий.
согласен.
вот это реально правильное и эффективное решение!


ДОБАВЛЕНО

1) NoeJI, у Вас ошибка в решении. посмотрите в этот кусочек кода и попытайтесь найти ошибки (аж две штуки!)
Цитата:
Код:
    while j <= N do begin
        arr3[k] := arr1[j];
        j := i + 1;
        k := k + 1
    end;
2) вот решение Вашей задачи:
Код:
const
  N = 7;
var
  arr1, arr2: array[1..N] of integer;
  arr3: array[1..N + N] of integer;
  i, j, k: byte;
begin
  writeln('Заполните первый массив (обязательно по возрастанию):');
  for i := 1 to N do
    read(arr1[i]);

  writeln('Заполните второй массив (обязательно по убыванию):');
  for i := 1 to N do
    read(arr2[i]);

  i := 1; j := N; k := 1;
  while (i <= N) and (j >= 1) do begin
    if (arr1[i] < arr2[j]) then begin
      arr3[k] := arr1[i];
      i := i + 1
    end
    else begin
      arr3[k] := arr2[j];
      j := j - 1;
    end;
    k := k + 1;
  end;

  while i <= N do begin
    arr3[k] := arr1[i];
    i := i + 1;
    k := k + 1
  end;

  while j >= 1 do begin
    arr3[k] := arr2[j];
    j := j - 1;
    k := k + 1
  end;

  writeln;
  for i := 1 to N + N do
    write(arr3[i]: 4);

  readln
end.

p.s. т.к. решение основывается на том, что исходные массивы отсортированы, то я бы добавил несколько строчек кода для проверки этого факта.
и если пользователь ввёл (ошибочно) неотсортированные массивы - то я бы в программе выдавал соответствующее сообщение и прекращал работу программы!

Последний раз редактировалось Serge_Bliznykov; 29.10.2011 в 13:16.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слияние ageevp Microsoft Office Word 0 18.05.2011 11:07
Слияние документов ANG3 Microsoft Office Word 6 16.01.2010 18:48
Слияние файлов pasha26 Microsoft Office Excel 4 23.12.2009 08:15
Слияние Николетта Microsoft Office Word 1 25.05.2009 07:26
Слияние Николетта Microsoft Office Excel 2 30.04.2009 04:47