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

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

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

> Задача с массивом, сделать из 2-1упорядоченный
Rom1k
сообщение 30.04.2007 14:16
Сообщение #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 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
мисс_граффити
сообщение 30.04.2007 14:26
Сообщение #2


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

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

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


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


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


Пионер
**

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

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


искал,но ничего не нашёл(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2ral
сообщение 30.04.2007 14:44
Сообщение #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 
 К началу страницы 
+ Ответить 
Rom1k
сообщение 30.04.2007 14:50
Сообщение #5


Пионер
**

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

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


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


Пионер
**

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

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


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


Гость






Внешняя сортировка
Скачай исходник, и замени работу с файлами на работу с массивами ...
 К началу страницы 
+ Ответить 
2ral
сообщение 30.04.2007 15:38
Сообщение #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 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 30.04.2007 15:45
Сообщение #9


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

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

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


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



--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Rom1k
сообщение 30.04.2007 15:52
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.04.2007 16:16
Сообщение #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.

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


Пионер
**

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

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


тут получается,что в обоих массивах надо одинаковое кол-во элементов вводить? это типа обязательное условие???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.04.2007 16:59
Сообщение #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;

 К началу страницы 
+ Ответить 
Rom1k
сообщение 30.04.2007 17:06
Сообщение #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 - 30.04.2007 17:09
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.04.2007 17:11
Сообщение #15


Гость






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

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


Пионер
**

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

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


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

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


Пионер
**

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

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


не у кого не осталось сил мне помочь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 30.04.2007 20:48
Сообщение #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 
 К началу страницы 
+ Ответить 
Rom1k
сообщение 30.04.2007 20:53
Сообщение #19


Пионер
**

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

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


я так и сделал но почему-то процедура не упорядочивает их.и при выходе выводит цифры,а после них очень много нулей
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 30.04.2007 20:59
Сообщение #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

 



- Текстовая версия 20.07.2025 6:30
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"