Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Указатели и динамические переменные



Практическое занятие

Указатели и динамические переменные

Цель работы: приобретение навыков в работе с указателями.

Каждый студент выполняет все упражнения.

Упражнения

1.

type

rеf = ^integer;

var

p, q: ref;

Пусть переменные р и q имеют значения, показанные на рисунке. Ответить на следующие вопросы:

1) что является значением переменной р: ссылка на объект (переменную) целого типа или сам этот объект?

Что обозначает р^:

- ссылку на объект целого типа,

- сам этот объект?

- целое 5?

Каковы типы р и p^?

 

2) что будет выдано на печать в результате выполнения следующих операторов?

P^:= q^;

if p = q then p:=nil else if p^ = q^ then q: = p;

if p = q then q^:= 4;

writeln(p^).

 

2.

type

D = record

a: boolean;

b, c: ^rеа1

end;

var

r: ^D.

Пусть ссылочная переменная rимеет значение, показанное на рисунке.

Нарисовать, что изменится на рисунке после выполнения следующих операторов:

if r^.b <> nil

then r^.с:=r^.b;

r^.b^:=r^.с^ - 1.4;

r^.а:= r^.b = r^.c.

3.

var

p, q: ^integer;

r: ^char;

Какие из следующих операторов неправильные? Почему и как их исправить?

1) p:=q;

2) q:=r;

3) p:=nil;

4) r:=nil;

5) q=p^;

6) p^:=nil;

7) r^:=p^;

8) q^=ord(r^);

9) if r<>nil then r^:=nil^,

10) if q>nil then q^:=p^;

11) if q = p then write(q);

12) if q<>r then read(r^).

4. Имеется программа

program dynamic;

var x: ^boolean;

y: boolean;

begin

{A} new(x);

{B} x^:=true; y:=not x^;

{C} dispose(x);

{D} writeln(y)

end.

Ответьте на следующие вопросы:

1) какие переменные существуют в каждой из точек А, В, С и D и каковы их значения в эти моменты?

2) почему объекты (переменные), создаваемые процедурой new и уничтожаемые процедурой dispose, называют динамическими? Почему им не дают имена?

3) можно ли переменной х присвоить ссылку на переменную у? Можно ли с помощью процедуры dispose уничтожить переменные х и у?

5.

type

A = ^char;

В = record

f1: char;

f2: A

end;

var p: ^B;

q: A.

Нарисовать структуру значений (как в варианте 2) ссылочных переменных р и q после выполнения следующих операторов:

new(q);

q^:='7';

new(p);

p^.fl:= succ(q^);

p^.f2:=q.

6. Найти и исправить ошибки в следующей программе. Нарисуйте графическое (как в варианте 2) представление в памяти.

program errors;

var

a, b: ^integer;

begin

if a=nil

then read(a);

a^:=5;

b:=nil;

b^:=2;

new(b); read(b^); writeln (b, b^);

new(a); b:=a; dispose(a); b^:=4;

end.

7. Какие следующие описания являются недопустимыми? Если есть, то почему и как их исправить?

type

В =record

p:real;

q:C

end;

C = ^B.

Нарисуйте графическое представление в памяти (как в варианте 2).

8. Допустимы ли в языке Паскаль конструкции

1) P^[2],

2) q^ + 2,

3) q^[2]^,

4) r^^?

Если да, то нарисуйте графическое представление в памяти (как в варианте 2) и приведите примеры использования.



9. Описать переменную р (и, если надо, вспомогательные переменные) и выписать операторы, присваивающие ей указанные значения [см. рисунок (а-г)].

 

 

10.

type

цепочка =^звено;

звено = record

элем: integer;

след: цепочка

end;

var

р: цепочка.

Выписать операторы, которые преобразуют значение переменной р, показанное ниже на рисунке, часть а, к значениям, показанным на рисунке, часть 6, в и г. (Звенья, ставшие ненужными, надо уничтожить).

 

11.

type

chain = ^elem;

elem = record

data: integer;

link: chain

end;

var

p, q: chain.

Нарисовать структуру значения переменной р в памяти(как в варианте 2) после выполнения (независимого) следующих групп операторов:

1) new(p); p^ data:= 4; p^.link:= nil;

2) new(p); p^.data:= 7; p^.link:= p;

3) new(q); q^ data:= 2; q^.link:= nil;

new(p); p^.data:= 1; p^.link:= q;

4) new(p); p^.data:= 5; new(p^.link); p^.link^:= p^.

 

 


Дата добавления: 2015-08-29; просмотров: 241 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
http://www.gumer.info/bibliotek_Buks/Polit/peresl/10.php | контроля деталей на контрольно-измерительную машину Accura II

mybiblioteka.su - 2015-2024 год. (0.021 сек.)