Программа


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.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию