Пример программы:
{Дан файл записей, в котором хранится информация о студентах факультета: фамилия, группа, четыре оценки за предыдущую сессию и четыре оценки по итогам аттестации. Собрать в один текстовый файл информацию о тех студентах, чей уровень остаточных знаний не менее 60 процентов, информацию об остальных (двоечниках) записать во второй текстовый файл.
Уровень знаний определяется следующим образом:
А - оценка в сессию, В - оценка за аттестацию
B
уровень = --- * 100
A
}
Program ex_rec2;
Uses Crt;
Type student = record
fio: string [20]; {фамилия студента}
gr: string [4]; {группа}
s: array [1..4] of integer; {оценки за сессию}
a: array [1..4] of integer; {оценки за аттестацию}
u: array [1..4] of real; {уровень знаний по предметам}
ur: real; {общий уровень}
end;
f_st_rec = file of student;
f_st_txt = text;
Var st: student; {студент}
f1: f_st_rec; {файл с записями}
f2, f3: f_st_txt; {текстовые файлы
f2 - отличники
f3 - двоечники}
i, m: integer; {i - счетчик,
m - переменная выбора в меню}
ch: char; {вспомогательная переменная}
stroka: string;
Procedure entr (var f1:f_st_rec); {Ввод данных}
begin
clrscr;
rewrite(f1); {открытие нового файла с записями}
writeln('Вводите информацию о студентах');
writeln('признак окончания - Esc');
repeat
with st do
begin gotoxy(1,3);
write('Фамилия: '); readln(fio);
write('Группа : '); readln(gr);
writeln('Оценки за сессию:');
for i:=1 to 4 do {Ввод 4-х оценок за сессию}
begin
gotoxy (5*i, 7); readln(s[i]);
end;
writeln;
writeln('Оценки за аттестацию:');
for i:=1 to 4 do {Ввод 4-х оценок за аттестацию}
begin
gotoxy (5*i, 11); readln(a[i]);
end;
writeln;
ur:=0.;
writeln('Уровень остаточных знаний по предметам:');
for i:=1 to 4 do
begin
u[i]:=a[i]/s[i];
gotoxy (5*i, 16); writeln(u[i]:6:2);
ur:=ur + u[i];
end;
writeln;
writeln('Общий уровень остаточных знаний:');
ur:=ur/4;
gotoxy (5, 20); writeln(ur:6:2);
end; {with}
write(f1, st);
writeln('Enter -продолжить, Esc - закончить ввод');
ch:=readkey;
clrscr;
until ch=#27;
close(f1);
end; { процедура ввода entr закончена}
Procedure obrab (var f1:f_st_rec; var f2,f3:f_st_txt);
begin clrscr;
reset(f1); {Открытие файла записей для чтения}
rewrite(f2); rewrite(f3); {Текстовые - для записи}
writeln(f2, 'Наши отличники'); writeln(f2);
writeln(f3, 'Наши двоечники'); writeln(f3);
while not(eof(f1)) do
begin
read(f1, st);
if (st.ur>=0.60) then
writeln(f2, st.fio,' Уровень: ', st.ur:6:2)
else
writeln(f3, st.fio,' Уровень: ', st.ur:6:2);
end;
close(f1); close(f2); close(f3); clrscr;
end; { процедура обработки закончена}
Procedure view_txt (var f2,f3:f_st_txt); {Проcмотр}
begin
clrscr;
reset(f2); reset(f3);
writeln;
while not(eof(f2)) do
begin
readln(f2, stroka);
writeln(stroka);
end;
writeln;
while not(eof(f3)) do
begin
readln(f3, stroka);
writeln(stroka);
end;
close(f2); close(f3);
readkey;
End; { процедура просмотра закончена}
Procedure menu;
begin
textbackground(lightgray); textcolor(white);
repeat
clrscr;
gotoxy(20, 7);write (' Меню:');
gotoxy(20, 8);write ('1- Ввод исходных данных ');
gotoxy(20, 9);write ('2- Обработка данных');
gotoxy(20,10);write ('3- Просмотр текстовых файлов');
gotoxy(20,11);write ('4- Выход');
repeat
gotoxy(30,12);write ('Ваш выбор:');
gotoxy(41,12);write (' ');gotoxy(41,12);readln(m);
until (m>=1) and (m<=5);
if m=1 then entr(f1);
if m=2 then obrab(f1,f2,f3);
if m=3 then view_txt(f2,f3);
until m = 4;
textbackground(black); { восстановление стандартного экрана}
textcolor(white); { черный фон - белые символы }
clrscr;
end; {Процедура меню закончена}
Begin { Основная программа }
clrscr;
assign(f1, 'rec.dat');
assign(f2, 'txt1.dat');
assign(f3, 'txt2.dat');
menu;
writeln('Конец работы');
readkey;
End.