0 / 0 / 0
Регистрация: 25.12.2016
Сообщений: 4
1

Найти все треугольники, которые вписаны в окружность

03.02.2019, 17:11. Показов 936. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, необходимо написать программу, которая генерирует 100 случайных точек в двумерном пространстве, затем находит все возможные треугольники вписанные в заданную окружность.

Окружность задам как факт в программе, сделаю (наверное) перебор точек и с помощью счетчика узнаю сколько треугольников, но как сгенерировать точки понять не могу.

Нашел как генерировать список случайных числе, но мне это не помогло.
Кликните здесь для просмотра всего текста

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DOMAINS
  list = integer*
PREDICATES              
  randList(integer, list)
CLAUSES
      randList(0, []):-!.
      randList(Size, [Head|Tail]):-
        Size > 0,
          NextSize = Size - 1, random(200, Rn), !,
          Head = Rn - 100,
          randList(NextSize, Tail).  
GOAL
    write("N :"), readint(N),
    randList(N, List).




Генерировать точки хотел так (да, без рекурсии, т.к. не могу её понять после C )

Но не понял как правильно делать интерфейс класса, как объявить точку и вообще не понятно :\
Думаю неправильное решение было делать это данным методом.

main.cl
Prolog
1
2
3
4
5
6
7
8
9
class main
    open core
predicates
    run : core::runnable.
end class main
class points : pointp
constructors
new : (integer X, integer Y).
end class points
resourceIdentifiers.i
Prolog
1
2
3
4
5
6
7
interface resourceIdentifiers
end interface resourceIdentifiers
 
interface pointp
properties
rePoint : (integer, integer).        ----- ???
end interface pointp

main.pro
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
implement points
facts
point:(integer X, integer Y).
clauses
new(Точка):- point := Точка.
rePoint()=point.
rePoint(Точка):- point:=Точка.
end implement points
implement main
    open core,console,math
clauses
    run() :-
    Точка1 = points:new(random(200),random(200)),
    writef("Точка:%", Точка1:rePoint),                             ----------- и так 100 раз =-O
    _ = readchar().
end implement main
goal
    console::runUtf8(main::run).
Заранее спасибо всем откликнувшимся!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2019, 17:11
Ответы с готовыми решениями:

Найти все треугольники, которые могут иметь эти точки за вершины
На плоскости заданы 5 точек с координатами (x0, y0), (x1, y1) ..., (x4, y4). Найти все...

Найти все возможные треугольники, которые могут существовать. Результат вывести на экран.
Функция которая по 3 десятичным числам проверяет, могут ли числа быть сторонами треугольника. C...

Найти все треугольники которые стороны не превышающие 30, и есть целые числа. Площадь тоже целое число
Найти все треугольники которые стороны не превышающие 30, и есть целые числа. Площадь тоже целое...

Найти все окружности, в которые вложена самая маленькая окружность
{Даны n окружностей на плоскости, заданных координатами своих центров и радиусами. Найти все...

3
Фрилансер
3707 / 2079 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
03.02.2019, 17:42 2
Цитата Сообщение от EnioGry Посмотреть сообщение
все возможные треугольники вписанные в заданную окружность.
Странная задача. Если сгенерировать 100 случайных точек, то вероятность, что хотя бы одна из них попадёт на окружность, практически равна нулю. А тут надо целых три..

Цитата Сообщение от EnioGry Посмотреть сообщение
да, без рекурсии, т.к. не могу её понять после C
Вы так пишете, как будто в С нет рекурсии.
А в Прологе без рекурсии, однако, не выжить..

Цитата Сообщение от EnioGry Посмотреть сообщение
как правильно делать интерфейс класса
Да не нужно для этой задачи делать для точки отдельный класс, достаточно домена.
Prolog
1
2
3
4
5
6
7
8
domains
    point = p(real, real).
 
class predicates
    generate : (integer) -> point*.
clauses
    generate(N) = L :-
        L = [ p(math::random(), math::random()) || _ = std::cIterate(N) ].
0
0 / 0 / 0
Регистрация: 25.12.2016
Сообщений: 4
03.02.2019, 18:09  [ТС] 3
Да нет, просто когда в университете учили С, С++, С#, нам объясняли. А здесь есть задание и просто не зная языка, например, я начинаю думать как сделал бы это на С++, потом понимаю что Prolog так не работает, а как работает..?
И все
Запутался, решил обратиться к знающим людям.

--

Prolog
1
2
3
clauses
    generate(N) = L :-
        L = [ p(math::random(), math::random()) || _ = std::cIterate(N) ].
Немного не понял как работает, особенно _ = std::cIterate(N).

Можете немного рассказать как эта строка работает и как сделать "обход" для того чтобы "сгенерировать" N треугольников и отобрать, с помощью nth0(Index, List, Elem)?
0
Фрилансер
3707 / 2079 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
03.02.2019, 22:51 4
Если в чистом виде решать сформулированную задачу, то надо посчитать количество различных точек, лежащих на окружности, и пять от них число сочетаний по 3. Как я уже писал, если не подбирать числа как-то специально, скорее всего, таких треугольников будет 0.

Коллектор списков в старших версиях Visual Prolog - это синтаксический сахар для findall - находятся все варианты истинности предиката (группы предикатов) после || и собираются в список соответствующие значения выражения перед ||

В результате предикат делает то, что просили - собирает в список N случайных точек
0
03.02.2019, 22:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2019, 22:51
Помогаю со студенческими работами здесь

Вывести изображение "5 соприкасающихся окружностей вписаны в большую окружность"
Вывести изображение "5 соприкасающихся окружностей вписаны в большую окружность"

Найти такие треугольники, которые лежат в одной четверти
Добрый день. Надеюсь на вашу помощь. Задание: Для набора треугольников, заданных тремя...

Вывести все клетки, которые покрывает заданная окружность
На клеточном поле дана окружность, с центром в середине клетки с координатами (xc; yc) и радиусом...

Найти все прямоугольные треугольники
Есть программа на Visual Prolog, помогите пожалуйста перевести на Turbo Prolog. Код программы:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru