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<FileLen) then //в конце каждой строки стоят символы с кодами 10 и 13, пропускаем их begin read(f,val); inc(counter); end; if (ord(val)=13) and (counter<FileLen) then //когда дошли до конца строки 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]<ar[j] then 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.
#include <iostream.h>
bool amafree(float x1, float x2, float x3, float x4, float y1, float y2, float y3, float y4, float dotx, float doty)
{float x[4],y[4],temp;
for(int i=0;i<4;i++)
for(int j=0;j<3;j++)
{
if(x[j]<x[j+1])
{
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
temp=y[j];
y[j]=y[j+1];
y[j+1]=temp;
}
}
if (y[2]<y[3]) {temp=x[2];
x[2]=x[3];
x[3]=temp;
temp=y[2];
y[2]=y[3];
y[3]=temp; }//теперь мы упорядочили точки прямоугольника, чтобы понимать его как у меня на рисунке
x1=x[0];
x2=x[1];
x3=x[2];
x4=x[3];
y1=y[0];
y2=y[1];
y3=y[2];
y4=y[3];//так мне удобнее, потому что часть условий уже написал без всяких массивов
float k[10];
k[0]=(x1-x2)/(y1-y2);
k[1]=(x1-x3)/(y1-y3);
k[2]=(x3-x4)/(y3-y4);
k[3]=(x2-x4)/(y2-y4);//коэффициенты прямых, проходящих по сторонам прямоугольника
// if(k[0]!=k[2]||k[1]!=k[3]) {cout<<"Eto dazhe ne parallelogramm\n";return false;}//условие параллельности противолежащих сторон
// if(k[0]!=1/k[1]||k[2]!=1/k[3]) {cout<<"Eto dazhe ne pryamougolnik\n";return false;}//условие перпендикулярности смежных сторон
if(dotx<x[1])&&(dotx<x[2])&&(dotx<x3)&&(dotx<x4)||(doty<y1)&&(doty<y2)&&(doty<x3)&&(doty<x4)||//лежит точно вне
(dotx>1)&&(dotx>x2)&&(dotx>x3)&&(dotx>x4)||(doty>y1)&&(doty>y2)&&(doty>x3)&&(doty>x4)||//лежит точно вне
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[0]*dotx<0)||//нижний левый треугольник
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[1]*dotx>0)||//верхний левый
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[2]*dotx>0)||//верхний праввый
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[3]*dotx<0)//нижний правый
return false;
return true;
}
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<FileLen) then //в конце каждой строки стоят символы с кодами 10 и 13, пропускаем их
begin
read(f,val);
inc(counter);
end;
if (ord(val)=13) and (counter<FileLen) then //когда дошли до конца строки
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]<ar[j] then
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.