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

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

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

Программирование на Паскале
Программа 10

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


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


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



program newfile;



{ http://nataliya.kiev.ua/?id=110 }



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.

Print  

Печатать текст программы!

(program newfile;)

Source code: «Работа с структурированным файлом».

Редактировать, копировать

(WYSIWYG редактор «NicEdit»)
Загрузить файл с текстом программы: «Работа с структурированным файлом». Печатать текст программы!

Загрузить файл с текстом программы

(newfile.pas - Windows-1251)


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



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

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


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



program Prg10;



{ http://nataliya.kiev.ua/?id=110 }



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.

Print  

Печатать текст программы!

(program Prg10;)

Source code: «Работа с структурированным файлом».

Редактировать, копировать

(WYSIWYG редактор «NicEdit»)
Загрузить файл с текстом программы: «Работа с структурированным файлом». Печатать текст программы!

Загрузить файл с текстом программы

(Prg10.pas - Windows-1251)

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



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);


      - файл усекается в соответствии с текущим положением указателя, в это место записывается метка конца файла.


Дата: 2007-11-24   Автор: Admin
Случайный анекдот

C - сонное;
Т - теоретически;
У - умное;
Д - дитя;
Е - естественно;
Н - не желающее;
Т - трудится.
Дата: 05-05-2005   Автор: Admin   Подрубрика: Разное