Напишите программу, которая получает CSV файл, описывающий турнирную таблицу для 4 команд...

0 голосов
86 просмотров

Напишите программу, которая получает CSV файл, описывающий турнирную таблицу для 4 команд (при этом главная диагональ данного файла заполнена нулями). Описание: Если команда 1 выигрывает у команды 2, то в первой строке во втором столбце ставится цифра 3 (команда за победу получает 3 очка), а во второй строке в первом столбце ставится 0 (за поражение команда получает 0 очков; если эти команды играют вничью, то в соответствующих ячейках ставится по 1 (за ничью каждая команда получает по 1 очку). Программа должна подсчитывать итоговый результат команд (сумма очков по строке) и выводить их в последовательности, в которой они прошли чемпионат (сначала номер и количество очков команды-победительницы, затем – команды, занявшей второе место и т. д.). Паскаль.


Информатика (37 баллов) | 86 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

//PascalABC.NET 3.2 сборка 1318

const
  n=4;

Var
  f:file of char;
  i,j,counter,FileLen:integer;
  s:string;
  val:char;
  ar:array[1..n] of integer;
  coms:array[1..n] of integer;
  begin
for i:=1 to n do
coms[i]:=i;
assign(f,'input.csv');
reset(f);i:=1;     //столбец матрицы
counter:=1;     //количество прочитанных элементов
FileLen:=filesize(f); //количество элементов в файле (включая разделители)
read(f,val); //на случай, если первая строка пуста
repeat 
 while (ord(val)<>10) and (ord(val)<>13) do //каждая строка заканчивается символами 10 и 13, а элементы разделяются ;   
begin
    if (val<>';') and (ord(val)<>10) and (ord(val)<>13) then
      begin
        ar[i]+=strtoint(val); //вводим значение из ячейки в переменную суммы баллов        read(f,val); //cчитываем следующее значение
        inc(counter); //увеличиваем количество прочитанных
      end
      else
        begin
          read(f,val);    //пропускаем разделитель
          inc(counter);
        end;
    end;
   if (ord(val)=10) and (counter    begin
      read(f,val);
      inc(counter);
    end;
   if (ord(val)=13) and (counter    begin
      inc(i);
       read(f,val);  //читаем с новой строки
      inc(counter);
    end;
until(counter=FileLen); //читаем пока количество элементов в файле не сравняется с количеством прочитанных
close(f);
for i:=1 to n-1 do    //когда лень писать быструю сортировку
  for j:=i+1 to n do
    if ar[i]      begin
        counter:=ar[i];
        ar[i]:=ar[j];
        ar[j]:=counter;
        counter:=coms[i];
        coms[i]:=coms[j];
        coms[j]:=counter;
      end;
for i:=1 to n do
writeln(i,'st place-',coms[i],' command -',ar[i],' points');
end.

(38.6k баллов)
0

Файл 'input.csv' нужно создать?

0

Разумеется.

0

а какой он? Буду очень благодарна.