Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Пример 1: Тип запись для хранения результатов экзамена, содержащий название предмета и оценку.
type
TExamRes = record
Subject: string;
Mark: 2..5;
end;
Большая буква T в начале имени типа TExamRes добавлена из соображений стиля. Принято добавлять букву T ко всем идентификаторам вводимых вами типов.
Пример 2: Тип запись для хранения результатов сессии, содержащий имя студента и результаты экзаменов.
TSession = record
Name: string;
ExamResults: array [1..5] of TExamRes;
end;
Здесь одним из полей является целый массив элементов определенного выше типа TExamRes. Соответственно, если есть переменная этого типа:
var
s: TSession;
тогда s.Name – имя студентов, s.ExamResults[3].Subject – название 3-го экзамена и т.д.
Пример 3: Тип для хранения результатов сессии студенческой группы.
TGroupResults = array [1..10] of TSession;
Элементы массива могут иметь любой тип в том числе и тип-запись. Чтобы совместно с результатами хранить номер группы можно использовать не тип массив, а новую запись:
TRecGroupResults = record
Number: integer; {Номер группы}
GroupResults: array [1..10] of TSession;
end;
Если есть переменная Res: TRecGroupResults, то
Res.Number – номер группы,
Res.GroupResults[i] – результаты i-го студента,
Res.GroupResults[i].Name – имя i-го студента,
Res.GroupResults[i].ExamResults[k].Mark – оценка i-го студента за k-й экзамен.
Пример 4: В текстовом файле students.txt хранится информация о студентах: ФИО, год рождения и какую школу окончил. Примеры строк из этого файла
Иванов Иван Иванович 1985 11
Петров Петр Петрович 1986 102
Требуется описать массив записей с информацией о студентах и прочитать данные из файла в этот массив. Программа также должна уметь по введенному номеру школы выдавать список закончивших ее студентов.
program Students;
type
{Тип запись с информацией про студента}
TStudent = record
F, I, O: string;
Year: 1900..2100;
School: 1..200;
end;
var
{Массив информации о студентах}
Students: array [1..1000] of TStudent;
SNum: integer; {Количество студентов}
SN: 1..200; {Номер школы}
i: integer;
procedure ParseString(s: string; var F, I, O:string;
var Year, School: integer);
{Процедура, которая из строки, считанной из файла, выделяет
фамилию, имя, отчество, год рождения и номер школы}
var
n, code: integer;
begin
{Положение 1-го пробела в строке}
n:=Pos(' ', S);
{Выделение фамилии}
F:=Copy(S, 1, n-1);
{Берем все, что идет после 1-го пробела}
S:=Copy(S, n+1, length(S));
{Положение 1-го пробела в строке без фамилии}
n:=Pos(' ', S);
{Выделение имени}
I:=Copy(S, 1, n-1);
{Берем все, что идет после 1-го пробела}
S:=Copy(S, n+1, length(S));
n:=Pos(' ', S);
O:=Copy(S, 1, n-1);
S:=Copy(S, n+1, length(S));
n:=Pos(' ', S);
Val(Copy(S, 1, n-1), Year, code);
//Year:=StrToInt(Copy(S, 1, n-1)); - для PascaABC
S:=Copy(S, n+1, length(S));
n:=Pos(' ', S);
Val(Copy(S, 1, n-1), School, code);
//Scool:=StrToInt(Copy(S, 1, n-1));
end;
procedure ReadData(FileName: string;
var Students: array of TStudent; var Num: integer);
{Процедура, читающая данные из файла и определяющая
их общее количество}
var
F: text;
S: string;
begin
AssignFile(F, FileName);
Reset(F);
Num:=0;
while not EOF(F) do
begin
Readln(F, S);
with Students[Num] do
ParseString(S, F, I, O, Year, School);
Num:=Num+1;
end;
CloseFile(F);
end;
begin
ReadData('students.txt', Students, SNum);
Write(‘Input school number’);
Readln(sn);
{Поиск студентов из школы sn}
for i:=1 to SNum do
with Students[i] do
begin
if School = sn then
writeln(F, ' ', I, ' ', O);
end;
readln;
end.
Следующий раздел:
Предыдущий раздел:
Это то же самое что и типизированные файлы?
Да, нет. Это совсем другое.
Просто в раздатке по практике начало такое же.. А могут чем-то отличаться эти типизированные файлы для турбо и абц? Вроде всё нормально пишу, а вместе 4 чисел в файл записывается » ъ!» и даже в том примере что вместе с заданием что-то подобное
А как ты смотришь, что там записано? Это же не текстовый файл, куда пишутся коды символов. В файле находится двоичное представление твоих чисел. Если открываешь файл в каком-нибудь «блокноте», то видишь символы с кодами, выдранными из этого двоичного представления.
То есть может быть всё в порядке? А как правильно смотреть?
Долго не отвечал — только что вернулся из похода.
Если нужно просто проверить, правильно ли все записалось, то надо просто написать еще одну программку или процедуру, которая прочитает и выведет содержимое файла. А вообще для просмотра бинарных файлов используют программки типа Hex Editor’а. Там каждый байт представляется двузначным шестнадцатиричным числом. Если ты знаешь, как в памяти представляются записываемые в файл числа, можешь разбить это представление на байты и сопоставить с тем, что видишь. Например, число типа integer нужно просто перевести в шестнадцатиричную систему счисления.
Hex Editor есть, думаю справлюсь. Спасибо!
а сделайте пжлст лекцию про типизированные файлы))
Сделаю. Может быть, даже на этой неделе.