1. Найдите координаты всех седловых точек в матрице 10х10.
Седловой точкой называется элемент матрицы, максимальный в своем
столбце и минимальный в своей строке.
2. Задан выпуклый n-угольник (координатами своих вершин)
и точка А(x;y). Определить принадлежит ли эта точка многоугольнику.
Просьбу решить задачи мне присалали на e-mail. Я решил выенсти эту проблему на форум.
Гы, это пока для меня далеко ??? :-[ :-/
pascal65536
30.10.2002 16:56
Я делал подобную задачу (принадлежность точки треугольнику) посмотри на pascal.hop.ru
Дан набор точек, надо по ним построить выпуклый многоугольник и разделить так чтобы две получившиеся части были как можно одинаковее.
Криво написано, но это олимпиадная задачка...
А куда можно отправить программу к первой задаче?
Или на clane@newmail.ru, или просто в форуме оставь..
во второй задаче нужно обходить n - угольник и проверять на то что бы точка постоянно лежала справа от внешней стороны. Есть такая же задача только с треугольником.
Цитата
во второй задаче нужно обходить n - угольник и проверять на то что бы точка постоянно лежала справа от внешней стороны. Есть такая же задача только с треугольником.
Ну это первое что приходит в голову.
Условие задачи допускает наличие точек внутри многоугольника и через все внутренние точки должна проходить граница участка, а в этом и загвоздка.
Кстати эта олимпиадная задачка 4 или 5 республиканской олимпиады среди школьников Башкирии.
Открою вам секретик.
Я занял все первые места по всем наминациям на городской, а потом и республиканской олимпиаде в 2000 году среди студентов техникумов и колледжей Башкирии.
Clane скинь мне тесты на первую задачу.
Я её решил, вот занимаюсь отладкой.
Матрица блин слишком большая чтоб вводить 100 элементов вручную, поэтому у меня здесь 2 возможных варианта (вручную и randomize, но при randomize никогда эту седловую точку не получить(когда 10x10))
Вот исходник (должен работать):
program sedltoch;
const n=10;
var
a:array[1..n,1..n] of integer;
i,j,k,z,t,min,max:integer;
begin
randomize;
for i:=1 to n do
begin
for j:=1 to n do
begin
write('-> ');
readln(a[i,j]);
{a[i,j]:=random(9)+1;
write(a[i,j]:4);}
end;
{writeln; }
end;
for i:=1 to n do
begin
min:=maxint;
for j:=1 to n do
begin
if a[i,j]<min then
begin
min:=a[i,j];
k:=j;
end;
end;
max:=-32768;
for z:=1 to n do
begin
if a[z,k]>max then
begin
max:=a[z,k];
t:=z;
end;
end;
if (min=max) then writeln('Седловая точка -> a[',t,',',k,']=',a[t,k]);
end;
readln;
end.
Ну, первая задачка тривиальна - про нее я даже говорить ничего не буду.
Вторая задачка встречается в лабораторных работах по Компьютерной графике 3 курса соответствующей специальности.
Если вершины многоугольника заданы в порядке обхода по периметру, то нужно строить векторы, описывающие стороны. Каждый такой вектор умножать на вектор точки. Смотреть на знак числа. Суть в том, что если обходить многоугольник по периметру, всегда знаешь, где внешная область, а где внутренняя (справа или слева), поэтому можно получить однозначное решение.
Мы, правда, решали эту задачку для невыпуклых многоугольников - их надо было разбивать на выпуклые - вот в этом то и проблема была.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.