Работа с структурированным файлом
Страница 2.


 

2. Программа, которая содержит процедуру, которая выводит к файлу фамилии учеников, которые имеют средний балл выше заданного

Текст программы

program Prg10;
{ https://nataliya.kiev.ua }
type ekz = record
      matan,dmat,prog,linalg:1..5;
      end;
   st = record
      name:string[20];
      age:byte;
      st:char;
      e:ekz;
      end;
tf=file of st;
var fname1,fname2:string;
   q:char;
   sr:real;
procedure p(fname1,fname2:string; sr:real);
var stud:st;
   f1,f2:tf;
begin
assign(f1,fname1);
reset(f1);
assign(f2,fname2);
rewrite(f2);
while not eof(f1)do begin
   read(f1,stud);
   if (stud.e.matan+stud.e.dmat+stud.
   e.linalg+stud.e.prog)/4>=sr
   then
   write(f2,stud)
   end;
close(f1);close(f2);
end;
procedure displ(fname:string);
var f:tf;
   s:st;
begin
assign(f,fname);
reset(f);
writeln('фамилия':10,'Возраст':7,'Пол':7,
'Математика':10,'Физика':10,
'Химия':10,'Литература':10);
while not eof(f) do begin
read(f,s);
with s do
writeln(name:9,age:7,st:7,e.matan:10,e.dmat:10
,e.prog:10,e.linalg:10);
end;
close(f);
end;
begin
writeln('Введите имя файла1:');
readln(fname1);
writeln('Введите имя файла2:');
readln(fname2);
writeln('Введите средний балл:');
readln(sr);
p(fname1,fname2,sr);
writeln('Вывести на экран первый файл?');
readln(q);
if (q='Y')or(q='y') then displ(fname1);
writeln('Вывести на экран второй файл?');
readln(q);
if (q='Y')or(q='y') then begin
   writeln('Ученики с средним баллом высшим за ',sr:0:3);
   displ(fname2);
   end;
end.

Результат работы программы

1)
Введите имя файла1:
file1.txt
Введите имя файла2:
temp
Введите имя файла:
4
Вывести на экран первый файл?
y
   фамилия Возраст Пол Математика Физика Химия Литература
   Иванов 18 м 3 3 3 3
   Петров 17 ж 4 4 4 4
   Сидоров 18 м 4 4 3 4
   Васильев 17 м 5 4 5 4
Вывести на экран второй файл?
y
Ученики с средним баллом высшим за 4.000
   фамилия Возраст Пол Математика Физика Химия Литература
   Петров 17 ж 4 4 4 4
   Васильев 17 м 5 4 5 4
2)
Введите имя файла1:
file2.txt
Введите имя файла2:
t.txt
Введите средний балл:
4
Вывести на экран первый файл?
y
   фамилия Возраст Пол Математика Физика Химия Литература
   Сергеев 18 ж 3 3 3 3
   Николаев 18 ж 5 5 5 4
   Пугачев 18 м 5 5 5 5
   Белов 17 м 4 4 4 5
   Смирнов 3 м 3 4 4 3
Вывести на экран второй файл?
y
Ученики с средним баллом высшим за 4.000
   фамилия Возраст Пол Математика Физика Химия Литература
   Николаев 18 ж 5 5 5 4
   Пугачев 18 м 5 5 5 5
   Белов 17 м 4 4 4 5
3)
Введите имя файла1:
file2.txt
Введите имя файла2:
f
Введите средний балл:
5
Вывести на экран первый файл?
n
Вывести на экран второй файл?
y
Ученики с средним баллом высшим за 5.000
   фамилия Возраст Пол Математика Физика Химия Литература
   Пугачев 18 м 5 5 5 5

Теория к программе

Работа с структурированным файлом.
  Структурированный тип - запись
    Тип запись содержит отдельные поля, количество и тип которых должны быть определенными. Типы отдельных полей могут быть разными. Описание записи содержит перечень идентификаторов всех полей и их типов. Запись может иметь постоянную и переменную части
  Общий вид записи, которая имеет только постоянную часть:
    TYPE <идентификатор типа>=RECORD
    <идентификатор поля 1>:<тип поля 1>;
    :
    <идентификатор поля N>:<тип поля N>
    end;

  Если некоторые поля имеют одинаковые типы, их идентификаторы могут быть перечислены через запятую:
    TYPE <идентификатор типа>=RECORD
    <идентификатор поля 1>:<тип поля 1>;
    <идентификатор поля 2>,<идентификатор поля 3>:<тип полей 2, 3>;
  vend;

  Рядом с фиксированной запись может иметь переменную часть, которая имеет вид:
    case <идентификатор признака>:<тип> of
    <константа 1>:(<список полей и их типов 1>);
    :
    <константа k>:(<список полей и их типов k>);

    где <идентификатор признака> может быть переменной только перечислимого типа. В зависимости от ее значения принимается тот или другой перечень полей. Соответствующие списки полей имеют общее расположение в памяти, длина переменной части определяется по длине наибольшего из списков. Переменные типа запись описываются общим порядком.
  Обращение к полю записи:
    <идентификатор переменной>.<идентификатор поля>
  Значение признака при обращении к полям не проверяется, поэтому за корректностью данных нужно следить самостоятельно:
    f.size:=5; => f.height:= 5; => f.radius:=5;
  Поле записи в свою очередь тоже может быть структурированного типа
  Обращение к полю в таком случае:
    r.m.p:=true;
  Обращение к элементу массива:
    v.date[3]:=5;
  Оператор присоединения WITH
    Общий вид:
      WITH <ссылка на переменную> do <оператор>;
      где <ссылка на переменную> - идентификатор переменной типа запись. Если эта запись есть составной частью (полем) другой записи, то идентификаторы можно перечислять через запятую последовательно от внешнего уровня к внутреннего
      Оператор используется для сокращенного обращения к полям записи. При этом можно указывать только идентификаторы полей, опуская идентификатор самой переменной.
    Ссылка на несколько вложенных переменных типа запись имеет общий вид:
      WITH V1,V2,..,Vn do S;
      что эквивалентно
      WITH V1 do
      WITH V2 do
      :
      WITH Vn do S;

    Массивы записей могут использоваться для образования "баз данных".
      Типизированные файлы
      var f: file of <тип элементов>
      Типизированный файл - это файл, каждая запись которого имеет структуру и размер, которые определяются <типом элемента>.
  Ввод / вывод
    READ(f:file_type;var S1,..,Sn:type_of_zap);
    Последовательно считываются записи S1, ...,Sn, указатель текущей записи устанавливается на очередную после Sn запись
    type_of_zap - тип элемента типизированного файла, который определяется описанием соответствующей файловой переменной
    WRITE(var f:file_type;var S1,...,Sn:type_of_zap);
  Записи поочередно записываются в файл. Каждая запись типизированного файла обрабатывается по общим правилам работы в соответствии с его типом (типом элемента).
  Внутренняя организация файла определяется при его создании и о ней надлежит помнить при обработке файла, в особенности при изменении типа файловой переменной
  Процедуры и функции, связанные с позиционированием паказателя текущей записи
    Для выполнения любой из этих процедур и функций файл надо открыть
      seek(var f:file_type;n:longint);
      - найти запись с номером n и установить на него указатель текущей записи
      filepos(var f:file_type):longint;
      - функция возвращает номер текущей записи (на который установлен указатель).
      filesize(var f:file_type):longint;
      - функция возвращает количество записей в файле. Пустой файл имеет 0 записей
      truncate(var f:file_type);
      - файл усекается в соответствии с текущим положением указателя, в это место записывается метка конца файла. <
 
« Предыдущая статья   Следующая статья »