Программа
PROGRAM Basketball_Team(input,output);
CONST FileName='DATA'; { Имя файла данных }
LengthName=40; { Длина имени игрока }
TYPE Player=record { Запись об игроке }
Name:packed array [1..LengthName] of char;
Point:integer;
end;
FileOfPlayer=file of Player; { Тип - файл игроков }
VAR Exit:boolean; { Флаг "Выход" }
F:FileOfPlayer; { Файловая переменная }
FlagOfData:boolean; { Флаг наличия файла данных }
FUNCTION Menu:integer; { Функция вывода меню и получения ответа }
Const QuantityMenuPoint=3; { Количество пунктов меню }
ExitPoint=QuantityMenuPoint; { Пункт меню "Выход" }
Var Point:integer; { Текущий пункт меню }
AnswerBuf:char; { Переменная для получения ответа на меню }
Begin
repeat { Цикл чтения ответа на меню }
WriteLn; { Пропуск строки }
{ Вывод меню: }
WriteLn('МЕНЮ:');
WriteLn('[1] Ввод данных об игроке');
WriteLn('[2] Вывод списка игроков отсортированного по очкам');
WriteLn('[3] Выход');
ReadLn(AnswerBuf); { Чтение ответа на меню }
Point:=Ord(AnswerBuf)-Ord('0'); { Перевод полученного символа в пункт меню }
until (0<Point) and (Point<=QuantityMenuPoint);
{ Выход из цикла при пролучении корректного ответа }
{ Определение значения функции: }
if Point=ExitPoint then Menu:=255
else Menu:=Point
End;
PROCEDURE AddPlayer(var F:FileOfPlayer); { Процедура добавления игрока }
Var Buf,BufFile:Player; { Буферные переменные для записи данных об игроке }
i:0..LengthName; { Счетчик символов в имени игрока }
Exit:boolean; { Флаг выхода из цикла просмотра файла }
Begin
Write('Введите имя игрока '); { Вывод приглашения }
i:=0; { Сброс счетчика символов }
while not EOLn do { Цикл чтения строки }
begin
i:=i+1; { Пересчет счетчика }
Read(Buf.Name[i]) { Чтение символа строки }
end;
ReadLn;
while i<40 do { Цикл дополнения строки пробелами }
begin
i:=i+1; { Пересчет счетчика }
Buf.Name[i]:=' ' { Дополнение строки пробелами }
end;
Write('Введите количество очков '); { Вывод приглашения }
ReadLn(Buf.Point); { Ввод очков }
if FlagOfData then Reset(F) { Открытие файла }
else begin
Rewrite(F); { Открытие нового файла }
FlagOfData:=TRUE { Подъем флага существования данных }
end;
Exit:=FALSE; { Сброс флага "выход" }
while not EOF(F) and not Exit do { Цикл поиска игрока по имени }
begin
Read(F,BufFile); { Чтение записи из файла }
Exit:=BufFile.Name=Buf.Name { Проверка имени }
end;
if Exit then
begin
Buf.Point:=Buf.Point+BufFile.Point;
{ Если имя было найдено, то - суммирование очков }
Seek(F,FilePos(F)-1) { Сдвиг файлового указателя назад }
end;
Write(F,Buf); { Запись в файл }
Close(F) { Закрытие файла }
End;
PROCEDURE ViewPlayers(var F:FileOfPlayer); { Процедура просмотра файла }
Var Buf:Player; { Буферная переменная }
i:0..LengthName; { Счетчик символов в имени игрока }
Begin
Reset(F); { Открытие файла }
WriteLn; { Пропуск строки }
{ Вывод заголовка: }
WriteLn(' ИГРОК ОЧКИ');
WriteLn('----------------------------------------------');
while not EOF(F) do { Цикл просмотра файла }
begin
Read(F,Buf); { Чтение записи }
for i:=1 to LengthName do Write(Buf.Name[i]); { Цикл вывода имени }
WriteLn(' ',Buf.Point:3) { Вывод количества очков }
end;
WriteLn; { Пропуск строки }
Close(F) { Закрытие файла }
End;
PROCEDURE SortPlayers(var F:FileOfPlayer); { Процедура сортировки файла }
Var Buf,Max:Player; { Буферные переменные }
i,MaxNum:integer; { Счетчики записей файла }
Begin
Reset(F); { Открытие файла }
for i:=0 to FileSize(F)-2 do { Цикл сортировки файла }
begin
Seek(F,i); { Установка указателя на начало неотсортированной части файла }
Read(F,Max); { Чтение записи }
MaxNum:=i; { Фиксирование номера записи }
while not EOF(F) do { Цикл просмотра оставшейся части файла }
begin
Read(F,Buf); { Чтение записи }
if Buf.Point>Max.Point then { Сравнение прочитанной записи с "максимальной"}
begin
Max:=Buf; { Переопределение "максимальной" записи }
MaxNum:=FilePos(F)-1 { Переопределение номера "максимальной" записи }
end
end;
if MaxNum<>i then { Сравнение номера "максимальной" записи
с номером первой записи из неотсортированной части файла }
begin
{ Перестановка: }
Seek(F,i); { Установка указателя }
Read(F,Buf); { Чтение в буфер }
Seek(F,i); { Установка указателя }
Write(F,Max); { Запись "максимального" }
Seek(F,MaxNum); { Установка указателя }
Write(F,Buf) { Запись "первого" на место максимального }
end
end;
Close(F) { Закрытие файла }
End;
BEGIN
Exit:=FALSE; { Сброс флага "Выход" }
FlagOfData:=FALSE; { Сброс флага наличия данных }
Assign(F,FileName); { Связывание файловой переменной с именем файла }
repeat { Цикл работы программы }
case Menu of { Выбор действия по ответу на меню }
1:AddPlayer(F); { Ввод игрока }
2:begin
SortPlayers(F); { Сортировка файла }
ViewPlayers(F) { Просмотр файла }
end;
255:Exit:=TRUE { Подъем флага "Выход" }
end
until Exit;
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию