пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

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

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

Динамическая переменная(массив) не имеет имени, обращаться нужно через адрес памяти, размер заранее не известен, память выделятся при работе программы, можно увеличить во время работы программы.

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

Объявление:
            var pC: ^char; // адрес символа  

Как записать адрес:

                        pC:= @ m  //адрес переменной m

Обращение к данным:
           
pI^ //Получение значения.

для выделения памяти используют процедуру GetMem

  GetMem( указатель, размер в байтах );

указатель должен быть приведен к типу pointer –указатель без типа, просто адрес какого-то байта в памяти;

с динамическим массивом можно работать так же, как и с обычным (статическим);

для освобождения блока памяти нужно применить процедуру FreeMem:

  FreeMem ( указатель );

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

Объявление(выделение памяти):

            Type Tbook = record

                        author: string[40]; // автор, строка

                       title:  string[80]; // название, строка

                        year:   integer;  // год издания, целое

                        pages:  integer;           // кол-во страниц, целое

            end;

Так же возможно использование массива записей:

            var mass: array of Tbook;

Или файла записей:

            var f: file of Tbook;

Обращение:

readln(Book.author);   // ввод

readln(Book.title);

Book.year := 1998;     // присваивание

if Book.pages > 200 then   // сравнение

writeln(Book.author, '.', Book.title); // вывод

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

 

type PBook = ^TBook; { новый тип данных }

var  p: array[1..N] of PBook;  

begin

 { заполнение массива записей}

 for i:=1 to N do

            p[i] := @aBooks[i];

for i:=1 to N-1 do

 for j:=N-1 downto i do

            if p[j]^.year > p[j+1]^.year then begin

            temp := p[j];

     p[j] := p[j+1];

     p[j+1] := temp;

   end;

for i:=1 to N do

    writeln(p[i]^.title, p[i]^.year:5);

end.

 

17.          


22.01.2015; 17:43
хиты: 167
рейтинг:0
Точные науки
информатика
Языки программирования
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь