Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Динамічна пам'ять.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
84.99 Кб
Скачать

Черга(двозв’язний список)

Приклад програми з використанням стекової памяті.

Скласти 2 великих натуральних числа, використовуючи стекову память.

Доданки А і В записати в стек a і b, а результат в стек с.

Перенос carry:=(ai +bi+carry)div 10,результат rezult:=(ai +bi+carry)mod10.

program ADDITION;

type

StackPrt=^Stack;

Stack=record

Data:integer;

Next:StackPrt;

end;

var

a,b,c:StackPrt;

ci:integer; s1,s2:string;

PROCEDURE Push(var top:StackPrt;value:integer);{ процедура вставки елемента} var x:StackPrt; {стек}

begin

new(x);

x^.Data:=value;

x^.Next:=top;

top:=x;

end;

PROCEDURE Pop(var top:StackPrt;var variable:integer);{процедура видалення}

Var X:StackPrt; {елемента із стека }

begin

if top<>nil then

begin

variable:=top^.Data;

x:=top;

top:=top^.Next;

dispose(x);

end; end;

PROCEDURE AddZeroes(var s1:string;s2:string);{процедура доповнення рядка s1} var i:integer; {до довжини рядка s2 шляхом доповнення символів ‘0’}

begin

for i:=length(s1) to length(s2)-1 do

s1:='0'+ s1;

end;

PROCEDURE StringToStack(s:string;var top:StackPrt);{ процедура формування} var i:integer; {стека із рядка цифр}

begin

for i:=1 to length(s) do

Push(top,ord(s[i])-ord('0'));

end;

PROCEDURE Adition(var a,b:StackPrt;var c: StackPrt);{процедура додавання}

var

carry,ai,bi:integer;

begin

carry:=0;

while a<>nil do begin {поки в доданку є розряди }

Pop(a,ai); {видалення розряду 1-го доданку із стеку }

Pop(b,bi); {видалення розряду 2-го доданку із стеку }

Push(c,(ai+bi+carry)mod 10);{обчислення розряду суми}

carry:=(ai+bi+carry)div 10;{обчислення значення переносу}

end;

if carry>0 then Push(c,carry);{якщо є перенос за розрядну сітку, додати його end; до результату}

begin {початок програми}

writeln('vvod a');

readln(s1);{вводимо доданок А як рядкову змінну}

writeln('vvod b');

readln(s2);{ вводимо доданок В як рядкову змінну }

AddZeroes(s1,s2);{збільшуємо довжину а до довжини в}

AddZeroes(s2,s1);{ збільшуємо довжину в до довжини а}

StringToStack(s1,a);{розміщуєм В в стек}

StringToStack(s2,b);{ розміщуєм А в стек}

Adition(a,b,c);{додати}

write('a+b=');{вивести результат}

while c<>nil do begin

Pop(c,ci);{вивести перенос}

write(ci); end; end.