Advertisement
Alex_Fomin

Untitled

Nov 22nd, 2015
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.19 KB | None | 0 0
  1. // Добро пожаловать на www.cyberpascal.ru
  2. uses system;
  3.  
  4. var data:array [,] of byte;
  5.     champion:array [,] of integer;
  6.     i,j,n,m,acount,bcount:byte;
  7.     cache:string;
  8.     temp:integer;
  9.  
  10. Procedure SelectionSort(var data:array [,] of integer);
  11. var i,j,k,temp:integer;
  12. Begin
  13. for i:=0 to Pred(Data.GetLength(0))-1 do
  14.     Begin
  15.     k:=i;
  16.     for j:=i+1 to Pred(Data.GetLength(0)) do
  17.         if Data[k,1] < Data[j,1] then k:=j;
  18.        
  19.     if k<>i then
  20.                 Begin
  21.                 Temp:=Data[i,0];
  22.                 Data[i,0]:=Data[k,0];
  23.                 Data[k,0]:=Temp;
  24.                 Temp:=Data[i,1];
  25.                 Data[i,1]:=Data[k,1];
  26.                 Data[k,1]:=Temp;
  27.                 end;
  28.     end;
  29. end;
  30.  
  31. Function StrPoints(n:integer):string;
  32. Begin
  33. if ((n mod 100) >= 11) and ((n mod 100) <= 14) then StrPoints:='очков'
  34.    else case n mod 10 of
  35.              0,5..9:StrPoints:='очков';
  36.              1:StrPoints:='очко';
  37.              2..4:StrPoints:='очка';
  38.              end;
  39. end;
  40.    
  41. Begin
  42. Repeat
  43.   Console.Write('Введите кол-во команд (2 <= N <= '+MaxByte+'): ');
  44.   Cache:=System.Console.ReadLine();
  45.   if TryStrToInt(Cache,Temp) and (Temp in [2..MaxByte]) then N:=Convert.ToByte(Temp)
  46.      else Writeln('Ошибка: Введено не верное значение. Повторите ввод...');
  47. Until N in [2..MaxByte];
  48.  
  49. Repeat
  50.   Console.Write('Введите кол-во матчей (1 <= M <= '+MaxByte+'): ');
  51.   Cache:=System.Console.ReadLine();
  52.   if TryStrToInt(Cache,Temp) and (Temp in [1..MaxByte]) then M:=Convert.ToByte(Temp)
  53.      else Writeln('Ошибка: Введено не верное значение. Повторите ввод...');
  54. Until N in [1..MaxByte];
  55.  
  56. SetLength(Data,N,M); // Выделим память...
  57.  
  58. // Ввод исходных данных...
  59. for i:=0 to Pred(Data.GetLength(0)) do
  60.     Begin
  61.     Console.Clear; // Чистим экран...
  62.     Console.WriteLine('Введите результаты '+Succ(i)+'-ой команды:');
  63.     Console.WriteLine('Примечание: 2 - победа | 1 - ничья | 0 - пройгрыш/матч не состоялся');
  64.     for j:=0 to Pred(Data.GetLength(1)) do
  65.         Begin
  66.         Repeat
  67.           Console.Write('Результат '+Succ(j)+'-го матча: ');
  68.           Cache:=System.Console.ReadLine();
  69.           if TryStrToInt(Cache,Temp) and (Temp in [0..2]) then Data[i,j]:=Convert.ToByte(Temp)
  70.              else Writeln('Ошибка: Введено не верное значение. Повторите ввод...');
  71.         Until TryStrToInt(Cache,Temp) and (Temp in [0..2]);
  72.         end;
  73.     end;
  74.    
  75. // Анлиз исходных данных...
  76. SetLength(Champion,N,2); // Выделим память...
  77.  
  78. for i:=0 to Pred(Data.GetLength(0)) do
  79.     Begin
  80.     Champion[i,0]:=Succ(i); // Номер команды
  81.     Champion[i,1]:=0; // Обнуляем
  82.     for j:=0 to Pred(Data.GetLength(1)) do Champion[i,1]+=Data[i,j];
  83.     end;
  84.  
  85. SelectionSort(Champion); // Сортируем по набранным балам
  86.  
  87. i:=0;
  88. While i < Pred(Champion.GetLength(0)) do
  89.       Begin
  90.       if Champion[i,1] = Champion[i+1,1] then
  91.          Begin
  92.          aCount:=0;
  93.          bCount:=0;
  94.          for j:=0 to Pred(Data.GetLength(1)) do
  95.              Begin
  96.              if Data[Champion[i,0],j] = 2 then aCount+=1;
  97.              if Data[Champion[i+1,0],j] = 2 then bCount+=1;
  98.              end;
  99.              
  100.          if aCount < bCount then
  101.             Begin
  102.             Temp:=Champion[i,0];
  103.             Champion[i,0]:=Champion[i+1,0];
  104.             Champion[i,0]:=Temp;
  105.             Temp:=Champion[i,1];
  106.             Champion[i,1]:=Champion[i+1,1];
  107.             Champion[i,1]:=Temp;
  108.             end;
  109.          end;
  110.       i+=1;
  111.       end;
  112.      
  113. // Вывод результатов
  114. Console.Clear; // Чистим экран...
  115. for i:=0 to Pred(Champion.GetLength(0)) do
  116.     Begin
  117.     Console.Write(Succ(i)+'-е место заняла команда № ');
  118.     for j:=0 to Pred(Champion.GetLength(1)) do Console.Write(Champion[i,j]+'  ');
  119.     Console.WriteLine(StrPoints(Champion[i,j]));
  120.     end;
  121. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement