Міністерство освіти і науки України
Хмельницький національний університет
Кафедра системного програмування
Лабораторна робота №1
з програмування
на тему:
«Вказівники»
Лабораторна робота №1
Тема: вказівники.
Мета: навчитися програмувати з використанням вказівників та динамічних змінних, створювати та опрацьовувати черги та стеки.
Завдання
Дано число D і «покажчики» P1 й P2 на початок і кінець черги (якщо черга порожня, то P1=P2=nil). Записати елемент зі значенням D у кінець черги та вивести нові адреси початку і кінця черги.
uses crt;
type vkaz=^cherga;
cherga=record
num:integer;
next:vkaz
end;
procedure add(var a:vkaz);
var temp:vkaz;
begin
new(temp);
temp^.next:=a;
temp^.num:=random(100);
a:=temp;
end;
procedure addnew(var a:vkaz; D:integer);
var temp:vkaz;
begin
new(temp);
temp^.next:=a;
temp^.num:=D;
a:=temp;
end;
function tail(a:vkaz):vkaz;
begin
while a<>nil do
begin
tail:=a;
a:=a^.next;
end;
end;
procedure create(var a,p1,p2:vkaz; var n:integer);
var i:integer;
begin
write('vvedit kilkist chysel: ');
readln(n);
if n<>0 then
begin
for i:=1 to n do
begin
add(a); write(a^.num,' ');
if i=1 then p1:=a;
a:=a^.next;
end;
p2:=tail(a);
writeln;
writeln('pochatok: ',seg(p1^),ofs(p1^));
writeln('kinets: ',seg(p2^),ofs(p2^));
end
else writeln('pochatok i kinets = NIL');
end;
procedure newP(var a,p1,p2:vkaz; n:integer);
begin
if n=0 then p1:=a;
p2:=tail(a);
writeln('pochatok: ',seg(p1^),ofs(p1^));
writeln('kinets: ',seg(p2^),ofs(p2^));
end;
procedure free(var a:vkaz; p1:vkaz);
var temp:vkaz;
begin a:=p1;
while a<>nil do
begin
temp:=a;
a:=a^.next;
dispose(temp);
end;
end;
var el,p1,p2:vkaz; n,d:integer;
begin clrscr; randomize;
create(el,p1,p2,n);
write('vvedit chyslo D: '); readln(d);
addnew(el,d);
newP(el,p1,p2,n);
free(el,p1);
repeat until keypressed
end.
//
Висновок. Виконавши лабораторну роботу, я навчився працювати з вказівниками та динамічними змінними, створювати черги та додавати нові елементи, виділяти пам'ять для динамічних змінних та звільняти її, а також виводити адреси початку та кінця черги.