Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
ZYL
3 / 3 / 0
Регистрация: 12.01.2013
Сообщений: 47
07.04.2013, 23:44     Программа CUBE #1
Кликните здесь для просмотра всего текста

У декартовій системі координат розташовано куб, координати вер-шин котрого дорівнюють невід'ємним цілим числам, що не перевищують 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;  
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 23:44     Программа CUBE
Посмотрите здесь:

C++ Ведется набор цифр и надо чтобы программа из него сама сообразило число. То есть что бы программа сама раскидывала их по разрядам.
Первая программа. Код не компилируется и не запускается программа. C++
C++ Пользователь вводит 10 чисел программа должна выдать 2 максимальных(берём от 1 до 10,если выпадает 2 10,то программа должна выдать 2 10,а не 10,9)
C++ Программа , которая выводит время, за которое программа работает

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
08.04.2013, 02:25     Программа CUBE #2
Стороны куба параллельны осям координат?

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

Текущее время: 18:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru