Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Добро пожаловать на www.cyberpascal.ru
- uses system;
- var data:array [,] of byte;
- champion:array [,] of integer;
- i,j,n,m,acount,bcount:byte;
- cache:string;
- temp:integer;
- Procedure SelectionSort(var data:array [,] of integer);
- var i,j,k,temp:integer;
- Begin
- for i:=0 to Pred(Data.GetLength(0))-1 do
- Begin
- k:=i;
- for j:=i+1 to Pred(Data.GetLength(0)) do
- if Data[k,1] < Data[j,1] then k:=j;
- if k<>i then
- Begin
- Temp:=Data[i,0];
- Data[i,0]:=Data[k,0];
- Data[k,0]:=Temp;
- Temp:=Data[i,1];
- Data[i,1]:=Data[k,1];
- Data[k,1]:=Temp;
- end;
- end;
- end;
- Function StrPoints(n:integer):string;
- Begin
- if ((n mod 100) >= 11) and ((n mod 100) <= 14) then StrPoints:='очков'
- else case n mod 10 of
- 0,5..9:StrPoints:='очков';
- 1:StrPoints:='очко';
- 2..4:StrPoints:='очка';
- end;
- end;
- Begin
- Repeat
- Console.Write('Введите кол-во команд (2 <= N <= '+MaxByte+'): ');
- Cache:=System.Console.ReadLine();
- if TryStrToInt(Cache,Temp) and (Temp in [2..MaxByte]) then N:=Convert.ToByte(Temp)
- else Writeln('Ошибка: Введено не верное значение. Повторите ввод...');
- Until N in [2..MaxByte];
- Repeat
- Console.Write('Введите кол-во матчей (1 <= M <= '+MaxByte+'): ');
- Cache:=System.Console.ReadLine();
- if TryStrToInt(Cache,Temp) and (Temp in [1..MaxByte]) then M:=Convert.ToByte(Temp)
- else Writeln('Ошибка: Введено не верное значение. Повторите ввод...');
- Until N in [1..MaxByte];
- SetLength(Data,N,M); // Выделим память...
- // Ввод исходных данных...
- for i:=0 to Pred(Data.GetLength(0)) do
- Begin
- Console.Clear; // Чистим экран...
- Console.WriteLine('Введите результаты '+Succ(i)+'-ой команды:');
- Console.WriteLine('Примечание: 2 - победа | 1 - ничья | 0 - пройгрыш/матч не состоялся');
- for j:=0 to Pred(Data.GetLength(1)) do
- Begin
- Repeat
- Console.Write('Результат '+Succ(j)+'-го матча: ');
- Cache:=System.Console.ReadLine();
- if TryStrToInt(Cache,Temp) and (Temp in [0..2]) then Data[i,j]:=Convert.ToByte(Temp)
- else Writeln('Ошибка: Введено не верное значение. Повторите ввод...');
- Until TryStrToInt(Cache,Temp) and (Temp in [0..2]);
- end;
- end;
- // Анлиз исходных данных...
- SetLength(Champion,N,2); // Выделим память...
- for i:=0 to Pred(Data.GetLength(0)) do
- Begin
- Champion[i,0]:=Succ(i); // Номер команды
- Champion[i,1]:=0; // Обнуляем
- for j:=0 to Pred(Data.GetLength(1)) do Champion[i,1]+=Data[i,j];
- end;
- SelectionSort(Champion); // Сортируем по набранным балам
- i:=0;
- While i < Pred(Champion.GetLength(0)) do
- Begin
- if Champion[i,1] = Champion[i+1,1] then
- Begin
- aCount:=0;
- bCount:=0;
- for j:=0 to Pred(Data.GetLength(1)) do
- Begin
- if Data[Champion[i,0],j] = 2 then aCount+=1;
- if Data[Champion[i+1,0],j] = 2 then bCount+=1;
- end;
- if aCount < bCount then
- Begin
- Temp:=Champion[i,0];
- Champion[i,0]:=Champion[i+1,0];
- Champion[i,0]:=Temp;
- Temp:=Champion[i,1];
- Champion[i,1]:=Champion[i+1,1];
- Champion[i,1]:=Temp;
- end;
- end;
- i+=1;
- end;
- // Вывод результатов
- Console.Clear; // Чистим экран...
- for i:=0 to Pred(Champion.GetLength(0)) do
- Begin
- Console.Write(Succ(i)+'-е место заняла команда № ');
- for j:=0 to Pred(Champion.GetLength(1)) do Console.Write(Champion[i,j]+' ');
- Console.WriteLine(StrPoints(Champion[i,j]));
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement