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

Программа CUBE

07.04.2013, 23:44. Показов 3017. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кликните здесь для просмотра всего текста

У декартовій системі координат розташовано куб, координати вер-шин котрого дорівнюють невід'ємним цілим числам, що не перевищують 15. Одна з вершин куба збігається з початком координат. Скласти про-граму CUBE, яка обчислювала б квадрат відстані на поверхні куба між двома точками, заданими координатами. (Відстанню між двома точками на поверхні куба називається найменша довжина ламаної, що з'єднує дві за-дані точки і повністю лежить на поверхні куба.)
Вхідний файл cube.dat містить такі дані. У першому рядку записано довжину сторони куба, у двох наступних — по 3 натуральних числа, що задають координати х, у, г двох точок на поверхні куба.
Вихідний файл cube.res створюється із вхідного файла cube.dat допи-суванням до нього нового рядка, що містить квадрат довжини ламаної, яка з'єднує дві точки.
Вміст вхідного і вихідного файлів може бути, наприклад, таким:
cube.dat
10 2
1 2 0
2 1 0
cube.res
10 2
1 2 0
2 1 0
2


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

Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <cmath>
using namespace std;
 
class Line
{
 protected:
    
    float x1,y1,z1,Lenght,x2,y2,z2;
 
public:
    float l,line;
 
    Line()
    {
        vl:
        cout<<"Введите длинну ребра куба : ";     
         cin>>Lenght;
          cout<<endl;
 
        Lenght=abs(Lenght);
        if (Lenght<0||Lenght>15)
         {
            cout<<"Длинна ребра куба не может быть больше 15 или меньше 0! Повторите ввод!"<<endl;
            goto vl;
         }
 
      input:
        cout << "Input X1= ";
        cin >> x1;
         cout << "Input Y1= ";
         cin >> y1;
          cout << "Input Z1= ";
          cin >> z1;
           cout<<endl;
 
        if( (x1==0||x1==Lenght) || (y1==0||y1==Lenght) || (z1==0||z1==Lenght) ) 
        {
            cout<<"Координаты точки введены правильно"<<endl<<endl;
        } 
            else
            {
                cout<<"Хотя бы одна с координат должна лежать на плоскости куба! Повторите ввод! "<<endl;
                goto input;
            }
 
 
    input2:
        cout<<"Input X2= ";
        cin>>x2;
         cout<<"Input Y2= ";
         cin>>y2;
          cout<<"Input Z2= ";
          cin>>z2;
           cout<<endl;
 
        if( (x2==0||x2==Lenght) || (y2==0||y2==Lenght) || (z2==0||z2==Lenght) ) 
        {
            cout<<"Координаты точки введены правильно"<<endl<<endl;
        } 
            else
            {
                cout<<"Хотя бы одна с координат должна лежать на плоскости куба! Повторите ввод! "<<endl;
                goto input2;
            }
    }
 
    float  get_x1() {return x1;}    
    float  get_y1() {return y1;}
    float  get_z1() {return z1;}
 
    void show() 
     {
      cout<<"A("<<x1<<";"<<y1<<";"<<z1<<")"<<endl;
      cout<<"B("<<x2<<";"<<y2<<";"<<z2<<")"<<endl;
     }
    
    float  get_x2() {return x2;}    
    float  get_y2() {return y2;}
    float  get_z2() {return z2;}
 
    
void analyze_Position()
{
    float k1,k2,k3,LineLenght;
 
    if(x1==x2 && y1==y2 && z1==z2) {LineLenght=0;goto rezult;}
 
    if(x1==x2||y1==y2||z1==z2)
        {if ((x1==0 && x2==Lenght || x2==0 && x1==Lenght)  ||  (y1==0 && y2==Lenght || y2==0 && y1==Lenght)  || (z1==0 && z2==Lenght || z2==0 && z1==Lenght))
            cout<<"Точки лежат на противоположных плоскостях"<<endl;
        } 
      else
        {cout<<"Точки лежат на одной плоскости"<<endl;
            k1=pow((x2-x1),2);
            k2=pow((y2-y1),2); 
            k3=pow((z2-z1),2);
            l=k1+k2+k3;
            line = sqrt(l);
            LineLenght=LineLenght*LineLenght;
            goto rezult;
    }   
    rezult:
cout<<"L="<<LineLenght<<endl;
}   
 
}; 
 
void main () 
{
  setlocale(LC_ALL,"Russian");
 
 Line A1;
 A1.show();
 A1.analyze_Position();
 
}


Добавлено через 2 часа 35 минут
..............................

Добавлено через 17 минут
Если на одной грани, то if(x1==x2||y1==y2||z1==z2)

Если на противоположных, то какие-то с координат х1 и х1 например, должны быть равны 0 и длинне ребра?

А если на соседних, соседние координаты х и у, или у и z, или z и х равны 0 или длинне ребра?

Добавлено через 1 час 54 минуты
Продолжу свой монолог...
C++
1
2
3
4
if( (x1==0 && x2==Lenght) || (x2==0 && x1==Lenght) || (y1==0 && y2==Lenght) || (y2==0 && y1==Lenght) || (z1==0 && z2==Lenght) || (z2==0 && z1==Lenght) )
    {
      cout<<"Точки лежат на противоположных гранях"<<endl; 
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2013, 23:44
Ответы с готовыми решениями:

Ошибка: Cube::Cube(Cube &&)': cannot convert argument 1 from 'int' to 'int *[]'
Не могу разобраться. Есть массив : int indices = { 1,2,3, 4,5,6 }; У класса конструктор:...

Error C1083: Не удается открыть файл включение: cube.h: No such file or directory
Ошибка довольно таки распространенная,но решения,к сожалению я так и не нашел. Вот собственно...

К знатокам кодогенератора Cube. Как добавить в проект, созданный Cube кубом еще одно прерывания без Cube
Когда-то давно я начал разрабатывать проект с помощью кодогенератора Cube. Теперь остались...

Cube mx F4
Всем привет. Разбираясь с Cube MX возникло несколько вопросов. 1. Почему в одной версии куба...

15
Заблокирован
08.04.2013, 02:25 2
Стороны куба параллельны осям координат?

И как понять это:
У першому рядку записано довжину сторони куба
Перший рядок:
10 2
0
20 / 20 / 23
Регистрация: 05.06.2011
Сообщений: 119
08.04.2013, 03:08 3
Еврика
0
Заблокирован
08.04.2013, 04:00 4
Гугли на тему: задаче о пауке и мухе, развертка куба
0
3 / 3 / 1
Регистрация: 12.01.2013
Сообщений: 47
08.04.2013, 11:08  [ТС] 5
Это не нужно
0
Заблокирован
08.04.2013, 11:13 6
Минимальные расстояния на поверхности определяются на развертке.
0
20 / 20 / 23
Регистрация: 05.06.2011
Сообщений: 119
08.04.2013, 14:21 7
Я не понимаю почему вам так не нравитса теорама косинусов/синусов. Розбиваеш по осям XOY YOZ ZOX находиш куты, длину отрезка AB и находиш три стороны.
IrineK - ваш способ тоже подходит но гемороя много
0
Заблокирован
08.04.2013, 16:18 8
matepuhko, без проблем - давайте каждый реализует свой "геморрой" и посмотрим, у кого он минимальнее
0
Заблокирован
08.04.2013, 20:21 9
Для координат (1,1,0) и (5,1,10) (противоположные грани) минимальное расстояние в квадрате 160
Миниатюры
Программа CUBE  
0
3 / 3 / 1
Регистрация: 12.01.2013
Сообщений: 47
08.04.2013, 23:22  [ТС] 10
А можно на код взглянуть?
0
Заблокирован
08.04.2013, 23:57 11

Не по теме:

Куме, а що то в вас, сало?
А можна подивиться? :D



Добавлено через 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
double squaredDistance(Cube &Cube, Point &A, Point &B)
    {   double X1 = A.getX(), Y1 = A.getY(), Z1 = A.getZ();
        double X2 = B.getX(), Y2 = B.getY(), Z2 = B.getZ();
        double s = Cube.getSide();
 
        int surf1 = Cube.getSurface(A);
        int surf2 = Cube.getSurface(B);
 
        if(surf1 == -1 || surf2 == -1)
            return -1;  //wrong point coords
        
//1) points belong to the same surface-------------------------------------
        if(surf1 == surf2)
            return (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2) + (Z1-Z2)*(Z1-Z2);
 
//2) points belong to different surfaces------------------------------------
        //first of all, let's sort surface numbers (1-3 or 3-1) -> just 1-3
        if(surf1>surf2)
        {   int temp = surf1; surf1=surf2; surf2 = temp;
            Point cur = A; A = B; B = cur;
        }
 
    //2.1) points belong to the opposite surfaces (3 variants x 4 ways)----
        double d1,d2,d3,d4;
        //(0-5) in surface XoY(0)
        if(surf1 == 0 && surf2 == 5)
        {   X1 = A.getX();  Y1 = A.getY();
            //way 0-2-5
            X2 = B.getX();
            Y2 = 3*s - B.getY();
            d1 = (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2);
            //way 0-3-5
            X2 = B.getX() - 2*s;
            Y2 = B.getY();
            d2 = (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2);
            //way 0-4-5
            X2 = B.getX();
            Y2 = -s - B.getY();
            d3 = (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2);
            //way 0-1-5
            X2 = 2*s - B.getX();
            Y2 = B.getY();
            d4 = (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2);
            return minD(d1,d2,d3,d4);
        }
 
        //(1-3) in surface YoZ(3)
        if(surf1 == 1 && surf2 == 3)
        {   Y2 = B.getY(); Z2 = B.getZ();
            //way 1-0-3
            Y1 = A.getY();
            Z1 = -s- A.getZ();
            d1 = (Y1-Y2)*(Y1-Y2) + (Z1-Z2)*(Z1-Z2);
            //way 1-2-3
            Y1 = 3*s - A.getY();
            Z1 = A.getZ();
            d2 = (Y1-Y2)*(Y1-Y2) + (Z1-Z2)*(Z1-Z2);
            //way 1-5-3
            Y1 = A.getY();
            Z1 = 3*s - A.getZ();
            d3 = (Y1-Y2)*(Y1-Y2) + (Z1-Z2)*(Z1-Z2);
            //way 1-4-3
            Y1 = -s-A.getY();
            Z1 = A.getZ();
            d4 = (Y1-Y2)*(Y1-Y2) + (Z1-Z2)*(Z1-Z2);
            return minD(d1,d2,d3,d4);
        }
 
        //(2-4) in surface XoZ (4)
        if(surf1 == 2 && surf2 == 4)
        {   X2 = B.getX(); Z2 = B.getZ();
            //way 2-1-4
            X1 = 3*s - A.getX();
            Z1 = A.getZ();
            d1 = (X1-X2)*(X1-X2) + (Z1-Z2)*(Z1-Z2);
            //way 2-3-4
            X1 = -s-A.getX();
            Z1 = A.getZ();
            d2 = (X1-X2)*(X1-X2) + (Z1-Z2)*(Z1-Z2);
            //way 2-5-4
            X1 = A.getX();
            Z1 = 3*s-A.getZ();
            d3 = (X1-X2)*(X1-X2) + (Z1-Z2)*(Z1-Z2);
            //way 2-0-4
            X1 = A.getX();
            Z1 = -s-A.getZ();
            d4 = (X1-X2)*(X1-X2) + (Z1-Z2)*(Z1-Z2);
            return minD(d1,d2,d3,d4);
        }
 
    //2.2) points belong to the adjacent surfaces (12 variants)----------------
        //2.2.1) in projection - with the same X
        //Z does not change, only Y,  edges || Z
    if((surf1 == 1 && surf2 == 2) || (surf1 == 2 && surf2 == 3) || (surf1 == 3 && surf2 == 4) || (surf1 == 1 && surf2 == 4))
    {   Z1 = A.getZ();  Z2 = B.getZ();
        if(surf1 == 1 && surf2 == 2)
        {   Y1 = A.getY();      Y2 = 2*s - B.getX();    }
        if(surf1 == 2 && surf2 == 3)
        {   Y1 = s+ A.getX();   Y2 = B.getY();          }
        if(surf1 == 3 && surf2 == 4)
        {   Y1 = A.getY();      Y2 = -B.getX();         }
        if(surf1 == 1 && surf2 == 4)
        {   Y1 = A.getY();      Y2 = B.getX() - s;      }
        return (Y1-Y2)*(Y1-Y2) + (Z1-Z2)*(Z1-Z2);
    }
 
        //2.2.2) in projection - with the same Y
        //X does not change, only Z,  edges || X
    if((surf1 == 0 && surf2 == 2) || (surf1 == 2 && surf2 == 5) || (surf1 == 0 && surf2 == 4) || (surf1 == 4 && surf2 == 5))
    {   X1 = A.getX();  X2 = B.getX();
        if(surf1 == 0 && surf2 == 2)
        {   Z1 = A.getY() -s;   Z2 = B.getZ();          }
        if(surf1 == 2 && surf2 == 5)
        {   Z1 = A.getZ();      Z2 = 2*s - B.getY();    }
        if(surf1 == 0 && surf2 == 4)
        {   Z1 = -A.getY();     Z2 = B.getZ();          }
        if(surf1 == 4 && surf2 == 5)
        {   Z1 = A.getZ();      Z2 = s + B.getY();      }
        return (X1-X2)*(X1-X2) + (Z1-Z2)*(Z1-Z2);
    }
 
        //2.2.3) in projection - with the same Z
        //Y does not change, only X,  edges || Y
    if((surf1 == 0 && surf2 == 1) || (surf1 == 0 && surf2 == 5) || (surf1 == 3 && surf2 == 5) || (surf1 == 0 && surf2 == 3))
    {   Y1 = A.getY();  Y2 = B.getY();
        if(surf1 == 0 && surf2 == 1)
        {   X1 = A.getX();              X2 = s + B.getZ();  }
        if(surf1 == 0 && surf2 == 5)
        {   X1 = 2*s - A.getZ();        X2 = B.getX();      }
        if(surf1 == 3 && surf2 == 5)
        {   X1 = A.getZ() - s;          X2 = B.getX();      }
        if(surf1 == 0 && surf2 == 3)
        {   X1 = A.getX();              X2 = -B.getZ();     }
        return (X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2);
    }
        return -1;//default
    }
1
3 / 3 / 1
Регистрация: 12.01.2013
Сообщений: 47
09.04.2013, 00:23  [ТС] 12
Ну у меня по хер знает какому написано) но это исправлю, с вычислением сначала разобраться надо..
Вот тут у меня вопрос, когда ввожу две точки с координатами (1,0,5) и (3,4,10), они на соседних гранях, пишет ,что the variable L2 is being used without being initialized, она вроде и объявлена, и значение ей присваивается..
Кликните здесь для просмотра всего текста

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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
#include <iostream>
#include <cmath>
using namespace std;
 
class Line
{
 protected:
    
    int x1,y1,z1,Lenght,x2,y2,z2;
 
public:
    double l,l_2;
 
    Line()
    {
        vl:
        cout<<"Введите длинну ребра куба : ";     
         cin>>Lenght;
          cout<<endl;
 
        Lenght=abs(Lenght);
        if (Lenght<0||Lenght>15)
         {
            cout<<"Длинна ребра куба не может быть больше 15 или меньше 0! Повторите ввод!"<<endl;
            goto vl;
         }
 
      input:
        cout << "Input X1= ";
        cin >> x1;
         cout << "Input Y1= ";
         cin >> y1;
          cout << "Input Z1= ";
          cin >> z1;
           cout<<endl;
 
        if( (x1==0||x1==Lenght) || (y1==0||y1==Lenght) || (z1==0||z1==Lenght) ) 
        {
            if ( (x1<0||x1>Lenght) || (y1<0||y1>Lenght) || (z1<0||z1>Lenght) )
            {goto no;}
              else
                {cout<<"Координаты точки введены правильно"<<endl<<endl;}
        } 
            else
            {  no:
                cout<<"Недопустимые значения! "<<endl;
                goto input;
            }
 
 
    input2:
        cout<<"Input X2= ";
        cin>>x2;
         cout<<"Input Y2= ";
         cin>>y2;
          cout<<"Input Z2= ";
          cin>>z2;
           cout<<endl;
 
        if( (x2==0||x2==Lenght) || (y2==0||y2==Lenght) || (z2==0||z2==Lenght) ) 
        {
            if ( (x2<0||x2>Lenght) || (y2<0||y2>Lenght) || (z2<0||z2>Lenght) )
            {goto no2;}
               else
                {cout<<"Координаты точки введены правильно"<<endl<<endl;}
        } 
            else
            {  no2:
                cout<<"Хотя бы одна с координат должна лежать на плоскости куба! Повторите ввод! "<<endl;
                goto input2;
            }
    }
 
    int get_x1() {return x1;}   
    int get_y1() {return y1;}
    int get_z1() {return z1;}
 
    void show() 
     {
      cout<<"A("<<x1<<";"<<y1<<";"<<z1<<")"<<endl;
      cout<<"B("<<x2<<";"<<y2<<";"<<z2<<")"<<endl;
     }
    
    int get_x2() {return x2;}   
    int get_y2() {return y2;}
    int get_z2() {return z2;}
 
    
void analyze_Position()
{
    double k1,k2,k3,LineLenght,L2,k1_2,k2_2,k3_2,LineLenght_2;
    int x,y,z;
 
    if(x1==x2 && y1==y2 && z1==z2) {L2=0;goto rezult;}
    if( (x1!=x2 && y1!=y2 && z1!=z2) && ( (x1==0||x1==Lenght) && (y1==0||y1==Lenght) && (z1==0||z1==Lenght) && (x2==0||x2==Lenght) && (y2==0||y2==Lenght) && (z2==0||z2==Lenght) ))
      {
        cout<<"Точки лежат на противоположных вершинах"<<endl;
        LineLenght=sqrt(Lenght*Lenght+Lenght*Lenght);
        L2=(Lenght+LineLenght)*(Lenght+LineLenght);
        goto rezult;
      } 
 
    if(x1==x2||y1==y2||z1==z2)
    {
        if( (x1==0 && x2==Lenght) || (x2==0 && x1==Lenght) || (y1==0 && y2==Lenght) || (y2==0 && y1==Lenght) || (z1==0 && z2==Lenght) || (z2==0 && z1==Lenght) )
         {
           cout<<"Точки лежат на противоположных гранях"<<endl;    
                
           goto rezult;
         }
 
        
 
        if ( ((x1==0||x1==Lenght) && (x2!=0 && x2!=Lenght)) || ((y1==0||y1==Lenght) && (y2!=0 && y2!=Lenght)) || ((z1==0||z1==Lenght) && (z2!=0 && z2!=Lenght))  )
            {
                cout<<"Точки лежат на соседних плоскостях"<<endl;
 
                if ((x1==0 && z2==0)  || (x1==Lenght && z2==Lenght))
                 {
                     if (x1==0 && z2==0)
                     {
                       x=0;z=0;
                       if(y1>y2) y=y2;
                       if (y1<y2) y=y1;
                     }
 
                     if (x1==Lenght && z2==Lenght)
                     {
                       x=Lenght;z=Lenght;
                       if(y1>y2) y=y2;
                       if (y1<y2) y=y1;
                     }
                 }
 
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
                if ((x1==0 && y2==0) || (x1==Lenght && y2==Lenght))
                {  
                  if(x1==0 && y2==0)
                    {
                      x=0;y=0;
                      if(z1>z2) z=z2;
                      if (z1<z2) z=z1;
                    }
 
                  if(x1==Lenght && y2==Lenght)
                    {
                      x=Lenght;y=Lenght;
                      if(z1>z2) z=z2;
                      if (z1<z2) z=z1;
                    }
                }
 
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
                if ((y1==0 && x2==0) || (y1==Lenght && x2==Lenght))
                {
                 if(y1==0 && x2==0)
                 {
                    y=0;x=0;
                    if(z1>z2) z=z2;
                    if (z1<z2) z=z1;
                  }
 
                 if(y1==Lenght && x2==Lenght)
                 {
                    y=Lenght;x=Lenght;
                    if(z1>z2) z=z2;
                    if (z1<z2) z=z1;
                  }
                }
 
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Так наверное правильнее
 
                if (( (y1==0) && (z2==0)) || ( (y1==Lenght) && (z2==Lenght)) || ( (y1==0) && (z2==Lenght)) || ( (z2==0) && (y1==Lenght)))
                 {
                  if (y1==0 && z2==0)
                   {
                     y=0;z=0;
                     if(x1>x2) x=x2;
                     if (x1<x2) x=x1;
                   }
 
                  if (y1==Lenght && z2==Lenght)
                   {
                     y=Lenght;z=Lenght;
                     if(x1>x2) x=x2;
                     if (x1<x2) x=x1;
                   }
 
                  if (y1==0 && z2==Lenght)
                   {
                     y=0;z=Lenght;
                     if(x1>x2) x=x2;
                     if (x1<x2) x=x1;
                     goto rez;
                   }
 
                  if (z2==0 && y1==Lenght)
                   {
                     y=Lenght;z=0;
                     if(x1>x2) x=x2;
                     if (x1<x2) x=x1;
                   }
 
                 }
 
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
                if ((z1==0 && x2==0) || (z1==Lenght && x2==Lenght))
                 {
                  if (z1==0 && x2==0)                
                  {
                    z=0;x=0;
                    if(y1>y2) y=y2;
                    if (y1<y2) y=y1;
                   }
 
                  if (z1==Lenght && x2==Lenght)              
                  {
                    z=Lenght;x=Lenght;
                    if(y1>y2) y=y2;
                    if (y1<y2) y=y1;
                   }
                 }
 
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
                if ((z1==0 && y2==0) || (z1==Lenght && y2==Lenght))
                {
                 if (z1==0 && y2==0)            
                  {
                    z=0;y=0;
                    if(x1>x2) x=x2;
                    if (x1<x2) x=x1;
                  }
 
                 if (z1==Lenght && y2==Lenght)          
                  {
                    z=Lenght;y=Lenght;
                    if(x1>x2) x=x2;
                    if (x1<x2) x=x1;
                  }
                }
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                rez:
                k1=pow((x1-x),2);
                k2=pow((y1-y),2);
                k3=pow((z1-z),2);
                l=k1+k2+k3;
                LineLenght = sqrt(l);
 
                k1_2=pow((x2-x),2);
                k2_2=pow((y2-y),2);
                k3_2=pow((z2-z),2);
                l_2=k1_2+k2_2+k3_2;
                LineLenght_2 = sqrt(l_2);
 
                L2=(LineLenght+LineLenght_2)*(LineLenght+LineLenght_2);
 
                goto rezult;
            }
        {cout<<"Точки лежат на одной плоскости"<<endl;
            k1=pow((x2-x1),2);                                                                                                                                                                                                         
            k2=pow((y2-y1),2); 
            k3=pow((z2-z1),2);
            l=k1+k2+k3;
            LineLenght = sqrt(l);
            L2=LineLenght*LineLenght;
            goto rezult;
        }
    }
 
    
 
    rezult:
cout<<"L="<<L2<<endl;
}   
 
}; 
 
void main () 
{
  setlocale(LC_ALL,"Russian");
 
 Line A1;
 A1.show();
 A1.analyze_Position();
 
}
0
20 / 20 / 23
Регистрация: 05.06.2011
Сообщений: 119
09.04.2013, 00:46 13
Вы правы ваш сособ лутше
0
3 / 3 / 1
Регистрация: 12.01.2013
Сообщений: 47
09.04.2013, 01:01  [ТС] 14
Нашел в чем ошибка

Кликните здесь для просмотра всего текста

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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
#include <iostream>
#include <cmath>
using namespace std;
 
class Line
{
 protected:
    
    int x1,y1,z1,Lenght,x2,y2,z2;
 
public:
    double l,l_2;
 
    Line()
    {
        vl:
        cout<<"Введите длинну ребра куба : ";     
         cin>>Lenght;
          cout<<endl;
 
        Lenght=abs(Lenght);
        if (Lenght<0||Lenght>15)
         {
            cout<<"Длинна ребра куба не может быть больше 15 или меньше 0! Повторите ввод!"<<endl;
            goto vl;
         }
 
      input:
        cout << "Input X1= ";
        cin >> x1;
         cout << "Input Y1= ";
         cin >> y1;
          cout << "Input Z1= ";
          cin >> z1;
           cout<<endl;
 
        if( (x1==0||x1==Lenght) || (y1==0||y1==Lenght) || (z1==0||z1==Lenght) ) 
        {
            if ( (x1<0||x1>Lenght) || (y1<0||y1>Lenght) || (z1<0||z1>Lenght) )
            {goto no;}
              else
                {cout<<"Координаты точки введены правильно"<<endl<<endl;}
        } 
            else
            {  no:
                cout<<"Недопустимые значения! "<<endl;
                goto input;
            }
 
 
    input2:
        cout<<"Input X2= ";
        cin>>x2;
         cout<<"Input Y2= ";
         cin>>y2;
          cout<<"Input Z2= ";
          cin>>z2;
           cout<<endl;
 
        if( (x2==0||x2==Lenght) || (y2==0||y2==Lenght) || (z2==0||z2==Lenght) ) 
        {
            if ( (x2<0||x2>Lenght) || (y2<0||y2>Lenght) || (z2<0||z2>Lenght) )
            {goto no2;}
               else
                {cout<<"Координаты точки введены правильно"<<endl<<endl;}
        } 
            else
            {  no2:
                cout<<"Хотя бы одна с координат должна лежать на плоскости куба! Повторите ввод! "<<endl;
                goto input2;
            }
    }
 
    int get_x1() {return x1;}   
    int get_y1() {return y1;}
    int get_z1() {return z1;}
 
    void show() 
     {
      cout<<"A("<<x1<<";"<<y1<<";"<<z1<<")"<<endl;
      cout<<"B("<<x2<<";"<<y2<<";"<<z2<<")"<<endl;
     }
    
    int get_x2() {return x2;}   
    int get_y2() {return y2;}
    int get_z2() {return z2;}
 
    
void analyze_Position()
{
    double k1,k2,k3,LineLenght,L2,k1_2,k2_2,k3_2,LineLenght_2;
    int x,y,z;
 
    if(x1==x2 && y1==y2 && z1==z2) {L2=0;goto rezult;}
 
    if( (x1!=x2 && y1!=y2 && z1!=z2) && ( (x1==0||x1==Lenght) && (y1==0||y1==Lenght) && (z1==0||z1==Lenght) && (x2==0||x2==Lenght) && (y2==0||y2==Lenght) && (z2==0||z2==Lenght) ))
      {
        cout<<"Точки лежат на противоположных вершинах"<<endl;
        LineLenght=sqrt(Lenght*Lenght+Lenght*Lenght);
        L2=(Lenght+LineLenght)*(Lenght+LineLenght);
        goto rezult;
      } 
 
    if(x1==x2||y1==y2||z1==z2)
    {
        cout<<"Точки лежат на одной плоскости"<<endl;
            k1=pow((x2-x1),2);                                                                                                                                                                                                         
            k2=pow((y2-y1),2); 
            k3=pow((z2-z1),2);
            l=k1+k2+k3;
            LineLenght = sqrt(l);
            L2=LineLenght*LineLenght;
            goto rezult;
        }
 
        if( (x1==0 && x2==Lenght) || (x2==0 && x1==Lenght) || (y1==0 && y2==Lenght) || (y2==0 && y1==Lenght) || (z1==0 && z2==Lenght) || (z2==0 && z1==Lenght) )
         {
           cout<<"Точки лежат на противоположных гранях"<<endl;    
                
           goto rezult;
         }
    
        
 
        if ( ((x1==0||x1==Lenght) && (x2!=0 && x2!=Lenght)) || ((y1==0||y1==Lenght) && (y2!=0 && y2!=Lenght)) || ((z1==0||z1==Lenght) && (z2!=0 && z2!=Lenght))  )
            {
                cout<<"Точки лежат на соседних плоскостях"<<endl;
 
                if ((x1==0 && z2==0)  || (x1==Lenght && z2==Lenght))
                 {
                     if (x1==0 && z2==0)
                     {
                       x=0;z=0;
                       if(y1>y2) y=y2;
                       if (y1<y2) y=y1;
                     }
 
                     if (x1==Lenght && z2==Lenght)
                     {
                       x=Lenght;z=Lenght;
                       if(y1>y2) y=y2;
                       if (y1<y2) y=y1;
                     }
                 }
 
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
                if ((x1==0 && y2==0) || (x1==Lenght && y2==Lenght))
                {  
                  if(x1==0 && y2==0)
                    {
                      x=0;y=0;
                      if(z1>z2) z=z2;
                      if (z1<z2) z=z1;
                    }
 
                  if(x1==Lenght && y2==Lenght)
                    {
                      x=Lenght;y=Lenght;
                      if(z1>z2) z=z2;
                      if (z1<z2) z=z1;
                    }
                }
 
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
                if ((y1==0 && x2==0) || (y1==Lenght && x2==Lenght))
                {
                 if(y1==0 && x2==0)
                 {
                    y=0;x=0;
                    if(z1>z2) z=z2;
                    if (z1<z2) z=z1;
                  }
 
                 if(y1==Lenght && x2==Lenght)
                 {
                    y=Lenght;x=Lenght;
                    if(z1>z2) z=z2;
                    if (z1<z2) z=z1;
                  }
                }
 
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Так наверное правильнее
 
                if (( (y1==0) && (z2==0)) || ( (y1==Lenght) && (z2==Lenght)) || ( (y1==0) && (z2==Lenght)) || ( (z2==0) && (y1==Lenght)))
                 {
                  if (y1==0 && z2==0)
                   {
                     y=0;z=0;
                     if(x1>x2) x=x2;
                     if (x1<x2) x=x1;
                   }
 
                  if (y1==Lenght && z2==Lenght)
                   {
                     y=Lenght;z=Lenght;
                     if(x1>x2) x=x2;
                     if (x1<x2) x=x1;
                   }
 
                  if (y1==0 && z2==Lenght)
                   {
                     y=0;z=Lenght;
                     if(x1>x2) x=x2;
                     if (x1<x2) x=x1;
                     goto rez;
                   }
 
                  if (z2==0 && y1==Lenght)
                   {
                     y=Lenght;z=0;
                     if(x1>x2) x=x2;
                     if (x1<x2) x=x1;
                   }
 
                 }
 
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
                if ((z1==0 && x2==0) || (z1==Lenght && x2==Lenght))
                 {
                  if (z1==0 && x2==0)                
                  {
                    z=0;x=0;
                    if(y1>y2) y=y2;
                    if (y1<y2) y=y1;
                   }
 
                  if (z1==Lenght && x2==Lenght)              
                  {
                    z=Lenght;x=Lenght;
                    if(y1>y2) y=y2;
                    if (y1<y2) y=y1;
                   }
                 }
 
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
                if ((z1==0 && y2==0) || (z1==Lenght && y2==Lenght))
                {
                 if (z1==0 && y2==0)            
                  {
                    z=0;y=0;
                    if(x1>x2) x=x2;
                    if (x1<x2) x=x1;
                  }
 
                 if (z1==Lenght && y2==Lenght)          
                  {
                    z=Lenght;y=Lenght;
                    if(x1>x2) x=x2;
                    if (x1<x2) x=x1;
                  }
                }
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                rez:
                k1=pow((x1-x),2);
                k2=pow((y1-y),2);
                k3=pow((z1-z),2);
                l=k1+k2+k3;
                LineLenght = sqrt(l);
 
                k1_2=pow((x2-x),2);
                k2_2=pow((y2-y),2);
                k3_2=pow((z2-z),2);
                l_2=k1_2+k2_2+k3_2;
                LineLenght_2 = sqrt(l_2);
 
                L2=(LineLenght+LineLenght_2)*(LineLenght+LineLenght_2);
 
                goto rezult;
            }
    
    rezult:
cout<<"L="<<L2<<endl;
}   
 
}; 
 
void main () 
{
  setlocale(LC_ALL,"Russian");
 
 Line A1;
 A1.show();
 A1.analyze_Position();
 
}
0
Заблокирован
09.04.2013, 01:20 15
Для точек (1,0,5) и (3,4,10) получаем
Миниатюры
Программа CUBE  
0
Заблокирован
09.04.2013, 01:25 16
matepuhko, спасибо за оценку )
0
09.04.2013, 01:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2013, 01:25
Помогаю со студенческими работами здесь

Olap Cube
стоит MSQL 2000 делается куб, в дименсии определяющей временную шкалу необходимо видеть...

STM32F103 + Cube + SD
Всем день добрый! Делаю логгер. Объем записываемых данных - около 120кб/мин. Записываю по 512 байт...

AeroCool DS Cube
Конечно понимаю, что на данный момент навртяли такой корпус есть у кого-то в наличии, но всеже...

STM Cube
Доброго времени суток! На рабочем компьютере у меня стоит Cube, а дома нет. Решил скачать и...


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

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