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

Задание на С++.Попадание точки в закрашенную область - C++

Восстановить пароль Регистрация
 
Evgeniy_newbie
0 / 0 / 0
Регистрация: 06.10.2012
Сообщений: 5
06.10.2012, 19:21     Задание на С++.Попадание точки в закрашенную область #1
Помогите решить пожалуйста, очень надо. Файл с заданием прикреплен ниже.Заранее спасибо.

Для действительных х и у, определяющих координату точки A(x,y) в декартовых координатах, определить значение SPO.
Миниатюры
Задание на С++.Попадание точки в закрашенную область  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
06.10.2012, 20:40     Задание на С++.Попадание точки в закрашенную область #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
#include "stdafx.h"
#include "iostream"
#include "windows.h"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    const double R1 = 10, R2 = 12;
    double x, y, SPO;
 
    cout << "Введите x,y: ";
    cin >> x >> y;
 
    if ( (sqrt(x*x + y*y)<=R1) || (y<=0 && x>=-R1 && x<=R1) )   // красная
        SPO = x + 1/(2*x - y);
    else
    if ( y>=0 && sqrt(x*x + y*y)>R1 && sqrt(x*x + y*y)<=R2 )    // желтая
        SPO = x/(5*y - x);
    else
    if ( y<0 && (x>=-R2 && x<-R1) || (x>R1 && x<=R2) )          // синяя
        SPO = 1/(x - y);
    else
        SPO = x * y;
 
    cout << "SPO = " << SPO << endl;
 
 
    system("pause");
    return 0;
}
Вроде правильно, но надо проверить.
Еще если x и y будут нулю то тогда деление на ноль.

C++
1
2
3
4
5
6
7
8
9
10
    if ( (sqrt(x*x + y*y)<=R1) || ( (y<=0 && y>=-R2 ) && x>=-R1 && x<=R1) ) // красная
        SPO = x + 1/(2*x - y);
    else
    if ( y>=0 && sqrt(x*x + y*y)>R1 && sqrt(x*x + y*y)<=R2 )    // желтая
        SPO = x/(5*y - x);
    else
    if ( (y<0 && y>=-R2 ) && (x>=-R2 && x<-R1) || (x>R1 && x<=R2) )         // синяя
        SPO = 1/(x - y);
    else
        SPO = x * y;
Evgeniy_newbie
0 / 0 / 0
Регистрация: 06.10.2012
Сообщений: 5
06.10.2012, 21:21  [ТС]     Задание на С++.Попадание точки в закрашенную область #3
Валид, я просто новичек в этом деле, читаю литературу как программировать на VS 2010 C++, хочу просто разобраться как вообще математически вы решили эту проблему (с математикой плохо в школе дружил, но всё же борюсь с этой проблемой), записали на языке С++. Мб посоветуете какую ещё небудь литературу, зарание спасибо.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
06.10.2012, 22:21     Задание на С++.Попадание точки в закрашенную область #4
Насчет литературы не знаю что посоветовать. Попробую объяснить. Хотя из меня такой объяснитель

Для желтой области. y должен быть больше нуля. Потом вычислить расстояние от начала координат до этой точки по теореме Пифагора. Если оно больше R1 и меньше R2 то тогда точка в этой области.
if ( y>=0 && sqrt(x*x + y*y)>R1 && sqrt(x*x + y*y)<=R2 )

Для синей области. Она на две части разбита. У нее y в любом случае должен быть меньше нуля и больше -R2. А x или (от -R2 до -R1) или (от +R1 до R2)
if ( (y<0 && y>=-R2 ) && (x>=-R2 && x<-R1) || (x>R1 && x<=R2) )

А для красной примерно тоже самое. Сверху полукруг а снизу четырехугольник.
Evgeniy_newbie
0 / 0 / 0
Регистрация: 06.10.2012
Сообщений: 5
06.10.2012, 23:47  [ТС]     Задание на С++.Попадание точки в закрашенную область #5
Спасибо огромное Я конечно не знал за sqrt,и как прописать R1 & R2, а так что учили на занятиях в институте, всё понял, Спасибо огромное, за предоставленную информацию
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.10.2012, 06:42     Задание на С++.Попадание точки в закрашенную область #6
см комментарии:
C++
1
2
3
4
5
6
7
8
9
10
if ( (sqrt(x*x + y*y)<=R1 /*вот здесь не хватает && y>0*/) || ( (y<=0 && y>=-R2/*я разглядел на рисунке ограничение переменной Y а не -R2*/ ) && x>=-R1 && x<=R1) ) // красная
 SPO = x + 1/(2*x - y);
 else
 if ( y>=0 && sqrt(x*x + y*y)>R1 && sqrt(x*x + y*y)<=R2 ) // желтая
 SPO = x/(5*y - x);
 else
 if ( (y<0 && y>=-R2 ) && (x>=-R2 && x<-R1) || (x>R1 && x<=R2) ) // синяя
 SPO = 1/(x - y);
 else
 SPO = x * y;
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
07.10.2012, 11:13     Задание на С++.Попадание точки в закрашенную область #7
valeriikozlov, Спасибо что подсказали. Я это только что заметил.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 12:37     Задание на С++.Попадание точки в закрашенную область
Еще ссылки по теме:

Попадание точки в заштрихованную область C++
C++ Попадание точки в заштрихованную область
Попадание точки в заштрихованную область C++

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

Или воспользуйтесь поиском по форуму:
Evgeniy_newbie
0 / 0 / 0
Регистрация: 06.10.2012
Сообщений: 5
07.10.2012, 12:37  [ТС]     Задание на С++.Попадание точки в закрашенную область #8
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
89
90
91
#include "stdafx.h"
#include <iostream>
#include "math.h"
/*1-red
2-blue
3-yellow
4-other white */
using namespace std;
int main(int argc, char* argv[])
{
a:
short retry;
    double R,romb; //romb-переменная для вычисления формулы ромба
    double X,Y; // координаты
    double spo; //геометрическое место точки
    short    color; //хранит №цвета
    
    cout<<"Enter R  and point X point Y values (ex.: '5 -4 4')"<<"\n"; //прозьба пользователя ввести R, X, Y
    cin>>R>>X>>Y; // считываем введенные с клавиатуры значения R,X,Y
romb = abs(X+R)+ abs(Y-R); //формула, описывающая границы ромба
    if (romb < R) 
    {
        color = 1;
    }
    else
    if   (X>(-2*R) && (pow(X+R,2)+pow(Y-R,2))<=(R*R) && X<(-R))     //Kvadrat
    {
        color = 3;
    }
    else
    if   ((pow(X+R,2)+pow(Y-R,2))<=(R*R) && X>(-R) && X<=0 && Y<=R && Y>=0)     //Kvadrat
    {
        color = 2;
    }
 
    else
 
    if    ((Y<= R) && (X>=(-R)) && ((pow(X+R,2)+pow(Y-R,2)) >= (R*R)) && (X<=0) && (Y>=0))// blue up
    {
        color = 1;
    }
 
    else
    {color = 4;}
    switch(color)
    {
    
    case 1:
        cout<<"Point`s zone is red"<<"\n";
        if((X+Y)!=0)
        {
        spo = 1/(X+Y);
        cout<<"spo = 1/(X+Y) = "<< spo <<"\n\n";
        }
        else
            cout<<"SPO is undefindet, because X+Y=0\n\n";
        break;
    case 2:
        cout<<"Point`s zone is blue"<<"\n";
        if(X==0 || Y==0)
        cout<<"SPO is undefindet, because of x or y = 0\n\n";
        else
        {
        spo = 1/X+1/Y;
        cout<<"spo = 1/X+1/Y = "<< spo <<"\n\n";
        }
        break;
    case 3:
        cout<<"Point`s is yellow "<<"\n";
        if(Y==0)
        cout<<"SPO is undefindet, because of x or y = 0\n\n";
        else
        {
        spo = X/Y;
        cout<<"spo = x/y = "<< spo <<"\n\n";
        }
        break;
    default: cout<<"Point`s zone is white"<<"\n"; spo = X*Y; cout<<"spo = "<< spo <<"\n\n";break; 
    }
b:  cout<<"retry?(1-yes, 2-no)\n";//вопрос пользователю: "хочет ли он продолжить работать или желает закончить?"
    cin>>retry;
    if(retry==1) //если хочет
        goto a;  //то вернуться в начало программы
    else //если нет, то идем в конец
        if(retry==2)
    goto end;
    else //если пользователь не правильно ввел хочет он закончить или нет, то сообщить об ошибке и спросить заново
        cout<<"Error! try again!\n";
    goto b;
end:    return 0;
}
как это можно отредактировать под моё задание? заранeе спасибо.

Добавлено через 10 минут
V.A.L.I.D, могли бы вы посмотреть другой вариант написания задания?
Yandex
Объявления
07.10.2012, 12:37     Задание на С++.Попадание точки в закрашенную область
Ответ Создать тему
Опции темы

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