МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар.

Требования к выполнению заданий





 

Необходимо выполнить следующие части:

Часть 1: разработать программу, включающую вызывающую часть (подключающую модуль) и сам подключаемый модуль, содержащий процедуры/функции (желательно не менее двух). Реализовать следующие варианты организации данных:

а) необходимая для работы программы информация (типа массив записей) описана только в основной программе;

б) необходимая для работы программы информация (типа массив записей) описана только в подключаемом модуле (при этом необходимо рассмотреть, в чем с точки зрения видимости разница между описаниями информации в интерфейсной части подключаемого к программе модуля и в части реализации модуля).

 

Часть 2: разработать программу, включающую несколько (не менее двух) модулей (в каждом модуле по одной процедуре) и вызывающую часть. Реализовать следующие варианты организации данных:

а) массив записей описан только в основной программе;

б) массив записей описан только в общем модуле (отдельном от остальных модулей с процедурами/функциями), содержащем только описания;

в) массив записей описан только в одном из модулей с процедурами.

2.3. Требования к содержанию отчета

 

Отчет о лабораторной работе должен включать:

1. Конспект теоретической части.

2. Схемы организации данных и тексты разработанных программ и модулей с комментариями для каждой части задания и каждого варианта организации данных в программе.

3. Выводы о недостатках (ошибках) для каждой части задания и каждого варианта организации данных в программе.

2.4. Контрольные вопросы

 

1. Что такое модуль?

2. Зачем нужны модули?

3. Какие есть средства языка Паскаль, аналогичные модулям?

4. Какова структура модуля?

5. Как можно организовать скрытие данных в модуле?

6. Каковы правила видимости для программ, использующих модули?

7. Какие существуют режимы сборки модуля и программы с модулями?

8. В чем состоят особенности косвенных и перекрестных ссылок на модули?

 

 

Лабораторная работа № 20

Использование указателей

Цель работы:

- приобретение навыков в использовании указателей разных типов;

- приобретение навыков в поиске и исправлении ошибок при работе с указателями разных типов;

- приобретение навыков в работе со связанными и несвязанными динамическими структурами данных.

1. Теоретическая часть

Перед началом выполнения данной работы необходимо изучить раздел 22 «Указатели и ссылочные переменные» конспекта лекций по дисциплине «Языки программирования».

2. Практическая часть

2.1. Задания для выполнения

 

Задание 1. Пусть имеются следующие объявления:

type

rеf = ^integer;

var

p, q : ref;

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

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

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

2) что обозначает р^:

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

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

- целое 5;

3) каковы типы р и p^ ;

4) что будет выдано на экран и какое будет графическое представление размещения значений в памяти (аналогичное показанному на рисунке выше) в результате выполнения каждого из действий, обозначенных ниже символами а, б, в и г, при условии, что все эти действия выполняются строго в указанном порядке сверху вниз и не независимые:

а) 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. Какими будут графические представления размещения значений объектов программы в памяти (аналогичные показанным на рисунках для заданий 1 или 2), соответствующие каждому из действий A, B, C и D? Обосновать эти графические представления.

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

4. Можно ли переменной х присвоить ссылку на переменную у?

5. Можно ли с помощью процедуры dispose уничтожить переменные х и у?

 

Задание 5. Пусть имеются следующие объявления:

type

A = ^char;

В = record

f1: char;

f2 : A;

end;

var

p: ^B;

q: A;

Нарисовать графическое представление размещения в памяти значений (как в рисунках для вариантов 1 или 2) ссылочных переменных р и q после выполнения каждого из приведенных ниже действий, обозначенных символами а, б, в, г и д, при условии, что эти действия выполняются строго в указанном порядке сверху вниз и не независимые.

а) new(q);

б) q^ := '7';

в) new(p);

г) p^.f1 := succ(q^);

д) p^.f2 := q.

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

Нарисовать графическое представление размещения в памяти значений всех переменных (как в рисунках для вариантов 1 или 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. Какие приведенные ниже описания являются недопустимыми? Если такие (недопустимые) описания нашлись, то почему они являются недопустимыми и как их исправить?

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

type

A = ^0..9;

В =record

p : real;

q : C;

end;

C = ^B .

 

 

Задание 8. Требуется для каждого из четырех вариантов, обозначенных на рисунке ниже символами а, б, в и г, написать программы, в которых описать переменную-указатель р и необходимые (в соответствии с рисунком) другие переменные и записать операторы, присваивающие всем переменным и полям записей значения в соответствии с рисунком. Считать, что варианты, обозначенные на рисунке символами а, б, в и г, являются независимыми, а стрелки на рисунке указывают на весь узел, а не на отдельные поля записи.

Задание 9. Являются ли допустимыми в языке Паскаль следующие конструкции:

1) P^[2]

2) q^ + 2

3) q^[2]^

4) r^^ ?

 

Для каждой найденной допустимой конструкции нарисовать графическое представление размещения в памяти значений переменных (как в рисунках для вариантов 1 или 2) и привести примеры их использования.

 

Задание 10. Пусть имеются следующие объявления:

type

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

звено = record

элем : integer;

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

end;

var

р : цепочка;

 

В соответствии с приведенным ниже рисунком для вариантов, обозначенных символами а, б, в и г, необходимо записать последовательности операторов, которые:

1) преобразуют состояние, обозначенное на рисунке символом а, к состоянию, обозначенному на рисунке символом б;

2) преобразуют состояние, обозначенное на рисунке символом а, к состоянию, обозначенному на рисунке символом в;

3) преобразуют состояние, обозначенное на рисунке символом а, к состоянию, обозначенному на рисунке символом г.

Требования к выполнению задания:

- считать, что действия в пунктах 1, 2 и 3 выполняются независимо друг от друга;

- удалять звенья из цепочки надо с освобождением занимаемой ими динамической памяти.

 

 

Задание 11. Пусть имеются следующие объявления:

type

chain = ^elem;

elem = record

data : integer;

link : chain

end;

var

p, q : chain;

 

Требуется нарисовать графическое представление размещения в памяти значений переменных (как в рисунках для вариантов 1 или 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 .

 

Считать, что действия в пунктах 1, 2, 3 и 4 выполняются независимо друг от друга.

2.2. Требования к содержанию отчета

 

Отчет о лабораторной работе должен включать:

1. Конспект теоретической части.

2. Графические представления размещения в памяти значений переменных для каждого задания.

3. Тексты программ с комментариями.

4. Развернутые ответы на все вопросы, поставленные в каждом варианте задания.

 

2.3. Контрольные вопросы

 

1. Что такое указатель?

2. Чем отличаются типизированные указатели от нетипизированных?

3. Какие действия можно, а какие нельзя выполнять с нетипизированными указателями?

4. Чем отличаются указатели от ссылок?

5. Как выполняется операция разыменования указателя?

6. Что такое адресная арифметика и где она используется?

7. Что такое динамические переменные, какие они бывают и в чем их отличия от обычных переменных?

8. Как выделять и освобождать память для динамической переменной?

9. Какие возможны ошибки при работе с указателями?

10. Какие известны связанные и несвязанные динамические переменные?

 

Библиографический список

1. Павловская Т.А. Паскаль. Программирование на языке высокого уровня. СПб.: Питер, 2010. 464 с.

2. Сухарев М. Delphi. Полное руководство. Включая версию 2010. СПб.: Наука и техника, 2010. 1040 с.

Содержание

Лабораторная работа № 8. 1

Лабораторная работа № 9. 4

Лабораторная работа № 10. 7

Лабораторная работа № 11. 14

Лабораторная работа № 12. 17

Лабораторная работа № 13. 22

Лабораторная работа № 14. 26

Лабораторная работа № 15. 27

Лабораторная работа № 16. 29

Лабораторная работа № 17. 31

Лабораторная работа № 18. 38

Лабораторная работа № 19. 40

Лабораторная работа № 20. 42

 





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.