Uses Crt; Type TB=^Buy; Buy=Record Quantity: Integer;{Количество товара} ProductCost: Real;{Стоимость одного изделия} FullCost: Real; {Общая стоимость всей партии} Prev: TB; End; TS=^Sell; Sell=Record Quantity: Integer;{Количество товара} FullCost: Real; {Общая стоимость всей партии} Prev: TS; End; Var B,TopB: TB; S,TopS: TS; a: Char; Q: Integer; PC,FC: Real; Procedure InputBuyStack(Q: Integer; PC: Real); Begin {FirstB:=Nil; в begin} New(B); B^.Prev:=TopB; B^.Quantity:=Q; B^.ProductCost:=PC; B^.FullCost:=Q*PC; TopB:=B End; Procedure InputSellStack(Q: Integer; FC: Real); Begin {FirstS:=Nil; B Begin} New(S); S^.Prev:=TopS; S^.Quantity:=Q; S^.FullCost:=FC; TopS:=S; WriteLn(Q:5,' штук по ',FC/Q:5:2,'$ каждый на сумму ':5,FC:5:2); End; Function FullCostCount: Real; Var Invoice: Real; Begin Invoice:=0; While S<>Nil Do Begin Invoice:=Invoice+S^.FullCost; S:=S^.Prev; End; FullCostCount:=Invoice; End; Procedure OutputBuyStack(Q: Integer); Begin If TopB<>Nil Then Begin Repeat If TopB^.Quantity>Q Then Begin InputSellStack(Q,Q*TopB^.ProductCost); TopB^.Quantity:=TopB^.Quantity-Q; Q:=0 End Else If TopB^.Quantity=Q Then Begin InputSellStack(Q,TopB^.FullCost); B:=TopB^.Prev; Dispose(TopB); TopB:=B; Q:=0 End Else {If TopB^.Quantity#27 Then Begin If Str[i]=' ' Then Repeat Temp:=Temp+1; Until Temp=999999; Delay(20000); End; Write(Str[i]); Temp:=0; End; If D Then Repeat Temp:=Temp+1; Until Temp=9999999; If WrtLn Then WriteLn; End; Begin ClrScr; TopB:=Nil; TopS:=Nil; OutText('Добро пожаловать в консоль управления терминалом склада!',True,True); OutText('Вы можете пополнить терминал товаром или выкупить его.',True,True); OutText('Для пополнения нажмите B, для совершения покупки S',False,True); Repeat a:=ReadKey; Case a Of 'b': Begin OutText('Введите количество товара: ',False,False); Read(Q); OutText('Введите стоимость одного изделия: ',False,False); Read(PC); InputBuyStack(Q,PC); End; 's': Begin OutText('Введите количество товара: ',False,False); Read(Q); OutputBuyStack(Q); If S<>Nil Then Dispose(S); TopS:=Nil; End; End; OutText('Для пополнения нажмите B, для совершения покупки S',False,True); a:=#0 Until a='z'; Dispose(B); Dispose(TopB); Dispose(S); Dispose(TopS); End.