Оставить в файле сведения только о тех студентах, которые успешно сдали сессию - Free Pascal
Формулировка задачи:
5)Имеется файл содержащий сведения о студентах: Фамилия, оценки по трём предметам, номер группы. Оставить в файле сведения только о тех студентах, которые успешно сдали сессию и вывести на печать всех задолжников.
Решение задачи: «Оставить в файле сведения только о тех студентах, которые успешно сдали сессию»
textual
Листинг программы
const ns = 'student.txt';
nu = 'temp.tmp';
nz = 'zadolzn.txt';
var s, u, z: text;
f, t, p: string;
o: array [1..3] of integer;
i, err: integer;
b, q: boolean;
begin
assign(s, ns);
reset(s);
assign(u, nu);
rewrite(u);
assign(z, nz);
rewrite(z);
q := false;
while not eof(s) do
begin
readln(s, t);
p := t;
f := copy(t, 1, pos(' ', t));
delete(t, 1, pos(' ', t));
b := false;
for i := 1 to 3 do
begin
val(copy(t, 1, pos(' ', t) - 1), o[i] , err);
delete(t, 1, pos(' ', t));
b := b or (o[i] <= 2)
end;
q := q or b;
if b
then writeln(z, p)
else writeln(u, p)
end;
close(s);
close(u);
if q
then begin
writeln('Неуспевающие студенты:');
reset(z);
while not eof(z) do
begin
readln(z, t);
writeln(t);
end;
close(z);
erase(s);
rename(u, ns)
end
else begin
writeln('Неуспевающих студентов нет');
close(z);
erase(z);
erase(u)
end;
readln
end.
Объяснение кода листинга программы
- В начале кода определяются константы: ns — имя файла со сведениями о студентах, nu — имя файла для временного сохранения данных, nz — имя файла для хранения информации о неуспевающих студентах.
- Далее, объявляются переменные: s, u, z — текстовые переменные для работы с файлами; f, t, p — переменные для хранения информации из файла; o — массив для хранения оценок студентов; i, err — целочисленные переменные для работы с циклами и обработки ошибок; b, q — булевые переменные для контроля условий.
- Затем, происходит открытие файла ns на чтение и файла u на запись, а также файла z на запись.
- Переменная q инициализируется значением false, что означает отсутствие неуспевающих студентов.
- Далее, в цикле while с условием not eof(s) происходит чтение информации из файла ns.
- Внутри цикла, происходит разбиение строки t на отдельные слова: f — имя студента, p — оценки студентов.
- Для каждой оценки, происходит проверка на успешность сдачи сессии с помощью цикла for и условия b := b or (o[i] <= 2).
- Если условие успешности выполняется, то информация о студенте записывается в файл z, иначе — в файл u.
- После окончания цикла, происходит проверка значения переменной q.
- Если q равно true, то происходит вывод информации из файла z, переименование файла z в ns и удаление файлов s и u.
- В противном случае, выводится сообщение
Неуспевающих студентов нет, файл z закрывается и удаляется, а файл u остается без изменений.