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

Программа CUBE

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

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

У декартовій системі координат розташовано куб, координати вер-шин котрого дорівнюють невід'ємним цілим числам, що не перевищують 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2013, 23:44
Ответы с готовыми решениями:

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

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

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

15
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
08.04.2013, 02:25
Стороны куба параллельны осям координат?

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

Не по теме:

Куме, а що то в вас, сало?
А можна подивиться? :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  [ТС]
Ну у меня по хер знает какому написано) но это исправлю, с вычислением сначала разобраться надо..
Вот тут у меня вопрос, когда ввожу две точки с координатами (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
Вы правы ваш сособ лутше
0
3 / 3 / 1
Регистрация: 12.01.2013
Сообщений: 47
09.04.2013, 01:01  [ТС]
Нашел в чем ошибка

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

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
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
09.04.2013, 01:20
Для точек (1,0,5) и (3,4,10) получаем
Миниатюры
Программа CUBE  
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
09.04.2013, 01:25
matepuhko, спасибо за оценку )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2013, 01:25
Помогаю со студенческими работами здесь

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

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

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

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

STM Cube
Доброго времени суток! На рабочем компьютере у меня стоит Cube, а дома нет. Решил скачать и поставить - оказалось, что F1xx чипы &quot;Not...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru