Похожие презентации:
Комбинированный тип данных record (тип запись). Файлы
1. Комбинированный тип данных record (тип запись). Файлы
2. Представление информации в реляционной БД
Поле 1Запись 1
Запись 2
…
Запись N
Поле 2
…
Поле K-1
Поле К
…
…
…
…
Основной элемент БД – запись – строка таблицы, содержит
информацию об одном объекте.
Поле – столбец таблицы, содержит информацию об одном
атрибуте объекта.
Ключ – некоторое значение (одно поле или комбинация
полей), которое отличает одну запись от другой; в таблице не
может быть двух записей с одинаковыми значениями ключа.
3. Тип запись
Тип запись – структура данныхкомбинированного типа, включает ряд компонент,
называемых полями, которые могут иметь разные типы.
Задание типа-записи: после зарезервированного
слова record перечисляются все поля записи с
указанием их типов, завершается задание типа словом
end. Поля отделяются друг от друга точкой с запятой.
Количество полей записи – любое.
<имя типа> = record
<список полей>
end;
4. Пример:
Type Complex = recordRe: real;
Im: real;
end;
Student = record
Name: string[12];
Ngroup: byte;
Progr: byte;
Mathem: byte;
Phys: byte;
end;
Var X,Y: Complex; A: Student;
Можно объединить описание полей:
Ngroup,Progr, Mathem, Phys: byte;
5. Доступ
Доступ к полям записи осуществляется с помощьюоперации уточнения (точечная нотация), она задается
точкой: X.Re, Y.Im.
X.Re := 1.5;
Y.Im := X.Im;
Тип поля может быть предопределенным или
пользовательским.
В Паскале с записью, как с целым, можно работать,
только выполняя файловые операции – чтение или
запись, кроме того, можно выполнять присваивание:
X:=Y
6. Пример
typePerson = record
Name: string;
Age: integer;
end;
begin
var p: Person;
p.Name := 'Иванов';
p.Age := 20;
writeln(p);
end.
(Иванов,20)
7. Пример
type TCompl = record {компл. число}Re, Im: real;
end;
var A,B,C: TCompl;
BEGIN
read (A.Re, A.Im);
B.Re := -2.5; B.Im := 4.1;
C.Re := A.Re + B.Re;
C.Im := A.Im + B.Im;
write (C.Re:5:2, C.Im:5:2);
END.
8. Оператор присоединения
Чтобы упростить доступ к полям записи, используетсяоператор присоединения With [wið] (англ. с, вместе с):
With <имя записи> do <оператор>;
Пример:
With X do Re := 1.5;
9. Задача: Построить базу данных в виде массива записей, которая содержит информацию о студентах 1 курса: ФИО, № группы, оценки по
предметам МА,ПРОГР, ФИЗ. Вывести фамилии отличников.
Type Student=record
Name: string[12];
Ngroup: byte;
Progr: byte;
Mathem: byte;
Phis: byte;
end;
Var Kurs: array[1..100] of student; n,i: byte; c:char;
begin
readln(N); {Количество студентов}
for i := 1 to N do
with Kurs[i] do
readln(Name, Ngroup, Progr, Mathem, Phis);
for i := 1 to N do
with Kurs[i] do
if (Progr = 5) and (Mathem = 5) and (Phis = 5)
then writeln(Name);
end.
Что плохо?
?
10. Задача: Сформируйте запись, имеющую следующую структуру: type дата = record число:1..31; месяц:1..12; год:1900..2000; end;
анкета = record фамилия:string;пол:(м,ж);
день рождения:дата;
end;
и определите:
- фамилию самого старшего мужчины;
- все фамилии, начинающиеся с заданной буквы;
- список людей, родившихся в заданном месяце.
11. Файлы
12.
Файл – последовательность однотипныхкомпонент, расположенных на внешнем носителе. Тип
компонент – любой, кроме файлового.
В Pascal ABC.NET существует три типа файлов:
Текстовые (Text),
var F1: Text;
Типизированные (FILE OF <тип>), var F2: file of integer;
Бестиповые
var F3: file;
Текстовые файлы хранят символы, разделенные
на строки символами #13#10
13. Любая программа, использующая файл, должна содержать шаги:
1. Открытие файла. Перед началом работы файловаяпеременная должна быть связана с конкретным
внешним файлом с помощью оператора ASSIGN (англ.
назначение):
ASSIGN(F, NAME)
где F – файловая переменная, NAME – переменная или
константа типа STRING.
2. Обработка файла (чтение или запись);
3. Закрытие файла. После окончания работы с файлом
его необходимо закрыть процедурой CLOSE:
CLOSE(F);
14.
Все файлы – файлы последовательного доступа.Кроме того, возможен прямой (произвольный доступ) с
помощью процедуры SEEK, которая перемещает
файловый указатель в типизированном файле на n-ый
элемент (нумерация начинается с нуля).
На практике широко используются текстовые
файлы, компоненты которых могут быть не только типа
CHAR, STRING, но и числовых типов. Текстовые файлы
рассматриваются как последовательность символов,
разбитая на строки произвольной длины. В конце каждой
строки имеются два спец. символа: #13 и #10 – перевод
строки и возврат каретки. Конец файла обозначается
символом # 26.
15. Общие процедуры для файлов всех типов:
ASSIGN(f,name) - связывает файловую переменную f сфайлом с именем name
RESET(F) - текстовые
файлы открываются только на
чтение, типизированные файлы - на чтение и запись
REWRITE(F) – открытие для записи
READ(F,<список>), WRITE(F,<список>) – аналогичны
READ,WRITE
CLOSE(F) - закрывает файл
EOF(F) - возвращает True, если файловый указатель стоит
на конце файла, и False в противном случае
а также ERASE(F), RENAME(F), CHDIR, GETDIR, MKDIR,
IORESULT.
16.
Для текстовых файлов, кроме того: APPEND,EOLN, READLN, WRITELN. Последовательность
символов автоматически преобразуется к значению
того типа переменной, которая используется в
файловой операции. Простейший пример:
Var F: text;
BEGIN
ASSIGN(F,’d:\out.dat’);
REWRITE(F);
WRITELN(F,’Это текстовый файл’);
CLOSE(F);
END.
При открытии файла out.dat увидим: ’Это
текстовый файл’. Второй способ создания файла:
непосредственно в текстовом редакторе Паскаля.
17.
Задача: в текстовом файле находятся значения переменной х,записать в другой текстовый файл таблицу значений функции y = sin(x)
для заданных значений х.
Решение:
var fx, fy:text;
x, y: real;
begin
assign(fx,'x.dat');
reset(fx);
assign(fy,'y.pas');
rewrite(fy);
writeln(fy,' x ','
y ');
while not eof(fx) do
begin
readln(fx,x);
y:=sin(x);
writeln(fy,x:5:2,' ',y:5:2);
end;
close(fx); close(fy);end.
18.
Задача: в текстовом файле содержится информация остудентах 1 курса: ФИО, № группы, оценки по предметам
программирование, математика, физика. Вывести фамилии
отличников.
Решение:
Шаг 1. Создание файла во встроенном текстовом редакторе
PascalABC.Net.
Шаг 2. Обработка файла.
19.
Type Student=recordName: string[12];
Ngroup: byte;
Progr: byte;
Mathem: byte;
Phis: byte;
end;
Var Kurs: text; s: student; n,i: byte; c:char;
begin
assign (Kurs,'kurs_dat.pas');
reset(Kurs);
While not eof(Kurs) do
begin
readln(Kurs,s.Name,s.Ngroup,s.Progr,
s.Mathem,s.Phis);
if (s.Progr=5) and (s.Mathem=5) and (s.Phis=5)
then
writeln(s.Name);
end;
close(Kurs);
end.
20.
Задача: Сформируйте запись, имеющую следующуюструктуру:
type дата = record число:1..31;
месяц:1..12;
год:1900..2000;
end;
анкета = record фамилия:string;
пол:(м,ж);
день рождения:дата;
end;
и определите фамилию самого старшего мужчины.
21. Типизированные файлы
Отличия текстовых и типизированных файлов:На задаче с базой данных – объем памяти под текстовый
файл – значительно больше;
Процедуры:
READLN,
WRITELN,
EOLN,
APPEND – только для текстовых,
FILEPOS(F),
SEEK(F),
FILESIZE(F) – только для типизированных файлов.
22. Задача: в типизированном файле содержится информация о студентах 1 курса: ФИО, № группы, оценки по предметам программирование,
математика, физика. Вывести фамилии отличников.Решение:
Шаг 1. Создание файла отдельной программой.
Шаг 2. Обработка файла.
23.
Шаг 1. Создание файла отдельной программой.type Student = record
Name: string[12];
Ngroup,Progr,Mathem,Phis: byte;
end;
Var Kurs: file of student; s:student; n,i:byte;c:char;
begin
assign(Kurs, 'kurs_dat1.pas');
rewrite(Kurs);
readln(N);
for i := 1 to N do
begin
with s do readln(Name,Ngroup,Progr,Mathem,Phis);
write(Kurs, s);
end;
reset(Kurs);
for i := 1 to N do
begin
read(Kurs, s);
with s do println(Name,Ngroup,Progr,Mathem,Phis);
end;
close(Kurs); end.
24.
Шаг 2. Обработка файла.type Student = record
Name: string[12]; Ngroup,Progr,Mathem,Phis: byte;
end;
Var Kurs: file of student; s:student; n,i:byte;c:char;
begin
assign(Kurs, 'kurs_dat1.pas');
reset(Kurs);
while not eof(Kurs) do
begin
read(Kurs,s);
with s do begin
if (Progr=5)and(Mathem=5)and(Phis=5) then
println(Name);
end; end;
close(Kurs); end.
25. Задача. Типизированный файл содержит целые компоненты. Переставить местами минимальный и максимальный элементы файла.
Program TIP;var F: file of integer;
I, N, X, Max, Min, Imax,
Imin :integer; name:string;
begin
writeln('Введите имя файла');
read(Name);
writeln('Введите N');
read(N);
writeln('Введите ',N,
' элементов');
assign(F,Name);
rewrite(F);
for I := 1 to N do
begin
read(X);
write(F,X);
end;
reset(F);
read(F,X);
Max:=X; Imax:=0; Min:=X;
Imin:=0;
while not eof(F) do
begin
read(F,X);
if X>Max then begin Max:=X;
Imax:=Filepos(F)–1; end;
if X<Min then begin Min:=X;
Imin:=Filepos(F)–1; end;
end;
Seek(F, Imax);
write(F, Min);
Seek(F, Imin);
write(F, Max);
reset(F);writeln;
while not eof(F) do
begin
read(F,X);
writeln(X);
end;
close(F); END.
26.
Файлы в заданиях ЕГЭ по информатике и ИКТВ языке PascalABC.NET можно выполнить
перенаправление потока ввода:
Var s: string;
begin
assign( input, 'k7.txt' );
readln(s);
. . .
программа будет «думать», что читает данные,
введённые с клавиатуры (с консоли), а на самом деле
эти данные будут прочитаны из файла k7.txt.
Не требуется объявлять и открывать файл данных.