Программа
USES CRT; { Подключение модуля CRT }
CONST FileName='SCHOOL'; { Имя файла с данными }
QuantityMarks=5; { Количество оценок }
MaxQuantityPupil=20; { Максимальное количество учеников }
TYPE PupilType=record { Тип "Ученик" }
FamilyName:string[10];
Name:String[10];
Form:record
Year:byte;
Letter:char;
end;
Marks:array [1..QuantityMarks] of byte
end;
SchoolType=array [1..MaxQuantityPupil] of PupilType; { Тип "Школа" }
VAR MeterPupil,MeterChar:integer; { Счетчики учеников и символов }
F:file of PupilType; { Файл учеников }
School:SchoolType; { Массив учеников }
Pupil:PupilType; { Ученик }
PROCEDURE SortArray(var School:SchoolType;MaxNumber:integer);
{ Процедура сортировки массива }
Var MeterInside:integer; { Внутренний счетчик }
Procedure Change(var A,B:PupilType); { Процедура обмена }
var Buf:PupilType; { Буфер для переноса элементов }
begin Buf:=A; A:=B; B:=Buf end;
Function GetNumberMinElement(StartElement,EndElement:integer;
School:SchoolType):integer;
{ Функция поиска наименьшего элемента }
var Meter:integer; { Счетчик }
NumberMinElement:integer; { Номер минимального элемента }
function SecondElementIsMin(First,Second:PupilType):boolean;
{ Функция определения минимального элемента }
begin
if Second.Form.Year<First.Form.Year
then SecondElementIsMin:=TRUE
else if Second.Form.Year>First.Form.Year
then SecondElementIsMin:=FALSE
else if Second.Form.Letter<First.Form.Letter
then SecondElementIsMin:=TRUE
else if Second.Form.Letter>First.Form.Letter
then SecondElementIsMin:=FALSE
else if Second.FamilyName<First.FamilyName
then SecondElementIsMin:=TRUE
else if Second.FamilyName>First.FamilyName
then SecondElementIsMin:=FALSE
else if Second.Name<First.Name
then SecondElementIsMin:=TRUE
else SecondElementIsMin:=FALSE
end;
begin
NumberMinElement:=StartElement;
{ Начальное определение номера минимального элемента }
for Meter:=StartElement+1 to EndElement do { Цикл просмотра
неотсортированной части массива и выявление наименьшего элемента }
if SecondElementIsMin(School[NumberMinElement],School[Meter])
then NumberMinElement:=Meter;
{ Переопределение номера наименьшего элемента }
GetNumberMinElement:=NumberMinElement { Определение значения функции }
end;
Begin
for MeterInside:=1 to MaxNumber do { Цикл сортировки }
Change(School[MeterInside],
School[GetNumberMinElement(MeterInside,MaxNumber,School)])
{ Перестановка текущего элемента и наименьшего из поледующих }
End;
PROCEDURE OutArray(School:SchoolType;MaxNumber:integer);
{ Процедура вывода массива }
Var MeterInside:integer; { Внутренний счетчик }
MeterMarks:integer; { Счетчик оценок }
MediumMark:real; { Средний балл }
Begin
ClrScr; { Очистка экрана }
{ Вывод шапки таблицы }
WriteLn('╔═══════════════════════╦═════╦════════╦═══════╗');
WriteLn('║ Фамилия Имя ║Класс║ Оценки ║Ср.балл║');
WriteLn('╠═══════════════════════╬═════╬════════╬═══════╣');
for MeterInside:=1 to MaxNumber do { Цикл вывода учеников }
with School[MeterInside] do
begin { Вывод ученика: }
Write('║ ',FamilyName,' ',Name,' ║ ',Form.Year:2,Form.Letter,' ║ ');
{ Подсчет среднего балла: }
MediumMark:=0; { Сброс значения среднего балла }
for MeterMarks:=1 to QuantityMarks do { Набор суммарной оценки }
MediumMark:=MediumMark+Marks[MeterMarks];
MediumMark:=MediumMark/QuantityMarks; { Пересчет среднего балла }
for MeterMarks:=1 to QuantityMarks do { Цикл вывода оценок }
if Marks[MeterMarks]>0 then Write(Marks[MeterMarks])
else Write('.');
WriteLn(' ║ ',MediumMark:4:1,' ║') { Вывод среднего балла }
end;
{ Закрытие таблицы: }
WriteLn('╚═══════════════════════╩═════╩════════╩═══════╝');
End;
BEGIN
Assign(F,FileName); { Связывание файловой переменной с именем файла }
Reset(F); { Открытие файла под чтение }
MeterPupil:=0; { Начальное определение счетчика }
while not EOF(F) and (MeterPupil<=MaxQuantityPupil) do { Цикл чтения файла }
Begin
Inc(MeterPupil); { Подсчет числа записей }
Read(F,School[MeterPupil]); { Чтение записи из файла }
{ Выравнивание пробелами длин фамилии и имени: }
with School[MeterPupil] do
begin
for MeterChar:=Length(FamilyName)+1 to 10 do
FamilyName:=FamilyName+' ';
for MeterChar:=Length(Name)+1 to 10 do Name:=Name+' '
end
End;
SortArray(School,MeterPupil); { Сортировка массива }
OutArray(School,MeterPupil); { Вывод массива }
Close(F) { Закрытие файла }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию