Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program exam;
- const l = 10000;
- type // point structure
- TPoint = record
- X : integer;
- Y : integer;
- end;
- type // circle structure
- TCircle = record
- Point : TPoint;
- r : integer;
- end;
- var
- i, j, n, r, s, maxp, maxc: integer;
- arrOfPoints : array[1..l] of TPoint;
- arrOfCircles : array[1..l] of TCircle;
- matrixOfPoints : array[1..l,1..l] of integer;
- matrixOfCrossCircles : array[1..l,1..l] of integer;
- Procedure ReadPoints(var Point : TPoint);
- begin
- writeln('Введите Х');
- readln(Point.X);
- writeln('Введите Y');
- readln(Point.Y);
- end;
- Procedure ReadCircles(var Circle : TCircle; const r: integer);
- begin
- ReadPoints(Circle.Point);
- Circle.r := r;
- end;
- procedure PrintPoints(const Point : TPoint);
- begin
- writeln('Введенная точкa:');
- write(Point.X:6,' ',Point.Y:6);
- end;
- procedure PrintCircles(const Circle : TCircle);
- begin
- writeln('Введенная окружность:');
- PrintPoints(Circle.Point);
- write(' ', Circle.r:6);
- writeln();
- end;
- function IsPointInside(Point : Tpoint; Circle : TCircle) : integer;
- begin
- if (Sqrt(Sqr(Point.X - Circle.Point.X) + Sqr(Point.Y - Circle.Point.Y)) <= Circle.r) then
- IsPointInside := 1
- else
- IsPointInside := 0;
- end;
- function IsCirclesCross(firstCircle : TCircle; secondCircle : TCircle) : integer;
- begin
- if (Sqrt(Sqr(firstCircle.Point.X - secondCircle.Point.X) + Sqr(firstCircle.Point.Y - secondCircle.Point.Y)) <= firstCircle.r + secondCircle.r)
- and (Sqrt(Sqr(firstCircle.Point.X - secondCircle.Point.X) + Sqr(firstCircle.Point.Y - secondCircle.Point.Y)) > firstCircle.r) then
- IsCirclesCross := 1
- else
- IsCirclesCross := 0;
- end;
- begin
- writeln('Введите кол-во точек');
- readln(n);
- writeln('Введите радиус окружностей');
- readln(r);
- writeln('Введите ', n, ' точки:');
- for i:=1 to n do begin
- ReadPoints(arrOfPoints[i]);
- end;
- for i:=1 to n do begin
- PrintPoints(arrOfPoints[i]);
- writeln();
- end;
- writeln('Введите ', n, ' окружности:');
- for i:=1 to n do begin
- ReadCircles(arrOfCircles[i], r);
- end;
- for i:=1 to n do begin
- PrintCircles(arrOfCircles[i]);
- writeln();
- end;
- maxp := integer.MinValue;
- for i:=1 to n do begin
- s := 0;
- for j:=1 to n do begin
- s += IsPointInside(arrOfPoints[j], arrOfCircles[i]);
- end;
- writeln('В окружности номер ', i,' лежит ', s, ' точек.');
- if(s > maxp) then begin
- maxp := s;
- maxc := i;
- end;
- end;
- for i:=1 to n do begin
- for j:=1 to n do begin
- matrixOfPoints[i, j] := IsPointInside(arrOfPoints[j], arrOfCircles[i]);
- end;
- end;
- writeln('Матрица отношений точек относительно окружностей');
- for i:=1 to n do begin
- for j:=1 to n do begin
- write(matrixOfPoints[i, j] + ' ');
- end;
- writeln();
- end;
- writeln('Больше всего точек в окружности номер ', maxc);
- for i:=1 to n do begin
- for j:=1 to n do begin
- matrixOfCrossCircles[i, j] := IsCirclesCross(arrOfCircles[j], arrOfCircles[i]);
- end;
- end;
- writeln('Матрица отношений окружностей относительно окружностей');
- for i:=1 to n do begin
- for j:=1 to n do begin
- write(matrixOfCrossCircles[i, j] + ' ');
- end;
- writeln();
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement