Program Lab;
Uses CRT;
Type TEl=^El;
El=Record
Val: Real;
Next: TEl;
end;
Var SS,SS1,BP: TEl;
a,s:real;
Function ReadZ(Var V: Real): Boolean;Var K: Char;S: String;Code: Integer;
Begin ReadZ:=False;S:='';K:=#0;
Repeat K:=ReadKey;
Case K of
'-': If S='' then begin K:='-';S:=S+K;Write(K);end;
'.',',': If Pos('.',S)=0 then begin K:='.';S:=S+K;Write(K);end;
'0'..'9': begin S:=S+K;Write(K);K:=#0;end;
#8: If S<>'' then begin
Delete(S,Length(S),1);
GoToXY(WhereX-1,WhereY);Write(' ');
GoToXY(WhereX-1,WhereY);
end;
#27,#13: If S<>'' then begin
Val(S,V,Code); S:='';WriteLn;
ReadZ:=True;K:=#26;
end else If K=#27 then K:=#26;
end;
Until Ord(K)=26;
End;
Procedure Push(X: Real);Var P: TEl;
Begin New(P); P^.Val:=X; P^.Next:=SS; SS:=P; End;
Procedure Show;
Begin BP:=SS;
While BP<>Nil do begin
WriteLn(BP^.Val:10:3);
BP:=BP^.Next;
end;
End;
Procedure StackSort;Var l,k,T,N: TEl; B: Real; {Сортировка}
Begin T:=SS1; K:=SS;
while T<>nil do begin L:=t;
while K<>nil do begin n:=k;
while n<>nil do begin
while n^.val<>l^.val do
begin
while L<>nil do l:=l^.next;
if l=nil then begin writeln(N^.val:10:3);
n:=n^.next;
end;
end;
end;
end;
end;
End;
Var n: Real;
BEGIN ClrScr;
S:=1;
write('Vvedite a= ');
readln(a);
SS:=Nil;
WriteLn('Введите числа (конец ввода Ctrl+Z или Esc):');
While ReadZ(n) do Push(n);
WriteLn('Элементы необработанного стека:');
Show;
WriteLn('proizvedenie:');
BP:=SS;
While BP<>Nil do begin
If BP^.Val>0 then
If BP^.Val<a then
s:=s*BP^.val;
BP:=BP^.Next;
end;
if s<>1 then
writeln(s:10:3)
else writeln('net takogo proizvedenia');
WriteLn;
SS1:=SS;
SS:=Nil;
WriteLn('Введите числа (конец ввода Ctrl+Z или Esc):');
While ReadZ(n) do Push(n);
WriteLn('Элементы необработанного стека:');
Show;
WriteLn('Элементы отсортированного стека:');
show1; StackSort; WriteLn;
Repeat Until KeyPressed;
END.
Подскажите в чем ошибка...
Добавить в конец списка те элементы из второго, которых нет в первом. это задание у меня че то не работает!!! гляньте сортировку плиз...
Код:
срочно нужно сдать а исправить не могу*(((