Advertisement
anticlown

Lists - 1.2(2 sem)

Apr 9th, 2023 (edited)
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.19 KB | None | 0 0
  1. Program AISD_1_2;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. Uses
  7.     System.SysUtils;
  8.  
  9. Type
  10.     TPElem = ^TElem;
  11.  
  12.     TElem = Record
  13.         Data: Integer;
  14.         Next: TPElem;
  15.     End;
  16.  
  17. Function CreateRoundList(NumberOfPlayers: Integer): TPElem; // создание списка от 1 до NumberOfPlayers
  18. Var
  19.     Head, CurrentEl, TempPointer: TPElem;
  20.     I: Integer;
  21. Begin
  22.     New(CurrentEl);
  23.     Head := CurrentEl;
  24.     I := 1;
  25.     While I <= NumberOfPlayers Do
  26.     Begin
  27.         TempPointer := CurrentEl;
  28.         CurrentEl^.Data := I;
  29.         New(CurrentEl);
  30.         TempPointer^.Next := CurrentEl;
  31.         Inc(I);
  32.     End;
  33.     TempPointer^.Next := Head;
  34.     Result := Head;
  35. End;
  36.  
  37. Procedure DeleteData(Var Head: TPElem);  //удаление
  38. Begin
  39.     Write(Head^.Next^.Data, ' ');
  40.     Head^.Next := Head^.Next^.Next;
  41. End;
  42.  
  43. Procedure CountDown(Var Head: TPElem; Gap: Integer); // пересчет выбывших
  44. Var
  45.     I: Integer;
  46. Begin
  47.     Write('Выбывшие: ');
  48.     While Head <> Head^.Next Do
  49.     Begin
  50.         For I := 1 To Gap - 2 Do
  51.             Head := Head^.Next;
  52.         DeleteData(Head);
  53.         Head := Head^.Next;
  54.     End;
  55.     Writeln;
  56. End;
  57.  
  58. Function GetNumberOfGap(): Integer; //нахождение выбывающего
  59. Var
  60.     IsCorrect: Boolean;
  61.     Gap: Integer;
  62. Begin
  63.     Repeat
  64.         IsCorrect := True;
  65.         Try
  66.             Gap := 0;
  67.             Readln(Gap);
  68.         Except
  69.             IsCorrect := False;
  70.         End;
  71.         If IsCorrect And (Gap < 2) Then
  72.     Until IsCorrect;
  73.         Result := Gap;
  74. End;
  75.  
  76. Var
  77.     Gap, Data, NumberOfPlayers: Integer;
  78.     Head: TPElem;
  79. Begin
  80.     Write('Введите количество участников: ');
  81.     Readln(NumberOfPlayers);
  82.     Write('Введите номер выбывающего: ');
  83.     Gap := GetNumberOfGap();
  84.     Writeln('------------------------------------------');
  85.  
  86.     For Data := 2 To NumberOfPlayers Do
  87.     Begin
  88.         Head := CreateRoundList(Data);
  89.         Writeln('Количество игроков: ', Data, ' ');
  90.         CountDown(Head, Gap);
  91.         Writeln('Победитель: ', Head^.Data);
  92.         Writeln;
  93.     End;
  94.  
  95.     Readln;
  96. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement