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

Массив векторов - C++

Восстановить пароль Регистрация
 
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
16.12.2013, 13:43     Массив векторов #1
Помогите разобраться , не знаю как создать массив из структур:
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
#include <iostream>
#include <cmath>
using namespace std;
class Vector 
{
public:
    struct VEC 
    {double X,Y;};
   VEC vec;
   VEC vecM[10];
  // Vector(){vec.X=vec.Y=0;} // конструктор по умолчанию
   Vector(double x,double y){vec.X=x; vec.Y=y;} // конструктор
   {vecM.X=x; vecM.Y=y;} 
  // Vector(const Vector &v){vec.X=v.vec.X;  vec.Y=v.vec.Y;} // копиконструктор
  
   Vector Sum (Vector v) //сложение
   { 
        Vector t(*this);
        t.vec.X+=v.vec.X;
        t.vec.Y+=v.vec.Y;
        return t;
    }
    
   Vector Sub (Vector v) //вычитание
   { 
        Vector t(*this);
        t.vec.X-=v.vec.X;
        t.vec.Y-=v.vec.Y;
        return t;
    } 
       
 
   
 /* double ScaleA (Vector v, int k) //умножение вектора на число
   {
        Vector t(*this);
        t.vec.X=t.vec.X*k;
        t.vec.Y=t.vec.Y*k;
        return t;
   } */
 
    double Scale (Vector v) //скалярное умножение
   {
           return vec.X*v.vec.X+vec.Y*v.vec.Y;
   }
   
    double Dlina (Vector v) //длина вектора
   {
           return sqrt(pow(/*vec.X * */v.vec.X,2) + pow(/*vec.Y**/v.vec.Y,2));
   }      
   
 };
int main()
{double x,kx,y,ky;
    int n; 
    system("chcp 1251");
    //cout<<"Введите количество элементов массива = ";
   //  cin>>n;
    
    cout<<"Введите x="; 
    cin>>x; //Вводим значение х для вектора
    cout<<"Введите y="; 
    cin>>y; //Вводим значение у для вектора
    Vector Vec_a(x,y); //определение структурной переменной Vec_a c Vec_a.X=x Vec_a.Y=y
    cout << "Vec a  = (" << Vec_a.vec.X<<";"<<Vec_a.vec.Y<<")" ;//вывод вектора 
    cout<<endl;
    cout<<"Введите x="; cin>>x; kx=x; //Вводим значение х для вектора
    cout<<"Введите y="; cin>>y; ky=y;//Вводим значение у для вектора
    Vector Vec_b(x,y); //определение структурной переменной Vec_b c Vec_b.X=x Vec_b.Y=y
    cout << "Vec b  = (" << Vec_b.vec.X<<";"<<Vec_b.vec.Y<<")"; //вывод вектора a в виде Vec a = 4 
    
 
    Vec_b=Vec_a.Sum(Vec_b); // сложение
    cout<<endl;
    cout << "Сумма векторов = (" << Vec_b.vec.X<<";"<<Vec_b.vec.Y<<")" ;//вывод вектора a в виде Vec a = 4 
    
    
    Vec_b.vec.X=kx; Vec_b.vec.Y=ky;
    Vec_b=Vec_a.Sub(Vec_b); // вычитание
    cout<<endl;
    cout << "Разность векторов = (" << Vec_b.vec.X<<";"<<Vec_b.vec.Y<<")" ;//вывод вектора a в виде Vec a = 4 
    cout<<endl;
    
    Vec_b.vec.X=kx; Vec_b.vec.Y=ky;
    x=Vec_a.Scale(Vec_b); // скалярное умножение
    cout<<"Скалярное произведение = "<<x<<endl;
    
    x=Vec_a.Dlina(Vec_a); // Длина вектора
    cout<<"Длинна вектора (a) ="<<x<<endl;
    cout<<endl;
    
  /*  int a;
    cout<<"Введите число="; cin>>a;
    x=Vec_a.ScaleA(Vec_b, a); //произведение вектора а и числа
    cout<<"Умножение на число="<<x<<endl; */
    cout<<endl;
    
    cout<<"Задача №1: Дан массив A - массив векторов. Отсортировать его в порядке убывания длин векторов. \n";
    cout<<"Введите количество элементов = "; cin>>n;
    vecM=new VEC[10];
    for (int i=0; i<n; i++)
        {cout<<"Введите x="; Vec_a.vecM[i].X=x;
         cout<<"Введите y="; Vec_a.vecM[i].Y=y;
         } 
         
         
    system("PAUSE");
    return 0;
}
Добавлено через 53 минуты
я создал массив, но не знаю как организовать сортировку в порядке убывания длин векторов
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
#include <iostream>
#include <cmath>
using namespace std;
class Vector 
{
public:
    struct VEC 
    {double X,Y;};
   VEC vec;
   VEC vecM[10];
  // Vector(){vec.X=vec.Y=0;} // конструктор по умолчанию
   Vector(double x,double y){vec.X=x; vec.Y=y;} // конструктор
  // {vecM[10].X=x; vecM[10].Y=y;} 
  // Vector(const Vector &v){vec.X=v.vec.X;  vec.Y=v.vec.Y;} // копиконструктор
  
   Vector Sum (Vector v) //сложение
   { 
        Vector t(*this);
        t.vec.X+=v.vec.X;
        t.vec.Y+=v.vec.Y;
        return t;
    }
    
   Vector Sub (Vector v) //вычитание
   { 
        Vector t(*this);
        t.vec.X-=v.vec.X;
        t.vec.Y-=v.vec.Y;
        return t;
    } 
       
 
   
 /* double ScaleA (Vector v, int k) //умножение вектора на число
   {
        Vector t(*this);
        t.vec.X=t.vec.X*k;
        t.vec.Y=t.vec.Y*k;
        return t;
   } */
 
    double Scale (Vector v) //скалярное умножение
   {
           return vec.X*v.vec.X+vec.Y*v.vec.Y;
   }
   
    double Dlina (Vector v) //длина вектора
   {
           return sqrt(pow(/*vec.X * */v.vec.X,2) + pow(/*vec.Y**/v.vec.Y,2));
   }      
   
 };
int main()
{double x,kx,y,ky;
    int n; 
    system("chcp 1251");
    cout<<"Введите x="; 
    cin>>x; //Вводим значение х для вектора
    cout<<"Введите y="; 
    cin>>y; //Вводим значение у для вектора
    Vector Vec_a(x,y); //определение структурной переменной Vec_a c Vec_a.X=x Vec_a.Y=y
    cout << "Vec a  = (" << Vec_a.vec.X<<";"<<Vec_a.vec.Y<<")" ;//вывод вектора 
    cout<<endl;
    cout<<"Введите x="; cin>>x; kx=x; //Вводим значение х для вектора
    cout<<"Введите y="; cin>>y; ky=y;//Вводим значение у для вектора
    Vector Vec_b(x,y); //определение структурной переменной Vec_b c Vec_b.X=x Vec_b.Y=y
    cout << "Vec b  = (" << Vec_b.vec.X<<";"<<Vec_b.vec.Y<<")"; //вывод вектора a в виде Vec a = 4 
    
 
    Vec_b=Vec_a.Sum(Vec_b); // сложение
    cout<<endl;
    cout << "Сумма векторов = (" << Vec_b.vec.X<<";"<<Vec_b.vec.Y<<")" ;//вывод вектора a в виде Vec a = 4 
    
    
    Vec_b.vec.X=kx; Vec_b.vec.Y=ky;
    Vec_b=Vec_a.Sub(Vec_b); // вычитание
    cout<<endl;
    cout << "Разность векторов = (" << Vec_b.vec.X<<";"<<Vec_b.vec.Y<<")" ;//вывод вектора a в виде Vec a = 4 
    cout<<endl;
    
    Vec_b.vec.X=kx; Vec_b.vec.Y=ky;
    x=Vec_a.Scale(Vec_b); // скалярное умножение векторов
    cout<<"Скалярное произведение = "<<x<<endl;
    
    x=Vec_a.Dlina(Vec_a); // Длина вектора
    cout<<"Длинна вектора (a) ="<<x<<endl;
    cout<<endl;
    
  /*  int a;
    cout<<"Введите число="; cin>>a;
    x=Vec_a.ScaleA(Vec_b, a); //произведение вектора а и числа
    cout<<"Умножение на число="<<x<<endl; */
    cout<<endl;
    
    cout<<"Задача №1: Дан массив A - массив векторов. Отсортировать его в порядке убывания длин векторов. \n";
    cout<<"Введите количество элементов = "; cin>>n;
    for (int i=0; i<n; i++) //Заполнение массива
        {cout<<"Введите x="; cin>>Vec_a.vecM[i].X;
         cout<<"Введите y="; cin>>Vec_a.vecM[i].Y;
         } 
    cout<<endl;
    for (int i=0; i<n; i++) //Вывод массива
        {cout << "(" << Vec_a.vecM[i].X<<";"<<Vec_a.vecM[i].Y<<")  " ;}
        endl;
    
    
         
    system("PAUSE");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
16.12.2013, 14:14     Массив векторов #2
но не знаю как организовать сортировку в порядке убывания длин векторов
А стандартные алгоритмы использовать можно ?
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
16.12.2013, 14:33  [ТС]     Массив векторов #3
не знаю, а можно как-нибудь вроде сортировки пузырьком?
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
16.12.2013, 15:37     Массив векторов #4
не знаю, а можно как-нибудь вроде сортировки пузырьком?
я в смысле можно использовать std::sort(); или нужно вручную сортировку писать ?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
16.12.2013, 16:01     Массив векторов #5
Цитата Сообщение от EdNaron Посмотреть сообщение
{vecM.X=x; vecM.Y=y;}
Так делать нельзя.

Цитата Сообщение от EdNaron Посмотреть сообщение
double Scale (Vector v)
Scale это масштаб

Длина это Length, иногда пишут size - размер, ибо короче.

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
#include <iostream>
#include <vector>
#include <pair>
#include <algorithm>
 
using namespace std;
 
class vector2d : public pair<double, double>
{
    vector2d() : pair<double, double>() { }
    vector2d(double x, double y) : pair<double, double>(x, y) { }
    
    vector2d operator + (vector2d value) { // сложение
        return vector2d(value.first + first, value.second + second);
    }
    
    vector2d operator - (vector2d value) { // вычитание
        return vector2d(first - value.first, second - value.second);
    }
    
    double operator * (vector2d value) { // скалярное умножение
        return first * value.first + second * value.second;
    }
    
    double length(vector2d value) { // расстояние между точками
        return sqrt(
            pow(first - value.first, 2) * 
            pow(second - value.second, 2)
        );
    }
    
    double length() { // расстояние до центра, т.е. длина вектора
        return sqrt(fist * fist, second * second);
    }
    
    bool operator < (vector2d value) {
        return ength() < value.length();
    }
};
 
int main()
{
   int n;
   cin >> n;    // считали количество точек
   vector<vector2d> v(n);       // создали масив точек
   for (int i = 0; i < n; ++i) {
       cin >> v[i].first >> v[i].second;    // считали 
   }
   sort(v.begin(), v.end());                // отсортировали
   for (int i = 0; i < n; ++i) {
       cout << v[i].first << v[i].second;    // вывели
   }
   
   return 0;
}
P.S. код не тестил, ошибки есть, думаю разберешься.
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
16.12.2013, 16:49  [ТС]     Массив векторов #6
Цитата Сообщение от outoftime Посмотреть сообщение
Так делать нельзя.


Scale это масштаб

Длина это Length, иногда пишут size - размер, ибо короче.

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
#include <iostream>
#include <vector>
#include <pair>
#include <algorithm>
 
using namespace std;
 
class vector2d : public pair<double, double>
{
    vector2d() : pair<double, double>() { }
    vector2d(double x, double y) : pair<double, double>(x, y) { }
    
    vector2d operator + (vector2d value) { // сложение
        return vector2d(value.first + first, value.second + second);
    }
    
    vector2d operator - (vector2d value) { // вычитание
        return vector2d(first - value.first, second - value.second);
    }
    
    double operator * (vector2d value) { // скалярное умножение
        return first * value.first + second * value.second;
    }
    
    double length(vector2d value) { // расстояние между точками
        return sqrt(
            pow(first - value.first, 2) * 
            pow(second - value.second, 2)
        );
    }
    
    double length() { // расстояние до центра, т.е. длина вектора
        return sqrt(fist * fist, second * second);
    }
    
    bool operator < (vector2d value) {
        return ength() < value.length();
    }
};
 
int main()
{
   int n;
   cin >> n;    // считали количество точек
   vector<vector2d> v(n);       // создали масив точек
   for (int i = 0; i < n; ++i) {
       cin >> v[i].first >> v[i].second;    // считали 
   }
   sort(v.begin(), v.end());                // отсортировали
   for (int i = 0; i < n; ++i) {
       cout << v[i].first << v[i].second;    // вывели
   }
   
   return 0;
}
P.S. код не тестил, ошибки есть, думаю разберешься.
Спасибо, но я плохо программирую, часть функций просто не понимаю в этом коде.
Названия функций писал для себя.
можно что нибудь придумать для моего кода?
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
#include <iostream>
#include <cmath>
using namespace std;
class Vector 
{
public:
    struct VEC 
    {double X,Y;};
   VEC vec;
   VEC vecM[10];
   Vector(double x,double y){vec.X=x; vec.Y=y;} // конструктор
    
  /*void Sort (VEC vecM)
  {    struct VEC t;
       struct VEC end;
       int i;
       t=vecM[i];
        if(Dlina(vecM[i])< Dlina(vecM[i+1])
        vecM[i]=vecM[i+1];
        vecM[i+1]=t;
} */
  
   Vector Sum (Vector v) //сложение
   { 
        Vector t(*this);
        t.vec.X+=v.vec.X;
        t.vec.Y+=v.vec.Y;
        return t;
    }
    
   Vector Sub (Vector v) //вычитание
   { 
        Vector t(*this);
        t.vec.X-=v.vec.X;
        t.vec.Y-=v.vec.Y;
        return t;
    } 
       
  double Scale (Vector v) //скалярное умножение
   {
           return vec.X*v.vec.X+vec.Y*v.vec.Y;
   }
   
  double ScaleA (Vector v, int k) //умножение вектора на число
   {
        return (vec.X*=k),(vec.Y*=k);
   } 
 
  
   
    double Dlina (Vector v) //длина вектора
   {
           return sqrt(pow(v.vec.X,2) + pow(v.vec.Y,2));
   }      
   
 };
int main()
{double x,kx,y,ky;
    int n,a;
    system("chcp 1251");
    cout<<"Введите x="; 
    cin>>x; //Вводим значение х для вектора
    cout<<"Введите y="; 
    cin>>y; //Вводим значение у для вектора
    Vector Vec_a(x,y); //определение структурной переменной Vec_a c Vec_a.X=x Vec_a.Y=y
    cout << "Vec a  = (" << Vec_a.vec.X<<";"<<Vec_a.vec.Y<<")" ;//вывод вектора 
    cout<<endl;
    cout<<"Введите x="; cin>>x; kx=x; //Вводим значение х для вектора
    cout<<"Введите y="; cin>>y; ky=y;//Вводим значение у для вектора
    Vector Vec_b(x,y); //определение структурной переменной Vec_b c Vec_b.X=x Vec_b.Y=y
    cout << "Vec b  = (" << Vec_b.vec.X<<";"<<Vec_b.vec.Y<<")"; //вывод вектора a в виде Vec a = 4 
    
 
    Vec_b=Vec_a.Sum(Vec_b); // сложение
    cout<<endl;
    cout << "Сумма векторов = (" << Vec_b.vec.X<<";"<<Vec_b.vec.Y<<")" ;//вывод вектора a в виде Vec a = 4 
    
    
    Vec_b.vec.X=kx; Vec_b.vec.Y=ky;
    Vec_b=Vec_a.Sub(Vec_b); // вычитание
    cout<<endl;
    cout << "Разность векторов = (" << Vec_b.vec.X<<";"<<Vec_b.vec.Y<<")" ;//вывод вектора a в виде Vec a = 4 
    cout<<endl;
    
    Vec_b.vec.X=kx; Vec_b.vec.Y=ky;
    x=Vec_a.Scale(Vec_b); // скалярное умножение векторов
    cout<<"Скалярное произведение = "<<x<<endl;
    
    x=Vec_a.Dlina(Vec_a); // Длина вектора
    cout<<"Длинна вектора (a) ="<<x<<endl;
  
    cout<<"Введите число для умножения = "; cin>>a;
    Vec_a.ScaleA(Vec_a, a); //произведение вектора а и числа
    cout << "Умножение на число (a) = (" << Vec_a.vec.X<<";"<<Vec_a.vec.Y<<")" ;
    cout<<endl;
    
    cout<<"Задача №1: Дан массив A - массив векторов. Отсортировать его в порядке убывания длин векторов. \n";
    cout<<"Введите количество элементов = "; cin>>n;
    for (int i=0; i<n; i++) //Заполнение массива
        {cout<<"Введите x="; cin>>Vec_a.vecM[i].X;
         cout<<"Введите y="; cin>>Vec_a.vecM[i].Y;
         } 
    cout<<endl;
    cout<<"Исходный массив: ";
    for (int i=0; i<n; i++) //Вывод массива
        {cout << "(" << Vec_a.vecM[i].X<<";"<<Vec_a.vecM[i].Y<<")  " ;}
    cout<<endl;    
    
    
 /*   //сортировка пузырьком
    bool need=true;
    while(need) {need=false}
    for (int i=0; i<n-1; i++)
    {if (Vec_a.VecM[i].Dlina>Vec_a.VecM[i+1].Dlina)
    {Vector k=Vec_a.VecM[i];
    Vec_a.VecM[i+1]=k; need=true;}
*/
    
         
    system("PAUSE");
    return 0;
}
я не знаю как обратиться к длине
Yandex
Объявления
16.12.2013, 16:49     Массив векторов
Ответ Создать тему
Опции темы

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