С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 14

Определить, принадлежит ли точка с координатами x, y заштрихованной части плоскости

25.09.2011, 14:58. Показов 7564. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста полному чайнику решить две задачки.

1) Даны действительные числа x1, y1, x2, y2. Вычислить min(x1, y1, x2, y2)+min(x1,x2,y1).

2) Даны вещественные числа x, y. Определить, принадлежит ли точка с координатами x, y заштрихованной части плоскости. Результат вывести в виде текстового сообщения. Представить варианты программы с использованием условного оператора if и тернарной условной операции.
Название: graph1.png
Просмотров: 418

Размер: 5.0 Кб
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2011, 14:58
Ответы с готовыми решениями:

Определить, принадлежит ли точка с координатами x, y заштрихованной части плоскости
Битый час сижу, но так и не могу ничего придумать, прошу помощи) Даны действительные числа x, y. Определить, принадлежит ли точка с...

Определить, принадлежит ли точка с координатами (x,y) заштрихованной части плоскости
даны произвольные числа x,y.Определить, принадлежит ли точка с координатами (x,y) заштрихованной части плоскости(включая ее границы) ...

Определить, принадлежит ли точка с координатами х, у заштрихованной части плоскости
Нужно определить, принадлежит ли точка с координатами х, у заштрихованной части плоскости: Вот сам рисунок (насколько я разглядел и...

31
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.09.2011, 15:04
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Насчет второго - видимо нужно определить принадлежность точки треугольнику. Писал похожее недавно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <cmath>
#include <limits>
 
struct pt
{
    double x, y;
};
 
std::istream& operator >> ( std::istream& stream, pt& a )
{
    stream >> a.x >> a.y;
    return stream;
}
 
class seg
{
    pt a, b;
 
public:
 
    seg( pt _a, pt _b )
    { 
        a = _a;
        b = _b;
    }
 
    double len() const
    {
        return sqrt( 1. * (a.x - b.x) * (a.x - b.x) + 1.* (a.y - b.y) * ( a.y - b.y ) );
    }
};
 
class triangle
{
    pt a, b, c;
    
public:
    
    triangle( const pt& _a, const pt& _b, const pt& _c )
    {
        a = _a;
        b = _b;
        c = _c;
    }
    
    double square() const
    {
        double ab = seg(a, b).len();
        double ac = seg(a, c).len();
        double bc = seg(b, c).len();
        
        double p = (ab + ac + bc) / 2;
        
        return sqrt( p * (p - ab) * (p - ac) * (p - bc) );
    }
    
};
 
int main()
{
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    
    pt a, b ,c, d;
    
    std::cin >> a >> b >> c >> d;
    
    double sum = 
        triangle(a, b, d).square() +
        triangle(b, c, d).square() +
        triangle(c, a, d).square();
    
    const double EPS = 0.00001;
    
    if ( fabs( sum - triangle(a, b, c).square() ) < EPS )
        std::cout << "In";
    else
        std::cout << "Out";
}
Первые 3 координаты в вводе - точки треугольника, последняя - координата точки.
2
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 14
25.09.2011, 15:19  [ТС]
Цитата Сообщение от diagon Посмотреть сообщение
Первые 3 координаты в вводе - точки треугольника, последняя - координата точки.
А как сделать чтобы координаты были заданы уже в коде программы, а в вводе указывалась только координата точки?
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.09.2011, 15:24
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <cmath>
#include <limits>
 
struct pt
{
    double x, y;
    
    pt()
    {
        x = y = 0;
    }
    
    pt( double _x, double _y )
    {
        x = _x;
        y = _y;
    }
};
 
std::istream& operator >> ( std::istream& stream, pt& a )
{
    stream >> a.x >> a.y;
    return stream;
}
 
class seg
{
    pt a, b;
 
public:
 
    seg( pt _a, pt _b )
    { 
        a = _a;
        b = _b;
    }
 
    double len() const
    {
        return sqrt( 1. * (a.x - b.x) * (a.x - b.x) + 1.* (a.y - b.y) * ( a.y - b.y ) );
    }
};
 
class triangle
{
    pt a, b, c;
    
public:
    
    triangle( const pt& _a, const pt& _b, const pt& _c )
    {
        a = _a;
        b = _b;
        c = _c;
    }
    
    double square() const
    {
        double ab = seg(a, b).len();
        double ac = seg(a, c).len();
        double bc = seg(b, c).len();
        
        double p = (ab + ac + bc) / 2;
        
        return sqrt( p * (p - ab) * (p - ac) * (p - bc) );
    }
    
};
 
int main()
{
 
    pt a(0, 0), b(2, 0) ,c(1, 2), d;
    std::cin >> d;
    
    double sum = 
        triangle(a, b, d).square() +
        triangle(b, c, d).square() +
        triangle(c, a, d).square();
    
    const double EPS = 0.00001;
    
    if ( fabs( sum - triangle(a, b, c).square() ) < EPS )
        std::cout << "In";
    else
        std::cout << "Out";
}
Координаты в 74 строке задаются, если что.
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 16:01
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Первое:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
 
double min(size_t cnt, ...);
 
int main()
{
    double x1, y1, x2, y2;
    printf("Input for numbers: ");
    scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
 
    printf("min(%.2f, %.2f, %.2f, %.2f)+min(%.2f, %.2f, %.2f)=%.2f\n",
       x1, y1, x2, y2, x1, x2, y1,
       min(4, x1, y1, x2, y2) + min(3, x1, x2, y1));
    
    exit(0);
}
 
double min(size_t cnt, ...)
{
    double result, current;
    va_list ap;
    
    if(cnt == 0)
    fputs("Take your meds, you psycho! Can't find the minimum of no numbers!\n", stderr), exit(1);
 
 
    va_start(ap, cnt);
 
    result = va_arg(ap, double);
 
    while(--cnt)
    {
    current = va_arg(ap, double);
    result = (result < current ? result : current);
    }
    
    va_end(ap);
    return result;
}
Естественно, можно было сделать проще, но мы ведь не ищем легких путей?
1
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 14
25.09.2011, 16:29  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
Естественно, можно было сделать проще, но мы ведь не ищем легких путей?
Спасибо большое!
Но вот про легкие пути, то мы их ищем) И надо чтобы до этого допер такой валенок как я, чтобы потом препод порадовался моим знаниям
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
25.09.2011, 16:36
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Проще некуда:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <algorithm>
 
int main(){
  double x1, y1, x2, y2;
  std::cin >> x1 >> y2 >> x2 >> y2;
  std::cout << std::min({x1, y1, x2, y2}) + std::min({x1, x2, y1});
  return 0;
}
1
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
25.09.2011, 16:44
#define MIN(x, y) ((x) < (y) ? (x) : (y))

min(a, b, c) = MIN(MIN(a, b), c)
1
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 14
25.09.2011, 16:46  [ТС]
asics, не компилится... выдаёт кучу ошибок.
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
25.09.2011, 16:49
Iternity, http://liveworkspace.org/code/... 35daede0a9
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 16:54
Iternity, это initializer list из C++11. Поддерживается свежими версиями gcc и cl.exe (вроде бы)
0
25.09.2011, 16:57

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
cl.exe (вроде бы)
Пока еще нет...

1
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 14
25.09.2011, 17:00  [ТС]
Цитата Сообщение от asics Посмотреть сообщение
У меня ничего не происходит :\

У меня стоит Visual studio 2010. И выдаёт вот это:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 error C2143: syntax error : missing ')' before '{'
1> 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)' : expects 3 arguments - 0 provided
1>  c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2101) : see declaration of 'std::min'
1> error C2780: 'const _Ty &std::min(const _Ty &,const _Ty &)' : expects 2 arguments - 0 provided
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2093) : see declaration of 'std::min'
1>error C2143: syntax error : missing ';' before '{'
1> error C2143: syntax error : missing ';' before '}'
1> error C2059: syntax error : ')'
1> error C2143: syntax error : missing ')' before '{'
1> error C2780: 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)' : expects 3 arguments - 0 provided
1>   c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2101) : see declaration of 'std::min'
1> error C2780: 'const _Ty &std::min(const _Ty &,const _Ty &)' : expects 2 arguments - 0 provided
1>  c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2093) : see declaration of 'std::min'
1> error C2143: syntax error : missing ';' before '{'
1> error C2143: syntax error : missing ';' before '}'
1>d error C2059: syntax error : ')'
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 17:02
Ответ в сообщении #12
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 14
25.09.2011, 17:07  [ТС]
Nameless One, asics, извиняюсь за свою тупость, но ничего уж тут не поделаешь, глухо дело
Как всё-таки сделать чтобы программка заработала? Просто дело ещё в том, что она должна пойти на 2005 визуале, который стоит на компах в универе.
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
25.09.2011, 17:08
C
1
2
3
4
5
6
7
8
9
#include<stdio.h>
#define MIN(x, y) ((x) < (y) ? (x) : (y))
int main()
{
   double x1, x2, y1, y2;
   scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
   printf("%f\n", MIN(MIN(x1, y2), MIN(x1,y2)) + MIN(MIN(x1,x2),y1));
   return 0;
}
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 17:10
Цитата Сообщение от Iternity Посмотреть сообщение
Как всё-таки сделать чтобы программка заработала?
На 2005 студии - никак.
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 14
25.09.2011, 17:13  [ТС]
Olga_, работает! Премного благодарен!
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
25.09.2011, 17:15
Цитата Сообщение от Iternity Посмотреть сообщение
Olga_, работает! Премного благодарен!
А вот второе задание:
C
1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main()
{
   double x, y;
   scanf("%lf%lf", &x, &y);
   if (x >= 0 && x <= 2 && y >= 0 && y <= x/2.0)
      printf("yes");
   else
      printf("no");
   return 0;
}
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.09.2011, 17:15
Цитата Сообщение от Iternity Посмотреть сообщение
И надо чтобы до этого допер такой валенок как я, чтобы потом препод порадовался моим знаниям
Насчет моего кода - я использую следующий алгоритм:
Если точка D лежит в треугольнике ABC, то сумма площадей треугольников ABD, BCD, ACD равна площади треугольника ABC. Если не равна - то точка лежит вне треугольника. Что я и проверяю.
Более кошерный способ - найти косое произведение векторов, и площадь получившегося параллелограмма поделить на 2. Но я как-то не въехал, как там формула получается...(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.09.2011, 17:15
Помогаю со студенческими работами здесь

Определить, принадлежит ли точка с координатами x,y заштрихованной части плоскости
Определить, принадлежит ли точка с координатами x,y заштрихованной части плоскости

Определить, принадлежит ли точка с координатами x, y заштрихованной части плоскости
Определить, принадлежит ли точка с координатами x, y заштрихованной части плоскости.

Определить принадлежит ли точка с координатами (x;y) заштрихованной части плоскости
Даны вещественные числа x и y. Определить принадлежит ли точка с координатами (x;y) заштрихованной части плоскости.

Определить,принадлежит ли точка с координатами Х,У заштрихованной части плоскости
Помогите пожалуйста. За ранее спасибо. Даны целые числа Х и У. Определить, принадлежит ли точка с координатами Х,У заштрихованной части...

Определить, принадлежит ли точка с координатами x,y заштрихованной части плоскости
Даны вещественные числа x и y. Определить, принадлежит ли точка с координатами(x; y) заштрихованной части плоскости.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru