Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2023, 20:00   #1
Vitaliere
Новичок
Джуниор
 
Регистрация: 09.10.2023
Сообщений: 1
По умолчанию Не могу выполнить задание

Создай функцию g(x,y), которая должна быть способна принять два аргумента, являющиеся рациональными координатами некоторой точки M(x,y) на плоскости. Она обязана возвратить True в случае принадлежности этой точки объединению множеств A и B и False в противном случае. Множество A представляет собой открытый прямоугольник (исключая границу) со сторонами, параллельными осям координат, двумя противоположными вершинами которого являются точки (5;-1) и (-4;7) a множество B — это открытое кольцо (исключая границу) с центром в точке (-5;6) и диаметрами ограничивающих его окружностей 4 и 10.
Не разрешается использовать списки (lists), кортежи (tuples), множества (sets) и словари (dicts), а также подключать какие-либо библиотеки за исключением библиотеки math, необходимой для решения первого задания.
Также эта функция не должна ничего печатать или писать, а подключение файла командой from (название) import g также не должно приводить к попыткам ввода или вывода чего-либо.
Мой код:
Код:
def g(x,y):
    if -4<x<5 and -1<y<7:
        if 2.0<(((x+5)**2.0 + (y-6)**2.0)**0.5)<5.0:
            return True
        else: return False
    else: return False
Вроде всё написал, учёл(раньше ошибку выдавало, добавил везде .0), но учитель ввёл функцию Fraction(from fractions import Fraction), и при запуске команды print(g(Fraction(-3, 1), Fraction(6, 1))) оно выдаёт False, хотя должно True

Последний раз редактировалось BDA; 09.10.2023 в 22:33.
Vitaliere вне форума Ответить с цитированием
Старый 09.10.2023, 22:29   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

В вашем случае множества не объединяются а пересекается.
Из всех точек, попавших в прямоугольник выбираются точки, которые попали в кольцо.

Объединение - это все точки, которые попадают и в прямоугольник, и в кольцо.
Код:
if (-4<x<5 and -1<y<7) or (2.0<(((x+5)**2.0 + (y-6)**2.0)**0.5)<5.0):
    return True
else:
    return False
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 09.10.2023, 22:39   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

ViktorR, мне кажется, лучше сказать "попадают или в прямоугольник, или в кольцо", чтобы не возникло путаницы с пересечением.
Vitaliere, а еще можно возвращать результат самого условного выражения:
Код:
return (-4<x<5 and -1<y<7) or (2.0<(((x+5)**2.0 + (y-6)**2.0)**0.5)<5.0)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 09.10.2023, 23:10   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

И да! Так точнее и покороче.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Здравствуйте!!! У меня чрезвычайное положение нужно сдать лабораторную по паскалю, но не могу выполнить задание!!!!! DemonPASKAL Помощь студентам 2 24.12.2012 17:06
Здравствуйте!!! У меня чрезвычайное положение нужно сдать лабораторную по паскалю, но не могу выполнить задание!!!!! DemonPASKAL Помощь студентам 1 23.12.2012 07:26
выполнить задание в Exsel Екатерина92 Помощь студентам 0 11.12.2010 13:25
Помогите выполнить задание Dunn Паскаль, Turbo Pascal, PascalABC.NET 18 21.05.2010 16:05