Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
новая метода.docx
Скачиваний:
10
Добавлен:
07.05.2019
Размер:
610.3 Кб
Скачать

Лабораторная работа №1 работа с файломи

Цель работы:

  • приобретение навыков представления таблиц в виде массивов записей и файлов;

  • приобретение навыков в обработке и поиске информации в массивах записей и файлах;

  • приобретение навыков в работе с файлами разных типов.

Варианты заданий те же, что и в 1-й части по теме «Записи». Только массив записей должен сохраняться и обрабатываться в виде файла. При этом необходимо по указанию преподавателя реализовать следующие способы создания этого файла:

  • как типизированного файла из записей;

  • как типизированного файла из символов;

  • как типизированного файла из строк;

  • как текстового файла.

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

Лабораторная работа № 2 указатели и динамические переменные

Цель работы:

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

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

Варианты заданий

Задания по теме «Указатели и динамические переменные»

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

type

rеf = ^integer;

var

p, q : ref;

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

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

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

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

  • сам этот объект

  • целое 5?

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

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

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

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

  4. можно ли переменной х присвоить ссылку на переменную у? Можно ли с помощью процедуры 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.

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

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

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

type

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

звено = record

элем : integer;

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

end;

var

р : цепочка;

Необходимо записать последовательности операторов, которые:

а) преобразуют значение переменной р, показанное ниже на рис.а, к значениям, показанным ниже на рис.б);

б) преобразуют значение переменной р, показанное ниже на рис.а), к значениям, показанным ниже на рис.в);

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

Считать, что действия в пунктах а), б) и в) не зависят (не влияют) друг от друга.

Звенья, ставшие ненужными, надо уничтожать.

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;

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