Форум программистов, компьютерный форум CyberForum.ru

Логическое выражение - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
12.07.2013, 16:59     Логическое выражение #1
Здравствуйте. Запишите логическое выражение, которое принимает значение "истина" тогда и только тогда, когда точка с координатами (x, y) принадлежит заштрихованной области. Подскажите как правильно описать область на рисунке. У меня описано так, но это неправильно?
C++
1
2
3
if ( ( y >= 1 - x ) && ( y >= 0.5 - x ) )
        printf ( "\n%s", " Попал " );
    else printf ( "\n%s", " Не попал " );
Изображения
 
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6168 / 2897 / 282
Регистрация: 04.12.2011
Сообщений: 7,704
Записей в блоге: 3
12.07.2013, 17:27     Логическое выражение #2
C++
1
2
3
if ( (x >= 0.5 && x <= 1 &&   0.25 - x*x > 0 &&  y*y <= 1 - x*x  &&   y*у  >= 0.25 - x*x )
        printf ( "\n%s", " Попал " );
    else printf ( "\n%s", " Не попал " );
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
12.07.2013, 17:39     Логическое выражение #3
щя я тебе напишу (полагая, что это круг)
C++
1
2
3
4
double t = pow((pow(x,2)+pow(y,2)),0.5); // радиус вектор точки
 if (x && y && t>0.5 && t<1) // если он в данной области и координаты не отрицательны
printf ( "\n%s", " Попал " );
    else printf ( "\n%s", " Не попал " );
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.07.2013, 17:46     Логическое выражение #4
IGPIGP, а разве для, скажем (0.1; 0.8) будет "мимо" ?

Добавлено через 1 минуту
Цитата Сообщение от soican Посмотреть сообщение
if (x && y
странная проверка для данного случая

Добавлено через 3 минуты
По-моему, условие попадания должно быть такое:
C++
1
2
double sq = x*x + y*y;
if( sq > 0.25 && sq < 1 && x > 0 && y > 0 )
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
12.07.2013, 17:46     Логическое выражение #5
Цитата Сообщение от Tulosba Посмотреть сообщение
странная проверка для данного случая
тьфу конечно!!
C++
1
x>0 && y>0
у меня давний загон, что минусовые значения будут false - на подсознании минус - плохо, false ))
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6168 / 2897 / 282
Регистрация: 04.12.2011
Сообщений: 7,704
Записей в блоге: 3
12.07.2013, 17:47     Логическое выражение #6
Цитата Сообщение от Tulosba Посмотреть сообщение
IGPIGP, а разве для, скажем (0.1; 0.8) будет "мимо" ?
Верно, - поторопился.
C++
1
2
3
if ( (x >= 0 && x <= 1 &&   0.25 - x*x > 0 &&  y*y <= 1 - x*x  &&   y*у  >= 0.25 - x*x )
        printf ( "\n%s", " Попал " );
    else printf ( "\n%s", " Не попал " );
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.07.2013, 17:57     Логическое выражение #7
Цитата Сообщение от IGPIGP Посмотреть сообщение
Верно, - поторопился.
Дважды. Проверьте (0.1, -0.8)

Добавлено через 2 минуты
Тут же всё просто: два круга, попал в один, не попал в другой.
x^2 + y^2 < R^2
x^2 + y^2 > r^2
И ограничение на четверть.
x>0, y>0.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6168 / 2897 / 282
Регистрация: 04.12.2011
Сообщений: 7,704
Записей в блоге: 3
12.07.2013, 18:21     Логическое выражение #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Дважды. Проверьте (0.1, -0.8)
Не-a! Патамушта Y<0 быть может, но не должен! Первый квадрант не пущает.
И еще, - Вы забыли условие принадлежности действительной плоскости.

Добавлено через 12 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
И еще, - Вы забыли условие принадлежности действительной плоскости.
Это я неправ.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.07.2013, 20:13     Логическое выражение #9
Цитата Сообщение от IGPIGP Посмотреть сообщение
Не-a! Патамушта Y<0 быть может, но не должен! Первый квадрант не пущает.
Не понял. Поясните пожалуйста. Зачем тогда проверка x >= 0?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.07.2013, 20:20     Логическое выражение #10
Tulosba, у вас все верно. если нужны и граничные точки, то можно еще = добавить, а так все хорошо.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6168 / 2897 / 282
Регистрация: 04.12.2011
Сообщений: 7,704
Записей в блоге: 3
12.07.2013, 20:21     Логическое выражение #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Не понял. Поясните пожалуйста. Зачем тогда проверка x >= 0?
В первом квадранте 0<=x<=1 для предложенной четверти кольца. Можно ведь найти Y-ки из (0.25 - x*x) <= У<= (1 - x*x) и для некоторых -1 <= x <= 0, но геометрически это уже IV квадрант. То есть, эти точки нужно отсечь, так как указанной на рисунке фигуре они не принадлежат
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.07.2013, 20:41     Логическое выражение #12
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть, эти точки нужно отсечь
Так чтобы их отсечь и надо условие y>0, которого у Вас почему-то нет.

Добавлено через 1 минуту
Цитата Сообщение от Thinker Посмотреть сообщение
то можно еще = добавить
в случае вещественных аргументов это всё равно не будет нормально работать.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.07.2013, 20:43     Логическое выражение #13
Цитата Сообщение от Tulosba Посмотреть сообщение
в случае вещественных аргументов это всё равно не будет нормально работать.
даже с граничной точкой (0.0, 1.0)?
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
12.07.2013, 20:46  [ТС]     Логическое выражение #14
Цитата Сообщение от Tulosba Посмотреть сообщение
в случае вещественных аргументов
можно добавить функцию проверки 2 double
C++
1
2
3
4
5
bool Check ( const double a, const double b, const double error )
{
        a = 0;
    return fabs ( a - b ) < error;
}
где error задаваемая погрешность, ну как то так вроде
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.07.2013, 21:19     Логическое выражение #15
Цитата Сообщение от Tulosba Посмотреть сообщение
в случае вещественных аргументов это всё равно не будет нормально работать.
Цитата Сообщение от Thinker Посмотреть сообщение
даже с граничной точкой (0.0, 1.0)?
ну, ключевое слово тут "нормально". Но, если хочется, можно и нестрогое неравенство сделать
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6168 / 2897 / 282
Регистрация: 04.12.2011
Сообщений: 7,704
Записей в блоге: 3
12.07.2013, 21:21     Логическое выражение #16
Цитата Сообщение от Tulosba Посмотреть сообщение
Так чтобы их отсечь и надо условие y>0, которого у Вас почему-то нет.
Чтобы попасть в первый квадрант нужно не попасть в ещё какой-то. Нарисуйте точку x= -0.4, у = 0.2
Что касается y>0, то тут Вы абсолютно правы. Я в условии (бестолковом, как выяснилось):
0.25 - x*x > 0
и намеревался это выразить. А надо бы:
0 <= x && x <= 1 && y>0 && y*y <= 1 - x*x && y*у >= 0.25 - x*x
soican
12.07.2013, 21:44
  #17

Не по теме:

блин нифигасе тема вызвала обсуждений

Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.07.2013, 21:54     Логическое выражение #18
давайте мыслить здраво. первая четверть описывается условием:
x >= 0 && y >= 0.
кольцо описывается условием
x*x + y*y >= 0.25 && x*x + y*y <= 1

берем пересечение этих множеств:
x >= 0 && y >= 0 && x*x + y*y >= 0.25 && x*x + y*y <= 1
и все...
IGPIGP
12.07.2013, 21:56
  #19

Не по теме:

Цитата Сообщение от soican Посмотреть сообщение
блин нифигасе тема вызвала обсуждений
Дык, простота же подкупает и провоцирует быстрый ответ.
Но, как говаривал один бывалый гриб: - "В споре рождается ВСЁ!"

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2013, 22:07     Логическое выражение
Еще ссылки по теме:

Логическое выражение преобразовать в бинарное дерево C++
Объясните пожалуйста логическое выражение C++
Логическое выражение C++

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

Или воспользуйтесь поиском по форуму:
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
12.07.2013, 22:07  [ТС]     Логическое выражение #20
Цитата Сообщение от IGPIGP Посмотреть сообщение

Не по теме:


Дык, простота же подкупает и провоцирует быстрый ответ.
Но, как говаривал один бывалый гриб: - "В споре рождается ВСЁ!"

Простой ответ часто не очевиден, но именно простота лежит в основе глубокой истины, в основе работы
Yandex
Объявления
12.07.2013, 22:07     Логическое выражение
Ответ Создать тему
Опции темы

Текущее время: 17:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru