Вам предлагается два задания с похожими условиями: задание А и задание
Условие
На плоскости дан набор точек с целочисленными координатами. Необходимо найти четырёхугольник наибольшей площади с вершинами в этих точках, две вершины которого лежат на оси Ox, а две оставшиеся - по разные стороны от оси Ox. Вам предлагается два задания с похожими условиями: задание А и задание Б. Вы можете решать оба задания или одно из них по своему выбору. Задание Б более сложное, его решение оценивается выше. Итоговая оценка выставляется как максимальная из оценок за задания А и Б. Задание А. Имеется набор данных, состоящий из 10 пар координат. Напишите программу для решения такой задачи. В этом варианте задания оценивается только правильность программы, время работы и размер использованной памяти не имеют значения.
Максимальная оценка за правильную программу - 2 балла. Задание Б. Имеется набор данных, состоящий из пар координат. Пар может быть много. Напишите программу для решения этой задачи.
Постарайтесь сделать программу эффективной по времени и используемой памяти (или хотя бы по одной из этих характеристик).Программа считается эффективной по времени, если время работы программы пропорционально количеству пар чисел N, т. е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз.
Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.
Максимальная оценка за правильную программу, эффективную по времени и памяти, — 4 балла.
Максимальная оценка за правильную программу, эффективную по времени, но неэффективную по памяти, — 3 балла. Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый язык программирования и его версию. Описание входных данных.В первой строке вводится одно целое положительное число — количество точек N. Каждая из следующих N строк содержит два целых числа: сначала координата x, затем координата y очередной точки.
Описание выходных данных.
Программа должна вывести одно число — максимальную площадь четырёхгольника, удовлетворяющего условиям задачи. Если такого четырёхугольника не существует, программа должна вывести ноль. Пример входных данных:60 02 00 23 -35 -56 6Пример выходных данных для приведённого выше примера входных данных:11 Рассматривайте только четырёхугольники со сторонами лежащими не на оси Ox. Комментарий.В оригинальной формулировке задачи последнего условия нет, что создаёт дополнительные трудности при поиске необходимых четырёхугольников.
Формат задания
Решение по шагам
Как рассуждать
Решение. Искомый четырёхугольник состоит из двух треугольников с общим основанием, лежащим на оси Ox, при этом один треугольник лежит выше этой оси, другой - ниже. Площадь четырёхугольника будет максимальной, если вершины на оси Ox будут расположены как можно дальше друг от друга, а вершины, не лежащие на этой оси, — как можно дальше от неё. Программа читает исходные данные, не запоминая все точки в массиве. Для каждой точки проверяется её принадлежность оси Ox (условие y=0). Среди точек, лежащих на оси, необходимо найти наиболее далеко отстоящие друг от друга - они дадут наибольшее возможное общее основание двух треугольников. Это будут точки с наименьшим и наибольшим значением координаты x. Среди точек, не лежащих на оси Ox, надо найти две точки, расположенные по разные стороны от оси и как можно дальше от неё, — они дадут наибольшие возможные значения высот треугольников. Это будут точки с наибольшим положительным инаименьшим отрицательным значением координаты y.Таким образом, задача сводится к нахождению максимального и минимального x среди точек, у которых y=0, максимального и минимального y среди остальных точек и нахождению площади четырёхугольника на основе этих данных.
Перед выводом результата необходимо убедиться в существовании искомого четырёхугольника. Пример правильной и эффективной программы на языке Паскальprogram c4;varn: integer;x, y: integer;xmin, xmax: integer;xsearch: boolean;ymin, ymax: integer;i: integer;s: real;beginxsearch := true;xmin := 0; xmax := 0;ymin:=0; ymax := 0;readln(n);for i:=1 to n do beginreadln(x,y);if y=0 then beginif xsearch or (x < xmin) then xmin:=x;if xsearch or (x > xmax) then xmax:=x;xsearch:=false;endelse if y < ymin then ymin:=yelse if y > ymax then ymax:=yend;if (xmax>xmin) and (ymin<0) and (ymax>0)then s := (xmax-xmin)(ymax-ymin)/2else s := 0;writeln(s);end. Пример правильной и эффективной программы на языке Бейсик DIM n AS INTEGER DIM x, y AS INTEGER DIM xmin, xmax AS INTEGER DIM xsearch AS INTEGER DIM ymin, ymax AS INTEGER DIM i AS INTEGER DIM s AS DOUBLE xsearch = 1 xmin = 0: xmax = 0 ymin = 0: ymax = 0 INPUT n FOR i = 1 TO n INPUT x, y IF y = 0 THEN IF xsearch = 1 OR x < xmin THEN xmin = x IF xsearch = 1 OR x > xmax THEN xmax = x xsearch = 0 ELSEIF y < ymin THEN ymin = y ELSEIF y > ymax THEN ymax = y END IF NEXT i IF xmax > xmin AND ymin < 0 AND ymax > 0 THEN s = (xmax - xmin) * (ymax - ymin) / 2 ELSE s = 0 END IF PRINT s Пример правильной и эффективной программы на Алгоритмическом языкеалг c4начцел nцел x,yцел xmin=0, xmax=0лог xsearch=дацел ymin=0, ymax=0цел iвещ sввод nнц для i от 1 до nввод x, yесли y=0тоесли xsearch или xесли xsearch или x>xmax то xmax:=x всеxsearch:=нетиначеесли yесли y>ymax то ymax:=y всевсекцесли xmax > xmin и ymin < 0 и ymax > 0то s:=(xmax-xmin)(ymax-ymin)/2иначе s:=0всевывод sкон Пример решения задачи А на языке Паскаль. var coord: array[1..10, 1..2] of integer; {исходные данные} x, y: integer; {координаты очередной точки} xminpos, xmaxpos, yminpos, ymaxpos: integer; {координаты точек четырёхугольника с наибольшей площадью} s: real; {площадь четырёхугольника} i, j: integer;begin xminpos := MaxInt; xmaxpos := -(MaxInt-1); yminpos := MaxInt; ymaxpos := -(MaxInt-1); for i := 1 to 10 do begin read(x, y); coord[i, 1] := x; coord[i, 2] := y; end; for i := 1 to 10 do begin if (coord[i, 2] =
Осталось ещё 4 шага
and (coord[i, 1] < xminpos) then xminpos :=…
and (coord[i, 1] > xmaxpos) then xmaxpos :=…
and (coord[i, 2] < yminpos) then yminpos :=…
and (coord[i, 2] > ymaxpos) then ymaxpos :=…
Бесплатно · займёт минуту