Аватар для QuadroX
21 / 21 / 2
Регистрация: 14.10.2009
Сообщений: 202

Слияние двух упорядоченных массивов.

10.04.2010, 11:59. Показов 3962. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот условие задачи:

Из двух упорядоченных по невозрастанию массивов A(M) и B(N) получить путем слияния упорядоченный по убыванию массив C.

А вот моя процедура слияния:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// слияние двух массивов
function MergeArray(A, B: Vector; NA, NB: Integer): Vector;
var
  I, J, K: Integer;
begin
  I := 1;
  J := 1;
  K := 1;
  while (I <= NA) and (J <= NB) do begin
    if A[I] > B[J] then begin
      Result[K] := A[I];
      Inc(I);
    end
    else begin
      Result[K] := B[J];
      Inc(J);
    end;
    Inc(K);
  end;
  // дописываем в конец массива оставшиеся элементы
  while I < NA do begin
    Result[K] := A[I];
    Inc(I);
    Inc(K);
  end;
  while J < NB do begin
    Result[K] := B[J];
    Inc(J);
    Inc(K);
  end;
end;
По ходу выполнения возникает ошибка. При запуске все хорошо. Скорее всего ошибка логическая. Я не могу ее найти. Подскажите что здесь не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2010, 11:59
Ответы с готовыми решениями:

Слияние двух упорядоченных списков
Всем привет! Можете подсказать как делать? Условие: Провести слияние двух упорядоченных списков. В качестве элементов первого списка...

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

Из двух упорядоченных одномерных массивов (длины K и N) сформируйте одномерный массив размером K+N, упорядоченный в обратную сторону
вот, что получилось, как-то не очень работает program zd115; uses crt; var b:array of integer; a:array of integer; c:array ...

2
Почетный модератор
 Аватар для Puporev
64312 / 47609 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
10.04.2010, 12:14
QuadroX, Интересно а какой результат возвращает функция? Что-то я не нашел. Да и вообще первый раз вижу чтобы в Паскале для сортировки массива применяли функцию, а не процедуру.
Почитайте эту тему, все ее посты.

Сортировки
0
 Аватар для QuadroX
21 / 21 / 2
Регистрация: 14.10.2009
Сообщений: 202
10.04.2010, 14:14  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
QuadroX, Интересно а какой результат возвращает функция? Что-то я не нашел. Да и вообще первый раз вижу чтобы в Паскале для сортировки массива применяли функцию, а не процедуру.
Почитайте эту тему, все ее посты.

Сортировки
Ах да, я забыл указать тип Vector:

Delphi
1
2
type 
  Vector = array[1..100] of Integer;
Функция берет два отсортированных по убыванию массива A и B, и возвращает результатом массив C, который образуется слиянием двух исходных массивов и упорядочен по убыванию.

Пример вызова функции:

Delphi
1
C := MergeArray(A, B, 10, 20);
Добавлено через 23 минуты
Puporev, Перешел по ссылке и переделал в процедуру. В результате таже логическая ошибка.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// слияние двух массивов
procedure MergeArray(A, B: Vector; N, M: Integer; var C: Vector);
var
  I, J, K: Integer;
begin
  I := 1;
  J := 1;
  K := 1;
  {пока не дошли до конца каждого из массивов}
  while (I <= N) or (J <= M) do begin
    if (I <= N) and (J <= M) then begin {если оба массива ещё не закончились}
      {то пишем в новый массив больший из текущих элементов}
      if A[I] > B[J] then begin
        C[K] := A[I];
        Inc(I); {переходим к следующему элементу соответствующего массива}
        Inc(K); {переходим к следующему элементу конечного массива}
      end
      else begin
        C[K] := B[J];
        Inc(J);
        Inc(K);
      end
    end
    else
      {иначе один из массивов уже закончился}
      if J > M then begin {и мы пишем из того, в котором ещё есть элементы}
        C[K] := A[I];
        Inc(I);
        Inc(K);
      end
      else
        if I > N then begin
          C[K] := B[J];
          Inc(J);
          Inc(K);
        end;
  end;
end;
Добавлено через 24 минуты
Все сам разобрался. Ошибка была не в процедуре, а в самом выводе массива C. При его формировании я не выделил длину. Описал тип из 10 элементов, а в C должно было получиться 20 элементов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.04.2010, 14:14
Помогаю со студенческими работами здесь

Сортировка и слияние массивов
Вот такая задача: Написать программу, которая объединяет два упорядоченных по возрастанию массива в один, также упорядоченный по убыванию...

Слияние и упорядочивание массивов
Требуется помощь с кодом. Из двух отсортированных массивов А и B вещественных чисел методом слияния создать один отсортированный массив в...

Слияние массивов в один массив по убыванию
Даны три целочисленных массива A, B и С размера NA, NB, NC соответсвенно, элементы которых упорядочены по убыванию. Объединить эти массивы...

Создать из элементов упорядоченных по неубыванию массивов новый массив, упорядоченный по возрастанию
Даны два натуральных числа n и m (n&lt;=100, m&lt;=100) и два упорядоченных по неубывания массивы целых чисел a и b. Создать из элементов данных...

Найти произведения массивов. Произведение двух массивов описать как процедуру
Даны массивы A(5,5) B(5,5) C(5,5) D(5,5) F(5,5). Найти произведения массивов. Произведения двух массивов описать как процедура.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
Конвейеры ETL с Apache Airflow и Python
AI_Generated 13.05.2025
ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .
Выполнение асинхронных задач в Python с asyncio
py-thonny 12.05.2025
Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .
Работа с gRPC сервисами на C#
UnmanagedCoder 12.05.2025
gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .
CQRS (Command Query Responsibility Segregation) на Java
Javaican 12.05.2025
CQRS — Command Query Responsibility Segregation, или разделение ответственности команд и запросов. Суть этого архитектурного паттерна проста: операции чтения данных (запросы) отделяются от операций. . .
Шаблоны и приёмы реализации DDD на C#
stackOverflow 12.05.2025
Когда я впервые погрузился в мир Domain-Driven Design, мне показалось, что это очередная модная методология, которая скоро канет в лету. Однако годы практики убедили меня в обратном. DDD — не просто. . .
Исследование рантаймов контейнеров Docker, containerd и rkt
Mr. Docker 11.05.2025
Когда мы говорим о контейнерных рантаймах, мы обсуждаем программные компоненты, отвечающие за исполнение контейнеризованных приложений. Это тот слой, который берет образ контейнера и превращает его в. . .
Micronaut и GraalVM - будущее микросервисов на Java?
Javaican 11.05.2025
Облачные вычисления безжалостно обнажили ахиллесову пяту Java — прожорливость к ресурсам и медлительный старт приложений. Традиционные фреймворки, годами радовавшие корпоративных разработчиков своей. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru