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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 14:15   #1
shelovek
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 10
Смущение Очередь

помогите разоборатся, задание такое даны 2 упорядоченные очереди, переписать в 3 очередь и сохранить упорядоченность, при записи нельзя пользоваться сортировкой, а использовать слияние
очередь1: 1 2 3 4 5
очередь2: 7 0 8 6 -1
rezultat
очередь3: -1 0 1 2 3 4 5 6 7 8
вот мои наработки
Код:
uses 
crt; 
type 
fail=file of integer; 
tlist=^list; 
list=record 

inf:integer; 
adr:tlist; 
end; 
var 
f1,f2,f3:fail; 
ocher,ocher2,och,oh1,oh:tlist; 
t,c,k,z,i,r,l:integer; 
procedure sozd(var och:tlist;x:integer); 
var 
tmp:tlist; 
begin 
new(tmp); 
tmp^.adr:=och; 
tmp^.inf:=x; 
och:=tmp; 
end; 
procedure Sort(ocha:tlist); 
var 
tmp,tmp1:tlist; 
a:integer; 
begin 
new(tmp); 
tmp1:=ocha; 
while tmp1<>nil do 
begin 
tmp:=tmp1^.adr; 
while tmp<>nil do 
begin 
if tmp^.inf<tmp1^.inf then 
begin 
a:=tmp^.inf; 
tmp^.inf:=tmp1^.inf; 
tmp1^.inf:=a 
end; 
tmp:=tmp^.adr 
end; 
tmp1:=tmp1^.adr 
end 
end; 
procedure zapis_fail( var oh:tlist; var oh1:tlist); 
var 
tmp,tmp1:tlist; 
begin 
while (oh<>nil) or (oh1<>nil) do 
begin 
if oh^.inf<oh1^.inf then 
begin 
new(tmp); 
sozd(ocher2,oh1^.inf); 
tmp:=oh1; 
oh1:=oh1^.adr; 
dispose(tmp) 
end 
else 
if oh^.inf>oh1^.inf then 
begin 
new(tmp1); 
sozd(ocher2,oh^.inf); 
tmp1:=oh; 
oh:=oh^.adr; 
dispose(tmp1) 
end; 
if (oh<>nil) and (oh1=nil) then 
while oh<>nil do 
begin 
sozd(ocher2,oh^.inf); 
oh:=oh^.adr; 
end 
else 
if (oh=nil) and (oh1<>nil) then 
while oh1<>nil do 
begin 
sozd(ocher2,oh1^.inf); 
oh1:=oh1^.adr; 
end 
end; 
end; 
procedure vivod_fail(var osh:tlist;var f:fail); 
begin 
rewrite(f); 
while osh<>nil do 
begin 
Write(f,osh^.inf); 
osh:=osh^.adr 
end; 
close(f); 
end; 
procedure sozdanie(var ochk:tlist; a:integer); 
var 
s:integer; 
begin 
for i:= 1 to a do 
begin 
s:=random(1000)-500; 
sozd(ochk,s) 
end; 
end; 
procedure vivod(var f:fail); 
var 
q:integer; 
begin 
reset(f); 
while not eof(f) do 
begin 
read(f,q); 
write(q,' '); 
end; 
close(f); 
end; 
begin 
clrscr; 
randomize; 
assign(f1,'fa.Tol'); 
assign(f2,'fat.Tol'); 
assign(f3,'fatik.tol'); 
writeln('wvedite kol-vo elementov v 1-om faile'); 
readln©; 
writeln('wvedite kol-vo elementov v 2-om faile'); 
readln(t); 
sozdanie(och,c); 
sozdanie(ocher,t); 
sozdanie(oh,c); 
sozdanie(oh1,t); 
Sort(och); 
sort(ocher); 
Sort(oh); 
sort(oh1); 
zapis_fail(och,ocher); 
vivod_fail(oh,f2); 
vivod_fail(oh1,f1); 
{zapis_fail(f2,t,r); } 
{sort(ocher2);} 
vivod_fail(ocher2,f3); 
writeln('1-vii fail '); 
vivod(f1); 
writeln; 
writeln('2-oi fail '); 
vivod(f2); 
writeln; 
writeln('rezultat sli9ni9 2-failov '); 
vivod(f3); 
readkey; 
end.
procedure zapis_fail<<< в этой процедуре осущствл само слияние но оно не правильное

Для "особо одаренных" и не желающих соблюдать наши правила.
Читаем правила раздела "Паскаль" и думаем...
Причем не так, по диагонали, а вдумчиво читаем!
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Подсказка - для вас персонально особо важен пункт 7.
Модератор

Последний раз редактировалось mihali4; 31.10.2010 в 14:18.
shelovek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередь Чуть Помощь студентам 0 15.06.2010 15:58
Очередь Си svetikzo Помощь студентам 0 23.01.2010 10:03
Очередь C++ svetikzo Помощь студентам 2 23.01.2010 09:53
Очередь skiffter Помощь студентам 2 03.12.2009 17:39
очередь odi_noki Общие вопросы Delphi 3 24.10.2008 12:09