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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2015, 10:55   #1
DronoDron
Новичок
Джуниор
 
Регистрация: 23.06.2015
Сообщений: 1
По умолчанию Array 64

Даны три целочисленных массива A, B и С размера NA, NB, NC соответсвенно, элементы которых упорядочены по убыванию. Объединить эти массивы так чтобы результирующий целочисленный массив D (размера NA+ NB+ NC ) остался упорядоченным по убыванию.
Код:
program Array64;
var
a: array [1..10] of real;
b: array [1..10] of real;
C: array [1..10] of real;
D: array [1..30] of real;
temp,na,nb,nc:integer; 
an,bn,cn:integer; 
i:integer; 
begin
writeln('Введите размерности масиивов');
writeln('Введите AN (AN<=10)');
readln(AN);

writeln('Введите BN (BN<=10)');
readln(BN);

writeln('Введите CN (CN<=10)');
readln(CN);

writeln('Значения массива А');
for i:=1 to an do begin write('a[',i,']=');readln(A[i]); end;
writeln('Значения массива B');
for i:=1 to bn do begin write('b[',i,']=');readln(B[i]); end;
writeln('Значения массива C');
for i:=1 to cn do begin write('c[',i,']=');readln(C[i]); end;
na:=1;
nb:=1;
nc:=1;
i:=1; 
while (na<=an)and(nb<=bn)and(nc<=cn) do
begin
if (a[na]>=b[nb]) and (a[na]>=c[nc]) then begin D[i]:=a[na]; inc(na); inc(i); end
else if (b[nb]>=a[na]) and (b[nb]>=c[nc]) then begin D[i]:=b[nb]; inc(nb); inc(i); end
else if (c[nc]>=b[nb]) and (c[nc]>=a[na]) then begin D[i]:=c[nc]; inc(nc); inc(i); end;
end;
while (nb<=bn)and(nc<=cn) do
begin
if b[nb]>=c[nc] then begin D[i]:=b[nb]; inc(nb); inc(i); end
else if c[nc]>=b[nb] then begin D[i]:=c[nc]; inc(nc); inc(i); end;
end;

while (na<=an)and(nc<=cn) do
begin
if a[na]>=c[nc] then begin D[i]:=a[na]; inc(na); inc(i); end
else if c[nc]>=a[na] then begin D[i]:=c[nc]; inc(nc); inc(i); end;
end;

while (na<=an)and(nb<=bn) do
begin
if a[na]>=b[nb] then begin D[i]:=a[na]; inc(na); inc(i); end
else if b[nb]>=a[na] then begin D[i]:=b[nb]; inc(nb); inc(i); end;
end;
while na<=an do begin D[i]:=a[na]; inc(na); inc(i); end;
while nb<=bn do begin D[i]:=b[nb]; inc(nb); inc(i); end;
while nc<=cn do begin D[i]:=c[nc]; inc(nc); inc(i); end;
 
Writeln('Ответ');
Writeln;
Write(' D[]: '); for i:=1 to an+bn+cn do Write(D[i],' ');
end.
Должна выводить ответ по убыванию а он неправильно выводит.
Кто знает напишите.

Последний раз редактировалось Аватар; 23.06.2015 в 11:32.
DronoDron вне форума Ответить с цитированием
Старый 23.06.2015, 11:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Допустимо сортировать после объединения?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.06.2015, 11:59   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Допустимо сортировать после объединения?
рискну ответить за TC

Нет. не допустимо.
Это классическая задача на слияние.
Правда, чаще встречается задача слить два массива. Но и три тоже можно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2015, 13:15   #4
Drung
Новичок
Джуниор
 
Регистрация: 23.06.2015
Сообщений: 1
По умолчанию

Но ведь здесь в задании написано что должно быть по убыванию числа здесь не просто слияние.
Drung вне форума Ответить с цитированием
Старый 23.06.2015, 13:29   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да, я понимаю. не просто слияние, а слияние с сохранением упорядоченности.
(гуглим, например, Сортировка слиянием (англ. merge sort) )

Drung, я не вижу проблем в вашем коде, он работает.
что Вас не устраивает?

может быть, Вы упускаете один очень ВАЖНЫЙ момент?
Цитата:
Даны три целочисленных массива A, B и С размера NA, NB, NC соответственно, элементы которых упорядочены по убыванию.
Вы вводите элементы массивов УПОРЯДОЧЕННЫМи по убыванию?


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

Последний раз редактировалось Stilet; 23.06.2015 в 16:53.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2015, 18:11   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

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

PS: В примере массивы, перед слиянием, должны быть отсортированы соответственно.


Как-то так, ...
Вложения
Тип файла: txt Sliyanie.txt (3.2 Кб, 135 просмотров)
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 23.06.2015, 20:14   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

У меня получилось сделать прогу, которая любое кол-во массивов размера N, сортированных по убыванию сливает в один массив, который попутно получается также отсортированным.
Хотел сделать слияние массивов разной длины, но пришла тёща с блинами и я забил...
Изображения
Тип файла: jpg 16.jpg (33.0 Кб, 129 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего существует коммутативность array[2] == 2[array] _PROGRAMM_ Помощь студентам 10 02.11.2014 13:33
Записать Array of AnsiChar в Array of AnsiChar Anton911 Общие вопросы Delphi 4 07.05.2012 21:58
Array в С banl Помощь студентам 0 15.04.2011 03:22
str->array & array->str LeoN PHP 6 06.07.2010 22:38
Array или не array Димарик Общие вопросы Delphi 4 18.06.2007 15:16