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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2010, 13:43   #1
MishanyaZWER
Пользователь
 
Аватар для MishanyaZWER
 
Регистрация: 18.04.2010
Сообщений: 12
Восклицание

Пусть даны две очереди X и Y, содержащие вещественные числа. Из каждой очереди одновременно извлекаются по одному числу х и у Соответственно. Если х<у., то число (х+у) помещается в конец очереди X, иначе число (х-у) помещается в конец очереди Y. Необходимо определить число шагов, через которое Одна из очередей станет пустой.

вот текст программы, что смог сделать, но она почемуто сумму элементов не хочет добавлять в хвост и при любых значениях выдаёт всегда 5 шагов:

Код:
program uk_2;
uses crt;
type ukazatel=^s;
s=record
dan:real;
next:ukazatel;
end;
Var h,i,j:integer;k,k1:real;
z,hv,hv1,g,g1,y,y1,u,x,u1,x1:ukazat el;
begin
Clrscr; h:=0;

writeln('vvedite 1-i spisok');
new(u); readln(k);
u^.dan:=k;
u^.next:=nil;
u1:=u; x:=u;
for i:=1 to 4 do begin
new(x^.next);
x:=x^.next;
readln(k);
x^.dan:=k;
x^.next:=nil;
end;

writeln('vvedite 2-i spisok');
new(g); readln(k1);
g^.dan:=k1;
g^.next:=nil;
g1:=g; y:=g;
for j:=1 to 4 do begin
new(y^.next);
y:=y^.next;
readln(k1);
y^.dan:=k1;
y^.next:=nil;
end;

writeln('dannii spisok');
while u1<>nil do begin
writeln(u1^.dan:3:5);
u1:=u1^.next;
end;

writeln('dannii spisok');
while g1<>nil do begin
writeln(g1^.dan:3:5);
g1:=g1^.next;
end;

repeat
{ u:=x; g:=y;}
if u^.dan<g^.dan then begin
z^.dan:=u^.dan+g^.dan;
x:=hv;
New(x^.next);
x:=x^.next;
x^.next:=nil;
x^.dan:=z^.dan;
hv:=x;
x:=u;

x:=u;
u:=u^.next;
dispose(x);

y:=g;
g:=g^.next;
dispose(y);
end

else begin
{if x^.dan>y^.dan then begin }
z^.dan:=u^.dan-g^.dan;
y:=hv1;
New(y^.next);
y:=y^.next;
y^.next:=nil;
y^.dan:=z^.dan;
hv1:=y;
y:=g;

y:=g;
g:=g^.next;
dispose(y);

x:=u;
u:=u^.next;
dispose(x);
end;

{u:=u^.next;
g:=g^.next;}
h:=h+1;
until (u=nil) or (g=nil);

{if u<>nil then begin
writeln('dannii spisok');
u1:=u;
while u1<>nil do begin
writeln(u1^.dan:3:5);
u1:=u1^.next;
end; end else

writeln('dannii spisok');
g1:=g;
while g1<>nil do begin
writeln(g1^.dan:3:5);
g1:=g1^.next;
end;}
writeln('chislo shagov =',h);
readln;
end.
Может где ошибка есть??? HELP PLEASE!!!!!!!!



________________________
реально ВАЖНО - это читать правила форума и раздела.
и оформлять код по этим правилам!
Код оформляется специальным тегом [CОDE]. тут Ваш код..[/CODE]
(кнопочка с решёточкой (#) )
а тему исправил...
Модератор.

Последний раз редактировалось Serge_Bliznykov; 02.12.2010 в 21:34.
MishanyaZWER вне форума Ответить с цитированием
Старый 02.12.2010, 19:37   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код надо оформлять правильно.
Слишком много лишних действий и переменных.
Код:
type ukazatel=^s;
s=record
  dan:real;
  next:ukazatel;
end;
Var h,i:integer;
g,g1,y,u,x,u1:ukazatel;

procedure see;
begin
  writeln('');
  u1:=u;
  while u1<>nil do begin
    write(u1^.dan:3:0);
    u1:=u1^.next;
  end;
  writeln('');
  g1:=g;
  while g1<>nil do begin
    write(g1^.dan:3:0);
    g1:=g1^.next;
  end;
  writeln;
end;
begin
  h:=0;
  writeln('vvedite 1-i spisok');
  new(u);
  readln(u^.dan);
  u^.next:=nil;
  x:=u;
  for i:=1 to 4 do begin
    x^.next:=new(ukazatel);
    x:=x^.next;
    readln(x^.dan);
    x^.next:=nil
  end;

  writeln('vvedite 2-i spisok');
  new(g);
  readln(g^.dan);
  g^.next:=nil;
  y:=g;
  for i:=1 to 4 do begin
    y^.next:=new(ukazatel);
    y:=y^.next;
    readln(y^.dan);
    y^.next:=nil
  end;

  see;
  repeat
    if u^.dan<g^.dan then begin
      x^.next:=New(ukazatel);
      x:=x^.next;
      x^.next:=nil;
      x^.dan:=u^.dan+g^.dan
    end
    else begin
      y^.next:=New(ukazatel);
      y:=y^.next;
      y^.next:=nil;
      y^.dan:=u^.dan-g^.dan
    end;
    u1:=u;
    u:=u^.next;
    dispose(u1);
    g1:=g;
    g:=g^.next;
    dispose(g1);
    h:=h+1;
    see;
  until (u=nil) or (g=nil);

  writeln('chislo shagov =',h);
  readln;
end.
eoln вне форума Ответить с цитированием
Старый 03.12.2010, 18:29   #3
MishanyaZWER
Пользователь
 
Аватар для MishanyaZWER
 
Регистрация: 18.04.2010
Сообщений: 12
По умолчанию

Спасибо выручил)))
MishanyaZWER вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Stack Overflow Xeonc Общие вопросы C/C++ 3 22.10.2010 08:07
Stack overflow GaLiof Помощь студентам 7 12.12.2009 12:56
Stack Overflow Neeter БД в Delphi 2 03.06.2009 00:39
STACK и QUEUE vo_sa Общие вопросы C/C++ 3 25.03.2009 11:45
Stack Overflow??? Рустам Общие вопросы Delphi 7 01.04.2008 17:24