Лабораторная работа №9 Инициализация и использование в программах указателей

Материал из wiki.nntc.nnov.ru
Версия от 08:52, 15 апреля 2008; Калентьева Елена (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Теоретические сведения

Переменные типа "указатель" позволяют работать с динамической памятью. Переменные-указатели содержат адреса ячеек динамической памяти, в которые записываются данные. Указатели могут быть типизированными и нетипизированными. Для инициализации значения указателя требуется зарезервировать область динамической памяти процедурой New(<типизированный указатель>) или GetMem(<нетипизированный указатель>,<количество байт под данные>). Если указатель не ссылается на область динамической памяти, то его значение задаётся равным NIL (свободный указатель). Для освобождения динамической памяти используются процедуры Dispose(<типизированный указатель>) или FreeMem(<нетипизированный указатель>,<количество байт >).

Примеры программ

1) Демонстрация работы с указателями.

 const p1:^byte=Nil; {объявлена типизированная константа- свободный}
                                   {указатель на целое число}
     p2:^string=Nil; {объявлена типизированная константа- свободный}
                               {указатель на строку}
     p3:Pointer=Nil; {объявлена типизированная константа- свободный}
                                {указатель на любой тип}
begin
 New(p2);{захват динамической памяти под p2}
 p2^:='asd';{инициация значения по адресу p2}
 p3:=p2;{инициация значения указателя р3}
  p1:=p3; {инициация значения указателя р1}
 write(p1^) ;{вывод длины строки, на которую ссылается р1}
  readln;
  Dispose(p2);{освобождение динамической памяти}
end.

2) Организация динамического массива.

type
 p=^Arr; {объявление типа-указатель на нестандартный тип}
 Arr=array[1..1] of REAL;{объявление типа-массив вещественных чисел}
  var
   pt:p;   {объявление переменной-указателя на массив}
   i,n:byte;
begin
 write('count=');readln(n);{ввод размерности массива}
 New(pt); {захват памяти}
 for i:=1 to n do {инициализация массива и вывод}
   begin
     pt^[i]:=i;
    write(pt^[i]:3:1,' ');
    end;
  Dispose(pt);{освобождение памяти }
  readln;
end.

Задания к работе

Составьте блок-схемы и программы к задачам своего варианта.Используйте
организацию динамического массива. Исходные данные общие для
всех вариантов:
Вводится массив данных о книгах в магазине: автор, название книги, стоимость.
Количество данных должно вводится во время работы программы.

Вариант1.

Вывести список авторов и количество книг данного автора.

Вариант2.

Определить наличие книги в магазине по её названию и автору.

Вариант3.

Определить общую стоимость книг данного автора.

Вариант4.

Вывести данные о книге по её названию.

Вариант5.

Определить автора, книги которого имеют самую большую стоимость.

Вариант6.

Определить автора, книги которогоимеют самую малую стоимость.

Вариант7.

Определить автора, книги которого быстро раскупают.

Вариант8.

Вывести названия и стоимость книг писателя Сидорова М.М.

Вариант9.

Вывести данные о самой дорогой книге в магазине.

Вариант 10.

Вывести данные о книге с названием <Сказки>.