Преобразовать код...

Собственно задачу которую я приводил ниже я уже решил, но не могу никак разобраться с одним ньюансом: {Выводим номера команд, абсолютных победителей}
pok:=1;
<b>for</b> i:=1 <b>to</b> n <b>do</b> 
<b> begin</b>
<b> for</b> j:=2 <b>to</b> n <b>do</b>
<b> begin</b>
 <b> if </b>tabl[i,j]=2 <b>then </b>inc(pok);
<b> end;</b>
 <b> if </b>pok=5 <b>then </b>Writeln('Komandy ne imeushie porageniya:',i);
<b> end;</b>
то есть здесь матрица проверяется на наличием абсолютных победителей, то есть тех у кого в строке только одни 2-ки и диагональный ноль, мой код выше работает но при условие такой матрицы: 0 2 2 2 0 2 2 2 0 Он показывает что победитель у нас 1, но это не так, их 3... помогите преобразовать код! пожалуйста!
3 ответа

попробуй так:
const n=3;//это если матрица 3x3
var i,j: Integer;

pok:=0;//сначала никого не выбираем
for i:=1 to n do 
begin
 for j:=1 to n do if tabl[i,j]=2 then pok:=pok+1;//вот только теперь начинаем считать
 if(pok=5)then Writeln('Komandy ne imeushie porageniya:',i);
end;
Замечание модератора: Используйте тег [CODE]


Думаю тебе нужно суммировать строку и если сумма< (2*(кол-во колонок-1)) то никак команда не победитель иначе ок.P.S. ну зачем кросспостить, писал бы в своей старой теме...


собственно вот что у меня получилось 2CodeExpert - может ник по скромнее выбрать)
{турнирная таблица ---футбол}
uses Crt;
const n=5;
var
 s:array[1..n,1..n] of Integer; // турнирная таблицы
 s1:array[1..n] of Integer; // вспомогательный массив
 sp:array[1..n] of string[15];// массив с командами
 i,j,k,l:Integer;
 tmp:string;
 f:Boolean;
begin
 k:=0;
 for i:=1 to n do // заполняем массив названий команд
 begin
 writeln('input name of football team #',i:4);
 readln(sp[i]);
 end;
 clrscr;
 Randomize;
 Writeln('-------------TEAMS---------------');
 for i:=1 to n do // выводим массив названий команд
 writeln(i:4,' ',sp[i]);
 Writeln('-------------TABLE---------------');
 for i:=1 to n do begin
 for j:=1 to n do
 begin
 s[i,j]:=random(3); // заполняем турнирную таблицу случайными числами[0..2];
 s1[i]:=0; // обнуляем вспомогательный массив
 if i<>j then write (s[i,j]:6)
 else write('':5,'-'); // выводим таблицу
 end;
 Writeln;
 end;
 Writeln('--------------------------------');

 {Список команд выигравших > половины игр}
 Writeln('---This team''s win in half of games---' );
 for i:=1 to n do
 for j:= 1 to n do begin
 if i<>j then
 if (s[i,j]=2) // если у команды в строке 2
 then inc(s1[i]); // увеличиваем на 1 соответствующий элемент массива s1
 if (s[j,i]=0) // если в столбце 0
 then inc(s1[i]); // увеличиваем на 1 соответствующий элемент массива s1
 end;
 writeln;
 for i:=1 to n do
 if s1[i]>=(n-1) then begin
 inc(k);
 write(sp[i],' - ',s1[i]);
 Writeln;
 end;
 if k=0 then writeln('NO');
 Writeln('--------------------------------------');
 k:=0;

 {Список команд без поражений }
 Writeln('---this team''s without lost---' );
 for i:=1 to n do
 s1[i]:=0;
 for i:=1 to n do
 for j:=1 to n do
 if i<>j then begin
 if (s[i,j]<>0) then // если у команды в строке не 0
 inc(s1[i]); // увеличиваем на 1 соответствующий элемент массива s1
 if (s[j,i]<>2) then // если у команды в столбце не 2
 inc(s1[i]); // увеличиваем на 1 соответствующий элемент массива s1
 end;
 writeln;
 for i:=1 to n do
 if s1[i]=(2*n-2) then begin
 inc(k);
 writeln(s1[i]:4,sp[i]);
 end;
 if k=0 then writeln('NO');
 Writeln;
 Writeln('-----------------------' );

 {рейтинг по убыванию}
 Writeln('---RATING---' );
 for i:=1 to n do
 s1[i]:=0;
 for i:=1 to n do
 for j:=1 to n do
 if i<>j then begin
 inc(s1[i],s[i,j]);
 Dec(s1[i],s[j,i]);
 end;
 l:=n;
 repeat
 f:=false;
 for i:=1 to l-1 do
 if s1[i]<s1[i+1] then begin
 k:=s1[i];
 s1[i]:=s1[i+1];
 s1[i+1]:=k;
 tmp:=sp[i];
 sp[i]:=sp[i+1];
 sp[i+1]:=tmp;
 f:=true;
 end;
 l:=l-1;
 until not f;
 for i:=1 to n do
 Writeln(sp[i],'':(20-Length(sp[i])),s1[i]:8);
 Writeln('-------End!!!-------');
 readln;
end.