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

Принадлежность точки N-угольнику. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ error C2440:невозможно преобразовать 'int' в 'int []' http://www.cyberforum.ru/cpp-beginners/thread331665.html
Собственно вот сам код, жирным выделена строка в которой Visual C++ 2008 показывает ошибку. Поясните кто может что я делаю не правильно... Заранее спасибо! #include <iostream> using namespace std; int sum(int arr, int size) { int result = 0; for(int i = 0; i < size; i++)
C++ Эмулятор Вебки под Seven Всем привет. Я проект пишу на С++, свой первый, более мене серьезный. Мне нужен эмулятор Веб камеры, но только что бы на Sevene работал... подскажите буду премного благодарен http://www.cyberforum.ru/cpp-beginners/thread331658.html
C++ предлагаю программу людям "альтернативное копирование файлов в проводнике"
Суть: программа копирует файл, который передаётся ей параметром командной строки. То есть: в первую очередь программу следует сделать встроенной в проводник. Делается это так: здесь скачивается программа, которая добавляет в реестр нужные вам проги. Компилим мою прогу g++ ra.cpp Полученный экзешник пихаем в любую папку, полное имя которой НЕ СОДЕРЖИТ ПРОБЕЛОВ. После с помощью скачанной проги...
C++ Языки программирования
Есть код программы #include <iostream> #include <stdlib.h> using namespace std; int main() { size_t size;
C++ Русские буквы консоли http://www.cyberforum.ru/cpp-beginners/thread331644.html
Знаю что таких тембыло очень много, но у меня никак не получается вывести слово "Привет" в консоли. Пробую так setlocale(LC_ALL,"Russian"); так wcout.imbue(locale("rus_rus.866")); и так SetConsoleOutputCP(1251); Но не один не работает. Как же мне вывести русские буквы?
C++ Вывод текста на консоль, закарючки вместо букв Я создал консольное win32 приложение в vs2010. Попробовал cout'ом вывести текст русскими буквами - вылезли разные закарючки. Ну эту проблему я уже видел))). НО!!! Когда попытался такимже способом вывести английский текст - СНОВА вылезли разные закарючки!!! Что делать:wall:?! Помогите!!! Пожзяяяяяяяялуста:cry: P.S. Заранее благодарю!:) подробнее

Показать сообщение отдельно
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
13.07.2011, 04:11     Принадлежность точки N-угольнику.
ну если писать на с++ то это пожалуй я максимально упростил но в решении многое для стиля... можно перевести это всё в форму "ввод - анализ - вывод"... но это будет то на что преподы любят ругаться и гнать что это не с++

Добавлено через 19 минут
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <vector>
/*
Структура программы:
Определён класс точки (Point), для него определены все основные понятия, позволяющие работать с ним как с обычной переменной,
std::istream& operator >> (std::istream& cin, Point& p)
и
std::ostream& operator << (std::ostream& cout, const Point& p)
определены чтобы std::cout и std::cin работали с определённым классом. Далее более простой и урезаный класс многоугольника (Polyline),
можно придраться к названию, но это уже издевательство. В нём определён только сам вектор, конструктор по умолчанию, который ничего не делает,
метод добавления вершин в многоугольник, приватная функция swap используемая методом onPlant, и собственно методы isVertex, проверяющие,
евляется ли аргумет вершиной многоугольника и onPlant, определяющий, лежит ли точка внутри многоугольника.
 
Сильно упростило бы программу неиспользование, сажем, векторов, но какой это тогда с++?
 
Кроме того, я сохранил в виде коментариев отладочную печать... если потратить полчаса, уверен, можно разобраться в том что делает программа.
*/
class Point
{
    double x, y;
 
public:
    Point(): x(0.), y(0.) {   }
    Point(double X, double Y): x(X), y(Y) {   }
    Point(const Point& p): x(p.x), y(p.y) {   }
 
    double X () const {return x;}
    double Y () const {return y;}
 
    bool operator == (const Point& p) const { return p.x == x && p.y == y; }
    void operator = (const Point& p) { x = p.x; y = p.y; }
};
std::istream& operator >> (std::istream& cin, Point& p)
{
    double m[2];
    cin >> m[0] >> m[1];
    p = Point(m[0],m[1]);
    return cin;
}
std::ostream& operator << (std::ostream& cout, const Point& p)
{
    cout << '(' << p.X() << ',' << p.Y() << ')';
    return cout;
}
 
class Polyline
{
    std::vector<Point> vertex;
    void swap(Point segment[2])
    {
        if(segment[0].X() > segment[1].X())
        {
            Point p = segment[0];
            segment[0] = segment[1];
            segment[1] = p;
        }
    }
 
public:
    Polyline() {   }
    void addVertex(const Point& p) { vertex.push_back(p); }
 
    bool isVertex(const Point& p)
    {
        for(std::vector<Point>::const_iterator it = vertex.begin(), end = vertex.end(); it != end; ++it)
            if(*it == p)
                return true;
        return false;
    }
 
 
    bool onPlant(const Point& p)
    {
        /*Идея такая, если в полиноме найдутся два ребра, одно из которых выше точки, а другое ниже - точка наша!*/
        Point segment[2];
        segment[0] = *vertex.begin();
        segment[1] = *(vertex.end() - 1);
        swap(segment);
        bool under = false,
             on = false;
        if(segment[0].X() <= p.X() && segment[1].X() >= p.X() && segment[1].X() != segment[0].X() )
        {
            under = p.Y() <= p.Y() + ( segment[0].X() - p.X() ) * ( segment[1].Y() - segment[0].Y() ) / ( segment[1].X() - segment[0].X() );
            on    = p.Y() >  p.Y() + ( segment[0].X() - p.X() ) * ( segment[1].Y() - segment[0].Y() ) / ( segment[1].X() - segment[0].X() );
            //std::cout << "Отрезок " << segment[0] << " - " << segment[1] << " определил " << on << ' ' << under << std::endl;
        }
        //else
            //std::cout << "Отрезок " << segment[0] << " - " << segment[1] << " не принят." << std::endl;
 
        for(std::vector<Point>::const_iterator it = vertex.begin(), end = vertex.end() - 1; it != end; ++it)
        {
            segment[0] = *it;
            segment[1] = *(it + 1);
            swap(segment);
            if(segment[0].X() <= p.X() && segment[1].X() >= p.X() && segment[1].X() != segment[0].X() )
            {
                if(!under)
                    under = p.Y() <= p.Y() + ( segment[0].X() - p.X() ) * ( segment[1].Y() - segment[0].Y() ) / ( segment[1].X() - segment[0].X() );
                if(!on)
                    on    = p.Y() >  p.Y() + ( segment[0].X() - p.X() ) * ( segment[1].Y() - segment[0].Y() ) / ( segment[1].X() - segment[0].X() );
                //std::cout << "Отрезок " << segment[0] << " - " << segment[1] << " определил " << on << ' ' << under << std::endl;
            }
            //else
                //std::cout << "Отрезок " << segment[0] << " - " << segment[1] << " не принят." << std::endl;
        }
        return under && on;
    }
};
 
int main()
{
    setlocale( LC_ALL, "Russian" );
    Polyline polyline;
    Point p;
    std::cout << "Введите количество вершин: ";
    unsigned size;
    std::cin >> size;
    for(unsigned i = 0; i != size; ++i)
    {
        std::cout << i + 1 << ": ";
        std::cin >> p;
        polyline.addVertex(p);
    }
    std::cout << std::boolalpha;
    std::cout << "Введите координаты проверяемой точки: ";
    std::cin >> p;
    if(polyline.isVertex(p))
        std::cout << "Это вершина многоугольника.\n";
    else if(polyline.onPlant(p))
        std::cout << "Точка лежит внутри многоугольника.\n";
    else
        std::cout << "Точка лежит вне многоугольника.\n";
}
вот тот же код только доведённый до ума,в начале присутствует комментарий, призванный помочь вам на защите.
 
Текущее время: 06:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru