IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Задача с массивом, сделать из 2-1упорядоченный
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


Даны два упорядоченные массива А и В.Образовать из элементов массива упорядоченный массив С.

Я их ввёл,а объеденить их в упорядоченный-не знаю.Как это попроще сделать?
Program z_1;
Uses Crt;
Const
nmax=10;
Type
mas=array[1..nmax] of integer;
Var
A,B:mas;
C:array [1..2*nmax] of integer;
na,nb,nc:integer;
i,j,k:integer;

{Процедура ввода массивов}
Procedure vvod(var A: mas; n:byte);
begin
Write('Введите количество элементов массива: ');
ReadLn(n);
for i := 1 to n do
begin
read(A[i])
end;
end;{vvod}

Begin
ClrScr;
Writeln;
Writeln('Введите первый массив: ');
vvod(A,Na);
Writeln('Введите второй массив: ');
vvod(B,Nb);
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Поиск -> сортировка слиянием


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


искал,но ничего не нашёл(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской
Реальное имя: Neymanov Tural

Репутация: -  0  +


uses crt;
var
a,b,c,d,e,f,m,n,i:integer; bool:boolean;
arn,arm,arf:array [1..100] of integer;
begin
clrscr;
readln(n);
for a:=1 to n do
read(arn[a]);
writeln;
readln(m);
for b:=1 to m do
read(arm[b]);
writeln;
d:=0;
a:=1;
b:=1;
i:=1;
repeat
inc(d);
if (n>=a) and (m>=b) then
begin
if arn[a]<arm[b] then
begin
arf[i]:=arn[a];
inc(a);
end
else
begin
arf[i]:=arm[b];
inc(b);
end;
inc(i);
end
else
begin
if n<a then
begin
arf[i]:=arm[b];
inc(b);
end
else
begin
arf[i]:=arn[a];
inc(a);
end;
inc(i);
end;
until (d=n+m);
for a:=1 to n+m do
write(arf[a]:3);
readln;
readln;
end.




может такой вариант?!


--------------------
Смейся и весь мир будет смеяться вместе с тобой, плачь и ты будешь плакать в одиночестве (Old Boy)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


ээм.вообще ничего не понятно.Есть нормальный рабочий вариант слияния двух массивов в один с упорядочиванием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


помогите пожалуйста.оч надо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Внешняя сортировка
Скачай исходник, и замени работу с файлами на работу с массивами ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской
Реальное имя: Neymanov Tural

Репутация: -  0  +


uses crt;
var
a,b,c,d,e,f,h,n,m,max:integer;
bool:boolean;
ar1,ar2,arl:array [1..500] of integer;
begin
clrscr;
randomize;
readln(n,m);
bool:=true;
max:=-1;
f:=1;
for b:=1 to n do
begin
ar1[b]:=random(9);
ar1[b]:=ar1[b]+1;
write(ar1[b]:3);
end;
writeln;
for b:=1 to m do
begin
ar2[b]:=random(9);
ar2[b]:=ar2[b]+1;
write(ar2[b]:3);
end;
writeln;
for b:=1 to n+m do
begin
for c:=1 to n do
if max<=ar1[c] then
begin
max:=ar1[c];
e:=c;
bool:=true;
end;
for c:=1 to m do
if max<=ar2[c] then
begin
max:=ar2[c];
e:=c;
bool:=false;
end;
arl[f]:=max;
inc(f);
max:=-5;
if bool then ar1[e]:=-2 else ar2[e]:=-2;
e:=0;
end;
for b:=1 to n+m do
write(arl[b]:3);
readln;
end.


а так?


--------------------
Смейся и весь мир будет смеяться вместе с тобой, плачь и ты будешь плакать в одиночестве (Old Boy)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


М
2ral, пользуйся, пожалуйста, тегами для обрамления кода!



--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 30.04.2007 16:33) *

Внешняя сортировка
Скачай исходник, и замени работу с файлами на работу с массивами ...

скачал,посмотрнл,прочитал,попытался понять,но опять же ничего не получается.Вот написал:
только не знаю,почему не правильно работает!!!

Program z_1;
Uses Crt;
Const
n=10;
Type
mas=array[1..n] of integer;
Var
A,B:mas;
C:array [1..2*n] of integer;
i,j,k:integer;
na,nb:byte;
{Процедура ввода массивов}
Procedure vvod(var A: mas; n:byte);
begin
Write('Введите количество элементов массива: ');
ReadLn(n);
WriteLn('Элементы ');
for i := 1 to n do
begin
read(A[i])
end;
end;{vvod}

Begin
ClrScr;
Writeln;
Writeln('Введите первый массив: ');
vvod(A,na);
Writeln('Введите второй массив: ');
vvod(B,nb);
For k := 1 to 2*n do
begin
if (i <= n) and (j <= n) then
if a[i] <= b[j] then
begin
c[k] := a[i];
inc(i)
end
else
begin
c[k] := b[j];
inc(j)
end ;
end;
else
if i > n then
begin
c[k] := b[j];
inc(j)
end
else
begin
c[k] := a[i];
inc(i)
end
end;
{Вывод полученного массива}
Writeln('Массив полученный при объединении массивов А и В: ');
for k:=1 to n*2 do
writeln('C[',k,'] = ',c[k]);
readkey;
End.



Добавлено через 18 мин.
с ума сойти.пол дня с этой задачей,а толку-нет(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






const
size = 10;

type
arrType = array[1 .. size] of integer;
buffer = array[1 .. 2*size] of integer;

procedure merge(var a: buffer; b, c: arrType);
var p, p_b, p_c: integer;
begin
p_b := 1; p_c := 1;
p := 1;

while (p_b <= size) and (p_c <= size) do begin
if b[p_b] < c[p_c] then begin
a[p] := b[p_b]; inc(p); inc(p_b);
end
else begin
a[p] := c[p_c]; inc(p); inc(p_c);
end;
end;

while p_b <= size + 1 do begin
a[p] := b[p_b]; inc(p); inc(p_b);
end;
while p_c <= size + 1 do begin
a[p] := c[p_c]; inc(p); inc(p_c);
end;
end;

const
one: arrType = (1, 3, 4, 5, 6, 7, 7, 8, 10, 11);
two: arrType = (1, 2, 4, 5, 5, 7, 8, 11, 11, 11);
var
res: buffer;
i: integer;
begin
merge(res, one, two);
for i := 1 to 2 * size do
write(res[i]:3);
writeln
end.

Так лучше? (вводить массивы сам ты умеешь...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


тут получается,что в обоих массивах надо одинаковое кол-во элементов вводить? это типа обязательное условие???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Нет, не обязательное... А если тебе это надо было, я как догадаться должен? Передавай количество элементов в процедуру Merge, вот так:

procedure merge(var a: buffer; b, c: arrType;
n_b, n_c: integer);
var p, p_b, p_c: integer;
begin
p_b := 1; p_c := 1;
p := 1;

while (p_b <= n_b) and (p_c <= n_c) do begin
if b[p_b] < c[p_c] then begin
a[p] := b[p_b]; inc(p); inc(p_b);
end
else begin
a[p] := c[p_c]; inc(p); inc(p_c);
end;
end;

while p_b <= n_b do begin
a[p] := b[p_b]; inc(p); inc(p_b);
end;
while p_c <= n_c do begin
a[p] := c[p_c]; inc(p); inc(p_c);
end;
end;

 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


крыша у меня едет.Что я ещё мог здесь неправильно сделать???
program n1;
uses crt;
const
size = 10;

type
arrType = array[1 .. size] of integer;
buffer = array[1 .. 2*size] of integer;

procedure merge(var a: buffer; b, c: arrType);
var p, p_b, p_c: integer;
begin
p_b := 1; p_c := 1;
p := 1;

while (p_b <= size) and (p_c <= size) do begin
if b[p_b] < c[p_c] then begin
a[p] := b[p_b]; inc(p); inc(p_b);
end
else begin
a[p] := c[p_c]; inc(p); inc(p_c);
end;
end;

while p_b <= size + 1 do begin
a[p] := b[p_b]; inc(p); inc(p_b);
end;
while p_c <= size + 1 do begin
a[p] := c[p_c]; inc(p); inc(p_c);
end;
end;

var
one: arrType;
two: arrType;
res: buffer;
i,j,k,na,nb: integer;
begin
write('kol-vo el 1 mas ');
readLn(na);
for i:=1 to na do
read(one[i]);
write('kol-vo el 2 mas ');
readLn(nb);
for i:=1 to nb do
read(two[j]);
merge(res, one, two);
for i := 1 to 2 * size do
write(res[k]:3);
writeln
end.




Сообщение отредактировано: Rom1k -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






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

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


я пытаюсь разобраться.а что я не заметил,почему не интересует,это ведь надо мне...Щас.ещё раз попытаюсь найти ошибки!

Добавлено через 4 мин.
я передал количество элементов в процедуру,но он мне выводит после компиляции в ответе все нули(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


не у кого не осталось сил мне помочь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Тебе же volvo все написал, измени процедуру merge на последний вариант c заголовком
Цитата
procedure merge(var a: buffer; b, c: arrType; n_b, n_c: integer);


И передавай массивы и их размерности

Цитата
merge(res, one, two, na, nb);


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


я так и сделал но почему-то процедура не упорядочивает их.и при выходе выводит цифры,а после них очень много нулей
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Приаттач исходник полностью, файлом только, а то и так страница еле грузится.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.12.2020 16:34
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name