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

Презентация:



Advertisements
Похожие презентации
Программирование на языке Паскаль Файлы комбинированного типа (записей)
Advertisements

Структуры (записи) Программирование на языке Паскаль.
Указатели Динамические структуры данных. 2 Статические данные переменная (массив) имеет имя, по которому к ней можно обращаться размер заранее известен.
Множества значений или переменных с одним общим именем называются структурированными типами. По способу организации и типу компонентов выделяют: 1. Массивы.
Структурные типы данных 1.Массивы 2.Строки 3.Записи 4.Множества 5.Файлы.
Статичні структури даних.. 2 Статические данные переменная (массив) имеет имя, по которому к ней можно обращаться размер заранее известен (задается при.
© М.Е.Макарова
Файловый тип данных Turbo Pascal Операции для работы с файлами 11 класс.
Записи Комбинированный тип. Запись – структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. Поля записи могут быть.
1 Пример: Для каждого из 25 учеников класса известны фамилия и оценки (в баллах) по пяти дисциплинам. Требуется вычислить среднюю оценку каждого ученика.
Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. В языке Паскаль файл представляет собой последовательность.
Файловый ввод- вывод данных в Pascalе Средства обработки файлов 11 класс Дугина Ирина Радиковна, учитель информатики и ИКТ, МБОУ СОШ с.Камышки Александрово-Гайского.
Тема: Комбинированный тип данных. Цель:. Комбинированный тип данных – это структурированный тип, состоящий из фиксированного числа компонент разного типа.
Чтобы переваривать знания, Нужно поглощать их с аппетитом. А. Франс.
ТЕКСТОВЫЕ ФАЙЛЫ Turbo Pascal 7.0. Операции с текстовыми файлами Выделение буфера обмена Установка связи Открытие файла Чтение из файла Запись в файл Закрытие.
Пусть нам необходимо сформировать текстовый файл с помощью Паскаля, а затем переписать из данного файла во второй только те строки, которые начинаются.
Программирование типовых алгоритмов вычислений Информатика.
Работа с файлами.. Процедура Assign(var f; name : String); Связывает внешний файл с именем name и переменную файлового типа f. Все дальнейшие операции.
Файловая переменная. Файл – совокупность данных, записанная во внешней памяти под определенным именем. Любой файл имеет три характерные особенности: уникальное.
Program wr_text; var f: text; st: integer; i:integer; begin assign(f,'l1.TXT'); rewrite(f); write('вводите поочередно числа, после ввода очередного числа.
Транксрипт:

1 Записи

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 Обращение к записи Обращение к записи в целом допускается только в операторах присваивания, где слева и справа от знака присваивания используются имена записей одинакового типа. Во всех остальных случаях оперируют отдельными полями записей. Чтобы обратиться к отдельной компоненте записи, необходимо задать имя записи и через точку указать имя нужного поля, например: str.fio, str.tel Такое имя называется составным.

5 Записи Запись может входить в состав данных более сложной структуры. Можно говорить, например, о массивах и файлах, состоящих из записей. Запись может быть полем другой записи.

6 Оператор присоединения Обращение к компонентам записей можно упростить, если воспользоваться оператором присоединения With. Он позволяет заменить составные имена, характеризующие каждое поле, просто на имена полей, а имя записи определить в операторе присоединения. Формат оператора: With {, } do ; With {, } do ;

7 Оператор присоединения Обращение к компонентам записей можно упростить, если воспользоваться оператором присоединения With. Он позволяет заменить составные имена, характеризующие каждое поле, просто на имена полей, а имя записи определить в операторе присоединения. Формат оператора: With {, } do ; With {, } do ; Заголовок этого оператора открывает область действия "внутренних" имен полей записи, которые могут быть использованы как имена переменных.

8 Оператор присоединения Оператор вида With r1,..., rn do эквивалентен оператору With r1 do with r2... with rn do.

9 Оператор присоединения:пример 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;

10 Оператор присоединения:пример Предпочтительнее использовать следующий вариант: 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 }

11 Массив записей Объявление (выделение памяти): 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

12 Массив записей 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] ! !

13 Новый тип данных – запись 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 («тип книга») – удобно!

14 Записи в процедурах и функциях Book.author := 'А.С. Пушкин'; ShowAuthor ( Book ); Book.year := 1800; writeln( IsOld(Book) ); Book.author := 'А.С. Пушкин'; ShowAuthor ( Book ); Book.year := 1800; writeln( IsOld(Book) ); Процедура: procedure ShowAuthor ( b: TBook ); begin writeln ( b.author ); end; procedure ShowAuthor ( b: TBook ); begin writeln ( b.author ); end; Память не выделяется! ! ! Основная программа: function IsOld( b: TBook ): boolean; begin IsOld := b.year < 1900; end; function IsOld( b: TBook ): boolean; begin IsOld := b.year < 1900; end; Функция:

15 Файлы записей Объявление указателя на файл: var F: file of TBook; Assign(F, 'books.dat'); { связать с указателем } Rewrite(F); { открыть файл для запись } writeln(F, Book); { запись } for i:=1 to 5 do writeln(aBook[i]); { запись } Close(F); { закрыть файл } Assign(F, 'books.dat'); { связать с указателем } Rewrite(F); { открыть файл для запись } writeln(F, Book); { запись } for i:=1 to 5 do writeln(aBook[i]); { запись } Close(F); { закрыть файл } Запись в файл:

16 Чтение из файла Известное число записей: Assign(F, 'books.dat'); { связать с указателем } Reset(F); { открыть для чтения } Read(F, Book); { чтение } for i:=1 to 5 do Read(F, aBook[i]); { чтение } Close(F); { закрыть файл } Assign(F, 'books.dat'); { связать с указателем } Reset(F); { открыть для чтения } Read(F, Book); { чтение } for i:=1 to 5 do Read(F, aBook[i]); { чтение } Close(F); { закрыть файл } «Пока не кончатся»: count := 0; while not eof(F) do begin count := count + 1; { счетчик } Read(F, aBook[count]); { чтение } end; count := 0; while not eof(F) do begin count := count + 1; { счетчик } Read(F, aBook[count]); { чтение } end; В чем может быть проблема! ? ? пока не дошли до конца файла F EOF = end of file пока не дошли до конца файла F EOF = end of file

17 Пример программы Задача: в файле books.dat записаны данные о книгах в виде массива структур типа TBook (не более 100). Установить для всех 2008 год издания и записать обратно в тот же файл. type Tbook … ; const MAX = 100; var aBooks: array[1..MAX] of TBook; i, N: integer; F: file of TBook; begin { прочитать записи из файла, N - количество } for i:=1 to N do aBooks[i].year := 2008; { сохранить в файле } end. type Tbook … ; const MAX = 100; var aBooks: array[1..MAX] of TBook; i, N: integer; F: file of TBook; begin { прочитать записи из файла, N - количество } for i:=1 to N do aBooks[i].year := 2008; { сохранить в файле } end. type TBook … ; полное описание структуры

18 Пример программы Чтение «пока не кончатся»: Assign(f, 'books.dat'); Reset(f); N := 0; while not eof(F) and (N < MAX) do begin N := N + 1; read(F, aBooks[N]); end; Сlose(f); Assign(f, 'books.dat'); Reset(f); N := 0; while not eof(F) and (N < MAX) do begin N := N + 1; read(F, aBooks[N]); end; Сlose(f); Assign(f, 'books.dat'); { можно без этого } Rewrite(f); for i:=1 to N do write(F, aBooks[i]); Close(f); Assign(f, 'books.dat'); { можно без этого } Rewrite(f); for i:=1 to N do write(F, aBooks[i]); Close(f); Сохранение: чтобы не выйти за пределы массива

19 Сортировка массива записей Ключ (ключевое поле) – это поле записи (или комбинация полей), по которому выполняется сортировка. const N = 100; var aBooks: array[1..N] of TBook; i, j, N: integer; temp: TBook; { для обмена } begin { заполнить массив aBooks } { отсортировать = переставить } for i:=1 to N do writeln(aBooks[i].title, aBooks[i].year:5); end. const N = 100; var aBooks: array[1..N] of TBook; i, j, N: integer; temp: TBook; { для обмена } begin { заполнить массив aBooks } { отсортировать = переставить } for i:=1 to N do writeln(aBooks[i].title, aBooks[i].year:5); end.

20 Сортировка массива записей for i:=1 to N-1 do for j:=N-1 downto i do if aBooks[j].year > aBooks[j+1].year then begin temp := aBooks[j]; aBooks[j] := aBooks[j+1]; aBooks[j+1] := temp; end; for i:=1 to N-1 do for j:=N-1 downto i do if aBooks[j].year > aBooks[j+1].year then begin temp := aBooks[j]; aBooks[j] := aBooks[j+1]; aBooks[j+1] := temp; end; Какой ключ сортировки? ? ? Какой метод сортировки? ? ?