ЗАДАНИЕ 8. РАБОТА С ВНЕШНИМИ ФАЙЛАМИ

 

Подготовить данные об абитуриентах, поступающих в техникум. Информацию о каждом абитуриенте оформить в виде записи, содержащей следующие поля:

1. Фамилия, имя, отчество.

2. Год рождения.

3. Год окончания школы.

4. Оценки в аттестате.

5. Признак - нуждается ли в общежитии.

6. Оценки вступительных экзаменов.

Разработать программу записи подготовленных данных во внешний файл и программу обработки созданного внешнего файла.

I. Удалить из внешнего файла все записи абитуриентов, имеющих средний балл меньше 4 и хотя бы одну оценку 3 в аттестате, и распечатать информацию, оставшуюся в файле.

II. Добавить N записей в начало (конец) внешнего файла и распечатать записи абитуриентов, имеющих средний балл больше 4,5; N=4.

 

Program dom8;

type ev=record

alg:1..5;

ist:1..5;

evm:1..5;

end;

type zap=record

fio: string;

birthdae:1980..2000;

date:2000..2015;

attestat: ev;

need_hostel: boolean;

entrance: ev;

sredniy: real;

end;

 

fpk=file of zap;

 

type

TMyFuncType = function(a:zap): boolean;

 

var fizap,rb:fpk; s1,a,b:zap; i,j:integer; fio, s: string;

 

function all(a:zap): boolean;

begin

result:=true;

end;

 

function condition1(a:zap): boolean;

begin

if ((a.sredniy<4) and ((a.attestat.alg=3) or (a.attestat.ist=3) or (a.attestat.evm=3))) then result:=true

else result:=false;

end;

 

function condition2(a:zap): boolean;

begin

if ((a.sredniy>4.5)) then result:=true

else result:=false;

end;

 

function Delete(fizap:fpk): boolean;

var i, num:integer;

temp: zap;

begin

i:=1; num:=0;

reset(fizap);

repeat

read(fizap,a);

if (condition1(a)) then begin num:=i; break; end;

i:=i+1;

until eof(fizap);

result:=false;

if(num<>0) then begin

writeln('удаляем запись № ',num,' из ',filesize(fizap),' вторым способом');

seek(fizap, filesize(fizap) - 1);

read(fizap, temp);

seek(fizap, i - 1);

write(fizap, temp);

seek(fizap, filesize(fizap) - 1);

truncate(fizap);

close(fizap);

result:=true;

end;

end;

 

procedure PrintFile(fizap:fpk; p: TMyFuncType);

var a:zap; i:integer; s:string;

begin

i:=1;

reset(fizap);

writeln('======= вывод ===========');

repeat

read(fizap,a);

if p(a) then begin

s:='да';

if(a.need_hostel) then s:='нет';

writeln(i:2,' Фамилия: ',a.fio:9,', дата рождения: ',a.birthdae,', дата поступления: ',a.date,', общежитие: ', s: 3,

', аттестат: ',a.attestat.alg,',',a.attestat.ist,',',a.attestat.evm,'(',a.sredniy:1:2,'), экзамены: ',a.entrance.alg,',',a.entrance.ist,',',a.entrance.evm);

i:=i+1;

end;

until eof(fizap);

writeln('=======================================');

close(fizap);

end;

 

begin

{clrscr;}

assign(fizap,'res.dat');

assign(rb,'tmp.dat');

rewrite(fizap);

s1.fio:='Иванов';

s1.birthdae:=1996;

s1.date:=2013;

s1.attestat.alg:=5;

s1.attestat.ist:=5;

s1.attestat.evm:=5;

s1.need_hostel:=true;

s1.entrance.alg:=3;

s1.entrance.ist:=4;

s1.entrance.evm:=3;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Петров';

s1.birthdae:=1995;

s1.date:=2014;

s1.attestat.alg:=3;

s1.attestat.ist:=4;

s1.attestat.evm:=3;

s1.need_hostel:=false;

s1.entrance.alg:=5;

s1.entrance.ist:=4;

s1.entrance.evm:=4;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Сидоров';

s1.birthdae:=1997;

s1.date:=2012;

s1.attestat.alg:=3;

s1.attestat.ist:=2;

s1.attestat.evm:=5;

s1.need_hostel:=true;

s1.entrance.alg:=5;

s1.entrance.ist:=5;

s1.entrance.evm:=3;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Гришин';

s1.birthdae:=1998;

s1.date:=2012;

s1.attestat.alg:=5;

s1.attestat.ist:=3;

s1.attestat.evm:=4;

s1.need_hostel:=true;

s1.entrance.alg:=5;

s1.entrance.ist:=5;

s1.entrance.evm:=5;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Рыжков';

s1.birthdae:=1994;

s1.date:=2012;

s1.attestat.alg:=5;

s1.attestat.ist:=5;

s1.attestat.evm:=5;

s1.need_hostel:=true;

s1.entrance.alg:=5;

s1.entrance.ist:=5;

s1.entrance.evm:=5;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Николаев';

s1.birthdae:=1999;

s1.date:=2014;

s1.attestat.alg:=4;

s1.attestat.ist:=4;

s1.attestat.evm:=4;

s1.need_hostel:=false;

s1.entrance.alg:=3;

s1.entrance.ist:=2;

s1.entrance.evm:=3;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Васечкин';

s1.birthdae:=1996;

s1.date:=2014;

s1.attestat.alg:=5;

s1.attestat.ist:=4;

s1.attestat.evm:=3;

s1.need_hostel:=true;

s1.entrance.alg:=4;

s1.entrance.ist:=4;

s1.entrance.evm:=3;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Сыроежкин';

s1.birthdae:=1995;

s1.date:=2014;

s1.attestat.alg:=3;

s1.attestat.ist:=4;

s1.attestat.evm:=2;

s1.need_hostel:=false;

s1.entrance.alg:=5;

s1.entrance.ist:=2;

s1.entrance.evm:=3;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Соколов';

s1.birthdae:=1997;

s1.date:=2012;

s1.attestat.alg:=3;

s1.attestat.ist:=2;

s1.attestat.evm:=2;

s1.need_hostel:=true;

s1.entrance.alg:=2;

s1.entrance.ist:=5;

s1.entrance.evm:=3;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

close(fizap);

 

writeln('файл изначально:');

PrintFile(fizap, all);

writeln('записи для удаления');

writeln('(имеющим средний балл меньше 4 и хотя бы одну оценку 3 в аттестате):');

PrintFile(fizap, condition1);

 

rewrite(rb);

reset(fizap);

repeat

read(fizap,a);

if not(condition1(a)) then write(rb,a);

until eof(fizap);

 

rewrite(fizap);

reset(rb);

repeat

read(rb,a);

write(fizap,a);

until eof(rb);

close(rb);

close(fizap);

writeln('файл после удаления первым способом:');

PrintFile(fizap, all);

 

reset(fizap);

seek(fizap,FileSize(fizap));

s1.fio:='Жуков';

s1.birthdae:=1994;

s1.date:=2014;

s1.attestat.alg:=5;

s1.attestat.ist:=3;

s1.attestat.evm:=4;

s1.need_hostel:=false;

s1.entrance.alg:=3;

s1.entrance.ist:=4;

s1.entrance.evm:=3;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Фролов';

s1.birthdae:=1996;

s1.date:=2013;

s1.attestat.alg:=5;

s1.attestat.ist:=5;

s1.attestat.evm:=5;

s1.need_hostel:=true;

s1.entrance.alg:=3;

s1.entrance.ist:=5;

s1.entrance.evm:=5;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Журавлёв';

s1.birthdae:=1998;

s1.date:=2014;

s1.attestat.alg:=3;

s1.attestat.ist:=3;

s1.attestat.evm:=5;

s1.need_hostel:=false;

s1.entrance.alg:=3;

s1.entrance.ist:=4;

s1.entrance.evm:=5;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

s1.fio:='Симонов';

s1.birthdae:=1999;

s1.date:=2014;

s1.attestat.alg:=3;

s1.attestat.ist:=4;

s1.attestat.evm:=5;

s1.need_hostel:=false;

s1.entrance.alg:=4;

s1.entrance.ist:=4;

s1.entrance.evm:=5;

s1.sredniy := (s1.attestat.alg+s1.attestat.ist+s1.attestat.evm)/3;

write(fizap,s1);

close(fizap);

 

writeln('файл после добавления(Жуков, Фролов, Журавлёв, Симонов)');

PrintFile(fizap, all);

 

writeln('записи для удаления вторым способом');

writeln('(имеющим средний балл меньше 4 и хотя бы одну оценку 3 в аттестате):');

PrintFile(fizap, condition1);

 

repeat until not(Delete(fizap));

writeln('файл после удаления вторым способом:');

PrintFile(fizap, all);

 

writeln('вывод абитуриентов по второму условию');

writeln('(список абитуриентов, имеющих средний балл больше 4,5):');

PrintFile(fizap, condition2);

 

writeln('введите фамилию для поиска:');

read(fio);

reset(fizap);

writeln('результаты поиска:');

repeat

read(fizap,a);

if (a.fio = fio) then begin

s:='не нужно';

if(a.need_hostel) then s:='нужно';

writeln(' Фамилия: ',a.fio:9,', дата рождения: ',a.birthdae,', дата поступления: ',a.date,', общежитие: ', s: 8,

', аттестат: ',a.attestat.alg,',',a.attestat.ist,',',a.attestat.evm,', экзамены: ',a.entrance.alg,',',a.entrance.ist,',',a.entrance.evm);

end;

until eof(fizap);

close(fizap);

writeln('поиск завершен');

erase(rb);

end.

 

 

Результаты выполнения программы: