
- •Тема: Динамічна пам’ять.
- •1.Статичні і динамічні змінні.
- •2.Операції над вказівниками.
- •3.Виділення і звільнення динамічної пам’яті.
- •4. Підпрограми для роботи з динамічною пам’яттю.
- •Теоретичні питання до теми : Динамічна память.
- •5.Динамічні структури даних.
- •Черга(двозв’язний список)
- •Var X:StackPrt; {елемента із стека }
Черга(двозв’язний список)
Приклад програми з використанням стекової пам’яті.
Скласти 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.