Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Пример 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 есть, думаю справлюсь. Спасибо!
а сделайте пжлст лекцию про типизированные файлы))
Сделаю. Может быть, даже на этой неделе.