Структуры (записи) Программирование на языке Паскаль
2 Структуры (в Паскале – записи) Структура (запись) – это тип данных, который может включать в себя несколько полей – элементов разных типов (в том числе и другие структуры). Свойства: автор (строка) название (строка) год издания (целое число) количество страниц (целое число) Задача: объединить эти данные в единое целое Размещение в памяти авторназвание год издания количество страниц 40 символов80 символовцелое
3 Одна запись readln(Book.author); // ввод readln(Book.title); Book.year := 1998; // присваивание if Book.pages > 200 then // сравнение writeln(Book.author, '.', Book.title); // вывод readln(Book.author); // ввод readln(Book.title); Book.year := 1998; // присваивание if Book.pages > 200 then // сравнение writeln(Book.author, '.', Book.title); // вывод Объявление (выделение памяти): var Book: record author: string[40]; // автор, строка title: string[80]; // название, строка year: integer;// год издания, целое pages: integer; // кол-во страниц, целое end; var Book: record author: string[40]; // автор, строка title: string[80]; // название, строка year: integer;// год издания, целое pages: integer; // кол-во страниц, целое end; название запись поля Обращение к полям: Для обращения к полю записи используется точка! ! !
4 Новый тип данных – запись const N = 10; var Book: TBook; // одна запись aBooks: array[1..N] of TBook; // массив const N = 10; var Book: TBook; // одна запись aBooks: array[1..N] of TBook; // массив Объявление типа: type TBook = record author: string[40]; // автор, строка title: string[80]; // название, строка year: integer;// год издания, целое pages : integer; // кол-во страниц, целое end; type TBook = record author: string[40]; // автор, строка title: string[80]; // название, строка year: integer;// год издания, целое pages : integer; // кол-во страниц, целое end; Память не выделяется! ! ! Объявление переменных и массивов: TBook – Type Book («тип книга») – удобно!
5 Оператор with with переменная, переменная,...переменная do begin оператор; … опреатор; end; with переменная, переменная,...переменная do begin оператор; … опреатор; end; Этот оператор используется для удобства работы с переменными типа record (запись). Объявление: В операторе, следующем после слова do, к полям одной или большего количества переменных типа записи можно обращаться, используя только их идентификаторы (без указания имени переменной записи).
6 Оператор with with Date[i] do begin Month:=1; Year:=Year+1; end; with Date[i] do begin Month:=1; Year:=Year+1; end; Пример: Это эквивалентно: Date[I].Month:=1; Date[I]. Year:=Date[I].Year+1; Date[I].Month:=1; Date[I]. Year:=Date[I].Year+1;
© С.В.Кухта, Оператор присоединения:пример Type Student = Record F1, F2, F3 : Name; Day : 1..31; Month : 1..12; Year : integer; StudDoc : integer end; Var A : Student; Type Student = Record F1, F2, F3 : Name; Day : 1..31; Month : 1..12; Year : integer; StudDoc : integer end; Var A : Student; Значение переменной A можно изменить операторами: A.F1 := 'Иванов '; A.F2 := 'Илья '; A.F3 := 'Иннокентьевич '; A.Day := 14; A.Month := 9; A.Year := 1976; A.StudDoc := 123; A.F1 := 'Иванов '; A.F2 := 'Илья '; A.F3 := 'Иннокентьевич '; A.Day := 14; A.Month := 9; A.Year := 1976; A.StudDoc := 123;
8 Оператор присоединения:пример Предпочтительнее использовать следующий вариант: with A do begin F1 := 'Иванов '; F2 := 'Илья '; F3 := 'Иннокентьевич '; Day := 14; Month := 9; Year := 1976; StudDoc := 123; end; { оператора with } with A do begin F1 := 'Иванов '; F2 := 'Илья '; F3 := 'Иннокентьевич '; Day := 14; Month := 9; Year := 1976; StudDoc := 123; end; { оператора with }
9 Массив записей Объявление (выделение памяти): const N = 10; var aBooks: array[1..N] of record author: string[40]; title: string[80]; year: integer; pages: integer; end; const N = 10; var aBooks: array[1..N] of record author: string[40]; title: string[80]; year: integer; pages: integer; end; Books[1]... Books[10] authortitleyearpages
10 Массив записей for i:=1 to N do begin readln(aBooks[i].author); readln(aBooks[i].title);... end; for i:=1 to N do if aBooks[i].pages > 200 then writeln(aBooks[i].author, '.', aBooks[i].title); for i:=1 to N do begin readln(aBooks[i].author); readln(aBooks[i].title);... end; for i:=1 to N do if aBooks[i].pages > 200 then writeln(aBooks[i].author, '.', aBooks[i].title); Обращение к полям: aBooks[i].author – обращение к полю author записи aBooks[i] ! !