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

Из заданного на плоскости множества точек выбрать три различные точки

08.11.2013, 01:01. Показов 5213. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Само задание звучит так: "Из заданного на плоскости множества точек выбрать три различные точки так,
чтобы разность между площадью круга, ограниченного окружностью, проходящей через эти три точки,
и площадью треугольника с вершинами в этих точках была минимальной "
Плюс все функции при выполнении оформить в виде шаблонов.

Помогите, пожалуйста, исправить ошибки
1>Компиляция...
1>epiphanies.cpp
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(32) : error C2061: синтаксическая ошибка: идентификатор "i"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(33) : error C2061: синтаксическая ошибка: идентификатор "i"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(34) : error C2061: синтаксическая ошибка: идентификатор "j"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(67) : error C2061: синтаксическая ошибка: идентификатор "i"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(132) : error C2061: синтаксическая ошибка: идентификатор "j"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(178) : error C2664: void create_massiv<double>(int,int,int,type **): невозможно преобразовать параметр 4 из 'double' в 'double **'
1> with
1> [
1> type=double
1> ]
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(179) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(180) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(193) : error C2664: void create_massiv<float>(int,int,int,type **): невозможно преобразовать параметр 4 из 'double' в 'float **'
1> with
1> [
1> type=float
1> ]
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(194) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(195) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(208) : error C2664: void create_massiv<int>(int,int,int,type **): невозможно преобразовать параметр 4 из 'double' в 'int **'
1> with
1> [
1> type=int
1> ]
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(209) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epip hanies.cpp(210) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>Журнал построения был сохранен в "file://c:\Users\Мария\Documents\Visual Studio 2008\Projects\epiphanies\epiphanies\Debu g\BuildLog.htm"
1>epiphanies - ошибок 8, предупреждений 6
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Не знаю совсем, что делать с C2061 и как так задать массивы, чтобы можно было в них использовать переменный тип... Если полностью в функции задаю, то в другие они не передаются...

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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
// epiphanies.cpp: определяет точку входа для консольного приложения.
//
/* каждый пункт в виде шаблона функции
   данные в кач. параметров
   примеры программ, использующих шаблоны для int, float, double
   
   "из заданного на плоскости множества точек выбрать три различные точки так, 
   чтобы разность между площадью круга, ограниченного окружнотью, проходящей через эти три точки, 
   и площадью треугольника с вершинами в этих точках была миимальной"  */
 
/*1) создать массив x,y; создать массив для конечных результатов 1 итерации функции с площадями
2) создать функцию, выбирающую 3 точки и считающую площадь треугольника и площдь круга (полученные результаты записывать в табличку!)
3) создать другую функцию, которая будет выполнять сортировку по площадям, дабы найти минимальную.
+++++
x,y вбиваются пользователем!*/
 
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
 
#include <math.h>
//#define _USE_MATH_DEFINE
 
 
 
 
using namespace std;
 
template <class type> void create_massiv (int lstr, i, j, type **a);
template <class type2> void points (int lstr, i, j, type2 **a);
template <class type3> void sorting (int i, j, str, type3 **s);
 
 
 
template <class type> 
void create_massiv (int lstr, int i, int j, type **a) 
{
    
    cout << "Enter matrix: ";
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++) {
            cin >> a[i][j];
        }
        cout << endl;
    }
    
    cout << "  X  " << " | " << "  Y  " << endl;
    cout << endl;
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++){ 
            cout << setw(4) << a[i][j] << "  ";
            cout << endl;
        }
    }
    
    
}
 
 
 
template <class type2> 
void points (int lstr, i, j, str, type2 **a, type2 **s) 
{
    type2 const pi = 3.14;
    type2 x1, x2, x3, y1, y2, y3, ma, mb, x, y, r, SC;
    
    for (i = 0; i < lstr - 2; i++){
        for (j = i + 1; j < lstr - 1; j++) {
            for (int k = j + 1; k < lstr; k++) {
                x1 = a[i][0];
                y1 = a[i][1];
 
                x2 = a[i+1][0];
                y2 = a[i+1][0];
  
                x3 = a[i+3][0];
                y3 = a[i+3][0];
 
                cout << " P1(x1;y1) =  ( " << x1 << " ; " << y1 << " )" << endl;
                cout << " P2(x2;y2) =  ( " << x2 << " ; " << y2 << " )" << endl;
                cout << " P3(x3;y3) =  ( " << x3 << " ; " << y3 << " )" << endl;
                
                ma = (y1-y2)/(x2-x1);
                mb = (y3-y2)/(x3-x2);
 
                if (mb - ma == 0) {
                    cout << "P1P2 || P2P3 : these points don't form a circle " << endl;
                    break;
                }
 
                x = (ma*mb*(y1-y3)+mb*(x1+x2)-ma*(x2+x3))/2*(mb-ma);
                y = (-1)*(x - (x1+x2)/2)/ma +(y1+y2)/2;
                //cout << "The center O(x;y)" << x << "  " << y << endl;
                
                r = sqrt( (x1-x)*(x1-x) - (y1-y)*(y1-y) );
                //cout << "The radius " << r << endl;
                
                SC = pi*r*r;
                //cout << "Square of the circle " << SC << endl;
                
                type2 ST = ((x1-x3)*(y2-y3) - (x2-x3)*(y1-y3))/2;
                
                cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
                for (int f = 0; f < str; f++){
                    s[f][0] = f;
                    s[f][1] = SC;
                    s[f][3] = ST;
                    s[f][4] = SC - ST;
                }
                
                for (int f = 0; f < str; f++) {
                    for (int g = 0; g < 4: g++) {
                        cout << setw(4) << s[f][g] << "  ";
                        cout << endl;
                    }
                }
            }
        } 
    }
}
 
 
 
 
 
template <class type3> 
void sorting (int i, j, str, type3 **s)
{
    for (j = str-1; j > 0; j--){
        for (i = 0; i < j; i++) {
            if (s[i+1][4] < s[i][4]) {
                type3 min = s[i];
                s[i] = s[i+1];
                s[i+1] = min;
            } 
        }
    }
    
    cout << "sorted data" << endl;
    cout << endl;
    cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
    
    for (i = 0; i < str; i++) {
        for (j = 0; j < 4: j++) {
            cout << setw(4) << s[i][j] << "  ";
            cout << endl;
        }
    }
}
 
 
 
 
int main()
{
    int lstr;
    int i, j;
    cout << "Enter lstr strings" << endl;
    cin >> lstr;
    int str = lstr;
    
    double **a = new double*[lstr];
    for (i = 0; i < lstr; i++){ 
        a[i] = new double[2];
    }
    
    double **s = new double*[str];
    for (i = 0; i < str; i++){ 
        s[i] = new double[4];
    }
 
    cout << "With the type DOUBLE" << endl;
    create_massiv <double> (lstr, i, j, **a);
    points <double> (/*lstr, i, j,str, **a,*/ **s);
    sorting <double> (/*i, j, str,*/ **s);
    
    /*float **a = new float*[lstr];
    for (i = 0; i < lstr; i++){ 
        a[i] = new float[2];
    }
    
    float **s = new float*[str];
    for (i = 0; i < str; i++){ 
        s[i] = new float[4];
    }*/
 
    cout << "With the type FLOAT" << endl;
    create_massiv <float> (lstr, i, j, **a);
    points <float> (/*lstr, i, j,str, **a,*/ **s);
    sorting <float> (/*i, j, str, */**s);
    
    /*int **a = new int*[lstr];
    for (i = 0; i < lstr; i++){ 
        a[i] = new int[2];
    }
    
    int **s = new int*[str];
    for (i = 0; i < str; i++){ 
        s[i] = new int[4];
    }*/
 
    cout << "With the type INT" << endl;
    create_massiv <int> (lstr, i, j, **a);
    points <int> (/*lstr, i, j,str, **a,*/ **s);
    sorting <int> (/*i, j, str,*/ **s);
    
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2013, 01:01
Ответы с готовыми решениями:

Из заданного на плоскости множества точек выбрать три различные точки
Здравствуйте, помогите пожалуйста написать программу: Из заданного на плоскости множества точек выбрать три различные точки так, чтобы...

Выбрать три различные точки из заданного множества точек на плоскости
Выбрать три различные точки из заданного множества точек на плоскости так, чтобы разность между количеством точек, лежащих внутри...

Работа С Массивами (Выбрать три различные точки из заданного множества точек на плоскости так...)
Задание: Выбрать три различные точки из заданного множества точек на плоскости так, чтобы была минимальной разность между количествами...

11
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
08.11.2013, 04:23
строки 32, 33, 34, 67, 132 : у вас неправильно задан список параметров функции, для каждого параметра нужно указувать тип(т е void f(int a, int b, int c) а не void f(int a, b, c))

строки 178, 193, 208 : вы неправильно передаете указатель в функцию. надо написать просто a вместо **a, так же и с s

в остальных случаях вы передаете меньше аргументов, чем требуется для вызова функции
0
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 23
08.11.2013, 17:16  [ТС]
Спасибо большое!
0
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 23
10.11.2013, 23:46  [ТС]
Само задание звучит так: "Из заданного на плоскости множества точек выбрать три различные точки так,
чтобы разность между площадью круга, ограниченного окружностью, проходящей через эти три точки,
и площадью треугольника с вершинами в этих точках была минимальной "
Плюс все функции при выполнении оформить в виде шаблонов.

Отредактировала то, что было, но в итоге все равно программа выдавала ошибки. А потом еще и оказалось, что нужно делать с меню, поэтому почти полностью переделала программу.

Помогите, пожалуйста, с данными, которые инициализируются в main, а потом передаются в шаблон функции. Совсем запуталась, как только уже не пробовала... Не получается и все. И я просто не понимаю, что делаю не так...

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
174
175
176
177
178
179
180
// happiness.cpp: определяет точку входа для консольного приложения.
//
/* каждый пункт в виде шаблона функции
   данные в кач. параметров
   примеры программ, использующих шаблоны для int, float, double
   
   "из заданного на плоскости множества точек выбрать три различные точки так, 
   чтобы разность между площадью круга, ограниченного окружнотью, проходящей через эти три точки, 
   и площадью треугольника с вершинами в этих точках была миимальной"  */
 
/*1) создать массив x,y; создать массив для конечных результатов 1 итерации функции с площадями
2) создать функцию, выбирающую 3 точки и считающую площадь треугольника и площдь круга (полученные результаты записывать в табличку!)
3) создать другую функцию, которая будет выполнять сортировку по площадям, дабы найти минимальную.
+++++
x,y вбиваются пользователем!*/
 
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <stdlib.h>
#include <math.h>
 
using namespace std;
 
 
template <class type> 
void func (int lstr, type **a1, type **s1)
{
    int i, j;
type **s = new type*[lstr];
    for ( i = 0; i < lstr; i++){ 
        s[i] = new type[4];
    }
 
type **a = new type*[lstr];
    for ( i = 0; i < lstr; i++){ 
        a[i] = new type[2];
    }
    
    
    
    cout << "Enter matrix: ";
    
    for ( i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++) {
            cin >> a[i][j];
        }
        cout << endl;
    }
    
    cout << "  X  " << " | " << "  Y  " << endl;
    cout << endl;
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++){ 
            cout << setw(4) << a[i][j] << "  ";
            cout << endl;
        }
    }
    
double const pi = 3.14;
    type x1, x2, x3, y1, y2, y3, ma, mb, x, y;
    
    for (i = 0; i < lstr - 2; i++){
        for (j = i + 1; j < lstr - 1; j++) {
            for (int k = j + 1; k < lstr; k++) {
                x1 = a[i][0];
                y1 = a[i][1];
 
                x2 = a[i+1][0];
                y2 = a[i+1][0];
  
                x3 = a[i+3][0];
                y3 = a[i+3][0];
 
                cout << " P1(x1;y1) =  ( " << x1 << " ; " << y1 << " )" << endl;
                cout << " P2(x2;y2) =  ( " << x2 << " ; " << y2 << " )" << endl;
                cout << " P3(x3;y3) =  ( " << x3 << " ; " << y3 << " )" << endl;
                
                ma = (y1-y2)/(x2-x1);
                mb = (y3-y2)/(x3-x2);
 
                if (mb - ma == 0) {
                    cout << "P1P2 || P2P3 : these points don't form a circle " << endl;
                    break;
                }
 
                x = (ma*mb*(y1-y3)+mb*(x1+x2)-ma*(x2+x3))/2*(mb-ma);
                y = (-1)*(x - (x1+x2)/2)/ma +(y1+y2)/2;
                //cout << "The center O(x;y)" << x << "  " << y << endl;
                
                double /*type*/ r = sqrt( (x1-x)*(x1-x) - (y1-y)*(y1-y) );
                //cout << "The radius " << r << endl;
                
                double /*type*/ SC = pi*r*r;
                //cout << "Square of the circle " << SC << endl;
                
                type ST = ((x1-x3)*(y2-y3) - (x2-x3)*(y1-y3))/2;
                
                cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
                for (int f = 0; f < lstr; f++){
                    s[f][0] = f;
                    s[f][1] = SC;
                    s[f][3] = ST;
                    s[f][4] = SC - ST;
                }
                
                for (int f = 0; f < lstr; f++) {
                    for (int g = 0; g < 4; g++) {
                        cout << setw(4) << s[f][g] << "  ";
                        cout << endl;
                    }
                }
            }
        } 
    }
 
for (j = lstr-1; j > 0; j--){
        for (i = 0; i < j; i++) {
            if (s[i+1][4] < s[i][4]) {
                type min = s[i];
                s[i] = s[i+1];
                s[i+1] = min;
            } 
        }
    }
    
    cout << "sorted data" << endl;
    cout << endl;
    cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 4; j++) {
            cout << setw(4) << s[i][j] << "  ";
            cout << endl;
        }
    }
 
 
} 
 
 
int main()
{
    int lstr;
    cout << "Enter lstr strings" << endl;
    cin >> lstr;
    int x;
 
    while ( x < 4 ){
        cout << "Choose the type of array" << endl;
        cout << "1 - int" << endl;
        cout << "2 - double" << endl;
        cout << "3 - float" << endl;
        cin >> x;
        
        switch(x) 
        {
        case 1: int ** s1;
                int ** a1;
                func ( lstr, a1, s1);
                break;
        
        case 2: double **s2;
                double **a2;
                func ( lstr, a2, s2);
                break;
        
        case 3: float **s3;
                float **a3;
                func ( lstr, a3, s3);
                break;
        }
    }
    
    return 0;
}
Компилятор вот так ругается...

1>------ Построение начато: проект: happiness, Конфигурация: Debug Win32 ------
1>Компиляция...
1>stdafx.cpp
1>Компиляция...
1>happiness.cpp
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(95) : error C2668: sqrt: неоднозначный вызов перегруженной функции
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(581): может быть 'long double sqrt(long double)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(533): или 'float sqrt(float)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(128): или 'double sqrt(double)'
1> при попытке сопоставить список аргументов '(int)'
1> c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(164): см. ссылку на создание экземпляров функции шаблон при компиляции "void func<int>(int,type **,type **)"
1> with
1> [
1> type=int
1> ]
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(106) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(108) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(124) : error C2440: инициализация: невозможно преобразовать 'int *' в 'int'
1> Не существует контекста, в котором такое преобразование возможно
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(126) : error C2440: =: невозможно преобразовать 'int' в 'int *'
1> Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(124) : error C2440: инициализация: невозможно преобразовать 'double *' в 'double'
1> Не существует контекста, в котором такое преобразование возможно
1> c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(169): см. ссылку на создание экземпляров функции шаблон при компиляции "void func<double>(int,type **,type **)"
1> with
1> [
1> type=double
1> ]
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(126) : error C2440: =: невозможно преобразовать 'double' в 'double *'
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(105) : warning C4244: =: преобразование 'int' в 'float', возможна потеря данных
1> c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(174): см. ссылку на создание экземпляров функции шаблон при компиляции "void func<float>(int,type **,type **)"
1> with
1> [
1> type=float
1> ]
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(106) : warning C4244: =: преобразование 'double' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(108) : warning C4244: =: преобразование 'double' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(124) : error C2440: инициализация: невозможно преобразовать 'float *' в 'float'
1> Не существует контекста, в котором такое преобразование возможно
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(126) : error C2440: =: невозможно преобразовать 'float' в 'float *'
1>Журнал построения был сохранен в "file://c:\Users\Мария\Documents\Visual Studio 2008\Projects\happiness\happiness\Debug\ BuildLog.htm"
1>happiness - ошибок 7, предупреждений 5
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
11.11.2013, 00:20
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
174
175
176
177
178
179
180
// happiness.cpp: определяет точку входа для консольного приложения.
//
/* каждый пункт в виде шаблона функции
   данные в кач. параметров
   примеры программ, использующих шаблоны для int, float, double
   
   "из заданного на плоскости множества точек выбрать три различные точки так, 
   чтобы разность между площадью круга, ограниченного окружнотью, проходящей через эти три точки, 
   и площадью треугольника с вершинами в этих точках была миимальной"  */
 
/*1) создать массив x,y; создать массив для конечных результатов 1 итерации функции с площадями
2) создать функцию, выбирающую 3 точки и считающую площадь треугольника и площдь круга (полученные результаты записывать в табличку!)
3) создать другую функцию, которая будет выполнять сортировку по площадям, дабы найти минимальную.
+++++
x,y вбиваются пользователем!*/
 
 
//#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
 
template <class type> 
void func (int lstr, type **a1, type **s1)
{
    int i, j;
    type **s = new type*[lstr];
    for ( i = 0; i < lstr; i++){ 
        s[i] = new type[4];
    }
 
    type **a = new type*[lstr];
    for ( i = 0; i < lstr; i++){ 
        a[i] = new type[2];
    }
    
    
    
    cout << "Enter matrix: ";
    
    for ( i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++) {
            cin >> a[i][j];
        }
        cout << endl;
    }
    
    cout << "  X  " << " | " << "  Y  " << endl;
    cout << endl;
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++){ 
            cout << setw(4) << a[i][j] << "  ";
        }
        cout << endl;
    }
    
    double const pi = M_PI;
    type x1, x2, x3, y1, y2, y3, ma, mb, x, y;
    
    for (i = 0; i < lstr - 2; i++){
        for (j = i + 1; j < lstr - 1; j++) {
            for (int k = j + 1; k < lstr; k++) {
                x1 = a[i][0];
                y1 = a[i][1];
 
                x2 = a[i+1][0];
                y2 = a[i+1][0];
  
                x3 = a[i+3][0];
                y3 = a[i+3][0];
 
                cout << " P1(x1;y1) =  ( " << x1 << " ; " << y1 << " )" << endl;
                cout << " P2(x2;y2) =  ( " << x2 << " ; " << y2 << " )" << endl;
                cout << " P3(x3;y3) =  ( " << x3 << " ; " << y3 << " )" << endl;
                
                ma = (y1-y2)/(x2-x1);
                mb = (y3-y2)/(x3-x2);
 
                if (mb - ma == 0) {
                    cout << "P1P2 || P2P3 : these points don't form a circle " << endl;
                    break;
                }
 
                x = (ma*mb*(y1-y3)+mb*(x1+x2)-ma*(x2+x3))/2*(mb-ma);
                y = (-1)*(x - (x1+x2)/2)/ma +(y1+y2)/2;
                //cout << "The center O(x;y)" << x << "  " << y << endl;
                
                type r =(type) sqrt(double( (x1-x)*(x1-x) - (y1-y)*(y1-y) ));
                //cout << "The radius " << r << endl;
                
                double /*type*/ SC = pi*r*r;
                //cout << "Square of the circle " << SC << endl;
                
                type ST = ((x1-x3)*(y2-y3) - (x2-x3)*(y1-y3))/2.0;
                
                cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
                for (int f = 0; f < lstr; f++){
                    s[f][0] = f;
                    s[f][1] = SC;
                    s[f][3] = ST;
                    s[f][4] = SC - ST;
                }
                
                for (int f = 0; f < lstr; f++) {
                    for (int g = 0; g < 4; g++) {
                        cout << setw(4) << s[f][g] << "  ";
                        cout << endl;
                    }
                }
            }
        } 
    }
 
for (j = lstr-1; j > 0; j--){
        for (i = 0; i < j; i++) {
            if (s[i+1][4] < s[i][4]) {
                type* min = s[i];
                s[i] = s[i+1];
                s[i+1] = min;
            } 
        }
    }
    
    cout << "sorted data" << endl;
    cout << endl;
    cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 4; j++) {
            cout << setw(4) << s[i][j] << "  ";
        }
        cout << endl;
    }
 
 
} 
 
 
int main()
{
    int lstr;
    cout << "Enter lstr strings" << endl;
    cin >> lstr;
    int x;
 
    while ( x < 4 ){
        cout << "Choose the type of array" << endl;
        cout << "1 - int" << endl;
        cout << "2 - double" << endl;
        cout << "3 - float" << endl;
        cin >> x;
        
        switch(x) 
        {
        case 1: int ** s1;
                int ** a1;
                func ( lstr, a1, s1);
                break;
        
        case 2: double **s2;
                double **a2;
                func ( lstr, a2, s2);
                break;
        
        case 3: float **s3;
                float **a3;
                func ( lstr, a3, s3);
                break;
        }
    }
    
    return 0;
}
1
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 23
11.11.2013, 00:32  [ТС]
О, спасибо... Интересное решение проблем)

А компилятор теперь с директивами не ладит...

1>------ Построение начато: проект: happiness, Конфигурация: Debug Win32 ------
1>Компиляция...
1>happiness.cpp
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(200) : warning C4627: #include <iostream>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(201) : warning C4627: #include <iomanip>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(202) : warning C4627: #include <fstream>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(203) : warning C4627: #include <cstring>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(204) : warning C4627: #include <cstdlib>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(205) : warning C4627: #include <cmath>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(365) : fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.
1>Журнал построения был сохранен в "file://c:\Users\Мария\Documents\Visual Studio 2008\Projects\happiness\happiness\Debug\ BuildLog.htm"
1>happiness - ошибок 1, предупреждений 6
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
11.11.2013, 00:43
18ю строку раскоментируйте
0
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 23
11.11.2013, 00:49  [ТС]
Хорошо

А нормально то, что компилятор ошибок не выдает, но пишет это:

1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(102) : warning C4244: инициализация: преобразование 'double' в 'int', возможна потеря данных
1> c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(165): см. ссылку на создание экземпляров функции шаблон при компиляции "void func<int>(int,type **,type **)"
1> with
1> [
1> type=int
1> ]
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(107) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(109) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(102) : warning C4244: инициализация: преобразование 'double' в 'float', возможна потеря данных
1> c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(175): см. ссылку на создание экземпляров функции шаблон при компиляции "void func<float>(int,type **,type **)"
1> with
1> [
1> type=float
1> ]
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(106) : warning C4244: =: преобразование 'int' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(107) : warning C4244: =: преобразование 'double' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(109) : warning C4244: =: преобразование 'double' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(154) : warning C4700: использована неинициализированная локальная переменная "x"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(165) : warning C4700: использована неинициализированная локальная переменная "s1"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(165) : warning C4700: использована неинициализированная локальная переменная "a1"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(170) : warning C4700: использована неинициализированная локальная переменная "s2"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(170) : warning C4700: использована неинициализированная локальная переменная "a2"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(175) : warning C4700: использована неинициализированная локальная переменная "s3"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happin ess.cpp(175) : warning C4700: использована неинициализированная локальная переменная "a3"

?...
0
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 23
14.11.2013, 22:46  [ТС]
Само задание звучит так: "Из заданного на плоскости множества точек выбрать три различные точки так,
чтобы разность между площадью круга, ограниченного окружностью, проходящей через эти три точки,
и площадью треугольника с вершинами в этих точках была минимальной "
Плюс все функции при выполнении оформить в виде шаблонов.

Теперь у меня проблемы с самой задачей... Программа почему-то не считает начиная с нахождения радиуса, а я не могу понять, в чем проблема. Я уже и типы пробовала менять, и алгоритм проверяла, вручную примеры высчитывала, единственное, а все не вижу ошибки... Единственное, что не делала - не проверяла сортировку, у меня с ней вечные проблемы, поэтому оставила на десерт)
Помогите, пожалуйста

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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
// happiness.cpp: определяет точку входа для консольного приложения.
//
/* каждый пункт в виде шаблона функции
   данные в кач. параметров
   примеры программ, использующих шаблоны для int, float, double
   
   "из заданного на плоскости множества точек выбрать три различные точки так, 
   чтобы разность между площадью круга, ограниченного окружнотью, проходящей через эти три точки, 
   и площадью треугольника с вершинами в этих точках была миимальной"  */
 
/*1) создать массив x,y; создать массив для конечных результатов 1 итерации функции с площадями
2) создать функцию, выбирающую 3 точки и считающую площадь треугольника и площдь круга (полученные результаты записывать в табличку!)
3) создать другую функцию, которая будет выполнять сортировку по площадям, дабы найти минимальную.
+++++
x,y вбиваются пользователем!*/
 
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
 
template <class type> 
void func (int lstr, type **a1, type **s1)
{
    int i, j;
    double const pi = 3.14;
    type x1, x2, x3, y1, y2, y3, x, y;
    double ma, mb;
    
    type **s = new type*[lstr];
    for ( i = 0; i < lstr; i++){
        s[i] = new type[4];
    }
   
    type **a = new type*[lstr];
    for ( i = 0; i < lstr; i++){ 
        a[i] = new type[2];
    }
    
    
    
    cout << "Enter matrix: ";
    
    for ( i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++) {
            cin >> a[i][j];
        }
        cout << endl;
    }
    
    cout << "  X  " << " | " << "  Y  " << endl;
    cout << endl;
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++){ 
            cout << setw(4) << a[i][j] << "  ";
        }
        cout << endl;
    }
    
    
    
    for (i = 0; i < lstr - 2; i++){
        for (j = i + 1; j < lstr - 1; j++) {
            for (int k = j + 1; k < lstr; k++) {
                x1 = a[i][0];
                y1 = a[i][1];
 
                x2 = a[j][0];
                y2 = a[j][1];
  
                x3 = a[k][0];
                y3 = a[k][1];
 
                cout << " P1(x1;y1) =  ( " << x1 << " ; " << y1 << " )" << endl;
                cout << " P2(x2;y2) =  ( " << x2 << " ; " << y2 << " )" << endl;
                cout << " P3(x3;y3) =  ( " << x3 << " ; " << y3 << " )" << endl;
                
                ma = (y2-y1)/(x2-x1);
                cout << "ma" <<  endl; cout <<ma <<endl;
                mb = (y3-y2)/(x3-x2);
                cout << "mb" << mb << endl;
 
                if (mb - ma == 0) {
                    cout << "P1P2 || P2P3 : these points don't form a circle " << endl;
                    break;
                }
 
                 x =  (ma*mb*(y1-y3)+mb*(x1+x2)-ma*(x2+x3))/2*(mb-ma);
                 y =  ((-1)*(x - (x1+x2)/2))/ma +(y1+y2)/2;
                
                cout << "The center O(x;y)" << x << "  " << y << endl; // начинаются проблемы!!!!!!!!
 
                
                type r =(type) sqrt(double( (x1-x)*(x1-x) - (y1-y)*(y1-y) )); 
                cout << "The radius " << r << endl;
                
                double SC = pi*r*r;
                cout << "Square of the circle " << SC << endl;
                
                double ST = ((x1-x3)*(y2-y3) - (x2-x3)*(y1-y3))/2.0;
                
                cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
                
                
                for (int f = 0; f < lstr; f++){
                    s[f][0] = f;
                    s[f][1] = SC;
                    s[f][3] = ST;
                    s[f][4] = SC - ST;
                }
                
                for (int f = 0; f < lstr; f++) {
                    for (int g = 0; g < 4; g++) {
                        cout << setw(4) << s[f][g] << "  ";
                        cout << endl;
                    }
                }
                
                for (j = lstr-1; j > 0; j--){
                    for (i = 0; i < j; i++) {
                        if (s[i+1][4] < s[i][4]) {
                            type* min = s[i];
                            s[i] = s[i+1];
                            s[i+1] = min;
                        } 
                    }
                }
                cout << "sorted data" << endl;
                cout << endl;
                cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
                
                for (i = 0; i < lstr; i++) {
                    for (j = 0; j < 4; j++) {
                        cout << setw(4) << s[i][j] << "  ";
                    }
                    cout << endl;
                }
            }
        } 
    }
 
 
 
} 
 
 
int main()
{
    int lstr;
    cout << "Enter lstr strings" << endl;
    cin >> lstr;
    int q;
 
    do {     
        cout << "Choose the type of array" << endl;
        cout << "1 - int" << endl;
        cout << "2 - double" << endl;
        cout << "3 - float" << endl;
        cin >> q;
        
        switch(q) 
        {
        case 1: int ** s1;
                int ** a1;
                func ( lstr, a1, s1);
                break;
        
        case 2: double **s2;
                double **a2;
                func ( lstr, a2, s2);
                break;
        
        case 3: float **s3;
                float **a3;
                func ( lstr, a3, s3);
                break;
        }
    } while (q != 4);
    
    
    return 0;
}
0
109 / 107 / 44
Регистрация: 04.10.2013
Сообщений: 231
15.11.2013, 08:08
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
174
175
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
 
template <class type> 
void func (int lstr, type **a1, type **s1)
{
    int i, j;
    double const pi = 3.14;
    type x1, x2, x3, y1, y2, y3, x, y;
    double ma, mb;
    
    type **s = new type*[lstr];
    for ( i = 0; i < lstr; i++){
        s[i] = new type[4];
    }
   
    type **a = new type*[lstr];
    for ( i = 0; i < lstr; i++){ 
        a[i] = new type[2];
    }
    
    
    
    cout << "Enter matrix: ";
    
    for ( i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++) {
            cin >> a[i][j];
        }
        cout << endl;
    }
    
    cout << "  X  " << " | " << "  Y  " << endl;
    cout << endl;
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++){ 
            cout << setw(4) << a[i][j] << "  ";
        }
        cout << endl;
    }
    
    
    
    for (int ii = 0; ii < lstr - 2; ii++){
        for (int jj = ii + 1; jj < lstr - 1; jj++) {
            for (int kk = jj + 1; kk < lstr; kk++) {
                x1 = a[ii][0];
                y1 = a[ii][1];
 
                x2 = a[jj][0];
                y2 = a[jj][1];
  
                x3 = a[kk][0];
                y3 = a[kk][1];
 
                cout << " P1(x1;y1) =  ( " << x1 << " ; " << y1 << " )" << endl;
                cout << " P2(x2;y2) =  ( " << x2 << " ; " << y2 << " )" << endl;
                cout << " P3(x3;y3) =  ( " << x3 << " ; " << y3 << " )" << endl;
                
                /////////здесь будет ошибка в расчетах (бесконечность), если в знаменателе будет 0... а он там будет при равенстве x1 и x2 или x2 и x3
                ma = (y2-y1)/(x2-x1);
                cout << "ma" <<  endl; cout <<ma <<endl;
                mb = (y3-y2)/(x3-x2);
                cout << "mb" << mb << endl;
                //////////////
 
                if (mb - ma == 0) {
                    cout << "P1P2 || P2P3 : these points don't form a circle " << endl;
                    break;
                }
 
                 x =  (ma*mb*(y1-y3)+mb*(x1+x2)-ma*(x2+x3))/2*(mb-ma);
                 y =  ((-1)*(x - (x1+x2)/2))/ma +(y1+y2)/2;
                
                cout << "The center O(x;y)" << x << "  " << y << endl; // начинаются проблемы!!! проблемы, т.к. ma или mb - бесконечность..
 
                
                type r =(type) sqrt(double( (x1-x)*(x1-x) - (y1-y)*(y1-y) )); 
                cout << "The radius " << r << endl;
                
                double SC = pi*r*r;
                cout << "Square of the circle " << SC << endl;
                
                double ST = ((x1-x3)*(y2-y3) - (x2-x3)*(y1-y3))/2.0;
                
                cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
                
                
                for (int f = 0; f < lstr; f++){
                    s[f][0] = f;
                    s[f][1] = SC;
                    s[f][2] = ST; //!!!!!!!!! здесь было s[f][3]
                    s[f][3] = SC - ST; //!!!!!!! здесь было s[f][4]
                }
                
                for (int f = 0; f < lstr; f++) {
                    for (int g = 0; g < 4; g++) {
                        cout << setw(4) << s[f][g] << "  ";
                        cout << endl;
                    }
                }
                
                for (j = lstr-1; j > 0; j--){
                    for (i = 0; i < j; i++) {
                        if (s[i+1][4] < s[i][4]) {
                            type* min = s[i];
                            s[i] = s[i+1];
                            s[i+1] = min;
                        } 
                    }
                }
                cout << "sorted data" << endl;
                cout << endl;
                cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
                
                for (i = 0; i < lstr; i++) {
                    for (j = 0; j < 4; j++) {
                        cout << setw(4) << s[i][j] << "  ";
                    }
                    cout << endl;
                }
            }
        } 
    }
 
 
 
} 
 
 
int main()
{
    int lstr;
    cout << "Enter lstr strings" << endl;
    cin >> lstr;
    int q;
 
    do {     
        cout << "Choose the type of array" << endl;
        cout << "1 - int" << endl;
        cout << "2 - double" << endl;
        cout << "3 - float" << endl;
        cin >> q;
        
        switch(q) 
        {
        case 1: int ** s1;
                int ** a1;
                func ( lstr, a1, s1);
                break;
        
        case 2: double **s2;
                double **a2;
                func ( lstr, a2, s2);
                break;
        
        case 3: float **s3;
                float **a3;
                func ( lstr, a3, s3);
                break;
        }
    } while (q != 4);
    
    
    return 0;
}
1
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 23
16.11.2013, 01:13  [ТС]
А почему у меня массив для точек прогоняет все возможные 2 раза?...
И как сделать так, чтобы в массив s[f][q] нормально записывались значения от каждой точки и потом выводились? А не только последняя дублирующаяся...

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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
 
template <class type> 
void func (int lstr, type **a1, type **s1)
{
    int i, j;
    double const pi = 3.14;
    //type x1, x2, x3, y1, y2, y3, x, y, SC, ST;
    double ma, mb, x1, x2, x3, y1, y2, y3, x, y, SC, ST,r;
    
    type **s = new type*[lstr];
    for ( i = 0; i < lstr; i++){
        s[i] = new type[4];
    }
 
/*double **s = new double*[lstr];
    for ( i = 0; i < lstr; i++){
        s[i] = new double[4];
    }*/
   
    type **a = new type*[lstr];
    for ( i = 0; i < lstr; i++){ 
        a[i] = new type[2];
    }
    
    
    
    cout << "Enter matrix: ";
    
    for ( i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++) {
            cin >> a[i][j];
        }
        cout << endl;
    }
    
    cout << "  X  " << " | " << "  Y  " << endl;
    cout << endl;
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++){ 
            cout << setw(4) << a[i][j] << "  ";
        }
        cout << endl;
    }
    
    bool flag, flag2, flag3;
  
    
    for (int ii = 0; ii < lstr - 2; ii++){
         if (flag3 == false) {
            break;
        }
        for (int jj = ii + 1; jj < lstr - 1; jj++) {
            if (flag2 == false) {
            flag3 = false;
            break;
        }
            for (int kk = jj + 1; kk < lstr; kk++) { 
                if(flag == false) {
                    flag2 = false;
                    break;
                }
                for (int f = 0; f < lstr ; f++){ 
                    
                x1 = a[ii][0];
                y1 = a[ii][1];
 
                x2 = a[ii+1]/*[jj]*/[0];
                y2 = a[ii+1]/*[jj]*/[1];
  
                x3 = a[ii+2]/*[kk]*/[0];
                y3 = a[ii+2]/*[kk]*/[1];
 
                cout << " P1(x1;y1) =  ( " << x1 << " ; " << y1 << " )" << endl;
                cout << " P2(x2;y2) =  ( " << x2 << " ; " << y2 << " )" << endl;
                cout << " P3(x3;y3) =  ( " << x3 << " ; " << y3 << " )" << endl;
                
                /////////здесь будет ошибка в расчетах (бесконечность), если в знаменателе будет 0... а он там будет при равенстве x1 и x2 или x2 и x3
                if ((x1 != x2) && (x2 != x3)) {
                
                ma = (y2-y1)/(x2-x1);
                cout << "ma" <<  endl; cout <<ma <<endl;
                mb = (y3-y2)/(x3-x2);
                cout << "mb" << mb << endl;
                }
                else {
                    cout << "False! x1=x2 or x2=x3! Please enter new points" << endl;
                    flag = false;
                        break;}
                //////////////
 
                if (mb - ma == 0) {
                    cout << "P1P2 || P2P3 : these points don't form a circle " << endl;
                    break;
                }
            
 
                 x =  (ma*mb*(y1-y3)+mb*(x1+x2)-ma*(x2+x3))/2*(mb-ma);
                 y =  ((-1)*(x - (x1+x2)/2))/ma +(y1+y2)/2;
                
                cout << "The center O(x;y)" << x << "  " << y << endl; 
 
                //double sq = (x1-x)*(x1-x) - (y1-y)*(y1-y);
                /*if (sq < 0) {
                    cout << "Radius incorrect" << endl;
                    break;
                }*/
                //type r =(type) sqrt(double( /*(x1-x)*(x1-x) - (y1-y)*(y1-y)*/sq )); 
                r = sqrt(double (fabs(( (x1-x)*(x1-x) - (y1-y)*(y1-y))) )); 
                cout << "The radius " << r << endl;
                
                if (r == 0) {
                    cout << "these points don't form a circle"<< endl;
                    break;
                }
                
                SC = pi*r*r;
                cout << "Square of the circle " << SC << endl;
                
                ST = fabs(((x1-x3)*(y2-y3) - (x2-x3)*(y1-y3))/2.0);
                cout << "Square of the tringle " << ST << endl;
                
         
                    s[f][0] = ii;
                    s[f][1] = SC;
                    s[f][2] = ST; 
                    s[f][3] = SC - ST;
             
            }
        }
         
     }            
                
    }
    
   // как сделать проверку на НЕНАЛИЧИЕ хотя бы одного решения, дабы не выполнять сортировку?????
      
 cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
   for (int f = 0; f < lstr; f++) {
                    for (int g = 0; g < 4; g++) {
                        cout << setw(4) << s[f][g] << "  ";
                       
                    } 
                    cout << endl;
                }
                
                for (j = lstr-1; j > 0; j--){
                    for (i = 0; i < j; i++) {
                        if (s[i+1][4] < s[i][4]) {
                            type* min = s[i];
                            s[i] = s[i+1];
                            s[i+1] = min;
                        } 
                    }
                }
                cout << "sorted data" << endl;
                cout << endl;
                cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
                
                for (int iw = 0; iw < lstr; iw++) {
                    for (int jw = 0; jw < 4; jw++) {
                        cout << setw(4) << s[iw][jw] << "  ";
                    }
                    cout << endl;
                }
       } 
   }
  
 
 
int main()
{
    int lstr;
    cout << "Enter lstr > 3 strings" << endl;
    cin >> lstr;
    int q;
 
    do {     
        cout << "Choose the type of array" << endl;
        cout << "1 - int" << endl;
        cout << "2 - double" << endl;
        cout << "3 - float" << endl;
        cin >> q;
        
        switch(q) 
        {
        case 1: int ** s1;
                int ** a1;
                func ( lstr, a1, s1);
                break;
        
        case 2: double **s2;
                double **a2;
                func ( lstr, a2, s2);
                break;
        
        case 3: float double **s3;
                float **a3;
                func ( lstr, a3, s3);
                break;
        }
    } while (q != 4);
    
    
    return 0;
}
0
109 / 107 / 44
Регистрация: 04.10.2013
Сообщений: 231
16.11.2013, 09:21
проверь сортировку... он не сортирует

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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
 
template <class type> 
void func (int lstr, type **a1, type **s1)
{
    int i, j;
    double const pi = 3.14;
    //type x1, x2, x3, y1, y2, y3, x, y, SC, ST;
    double ma, mb, x1, x2, x3, y1, y2, y3, x, y, SC, ST,r;
 
    int count_points = 0; // количество нормальных точек
    
    type **s = new type*[lstr];
    for ( i = 0; i < lstr; i++){
        s[i] = new type[4];
    }
 
 
   
    type **a = new type*[lstr];
    for ( i = 0; i < lstr; i++){ 
        a[i] = new type[2];
    }
    
       
    cout << "Enter matrix:\n";
    
    for ( i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++) {
            cin >> a[i][j];
        }
        cout << endl;
    }
    
    cout << "  X  " << " | " << "  Y  " << endl;
    cout << endl;
    
    for (i = 0; i < lstr; i++) {
        for (j = 0; j < 2; j++){ 
            cout << setw(4) << a[i][j] << "  ";
        }
        cout << endl;
    }
    
    bool flag=true, flag2=true, flag3=true;
  
    
    for (int ii = 0; ii < lstr - 2; ii++){
        for (int jj = ii + 1; jj < lstr - 1; jj++) {
            for (int kk = jj + 1; kk < lstr; kk++) {                    
 
                x1 = a[ii][0];
                y1 = a[ii][1];
 
                x2 = a[jj][0];
                y2 = a[jj][1];
  
                x3 = a[kk][0];
                y3 = a[kk][1];
 
                cout<<endl<<endl;
                cout << " P1(x1;y1) =  ( " << x1 << " ; " << y1 << " )" << endl;
                cout << " P2(x2;y2) =  ( " << x2 << " ; " << y2 << " )" << endl;
                cout << " P3(x3;y3) =  ( " << x3 << " ; " << y3 << " )" << endl;
                cout << endl;
                
                /////////здесь будет ошибка в расчетах (бесконечность), если в знаменателе будет 0... а он там будет при равенстве x1 и x2 или x2 и x3
                if ((x1 != x2) && (x2 != x3)) {            
                    ma = (y2-y1)/(x2-x1);
                    cout << "ma = " <<ma <<endl;
                    mb = (y3-y2)/(x3-x2);
                    cout << "mb = " << mb << endl;
                }
                else {
                    cout << "False! x1=x2 or x2=x3!" << endl;
                    flag = false;
                    continue;
                    }
                //////////////
 
                if (mb - ma == 0) {
                    cout << "P1P2 || P2P3 : these points don't form a circle \n" << endl;
                    continue;
                }
            
                if(ma == 0) {
                    cout<<"Bad points"<<endl<<endl;
                    continue;
                }
 
                 x =  (ma*mb*(y1-y3)+mb*(x1+x2)-ma*(x2+x3))/2*(mb-ma);
                 y =  ((-1)*(x - (x1+x2)/2))/ma +(y1+y2)/2;
                
                 cout << "The center O(x;y)" << x << "  " << y << endl; 
 
 
                 r = sqrt(double (fabs(( (x1-x)*(x1-x) - (y1-y)*(y1-y))) )); 
                 cout << "The radius " << r << endl;
                
                 if (r == 0) {
                     cout << "these points don't form a circle"<< endl;
                     continue;
                 }
                
                 SC = pi*r*r;
                 cout << "Square of the circle " << SC << endl;
                
                 ST = fabs(((x1-x3)*(y2-y3) - (x2-x3)*(y1-y3))/2.0);
                 cout << "Square of the tringle " << ST << endl;
                
         
                 s[count_points][0] = ii;
                 s[count_points][1] = SC;
                 s[count_points][2] = ST; 
                 s[count_points][3] = SC - ST;
                 count_points++;
             
            } 
        }    
    }
    
        
    
   // как сделать проверку на НЕНАЛИЧИЕ хотя бы одного решения, дабы не выполнять сортировку?????
    if (count_points > 0)
    {
        cout<<endl<<endl;
        cout << "unsorted data" << endl;
        cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
        for (int f = 0; f < count_points; f++) {
            for (int g = 0; g < 4; g++) {
                cout << setw(4) << s[f][g] << "  ";      
            } 
            cout << endl;
        }
                
        for (j = count_points-1; j > 0; j--){
            for (i = 0; i < j; i++) {
                if (s[i+1][4] < s[i][4]) {
                    type* min = s[i];
                    s[i] = s[i+1];
                    s[i+1] = min;
                } 
            }
        }
        cout<<endl;
 
        cout << "sorted data" << endl;
        cout << endl;
        cout << "  №  " << "|" << " S of circle " << "|" << " S of tringle " << "|" << "   SC - ST  " << endl;
                
        for (int iw = 0; iw < count_points; iw++) {
            for (int jw = 0; jw < 4; jw++) {
                cout << setw(4) << s[iw][jw] << "  ";
            }   
            cout << endl;
        }
 
        cout<<endl<<endl<<endl;
    
    } else cout<<"No good points"<<endl<<endl<<endl;
        
}
   
  
 
 
int main()
{
    int lstr;
    cout << "Enter lstr > 3 strings" << endl;
    cin >> lstr;
    int q;
 
    do {     
        cout << "Choose the type of array" << endl;
        cout << "1 - int" << endl;
        cout << "2 - double" << endl;
        cout << "3 - float" << endl;
        cin >> q;
        
        switch(q) 
        {
        case 1: int ** s1;
                int ** a1;
                func ( lstr, a1, s1);
                break;
        
        case 2: double **s2;
                double **a2;
                func ( lstr, a2, s2);
                break;
        
        case 3: double **s3;
                double **a3;
                func ( lstr, a3, s3);
                break;
        }
    } while (q != 4);
    
    
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2013, 09:21
Помогаю со студенческими работами здесь

Из заданного множества точек на плоскости выбрать две различные точки
Привет всем пожалуста помогите найти ошибку в коде. условия задачи: Из задоного множества точек на плоскости выбрать две различные точки...

Из заданного множества точек на плоскости выбрать две различные точки
Из заданного множества точек на плоскости выбрать две различные точки так, что бы количества точек, лежащих по разные стороны прямой,...

Из заданного множества точек на плоскости выбрать две различные точки так, что бы количества точек, лежащих по разные ст
Из заданного множества точек на плоскости выбрать две различные точки так, что бы количества точек, лежащих по разные стороны прямой,...

Из заданного множества точек на плоскости выбрать две различные точки так
Из заданного множества точек на плоскости выбрать две различные точки так, чтобы количество точек, лежащих по разные стороны от прямой,...

Из заданного множества точек на плоскости выбрать три разные точки A, B, C
Из заданного множества точек на плоскости выбрать три разные точки A, B, C, так, чтобы внутри треугольника ABC содержалось максимальное...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru