Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Задание 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.

 

 

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

 

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 658 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2299 - | 2051 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.