Паскаль. Программирование на языке высокого уровня

Содержание

Слайд 2

Павловская Т.А. (СПбГУИТМО)

Лекция 3. Типы данных, определяемые программистом

Описываются одномерные и двумерные массивы,

Павловская Т.А. (СПбГУИТМО) Лекция 3. Типы данных, определяемые программистом Описываются одномерные и
строки, записи, множества и файлы.

Слайд 3

Павловская Т.А. (СПбГУИТМО)

Простые типы данных

Павловская Т.А. (СПбГУИТМО) Простые типы данных

Слайд 4

Павловская Т.А. (СПбГУИТМО)

Описание типа данных

type
имя_типа = описание_типа
...
var
имя_переменной : имя_типа

var
имя_переменной

Павловская Т.А. (СПбГУИТМО) Описание типа данных type имя_типа = описание_типа ... var
: описание_типа

Слайд 5

Павловская Т.А. (СПбГУИТМО)

Перечисляемый тип данных

type
имя = (список имен констант)
type
Menu =

Павловская Т.А. (СПбГУИТМО) Перечисляемый тип данных type имя = (список имен констант)
(READ, WRITE, EDIT, QUIT)

var m, n : Menu;

m := READ; n := m;

Слайд 6

Павловская Т.А. (СПбГУИТМО)

Интервальный тип данных

type имя = конст_1 .. конст_2
type Hour =

Павловская Т.А. (СПбГУИТМО) Интервальный тип данных type имя = конст_1 .. конст_2
0 .. 23;
Range = -100 .. 100;
Letters = ’a’ .. ’z’;
Actions = READ .. EDIT;
var r : -100 .. 100;

Слайд 7

Павловская Т.А. (СПбГУИТМО)

Массивы

Павловская Т.А. (СПбГУИТМО) Массивы

Слайд 8

Павловская Т.А. (СПбГУИТМО)

Описание массива

type имя_типа = array [тип_индекса] of тип_элемента

type mas = array

Павловская Т.А. (СПбГУИТМО) Описание массива type имя_типа = array [тип_индекса] of тип_элемента
[1 .. 6] of real; Color = array [byte] of mas;
A = array [Menu] of boolean;

var с : mas;
a, b : array [1 .. n] of integer;

const a : mas = (0, 5.2, -7.1, 100, 15, 1);

Слайд 9

Павловская Т.А. (СПбГУИТМО)

Пример 1

Program Max_Elem; { макс. элемент }
const n = 20;
var

Павловская Т.А. (СПбГУИТМО) Пример 1 Program Max_Elem; { макс. элемент } const
a : array [1 .. n] of real;
i : integer;
max : Real;
begin
writeln('Введите ', n, ' элементов массива');
for i := 1 to n do read(a[i]);
max := a[1];
for i := 2 to n do
if a[i] > max then max := a[i];
writeln('Максимальный элемент: ', max:6:2)
end.

Слайд 10

Павловская Т.А. (СПбГУИТМО)

Пример 2

{ Кол-во отрицательных и общая сумма элементов }
Program Sum_Num;
const

Павловская Т.А. (СПбГУИТМО) Пример 2 { Кол-во отрицательных и общая сумма элементов
n = 10;
var a : array [1 .. n] of integer;
i, sum, num : integer;
begin
writeln('Введите ', n, ' элементов массива');
for i := 1 to n do read(a[i]);
sum := 0;
num := 0;
for i := 1 to n do begin
if a[i] < 0 then inc(num);
sum := sum + a[i];
end;
writeln('Отрицательных элементов: ', num);
writeln('Сумма элементов: ', sum);
end.

Слайд 11

Павловская Т.А. (СПбГУИТМО)

Сортировка выбором

Павловская Т.А. (СПбГУИТМО) Сортировка выбором

Слайд 12

Павловская Т.А. (СПбГУИТМО)

Алгоритм сортировки

Найти, где расположен минимальный элемент массива
Поменять его местами с

Павловская Т.А. (СПбГУИТМО) Алгоритм сортировки Найти, где расположен минимальный элемент массива Поменять
1-м элементом. Первый элемент теперь на нужном месте.
Среди элементов, начиная со 2-го, найти, где расположен минимальный элемент массива
Поменять его местами со 2-м элементом. Второй элемент теперь на нужном месте.
Среди элементов, начиная с 3-го, найти, где расположен минимальный элемент массива
Поменять его местами с 3-м элементом. Третий элемент теперь на нужном месте.
...
Среди элементов, начиная с предпоследнего (n-1), найти, где расположен минимальный элемент массива
Поменять его местами с (n-1)-м элементом.
Повторить (n-1) раз (i := 1 to n-1):
Среди элементов, начиная с i-го, найти, где расположен минимальный элемент массива
Поменять его местами с i-м элементом. i-й элемент теперь на нужном месте.

Слайд 13

Павловская Т.А. (СПбГУИТМО)

Обмен значений двух переменных

3

5

5

3

3

Павловская Т.А. (СПбГУИТМО) Обмен значений двух переменных 3 5 5 3 3

Слайд 14

Павловская Т.А. (СПбГУИТМО)

Сортировка выбором

Program Sort;
const n = 20;
var a : array [1

Павловская Т.А. (СПбГУИТМО) Сортировка выбором Program Sort; const n = 20; var
.. n] of integer;
i, j, nmin, buf : integer;
begin
writeln('Введите ', n, ' элементов массива');
for i := 1 to n do read(a[i]);
for i := 1 to n - 1 do begin
nmin := i;
for j := i + 1 to n do
if a[j] < a[nmin] then nmin := j;
buf := a[i]; a[i] := a[nmin]; a[nmin] := buf;
end;
writeln('Упорядоченный массив:');
for i := 1 to n do write(a[i]:5)
end.

Слайд 15

Павловская Т.А. (СПбГУИТМО)

Сортировка выбором

Program Sort;
const n = 20;
var a : array [1

Павловская Т.А. (СПбГУИТМО) Сортировка выбором Program Sort; const n = 20; var
.. n] of integer;
i, j, nmin, buf : integer;
begin
writeln('Введите ', n, ' элементов массива');
for i := 1 to n do read(a[i]);
for i := 1 to n - 1 do begin
nmin := i;
for j := i + 1 to n do
if a[j] < a[nmin] then nmin := j;
buf := a[i]; a[i] := a[nmin]; a[nmin] := buf;
end;
writeln('Упорядоченный массив:');
for i := 1 to n do write(a[i]:5)
end.

Слайд 16

Павловская Т.А. (СПбГУИТМО)

Двумерные массивы

const n = 4; m = 3;
type
mas

Павловская Т.А. (СПбГУИТМО) Двумерные массивы const n = 4; m = 3;
= array [1 .. n] of integer;
mas2 = array [1 .. m] of mas;
-----
type mas2 = array [1 .. m, 1 .. n] of integer;
var a, b : mas2;
a11 a12 a13 a14 a21 a22 a23 a24 a31 a32 a33 a34
| - 1-я строка - | - 2-я строка - | - 3-я строка - |

Слайд 17

Павловская Т.А. (СПбГУИТМО)

Инициализация массива

const a : mas2 = ( ( 2, 3, 1,

Павловская Т.А. (СПбГУИТМО) Инициализация массива const a : mas2 = ( (
0),
( 1, 9, 1, 3),
( 3, 5, 7, 0) );
for i := 1 to m do
for j := 1 to n do read (a[i, j]);

Слайд 18

Павловская Т.А. (СПбГУИТМО)

Пример 1

Программа, которая для целочисленной матрицы 3 x 4 определяет среднее арифметическое

Павловская Т.А. (СПбГУИТМО) Пример 1 Программа, которая для целочисленной матрицы 3 x
ее элементов и количество положительных элементов в каждой строке.

Слайд 19

Павловская Т.А. (СПбГУИТМО)

program sred_n;
const m = 3; n = 4;
var a :

Павловская Т.А. (СПбГУИТМО) program sred_n; const m = 3; n = 4;
array [1 .. m, 1 .. n] of integer;
i, j, n_pos_el : integer;
sred : real;
begin
for i := 1 to m do
for j := 1 to n do read(a[i, j]);
sred := 0;
for i := 1 to m do begin
n_pos_el := 0;
for j := 1 to n do begin
sred := sred + a[i, j];
if a[i, j] > 0 then inc(n_pos_el);
end;
writeln('В ', i, '–й строке ', n_pos_el,
' положительных элементов');
end;
sred := sred / m / n;
writeln('Среднее арифметическое: ', sred:6:2);
end.

Слайд 20

Павловская Т.А. (СПбГУИТМО)

Строки

Павловская Т.А. (СПбГУИТМО) Строки

Слайд 21

Павловская Т.А. (СПбГУИТМО)

Типы строк

В Паскале три типа строк:
стандартные (string);
определяемые программистом на

Павловская Т.А. (СПбГУИТМО) Типы строк В Паскале три типа строк: стандартные (string);
основе string;
строки в динамической памяти.
Строка типа string может содержать до 255 символов. Под каждый символ отводится по 1 байту, в котором хранится код символа. Еще один байт отводится под фактическую длину строки

Слайд 22

Павловская Т.А. (СПбГУИТМО)

Описание строк

type str5 = string [5];
const n = 10;
var s

Павловская Т.А. (СПбГУИТМО) Описание строк type str5 = string [5]; const n
: string; { строка стандартого типа }
s1 : str5; { строка типа str5 }
s2 : string [n]; { описание типа задано при описании переменной }

Слайд 23

Павловская Т.А. (СПбГУИТМО)

Операции со строками

Присваивание s := s1;
Конкатенация s1 := ’кар’ + ’туз’;
Сравнение if s3

Павловская Т.А. (СПбГУИТМО) Операции со строками Присваивание s := s1; Конкатенация s1
> s1 then ...
Ввод-вывод – как целиком, так и посимвольно.

Слайд 24

Павловская Т.А. (СПбГУИТМО)

Процедуры и функции

Функция Concat(s1, s2, ..., sn)
Функция Copy(s, start,

Павловская Т.А. (СПбГУИТМО) Процедуры и функции Функция Concat(s1, s2, ..., sn) Функция
len)
Процедура Delete(s, start, len)
Процедура Insert(subs, s, start)
Функция Length(s)
Функция Pos(subs, s)
Процедура Str(x, s)
Процедура Val(s, x, errcode)

Слайд 25

Павловская Т.А. (СПбГУИТМО)

Пример 1

Написать программу, которая определяет, встречается ли в заданном текстовом

Павловская Т.А. (СПбГУИТМО) Пример 1 Написать программу, которая определяет, встречается ли в
файле заданная последовательность символов.
Текст не содержит переносов слов, длина строки текста не превышает 80 символов.

Слайд 26

Павловская Т.А. (СПбГУИТМО)

Алгоритм

Построчно считывать текст из файла.
Для каждой строки проверять, содержится

Павловская Т.А. (СПбГУИТМО) Алгоритм Построчно считывать текст из файла. Для каждой строки
ли в ней заданная последовательность.
Если да, напечатать сообщение о наличии заданной последовательности и завершить программу.
При нормальном выходе из цикла напечатать сообщение об отсутствии заданной последовательности и завершить программу.

Слайд 27

Павловская Т.А. (СПбГУИТМО)

Программа

program search_substr;
const len = 80; { 1 }
var
word,

Павловская Т.А. (СПбГУИТМО) Программа program search_substr; const len = 80; { 1
line : string[len]; { 2 }
fin : text;
begin
assign(fin, ’text.txt’); reset(fin);
writeln(’Введите слово для поиска:’); readln(word);
while not eof(fin) do begin { 3 }
readln(fin, line);
if pos(word, line) <> 0 then begin { 4 }
writeln(’Присутствует!’); exit end;
end;
writeln(’Отсутствует!’);
end.

Слайд 28

Павловская Т.А. (СПбГУИТМО)

Пример 2

Программа, которая читает текст из файла и выводит его

Павловская Т.А. (СПбГУИТМО) Пример 2 Программа, которая читает текст из файла и
на экран, заменяя заданную с клавиатуры последовательность символов на многоточие.

Слайд 29

Павловская Т.А. (СПбГУИТМО)

Программа

Program Change_word;
var s, str : string[80]; f : text; i, dl : integer;
begin
assign(f,

Павловская Т.А. (СПбГУИТМО) Программа Program Change_word; var s, str : string[80]; f
'primer.txt'); reset(f);
writeln('Какое слово заменять?'); readln(s);
dl := length(s);
while not Eof(f) do begin
readln(f, str);
i := 1;
while i<>0 do begin
i := Pos(s, str);
if i<>0 then begin Delete(str, i, dl);
Insert('...', str, i); end;
end;
writeln(str);
end;
close(f)
end.

Слайд 30

Павловская Т.А. (СПбГУИТМО)

Записи и множества

Павловская Т.А. (СПбГУИТМО) Записи и множества

Слайд 31

Павловская Т.А. (СПбГУИТМО)

Описание записи

type имя_типа = record
описание 1-го поля записи;
описание 2-го поля

Павловская Т.А. (СПбГУИТМО) Описание записи type имя_типа = record описание 1-го поля
записи;
...
описание n-го поля записи;
end;

Слайд 32

Павловская Т.А. (СПбГУИТМО)

Примеры описания записей

type goods = record
name : string [20];
price :

Павловская Т.А. (СПбГУИТМО) Примеры описания записей type goods = record name :
real;
number : integer;
end;
var g1, g2 : goods;
stock : array [1 .. 100] of goods;
student : record
name : string [30];
group : byte;
marks : array [1 .. 4] of byte;
end;

Слайд 33

Павловская Т.А. (СПбГУИТМО)

Действия с записями

g1 := g2;
g2 := stock[3];
g1.price := 200;

with

Павловская Т.А. (СПбГУИТМО) Действия с записями g1 := g2; g2 := stock[3];
g1 do begin
price := 200; number := 10
end;

Инициализация записей:
const g : goods = ( name : ’boots’;
price : 200;
number : 10 );

Слайд 34

Павловская Т.А. (СПбГУИТМО)

Пример использования записей

Program SKLAD;
const Max_n = 100;
type
str20 = string [20];
goods

Павловская Т.А. (СПбГУИТМО) Пример использования записей Program SKLAD; const Max_n = 100;
= record
name : str20;
price : real;
number : integer;
end;

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

Слайд 35

Павловская Т.А. (СПбГУИТМО)

begin
assign(f, 'stock.txt'); reset(f);
i := 1;
while not Eof(f) do begin
with

Павловская Т.А. (СПбГУИТМО) begin assign(f, 'stock.txt'); reset(f); i := 1; while not
stock[i] do readln(f, name, price, number);
inc(i);
if i > Max_n then begin
writeln(’Переполнение массива’); exit end;
end;

var stock : array[1 .. Max_n] of goods;
i, j, len : integer;
name : str20;
found : boolean;
f : text;

Слайд 36

Павловская Т.А. (СПбГУИТМО)

while true do begin writeln('Введите наименование');
Readln(name); len := length(name);
if len = 0

Павловская Т.А. (СПбГУИТМО) while true do begin writeln('Введите наименование'); Readln(name); len :=
then break;
for j := len + 1 to 20 do
name := name + ' ';
found := false;
for j := 1 to i - 1 do begin
if name <> stock[j].name then continue;
with stock[j] do
writeln (name:22, price:7:2, number:5);
found := true;
break;
end;
if not found then writeln ('Товар не найден');
end;
end.

Слайд 37

Павловская Т.А. (СПбГУИТМО)

Записи с вариантной частью

type contact = record
name : string [40];
tel

Павловская Т.А. (СПбГУИТМО) Записи с вариантной частью type contact = record name
: string [15];
case i : integer of
0: (post: string [20]);
1: (date: string [10]; code: word);
end;

i

name

tel

Слайд 38

Павловская Т.А. (СПбГУИТМО)

Пример вариантной записи

type
figure = (rect, triangle, circle);
shape = record
x, y

Павловская Т.А. (СПбГУИТМО) Пример вариантной записи type figure = (rect, triangle, circle);
: real;
case kind : figure of
rect : (height, width : real);
triangle : (x2, y2, x3, y3 : real);
circle : (radius : real);
end;

Слайд 39

Павловская Т.А. (СПбГУИТМО)

Множества

Type
имя_типа = set of базовый_тип;
type Caps = set of 'A'..'Z';
Colors

Павловская Т.А. (СПбГУИТМО) Множества Type имя_типа = set of базовый_тип; type Caps
= set of (RED, GREEN, BLUE);
Numbers = set of byte;
var oct : set of 0..7;

Слайд 40

Павловская Т.А. (СПбГУИТМО)

Константы и переменные

['A', 'D'] [1, 3, 6]
[2, 3, 10 .. 13]

Павловская Т.А. (СПбГУИТМО) Константы и переменные ['A', 'D'] [1, 3, 6] [2,
[]
var m: set of 1 .. 3;
[ ] [1] [2] [3] [1,2] [1,3] [2,3] [1,2,3]

Слайд 41

Павловская Т.А. (СПбГУИТМО)

Операции с множествами

Павловская Т.А. (СПбГУИТМО) Операции с множествами

Слайд 42

Павловская Т.А. (СПбГУИТМО)

Пример работы с множествами

type Caps = set of 'A'..'Z';
var a,

Павловская Т.А. (СПбГУИТМО) Пример работы с множествами type Caps = set of
b, c : Caps;
begin
a := ['A', 'U' .. 'Z']; b := [ 'M' .. 'Z'];
c := a; { присваивание }
c := a + b; { объединение, результат ['A', 'M' .. 'Z'] }
c := a * b; { пересечение, результат ['U' .. 'Z'] }
c := b - a; { вычитание, результат ['M' .. 'T'] }
c := a - b; { вычитание, результат ['A'] }
if a = b then writeln (’тождественны’); { не выполнится }
if a <> b then writeln (’не тождественны’); { выполнится}
if c <= a then writeln (’c содержится в а’); { выполнится }
if ’N’ in b then writeln (’в b есть N’); { выполнится }
end.

Слайд 43

Павловская Т.А. (СПбГУИТМО)

Файлы

Павловская Т.А. (СПбГУИТМО) Файлы

Слайд 44

Павловская Т.А. (СПбГУИТМО)

Файлы

Пример описания файлов:
var ft : text;
fb : file;
fc : file of

Павловская Т.А. (СПбГУИТМО) Файлы Пример описания файлов: var ft : text; fb
real;
Компоненты могут быть любого типа, кроме файлового.

стандартные

определяемые программистом

бестиповой
(file)

текстовый
(text)

компонентный
(file of …)

Слайд 45

Павловская Т.А. (СПбГУИТМО)

Доступ к файлам: - Последовательный - Прямой

Текстовые файлы хранят данные в виде

Павловская Т.А. (СПбГУИТМО) Доступ к файлам: - Последовательный - Прямой Текстовые файлы
строк символов. При выводе данные преобразуются из внутренней формы представления в символьную, при вводе выполняется обратное преобразование.

Хранение данных:

Бестиповые и компонентные файлы хранят данные в том же виде, в котором они представлены в оперативной памяти, то есть при обмене с файлом происходит побитовое копирование информации.

Слайд 46

Павловская Т.А. (СПбГУИТМО)

Организация ввода-вывода

объявить файловую переменную var f : text;
связать ее с

Павловская Т.А. (СПбГУИТМО) Организация ввода-вывода объявить файловую переменную var f : text;
физическим файлом assign(f, ‘vasia.txt’);
открыть файл для чтения и/или записи rewrite(f);
выполнить операции ввода-вывода writeln(f, ‘Здесь был Вася’);
закрыть файл close(f);

Слайд 47

Павловская Т.А. (СПбГУИТМО)

Процедуры и функции

для работы со всеми типами файлов:
assign(var f; filename

Павловская Т.А. (СПбГУИТМО) Процедуры и функции для работы со всеми типами файлов:
: string)
close(var f)
erase(var f)
rename(var f; newname : string)
reset(var f)
rewrite(var f)
eof(var f) : boolean
IOresult : integer

Слайд 48

Павловская Т.А. (СПбГУИТМО)

Текстовые файлы

Текстовый файл - последовательность строк символов переменной длины.
Каждая

Павловская Т.А. (СПбГУИТМО) Текстовые файлы Текстовый файл - последовательность строк символов переменной
строка заканчивается символами перевода строки и возврата каретки (коды — 13 и 10).
Текстовый файл можно открыть не только для чтения или записи, но и для добавления информации в конец:
append(var f)

Слайд 49

Павловская Т.А. (СПбГУИТМО)

Подпрограммы для текстовых файлов

read(f, <список>)
readln(f, [<список>])
write(f, <список>)
writeln(f, [<список>])

Павловская Т.А. (СПбГУИТМО) Подпрограммы для текстовых файлов read(f, ) readln(f, [ ])

Слайд 50

Павловская Т.А. (СПбГУИТМО)

Подпрограммы для текстовых файлов
flush(var f : text)
применяется

Павловская Т.А. (СПбГУИТМО) Подпрограммы для текстовых файлов flush(var f : text) применяется
к открытым выходным файлам, принудительно записывает данные из буфера в файл независимо от степени его заполнения.
settextbuf(var f : text; var buf; bufsize : word)
служит для увеличения или уменьшения буфера ввода - вывода текстового файла f. Значение размера буфера для текстовых файлов по умолчанию равно 128 байтам. Увеличение размера буфера сокращает количество обращений к диску.

Слайд 51

Павловская Т.А. (СПбГУИТМО)

Подпрограммы для текстовых файлов
.
seekEof(var f : Text): boolean

Павловская Т.А. (СПбГУИТМО) Подпрограммы для текстовых файлов . seekEof(var f : Text):
возвращает значение True, если до конца файла остались строки, заполненные пробелами.
seekEoln(var f : text): boolean
возвращает значение True, если до конца строки остались только пробелы.

Слайд 52

Павловская Т.А. (СПбГУИТМО)

Бестиповые и компонентные файлы

Павловская Т.А. (СПбГУИТМО) Бестиповые и компонентные файлы

Слайд 53

Павловская Т.А. (СПбГУИТМО)

Бестиповые файлы

Предназначены для хранения участков оперативной памяти на внешних

Павловская Т.А. (СПбГУИТМО) Бестиповые файлы Предназначены для хранения участков оперативной памяти на
носителях. После описания файловой переменной
var имя : file;
ее требуется связать с физическим файлом с помощью процедуры assign. Обмен производится через буфер «порциями», равными размеру буфера. Размер буфера, отличающийся от стандартного (128 байт), можно задать в reset или rewrite (от 1 до 64K):
reset(var f : file; bufsize : word)
rewrite(var f : file; bufsize : word)

Чтение и запись:
blockread(var f : file; var x; count : word; var num : word);
blockwrite(var f : file; var x; count : word; var num : word);

Слайд 54

Павловская Т.А. (СПбГУИТМО)

Чтение данных из бестипового файла осуществляется процедурой
BlockRead( var f: File;

Павловская Т.А. (СПбГУИТМО) Чтение данных из бестипового файла осуществляется процедурой BlockRead( var
var X; Count: Word; var QuantBlock: Word );
Эта процедура осуществляет за одно обращение чтение в переменную X количества блоков, заданное параметром Count, при этом длина блока равна длине буфера. Значение Count не может быть меньше 1. За одно
обращение нельзя прочесть больше, чем 64 К байтов.
Необязательный параметр QuantBlock возвращает число блоков (буферов), прочитанных текущей операцией BlockRead. В случае успешного завершения операции чтения QuantBlock = Count, в случае аварийной ситу-
ации параметр QuantBlock будет содержать число удачно прочитанных блоков. Отсюда следует, что с помощью параметра QuantBlock можно контролировать правильность выполнения операции чтения.

Слайд 55

Павловская Т.А. (СПбГУИТМО)

Запись данных в бестиповой файл выполняется процедурой
BlockWrite( var f: File;

Павловская Т.А. (СПбГУИТМО) Запись данных в бестиповой файл выполняется процедурой BlockWrite( var
var X; Count: Word; var QuantBlock: Word );
которая осуществляет за одно обращение запись из переменной X количества блоков, заданное параметром Count, при этом длина блока равна длине буфера.
Необязательный параметр QuantBlock возвращает число блоков (буферов), записанных успешно текущей операцией BlockWrite.

Слайд 56

Павловская Т.А. (СПбГУИТМО)

Пример

Program Create_bfile;
var buf : array[1 .. 4] of real;
f_in :

Павловская Т.А. (СПбГУИТМО) Пример Program Create_bfile; var buf : array[1 .. 4]
text; f_out: file;
i, k : integer;
begin
assign(f_in, ‘name_in’); reset(f_in);
assign(f_out, ‘name_out’);
rewrite(f_out, sizeof(real) * 4);

Программа создает бестиповой файл,
читая четверки вещественных чисел
из текстового файла

Слайд 57

Павловская Т.А. (СПбГУИТМО)

i := 0;
while not eof(f_in) do begin inc(i); read(f_in, buf[i]);
if i

Павловская Т.А. (СПбГУИТМО) i := 0; while not eof(f_in) do begin inc(i);
= 4 then begin
blockwrite(f_out, buf, 1);
i := 0; end;
end;

if i <> 0 then begin
for k := i + 1 to 4 do buf[k] := 0;
blockwrite(f_out, buf, 1);
end;
close(f_in); close(f_out);
end.

Слайд 58

Павловская Т.А. (СПбГУИТМО)

Компонентные файлы

Применяются для хранения однотипных элементов в их внутренней форме

Павловская Т.А. (СПбГУИТМО) Компонентные файлы Применяются для хранения однотипных элементов в их
представления. Тип компонент задается после ключевых слов file of:
var имя : file of тип_компонент;
Компоненты могут быть любого типа, кроме файлового.
В операциях ввода-вывода могут участвовать только величины того же типа, что и компоненты файла:

type mas = array [1 .. 100] of real;
var a, b : mas;
f : file of mas;
begin
assign(f, ’some_file.dat’); rewrite(f);
...
write(f, a, b);
close(f)
end.

Слайд 59

Павловская Т.А. (СПбГУИТМО)

Прямой доступ

При последовательном доступе чтение/запись очередного элемента файла возможно только

Павловская Т.А. (СПбГУИТМО) Прямой доступ При последовательном доступе чтение/запись очередного элемента файла
после аналогичной операции с предыдущим элементом.
Бестиповые и компонентные файлы состоят из блоков одинакового размера. В бестиповом файле размер блока равен длине буфера, а в компонентном — длине компоненты. Это позволяет применить к таким файлам прямой доступ, при котором операции выполняются с заданным блоком.
С помощью стандартной процедуры seek производится установка текущей позиции в файле на начало заданного блока, и следующая операция чтения/записи выполняется, начиная с этой позиции. Первый блок файла имеет номер 0.

Слайд 60

Павловская Т.А. (СПбГУИТМО)

Пример

Program Get_bfile;
var buf : array[1 .. 4] of real;
f :

Павловская Т.А. (СПбГУИТМО) Пример Program Get_bfile; var buf : array[1 .. 4]
file; i, k : integer;
begin
assign(f, ‘filename’);
reset(f, sizeof(real) * 4);

Программа считывает из бестипового файла,
сформированного в предыдущем примере,
требуемую записью