Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
ZYL
3 / 3 / 0
Регистрация: 12.01.2013
Сообщений: 47
#1

Программа CUBE - C++

07.04.2013, 23:44. Просмотров 952. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 23:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа CUBE (C++):

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

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

Программа , которая выводит время, за которое программа работает - C++
Вообщем, нужно что бы считалось время от начала работы программы, и выводилось на экран.

Первая программа. Код не компилируется и не запускается программа. - C++
Первая программа, первая ошибка Здравствуйте! Решил учить С++. Скачал книгу Programming: Principles and Practice Using C++, Бьерн...

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

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

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

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

Не по теме:

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



Добавлено через 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
ZYL
3 / 3 / 0
Регистрация: 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
matepuhko
20 / 20 / 6
Регистрация: 05.06.2011
Сообщений: 119
09.04.2013, 00:46 #13
Вы правы ваш сособ лутше
0
ZYL
3 / 3 / 0
Регистрация: 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
IrineK
Заблокирован
09.04.2013, 01:20 #15
Для точек (1,0,5) и (3,4,10) получаем
0
Миниатюры
Программа CUBE  
09.04.2013, 01:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 01:20
Привет! Вот еще темы с ответами:

Led cube 4x4x4 - Arduino
Нужна помощь! Собрал led cube как описано на сайте https://masterkit.ru/shop/removed/1298517. Подключил Arduino nano, загрузил скетч. Но...

Fast Cube and C++ Builder - C++ Builder
Здравствуйте! у меня вопрос: кто-то работал с Fast Cube в среде Borland C++ Builder? если работали - киньте примерчик или...

Intel cube cove dq45cb - Материнские платы
зДРАВСТВУЙТЕ, проблема следующего х\р: собрал комп на базе данной материнки, поключил разьемы передней панели, но вот остались звуковые...

Есть ли аналог Desicion Cube? - Delphi
А есть ли в природе аналог СУБЖА ????? Или подскажите как сделать следующее: 1) Есть таблица1(ID,name), Таблица2(Id,Name),...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.