Advertisement
LisunovaMaryna

lab krug

Jun 23rd, 2024
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.07 KB | None | 0 0
  1. Program lab1_2;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. Uses
  7.     System.SysUtils;
  8.  
  9. Type
  10.     TPointer = ^TListElement;
  11.  
  12.     TListElement = Record
  13.         Data: Integer;
  14.         Lnext: TPointer;
  15.  
  16.     End;
  17.  
  18. Function GetInt(Min, Max: Integer): Integer;
  19. Var
  20.     IsCorrect: Boolean;
  21.     N: Integer;
  22. Begin
  23.     Repeat
  24.         IsCorrect := True;
  25.         Try
  26.             Readln(N);
  27.         Except
  28.             IsCorrect := False;
  29.             Writeln('Вы ввели некорректные данные. Попробуйте снова.');
  30.         End;
  31.  
  32.         If IsCorrect And ((N > Max) Or (N < Min)) Then
  33.         Begin
  34.             IsCorrect := False;
  35.             Writeln('Введено значение не входящее в диапазон допустимых значений');
  36.         End;
  37.  
  38.     Until IsCorrect;
  39.  
  40.     GetInt := N;
  41.  
  42. End;
  43.  
  44. Procedure Make(N: Integer; Var First: TPointer);
  45. Var
  46.     I: Integer;
  47.     Temp: TPointer;
  48. Begin
  49.     New(First);
  50.     Temp := First;
  51.     First^.Data := 1;
  52.     New(First^.Lnext);
  53.     First := First^.Lnext;
  54.     For I := 2 To N Do
  55.     Begin
  56.         New(First^.Lnext);
  57.         First^.Data := I;
  58.         If (I = N) Then
  59.             First^.Lnext := Temp
  60.         Else
  61.             First := First^.Lnext;
  62.     End;
  63. End;
  64.  
  65. Procedure OutExcel(N, K: Integer);
  66. Var
  67.     Count: TPointer;
  68.     I, Meter: Integer;
  69. Begin
  70.     New(Count);
  71.     Make(N, Count);
  72.     Meter := 1;
  73.     Write(N, ':', ' ');
  74.     While (Count^.Lnext <> Count) Do
  75.     Begin
  76.         If (Meter = K) Then
  77.         Begin
  78.             Write(Count^.Lnext.Data, ' ');
  79.             Count^.Lnext := Count^.Lnext^.Lnext;
  80.             Meter := 0;
  81.         End
  82.         Else
  83.             Count := Count^.Lnext;
  84.         Inc(Meter);
  85.  
  86.     End;
  87.     Write(' ', 'последним выйдет: ');
  88.     Writeln(Count^.Data);
  89. End;
  90.  
  91. Var
  92.     I, K: Integer;
  93.  
  94. Begin
  95.     Write('Введите порядок удаления игроков : ');
  96.     K := GetInt(1, 64);
  97.     Writeln(1, ':', ' ', ' ', '|', 1);
  98.     For I := 2 To 64 Do
  99.         OutExcel(I, K);
  100.     Readln;
  101. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement