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

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

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

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

Помогите, пожалуйста, исправить ошибки
1>Компиляция...
1>epiphanies.cpp
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.cpp(32) : error C2061: синтаксическая ошибка: идентификатор "i"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.cpp(33) : error C2061: синтаксическая ошибка: идентификатор "i"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.cpp(34) : error C2061: синтаксическая ошибка: идентификатор "j"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.cpp(67) : error C2061: синтаксическая ошибка: идентификатор "i"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.cpp(132) : error C2061: синтаксическая ошибка: идентификатор "j"
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.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\epiphanies.cpp(179) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.cpp(180) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.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\epiphanies.cpp(194) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.cpp(195) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.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\epiphanies.cpp(209) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\epiphanies\epiphanies\epiphanies.cpp(210) : warning C4244: аргумент: преобразование 'double' в 'int', возможна потеря данных
1>Журнал построения был сохранен в "file://c:\Users\Мария\Documents\Visual Studio 2008\Projects\epiphanies\epiphanies\Debug\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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2013, 01:01
Ответы с готовыми решениями:

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

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

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

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

11
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,262
Записей в блоге: 7
08.11.2013, 04:23 2
строки 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  [ТС] 3
Спасибо большое!
0
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 23
10.11.2013, 23:46  [ТС] 4
Само задание звучит так: "Из заданного на плоскости множества точек выбрать три различные точки так,
чтобы разность между площадью круга, ограниченного окружностью, проходящей через эти три точки,
и площадью треугольника с вершинами в этих точках была минимальной "
Плюс все функции при выполнении оформить в виде шаблонов.

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

Помогите, пожалуйста, с данными, которые инициализируются в 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\happiness.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\happiness.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\happiness.cpp(106) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(108) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(124) : error C2440: инициализация: невозможно преобразовать 'int *' в 'int'
1> Не существует контекста, в котором такое преобразование возможно
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(126) : error C2440: =: невозможно преобразовать 'int' в 'int *'
1> Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(124) : error C2440: инициализация: невозможно преобразовать 'double *' в 'double'
1> Не существует контекста, в котором такое преобразование возможно
1> c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.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\happiness.cpp(126) : error C2440: =: невозможно преобразовать 'double' в 'double *'
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(105) : warning C4244: =: преобразование 'int' в 'float', возможна потеря данных
1> c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.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\happiness.cpp(106) : warning C4244: =: преобразование 'double' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(108) : warning C4244: =: преобразование 'double' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(124) : error C2440: инициализация: невозможно преобразовать 'float *' в 'float'
1> Не существует контекста, в котором такое преобразование возможно
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.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
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,262
Записей в блоге: 7
11.11.2013, 00:20 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
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  [ТС] 6
О, спасибо... Интересное решение проблем)

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

1>------ Построение начато: проект: happiness, Конфигурация: Debug Win32 ------
1>Компиляция...
1>happiness.cpp
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(200) : warning C4627: #include <iostream>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(201) : warning C4627: #include <iomanip>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(202) : warning C4627: #include <fstream>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(203) : warning C4627: #include <cstring>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(204) : warning C4627: #include <cstdlib>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(205) : warning C4627: #include <cmath>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.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
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,262
Записей в блоге: 7
11.11.2013, 00:43 7
18ю строку раскоментируйте
0
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 23
11.11.2013, 00:49  [ТС] 8
Хорошо

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

1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(102) : warning C4244: инициализация: преобразование 'double' в 'int', возможна потеря данных
1> c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.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\happiness.cpp(107) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(109) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(102) : warning C4244: инициализация: преобразование 'double' в 'float', возможна потеря данных
1> c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.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\happiness.cpp(106) : warning C4244: =: преобразование 'int' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(107) : warning C4244: =: преобразование 'double' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(109) : warning C4244: =: преобразование 'double' в 'float', возможна потеря данных
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(154) : warning C4700: использована неинициализированная локальная переменная "x"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(165) : warning C4700: использована неинициализированная локальная переменная "s1"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(165) : warning C4700: использована неинициализированная локальная переменная "a1"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(170) : warning C4700: использована неинициализированная локальная переменная "s2"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(170) : warning C4700: использована неинициализированная локальная переменная "a2"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(175) : warning C4700: использована неинициализированная локальная переменная "s3"
1>c:\users\мария\documents\visual studio 2008\projects\happiness\happiness\happiness.cpp(175) : warning C4700: использована неинициализированная локальная переменная "a3"

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

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

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 10
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  [ТС] 11
А почему у меня массив для точек прогоняет все возможные 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 12
проверь сортировку... он не сортирует

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
16.11.2013, 09:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2013, 09:21
Помогаю со студенческими работами здесь

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

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

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

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


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

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