Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите с решением
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Clane
1. Найдите координаты всех седловых точек в матрице 10х10.
Седловой точкой называется элемент матрицы, максимальный в своем
столбце и минимальный в своей строке.
2. Задан выпуклый n-угольник (координатами своих вершин)
и точка А(x;y). Определить принадлежит ли эта точка многоугольнику.
AlaRic
К какому числу?
Clane
Просьбу решить задачи мне присалали на e-mail. Я решил выенсти эту проблему на форум.
Romario
Гы, это пока для меня далеко ??? :-[ :-/
pascal65536
Я делал подобную задачу (принадлежность точки треугольнику) посмотри на pascal.hop.ru
mj
Дан набор точек, надо по ним построить выпуклый многоугольник и разделить так чтобы две получившиеся части были как можно одинаковее.
Криво написано, но это олимпиадная задачка...
big
А куда можно отправить программу к первой задаче?
Clane
Или на clane@newmail.ru, или просто в форуме оставь..
Ivs
во второй задаче нужно обходить n - угольник и проверять на то что бы точка постоянно лежала справа от внешней стороны. Есть такая же задача только с треугольником.
mj
Цитата
во второй задаче нужно обходить n - угольник и проверять на то что бы точка постоянно лежала справа от внешней стороны. Есть такая же задача только с треугольником.

Ну это первое что приходит в голову.
Условие задачи допускает наличие точек внутри многоугольника и через все внутренние точки должна проходить граница участка, а в этом и загвоздка.

Кстати эта олимпиадная задачка 4 или 5 республиканской олимпиады среди школьников Башкирии.
mj
Открою вам секретик.
Я занял все первые места по всем наминациям на городской, а потом и республиканской олимпиаде в 2000 году среди студентов техникумов и колледжей Башкирии.
Ivs
Clane скинь мне тесты на первую задачу.
Я её решил, вот занимаюсь отладкой.
Ivs
Матрица блин слишком большая чтоб вводить 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.
Dimka
Ну, первая задачка тривиальна - про нее я даже говорить ничего не буду.
Вторая задачка встречается в лабораторных работах по Компьютерной графике 3 курса соответствующей специальности.
Если вершины многоугольника заданы в порядке обхода по периметру, то нужно строить векторы, описывающие стороны. Каждый такой вектор умножать на вектор точки. Смотреть на знак числа. Суть в том, что если обходить многоугольник по периметру, всегда знаешь, где внешная область, а где внутренняя (справа или слева), поэтому можно получить однозначное решение.
Мы, правда, решали эту задачку для невыпуклых многоугольников - их надо было разбивать на выпуклые - вот в этом то и проблема была.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.