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

Выпуклые многоугольники - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Строки http://www.cyberforum.ru/cpp-beginners/thread133340.html
1.В заданном предложении в конце каждого слова поставить многоточие. Напечатать исходный и преобразованный тексты, а также длину полученного предложения.2.Из данного предложения выбрать слова, имеющие заданное число букв. Помагите пожалуйста.
C++ Перевести с Pascal на Turbo C Перевести с Pascal на Turbo C program zadacha_10; uses crt; var f: text; s,s1,s2: string; i,l,l1: integer; begin clrscr; http://www.cyberforum.ru/cpp-beginners/thread133335.html
C++ Оператор присваивания и деструктор
Вопрос: почему в 52 строке Access violation? Если убрать строку 50, все будет нормально. #include <iostream> using namespace std; typedef int TType; class Foo { TType **bar; int Size; public:
клас обработчик C++
Написать класс обработчик исключительных ситуаций. Программа ловит ошибкуделения на нуль и выводитсообщение,вв какой части программы произошла ошибка. Ребята помогите с задачей пожалуйста.
C++ Каждое слово из строки занести как елемент массива! http://www.cyberforum.ru/cpp-beginners/thread133290.html
Здравствуйте! Помогите! Я новичок в с++! Нужно каждое слово из строки занести как элемент массива. количество слов может быть разное (от 1 до 500 слов). int main() { char *intput = "слово1 слово2 слово3"; char *output; char q3; char q4; char q5; char q6;
C++ Сформировать массив, содержащий сведения о личной коллекции книголюба я всю голову уже сломала напишите решение этой задачи очень надо. последняя лаба Сформировать массив, содержащий сведения о личной коллекции книголюба. Комбинированный тип содержит поля: шифр книги, автор, название, год издания, местоположение (номер стеллажа). Написать программу, выдающую следующую информацию: подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.05.2010, 19:22     Выпуклые многоугольники
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <graphics.h>
 
int x[100];
int y[100];
int u[100];
int s[100];
 
int pnpoly(int npol, int *xp, int *yp, int x, int y)
{
    int c = 0;
 
    for (int i = 0, j = npol - 1; i < npol; j = i++)
    {
        if ((((yp[i] <= y) && (y < yp[j])) || ((yp[j] <= y) && (y < yp[i]))) &&
            (x > (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i]))
            c = !c;
    }
 
    return c;
}
 
int main()
{
 
    // ---------------------------------------
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "C:\Tc\BGI");
 
    // ---------------------------------------
 
    clrscr();
    int c, t, i, f, xp, yp, sp, up, n, z;
    long s1, s2, res1 = 0, res2 = 0, sq1 = 0, sq2 = 0;
 
    cout << "BBeguTe 4ucJIo BepLLIuH nePBoro MHoroyroJIbHuKa:" << endl;
    cin >> n;
 
    cout << "BBeguTe KoopguHaTbI nePBoro MHoroyroJIbHuKa:" << endl;
    for (i = 0; i < n; i++)
    {
        cin >> x[i]; // координата x
        cin >> y[i]; // координата y
    }
 
    cout << "BBeguTe 4ucJIo BepLLIuH BToporo MHoroyroJIbHuKa:" << endl;
    cin >> z;
 
    cout << "BBeguTe KoopguHaTbI BToporo MHoroyroJIbHuKa:" << endl;
    for (i = 0; i < z; i++)
    {
        cin >> u[i]; // координата x
        cin >> s[i]; // координата y
    }
 
    // построение на экране первого многоугольника
 
    for (i = 0; i < n; i++)
    {
        circle(x[i] + 150, y[i] + 150, 2);
        if (i == n - 1)
        {
            i = 0;
            line(x[i] + 150, y[i] + 150, x[n - 1] + 150, y[n - 1] + 150);
            break;
        }
        line(x[i] + 150, y[i] + 150, x[i + 1] + 150, y[i + 1] + 150);
    }
 
    // построение на экране второго многоугольника
 
    for (i = 0; i < z; i++)
    {
        circle(u[i] + 150, s[i] + 150, 2);
        if (i == z - 1)
        {
            i = 0;
            line(u[i] + 150, s[i] + 150, u[z - 1] + 150, s[z - 1] + 150);
            break;
        }
        line(u[i] + 150, s[i] + 150, u[i + 1] + 150, s[i + 1] + 150);
    }
 
    // Расчет площади первого многоугольника через сумму площадей трапеций
 
    for (i = 0; i < n; i++)
    {
        if (i == 0)
        {
            s1 = x[i] * (y[n - 1] - y[i + 1]); // если i == 0, то y[i-1] заменяем на y[n-1]
            res1 += s1;
        }
        else
            if (i == n - 1)
            {
                s1 = x[i] * (y[i - 1] - y[0]); // если i == n-1, то y[i+1] заменяем на y[0]
                res1 += s1;
            }
            else
            {
                s1 = x[i] * (y[i - 1] - y[i + 1]);
                res1 += s1;
            }
    }
 
    // Расчет площади второго многоугольника через сумму площадей трапеций
 
    for (i = 0; i < z; i++)
    {
        if (i == 0)
        {
            s2 = u[i] * (s[z - 1] - s[i + 1]); // если i == 0, то y[i-1] заменяем на y[z-1]
            res2 += s2;
        }
        else
            if (i == z - 1)
            {
                s2 = u[i] * (s[i - 1] - s[0]); // если i == z-1, то y[i+1] заменяем на y[0]
                res2 += s2;
            }
            else
            {
                s2 = u[i] * (s[i - 1] - s[i + 1]);
                res2 += s2;
            }
    }
 
    // Проверка принадлежности каждой точки первого многоугольника второму. В случае, если одна из точек не принадлежит
    // второму многоугольнику - в переменную c записываем -1 и выходим. Далее переменную c будем использовать как ключ
    for (i = 0; i < n; i++)
    {
        c = pnpoly(z, u, s, x[i], y[i]);
 
        if (c % 2 == 0)
        {
            c = -1;
            break;
        }
    }
 
    // Проверка принадлежности каждой точки второго многоугольника первому. В случае, если одна из точек не принадлежит
    // первому многоугольнику - в переменную t записываем -1 и выходим. Далее переменную t будем использовать как ключ
    for (i = 0; i < z; i++)
    {
        t = pnpoly(n, x, y, u[i], s[i]);
 
        if (t % 2 == 0)
        {
            t = -1;
            break;
        }
    }
 
    sq1 = abs(res1 / 2);
    sq2 = abs(res2 / 2);
    cout << "-------------" << endl;
    cout << "nJIoLLLagb nepBoro PaBHa: " << sq1 << endl;
    cout << "-------------" << endl;
    cout << "nJIoLLLagb BToporo PaBHa: " << sq2 << endl;
    cout << "c=" << c << "  t=" << t << endl;
 
    if (c >= 0)
        cout << "Perviy mnogougol'nik polnost'u lejit vo vtorom" << endl;
    else
        if (t >= 0)
            cout << "Vtoroy mnogougol'nik polnost'u lejit v pervom" << endl;
 
    getch();
    closegraph();
    return 0;
}
Где-то так... Провел два теста на двух квадратах - выдало правильный результат. В одном случае - один лежит внутри другого. Во втором случае - ничего не выдал, т.к. они никак не пересекаются.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru