Рейтинг@Mail.ru
Menu
Скачать картинки на телефон бесплатно.
Заставки для телефона, аватарки.
(Вырезать из фотографии)

Роза `Гренд Могул` Яхта `Алиса` Лесное озеро Музей `Пирогово` Белочка
Выберите рубрику (тему)

Тема: Работа с структурированным файлом

Программа 10

  Исходный файл представляет собой набор записей следующего вида:
    фамилия ученика
    его возраст
    пол
    оценки по 4-ём испытаниям
  1.Описать программу, которая формирует исходный файл
  2.Описать процедуру, которая выводит в файл фамилии учеников, которые имеют средний балл выше заданного.

1. Программа, которая формирует исходный файл

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

program newfile;
{ http://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 i:byte;
   f:tf;
   stud:st;
   fname:string[20];
   q:char;
begin
writeln('Введите имя файла:');
readln(fname);
assign(f,fname);
rewrite(f);
i:=0;
repeat
inc(i);
with stud do begin
   write('фамилия ',i,' ученика:');readln(name);
   write('век:');readln(age);
   write('пол:');readln(st);
   writeln('оценки:');
      with e do begin
      write('математика ');readln(matan);
      write('физика ');readln(dmat);
      write('химия ');readln(prog);
      write('литература ');readln(linalg)
      end
   end;
write(f,stud);
writeln('Продолжать ?');
readln(q);
until (q<>'Y' )and(q<>'y');
close(f);
end.

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

1)Введите имя файла:
file1.txt
фамилия 1 ученика:Иванов
век:18
пол:м
оценки:
математика 3
физика 3
химия 3
литература 3
Продолжать ?
y
фамилия 2 ученика:Петров
век:17
пол:ж
оценки:
математика 4
физика 4
химия 4
литература 4
Продолжать ?
y
фамилия 3 ученика:Сидоров
век:18
пол:м
оценки:
математика 4
физика 4
химия 3
литература 4
Продолжать ?
y
фамилия 4 ученика:Васильев
век:17
пол:м
оценки:
математика 5
физика 4
химия 5
литература 4
Продолжать ?
n
2)
Введите имя файла:
file2.txt
фамилия 1 ученика:Сергеев
век:18
пол:ж
оценки:
математика 3
физика 3
химия 3
литература 3
Продолжать ?
y
фамилия 2 ученика:Николаев
век:18
пол:ж
оценки:
математика 5
физика 5
химия 5
литература 4
Продолжать ?
фамилия 3 ученика:Пугачев
век:18
пол:м
оценки:
математика 5
физика 4
химия 5
литература 5
Продолжать ?
y
фамилия 4 ученика:Белов
век:17
пол:м
оценки:
математика 4
физика 4
химия 4
литература 5
Продолжать ?
y
фамилия 5 ученика:Смирнов
век:3
пол:м
оценки:
математика 3
физика 4
химия 4
литература 3
Продолжать ?
n

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

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

program Prg10;
{ http://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);
      - файл усекается в соответствии с текущим положением указателя, в это место записывается метка конца файла.

Случайный анекдот

Идет лекция по математике, в аудитории лектор и 3 студента. Внезапно встают 5 человек и уходят. Лектор:
- Вот сейчас придут еще двое, и вообще никого не останется.
Дата: 22-07-2004   Автор: Admin   Подрубрика: Лекции