Из текстового файла input.txt с данными вывести информацию в файл output.txt по заданному условию - PascalABC.NET
Формулировка задачи:
Дан текстовый файл input.txt содержащий в первой строке кол-во данных, в каждой следующей чередующиеся данные: фамилии и оценки за 3 экзамена. Например:
4
Иванов
8 8 7
Петров
5 6 7
Сидоров
4 7 6
Севко
4 5 4
Вывести в отдельный файл output.txt в алфавитном порядке возрастания среднего балла, фамилии и средний балл студентов.
Решение задачи: «Из текстового файла input.txt с данными вывести информацию в файл output.txt по заданному условию»
textual
Листинг программы
type
tStud = record
Name : String[10];
A, B, C : Integer;
Sr : Real;
end;
begin
var F := OpenRead('input.txt');
var count := F.ReadLnInteger;
WriteLn('Количество сведений: ', count);
var a : array of tStud;
SetLength(a, count);
for var i := 0 to count-1 do
begin
a[i].Name := F.ReadLnString;
a[i].A := F.ReadInteger;
a[i].B := F.ReadInteger;
a[i].C := F.ReadLnInteger;
a[i].Sr := (a[i].A + a[i].B + a[i].C) / 3;
WriteLnFormat('{0}) {1}: {2} {3} {4} <{5:0.00}>', i+1, a[i].Name, a[i].A, a[i].B, a[i].C, a[i].Sr);
end;
F.Close;
var swaps : Boolean;
repeat
swaps := False;
for var i := 0 to count-2 do
if a[i].Name > a[i+1].Name then
begin
Swap(a[i], a[i+1]);
swaps := True;
end
else if (a[i].Name = a[i+1].Name) and (a[i].Sr > a[i+1].Sr) then
begin
Swap(a[i], a[i+1]);
swaps := True;
end
until Not swaps;
var O := OpenWrite('output.txt');
foreach var S : tStud in a do
O.WriteLn(S.Name, #32, S.Sr);
O.Close;
end.
Объяснение кода листинга программы
- Открывается файл input.txt для чтения.
- Считывается количество строк в файле.
- Создается массив a типа tStud, который будет содержать информацию о студентах.
- Устанавливается длина массива a равной количеству строк в файле.
- В цикле считываются данные о каждом студенте и записываются в массив a.
- Вычисляется средний балл (Sr) для каждого студента.
- Выводится информация о каждом студенте в формате: номер) Имя: A B C
. - Открывается файл output.txt для записи.
- В цикле записываются данные о каждом студенте в файл output.txt.
- Файл output.txt закрывается.
- В цикле выполняется сортировка массива a по имени и среднему баллу (Sr).
- Пока есть строки, которые необходимо отсортировать, выполняется обмен значениями между соседними элементами массива a.
- Цикл повторяется до тех пор, пока массив a не будет отсортирован.
- Закрывается файл output.txt.