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

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

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

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

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

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

Размер: 5.0 Кб
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2011, 14:58
Ответы с готовыми решениями:

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

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

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

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

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

Решение

Насчет второго - видимо нужно определить принадлежность точки треугольнику. Писал похожее недавно
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  [ТС] 3
Цитата Сообщение от diagon Посмотреть сообщение
Первые 3 координаты в вводе - точки треугольника, последняя - координата точки.
А как сделать чтобы координаты были заданы уже в коде программы, а в вводе указывалась только координата точки?
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.09.2011, 15:24 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 16:01 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Первое:
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  [ТС] 6
Цитата Сообщение от Nameless One Посмотреть сообщение
Естественно, можно было сделать проще, но мы ведь не ищем легких путей?
Спасибо большое!
Но вот про легкие пути, то мы их ищем) И надо чтобы до этого допер такой валенок как я, чтобы потом препод порадовался моим знаниям
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
25.09.2011, 16:36 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Проще некуда:
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
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
25.09.2011, 16:44 8
#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  [ТС] 9
asics, не компилится... выдаёт кучу ошибок.
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
25.09.2011, 16:49 10
Iternity, http://liveworkspace.org/code/... 35daede0a9
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 16:54 11
Iternity, это initializer list из C++11. Поддерживается свежими версиями gcc и cl.exe (вроде бы)
0
asics
25.09.2011, 16:57
  #12

Не по теме:

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

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

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

Код
 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
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 17:02 14
Ответ в сообщении #12
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 14
25.09.2011, 17:07  [ТС] 15
Nameless One, asics, извиняюсь за свою тупость, но ничего уж тут не поделаешь, глухо дело
Как всё-таки сделать чтобы программка заработала? Просто дело ещё в том, что она должна пойти на 2005 визуале, который стоит на компах в универе.
0
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
25.09.2011, 17:08 16
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
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 17:10 17
Цитата Сообщение от Iternity Посмотреть сообщение
Как всё-таки сделать чтобы программка заработала?
На 2005 студии - никак.
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 14
25.09.2011, 17:13  [ТС] 18
Olga_, работает! Премного благодарен!
0
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
25.09.2011, 17:15 19
Цитата Сообщение от 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
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.09.2011, 17:15 20
Цитата Сообщение от Iternity Посмотреть сообщение
И надо чтобы до этого допер такой валенок как я, чтобы потом препод порадовался моим знаниям
Насчет моего кода - я использую следующий алгоритм:
Если точка D лежит в треугольнике ABC, то сумма площадей треугольников ABD, BCD, ACD равна площади треугольника ABC. Если не равна - то точка лежит вне треугольника. Что я и проверяю.
Более кошерный способ - найти косое произведение векторов, и площадь получившегося параллелограмма поделить на 2. Но я как-то не въехал, как там формула получается...(
0
25.09.2011, 17:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2011, 17:15
Помогаю со студенческими работами здесь

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

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

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

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


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

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