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

Векторы - C++

Восстановить пароль Регистрация
 
 
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
13.12.2013, 22:06     Векторы #1
Добрый день, помогите пожалуйста решить задачку, в моей программе могут быть ошибки, т.к. в материале я полный 0.
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
/*IV. ГђГҐГ*ëèçîâГ*ГІГј Гў âèäå ÊËÀÑÑÀ Г*Г*áîð ïîäïðîãðГ*ìì äëÿ âûïîëГ*ГҐГ*ГЁГї 
ñëåäóþùèõ îïåðГ*öèé Г*Г*Г¤ âåêòîðГ*ìè:
1) ñëîæåГ*ГЁГҐ;
2) âû÷èòГ*Г*ГЁГҐ;
3) Г±ГЄГ*ëÿðГ*îå ГіГ¬Г*îæåГ*ГЁГҐ âåêòîðîâ;
4) ГіГ¬Г*îæåГ*ГЁГҐ âåêòîðГ* Г*Г* ÷èñëî;
5) äëèГ*Г* âåêòîðГ*.
Âåêòîð ïðåäñòГ*ГўГЁГІГј ñëåäóþùèì òèïîì:
struct Vector {double X, Y;};
Èñïîëüçóÿ ýòîò ГЄГ«Г*Г±Г±, ðåøèòü Г§Г*Г¤Г*Г·ГЁ:
1. Г„Г*Г* Г¬Г*Г±Г±ГЁГў A - Г¬Г*Г±Г±ГЁГў âåêòîðîâ. ÎòñîðòèðîâГ*ГІГј ГҐГЈГ® Гў ïîðÿäêå óáûâГ*Г*ГЁГї äëèГ* âåêòîðîâ.
2. Г‘ ïîìîùüþ Г¤Г*ГІГ·ГЁГЄГ* ñëó÷Г*Г©Г*ûõ Г·ГЁГ±ГҐГ« Г±ГЈГҐГ*åðèðîâГ*ГІГј 2N öåëûõ Г·ГЁГ±ГҐГ«. N ГЇГ*Г° 
ГЅГІГЁГµ Г·ГЁГ±ГҐГ« Г§Г*Г¤Г*ГѕГІ N òî÷åê êîîðäèГ*Г*ГІГ*îé ïëîñêîñòè. Âûâåñòè Г*îìåðГ* òðîéêè òî÷åê,
 ГЄГ®ГІГ®Г°Г»ГҐ ÿâëÿþòñÿ êîîðäèГ*Г*ГІГ*ìè âåðøèГ* òðåóãîëüГ*ГЁГЄГ* Г± Г*Г*èáîëüøèì óãëîì.
*/
#include <iostream>
#include <cmath>
using namespace std;
class Vectors 
{
      public:
   struct Vec {double x, y;};
   void Sum () //ñëîæåГ*ГЁГҐ
  { struct Sum {double x, y;};
   Sum.x=Vec_a.x + Vec_b.x;
   Sum.y=Vec_b.y + Vec_b.y;}
  // cout<<"ÑóììГ* = "<< Sum; //ïðîâåðêГ*
  
   void Sub () //âû÷èòГ*Г*ГЁГҐ
  { struct Sub {double x, y;};
   Sub.x=Vec_a.x - Vec_b.x;
   Sub.y=Vec_b.y - Vec_b.y;}
   
   void Scale () //Г±ГЄГ*ëÿðГ*îå ГіГ¬Г*îæåГ*ГЁГҐ
   {struct Scale {double x, y;};
   Scale.x=Vec_a.x * Vec_b.x;
   Scale.y=Vec_b.y * Vec_b.y;}
   
   void Umnoj () //ГіГ¬Г*îæåГ*ГЁГҐ âåêòîðГ* Г*Г* ÷èñëî t
   {struct Umnoj {double x, y;};
   Umnoj.x=Vec_a.x * t;
   Umnoj.x=Vec_a.y * t;}
   
   void Dlina () //Г*Г*õîæäГ*ГЁГҐ äëèГ*Г*Г»
   {double Dlina;
   Dlina=sqrt(pow(Vec_a.x,2)+ pow(Vec_a.y,2))}; //ГЇГ® ôîðìóëå = êîðåГ*Гј(Г*^2+b^2)
  
  
  /*Г‡Г*Г¤Г*Г·Г* 1 - ÑîðòèðîâêГ* ГЇГ® óáûâГ*Г*ГЁГѕ äëèГ*
  void Sort()
  for (int i=1; i<n; i++)
  {????????????????????????????
  */
  
  /*Г‡Г*Г¤Г*Г·Г* 2 - 
  */
}
int main()
{int n; 
    system("chcp 1251");
    cout<<"Ââåäèòå êîëè÷åñòâî ýëåìåГ*òîâ Г¬Г*Г±Г±ГЁГўГ*";
    cin>>n;
    struct Vector Vec; //îïðåäåëåГ*ГЁГҐ ñòðóêòóðГ*îé ïåðåìåГ*Г*îé
   // struct vector a = { 3, 5 }; //ïðèìåð âåêòîðГ* Г* (3,5)
    cout<<"Ââåäèòå êîîðäèГ*Г*ГІГі x="; cin>>Vec_a.x; //Ââîäèì Г§Г*Г*Г·ГҐГ*ГЁГҐ Гµ äëÿ âåêòîðГ* Г*
    cout<<endl;
    cout<<"Ââåäèòå êîîðäèГ*Г*ГІГі y="; cin>>Vec_a.y; //Ââîäèì Г§Г*Г*Г·ГҐГ*ГЁГҐ Гі äëÿ âåêòîðГ* Г*
    cout << "Vec a  = " << Vec_a.x<<" "<<Vec_a.y //âûâîä âåêòîðГ* a Гў âèäå Vec a = 4 ; 2
    Cout<<endl;
    struct vector b = { 2, 3 };
    cout<<"Ââåäèòå êîîðäèГ*Г*ГІГі x="; cin>>Vec_b.x; //Ââîäèì Г§Г*Г*Г·ГҐГ*ГЁГҐ Гµ äëÿ âåêòîðГ* b
    cout<<endl;
    cout<<"Ââåäèòå êîîðäèГ*Г*ГІГі y="; cin>>Vec_b.y; //Ââîäèì Г§Г*Г*Г·ГҐГ*ГЁГҐ y äëÿ âåêòîðГ* b
    cout << "Vec b  = " << Vec_b.x<<" ; "<<Vec_b.y << endl; //âûâîä âåêòîðГ* b Гў âèäå Vec b = -2 ; 5
    system("PAUSE");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2013, 22:06     Векторы
Посмотрите здесь:

C++ Векторы
C++ Векторы
векторы С++ C++
Векторы C++
C++ Векторы!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
13.12.2013, 22:09     Векторы #2
Цитата Сообщение от EdNaron Посмотреть сообщение
void Sum () //сложение
* { struct Sum {double x, y;};
* *Sum.x=Vec_a.x + Vec_b.x;
* *Sum.y=Vec_b.y + Vec_b.y;}
и чего ты сч ем здесь складываешь?
кто такие Vec_a и Vec_b?
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
13.12.2013, 22:16  [ТС]     Векторы #3
В основной программе спрашиваем значение Vec_a( X и Y)(начало вектора) Vec_b( X и Y)(конец вектора) (структура) передаем эти значения в класс в функцию Sum (сложения), или я что то не так написал? Заранее прошу прощения за безграмотность
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
13.12.2013, 22:21     Векторы #4
Цитата Сообщение от EdNaron Посмотреть сообщение
В основной программе спрашиваем значение Vec_a( X и Y)(начало вектора) Vec_b
где они у тебя определены?
и что за смесь Си и плюсов
Цитата Сообщение от EdNaron Посмотреть сообщение
class Vectors
Цитата Сообщение от EdNaron Посмотреть сообщение
struct Vector Vec;
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
13.12.2013, 22:39  [ТС]     Векторы #5
Мне задали написать на С++, и проблема как раз в том, как это написать. Подскажите пожалуйста как это правильней будет
Общая структура:
<подключаем библиотеки>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using namecpase std;
class Vectors
public:
структура вектор ( х, у)
void...функции (+,-,*, d);
 
int main()
{вот тут не знаю как (как обратиться и занести данные в класс Vectors в струкуру Вектор координаты х и у)
просим ввести векторы вручную через 
cout<<"введите х"; 
cin>>*1*x; 
cout<<"введите y"; 
cin>>*1*y;
Так как координаты 2 то просим еще раз ввести в структуру Вектор 
cout<<"введите х"; 
cin>>*2*x;
cout<<"введите y"; 
cin>>*2*y;
cout<<"введите количество элементов в массиве";
cin>>n;
for (int i=0; i<n; i++)
вычисляем длину каждого вектора из функции
Вывод матрицы до сортировки;
а дальше в виде числа организуем сортировку в нужном порядке
Вывод матрицы после сортировки
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
13.12.2013, 22:44     Векторы #6
ну примерно так
C++
1
2
3
4
5
6
7
8
9
10
class Vectors
{
 double x;
 double y;
....................................
 
int Main()
{
Vectors vec;
...........................
Добавлено через 2 минуты
Цитата Сообщение от EdNaron Посмотреть сообщение
Так как координаты 2 то просим еще раз ввести в структуру Вектор
откуда две координаты?
Цитата Сообщение от EdNaron Посмотреть сообщение
struct Vector {double X, Y;};
я одну вижу
и даже это не координаты скорее всего а длинна по X и по Y
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
14.12.2013, 13:23  [ТС]     Векторы #7
По заданию надо сделать структуру Vector (double x,y) внутри класса. Сложная конструкция. я не знаю как это реализовать. В книжке написано, что класс и структура это почти одно и то же, только в одном можно использовать функции, а в другом - нельзя.

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
Originally Posted by EdNaron
Так как координаты 2 то просим еще раз ввести в структуру Вектор
откуда две координаты?
1) для начала вектора (х,у)
2) для его конца (х,у)

Добавлено через 14 часов 30 минут
Может так
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
#include <iostream>
#include <cmath>
using namespace std;
struct Vec {double x, y;};
class Vectors 
{
private:
Vec Value_1;
Vec Value_2; //Г*Г*çâГ*Г*ГЁГҐ ïåðåìåГ*Г*îé - Value 
public:
void SetValues(float ax, float ay, float bx, float by) 
{
Value_1.x=ax; 
Value_1.y=ay;
Value_2.x=bx; 
Value_2.y=by;
}       
void Sum (Vectors *sc) //ñëîæåГ*ГЁГҐ
{
Value_1.x+=sc->Value_1.x; //Г*Г*Г*ëîã (*sc).Value.x
Value_1.y+=sc->Value_1.y;
}
/*
void Sub (Vectors *sc) //ñëîæåГ*ГЁГҐ
{
Value.x-=sc->Value.x; //Г*Г*Г*ëîã (*sc).Value.x
Value.y-=sc->Value.y;
}
 
void Scale (Vectors *sc) //ñëîæåГ*ГЁГҐ
{
Value.x*=sc->Value.x; //Г*Г*Г*ëîã (*sc).Value.x
Value.y*=sc->Value.y;
} */
 
};              
int main()
{double ax,ay,bx,by,n;
    system("chcp 1251");
    cout<<"vvedite n ";
    cin>>n;
   //for (int i=0; i<n; i++)
    cout<<"vvedite ax "; cin>>ax;
    cout<<"vvedite ay "; cin>>ay;
    cout<<endl;
    cout<<"vvedite bx "; cin>>bx;
    cout<<"vvedite by "; cin>>by;
    Vectors::Sum(ax,ay);
   system("PAUSE");
    return 0;
}
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
15.12.2013, 13:47  [ТС]     Векторы #8
Помогите пожалуйста
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
15.12.2013, 14:13     Векторы #9
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
#include <iostream>
#include <cmath>
using namespace std;
struct Vectors 
{
public:
   double X,Y;
   Vector():X(0),Y(0){} // конструктор по умолчанию
   Vector(double x,double y):X(x),Y(y){} // конструктор
   Vector(const Vector &v):X(v.X),Y(v.Y){} // копиконструктор
   Vector Sum (Vector v) //сложение
   { 
        Vector t(*this);
        t.X+=v.X;
        t.Y+=v.Y;
        return t;
    }
   double Scale (Vector v) //скалярное умножение
   {
           return X*v.X+y*v.Y;
   }
 };
int main()
{
    int n; 
    system("chcp 1251");
    cout<<"Введите количество элементов массива";
    cin>>n;
    double x;
    cout<<"Введите координату x="; 
    cin>>x; //Вводим значение х для вектора
    cout<<endl;
    cout<<"Введите координату y="; 
    double y;cin>>y; //Вводим значение у для вектора
    Vector Vec_a(x,y); //определение структурной переменной Vec_a c Vec_a.X=x Vec_a.Y=y
    cout << "Vec a  = " << Vec_a.X<<";"<<Vec_a.Y //вывод вектора a в виде Vec a = 4 ; 2
    Cout<<endl;
    cout<<"Введите координату x="; 
    cin>>x; //Вводим значение х для вектора
    cout<<endl;
    cout<<"Введите координату y="; 
    cin>>y; //Вводим значение у для вектора
    Vector Vec_b(x,y); //определение структурной переменной Vec_b c Vec_b.X=x Vec_b.Y=y
    cout << "Vec b  = " << Vec_b.X<<";"<<Vec_b.Y //вывод вектора a в виде Vec a = 4 ; 2
    Vec_b=Vec_a+Vec_b; // сложение
    cout << "Vec b  = " << Vec_b.X<<";"<<Vec_b.Y //вывод вектора a в виде Vec a = 4 ; 2
    x=Vec_a.Scale(Vec_b); // скалярное произведение
    Cout<<"scalarnoe proizv="<<x<<endl;
    system("PAUSE");
    return 0;
}
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
15.12.2013, 17:06  [ТС]     Векторы #10
Спасибо большое, но мне нужно реализовать функции в виде класса подпрограмм, а структурой описать только Vector
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
15.12.2013, 17:20     Векторы #11
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 <cmath>
using namespace std;
class Vector 
{
public:
    struct VEC 
    {
         double X,Y;
    };
   VEC vec;
   Vector(){vec.X=vec.Y=0;} // конструктор по умолчанию
   Vector(double x,double y){vec.X=x;vec.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;
    }
   double Scale (Vector v) //скалярное умножение
   {
           return vec.X*v.vec.X+vec.Y*v.vec.Y;
   }
 };
int main()
{
    int n; 
    system("chcp 1251");
    cout<<"Введите количество элементов массива";
    cin>>n;
    double x;
    cout<<"Введите координату x="; 
    cin>>x; //Вводим значение х для вектора
    cout<<endl;
    cout<<"Введите координату y="; 
    double 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 ;//вывод вектора a в виде Vec a = 4 
    cout<<endl;
    cout<<"Введите координату x="; 
    cin>>x; //Вводим значение х для вектора
    cout<<endl;
    cout<<"Введите координату y="; 
    cin>>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 << "Vec b  = " << Vec_b.vec.X<<";"<<Vec_b.vec.Y ;//вывод вектора a в виде Vec a = 4 
    x=Vec_a.Scale(Vec_b); // скалярное произведение
    cout<<"scalarnoe proizv="<<x<<endl;
    system("PAUSE");
    return 0;
}
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
17.12.2013, 10:20  [ТС]     Векторы #12
Спасибо большое спаситель моей курсовой!!!

Добавлено через 23 часа 42 минуты
zss, Извините, а не могли бы вы помочь организовать сортировку по длине
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;
}
Добавлено через 16 часов 50 минут
Можете объяснить почему на некоторых компьютерах моя программа выдает ошибку?... не знаю что делать. Помогите пожалуйста. Сортировка не работает нужным образом, перемещая только первое значение Вот что у меня есть.
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
#include <iostream>
#include <cmath>
using namespace std;
class Vector 
{
public:
    struct VEC 
    {double X,Y;};
   VEC vec;
   VEC vecM[30];
   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));
   }      
   
   double DlinaM (VEC VecM) //длина вектора
   {int i;
           return sqrt(pow(vecM[i].X,2) + pow(vecM[i].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;}*/
    
double k1, k2, d1, d2;
int i; 
 
for( i=0; i<n-1; i++) //перемещает только первый элемент
{
     
      d1=Vec_a.DlinaM(Vec_a.vecM[i]);//pow(Vec_a.vecM[i].X,2)+pow(Vec_a.vecM[i].Y,2);//Vec_a.Dlina.vecM[i];//DlinaM(Vec_a.VecM[i]); // Vec_a.Dlina.vecM[i];
      d2=Vec_a.DlinaM(Vec_a.vecM[i+1]);//=pow(Vec_a.vecM[i+1].X,2)+pow(Vec_a.vecM[i+1].Y,2);
        
        if(d1<d2)  
        k1=Vec_a.vecM[i].X; 
        k2=Vec_a.vecM[i].Y;
        Vec_a.vecM[i].X = Vec_a.vecM[i+1].X;
        Vec_a.vecM[i].Y = Vec_a.vecM[i+1].Y;
        Vec_a.vecM[i+1].X=k1;
        Vec_a.vecM[i+1].Y=k2;
 
          
      
}
for ( i=0; i<n; i++) //Вывод массива
        {cout << "(" << Vec_a.vecM[i].X<<";"<<Vec_a.vecM[i].Y<<")  " ;}
    cout<<endl;       
 
         
    system("PAUSE");
    return 0;
}
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
17.12.2013, 10:30     Векторы #13
во первых, Вы забыли скобки
C++
1
2
3
4
5
6
7
8
9
if(d1<d2) 
{ 
        k1=Vec_a.vecM[i].X; 
        k2=Vec_a.vecM[i].Y;
        Vec_a.vecM[i].X = Vec_a.vecM[i+1].X;
        Vec_a.vecM[i].Y = Vec_a.vecM[i+1].Y;
        Vec_a.vecM[i+1].X=k1;
        Vec_a.vecM[i+1].Y=k2;
}
А во вторых,
Весь этот цикл (по i) надо повторить n раз,
чтобы самый нижний элемент массива
мог всплыть на самый верх.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for(j=0;j<n;j++)
{
  for( i=j; i<n-1; i++) 
  {
     
      d1=Vec_a.DlinaM(Vec_a.vecM[i]);
      d2=Vec_a.DlinaM(Vec_a.vecM[i+1]);
        
        if(d1<d2)
        {  
          k1=Vec_a.vecM[i].X; 
          k2=Vec_a.vecM[i].Y;
          Vec_a.vecM[i].X = Vec_a.vecM[i+1].X;
          Vec_a.vecM[i].Y = Vec_a.vecM[i+1].Y;
          Vec_a.vecM[i+1].X=k1;
          Vec_a.vecM[i+1].Y=k2;
        }
  }
}
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
17.12.2013, 10:34  [ТС]     Векторы #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
double k1, k2, d1, d2, min, max;
int i, j; 
for (j=0; j<n; j++)
{
 
for( i=0; i<n-1; i++) //ïåðåìåùГ*ГҐГІ òîëüêî ïåðâûé ýëåìåГ*ГІ
{
    min=Vec_a.DlinaM(Vec_a.vecM[i]);
    max=Vec_a.DlinaM(Vec_a.vecM[i+1]);
    {       
        if(min<max)  
        k1=Vec_a.vecM[i].X; 
        k2=Vec_a.vecM[i].Y;
        Vec_a.vecM[i].X = Vec_a.vecM[i+1].X;
        Vec_a.vecM[i].Y = Vec_a.vecM[i+1].Y;
        Vec_a.vecM[i+1].X=k1;
        Vec_a.vecM[i+1].Y=k2;
    }
          
}
все равно не хочет работать, он перемещает только первый элемент
Ev_Hyper
 Аватар для Ev_Hyper
1807 / 1628 / 435
Регистрация: 15.12.2013
Сообщений: 5,790
17.12.2013, 10:37     Векторы #15
Написали же: вы забыли оформить if(min<max) {...} в скобки.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
17.12.2013, 10:52     Векторы #16
И обратите внимание, что внутренний цикл можно начать не с нуля, а с j,
Т.к. пузырек всплывает
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
17.12.2013, 10:53  [ТС]     Векторы #17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int i, j; 
 
    for( j=0; j<n; j++) //ïåðåìåùГ*ГҐГІ òîëüêî ïåðâûé ýëåìåГ*ГІ
     { 
         for (i=0; i<n-1; i++)
            {
                   min=Vec_a.DlinaM(Vec_a.vecM[i]);
                   max=Vec_a.DlinaM(Vec_a.vecM[i+1]);
                   {  
                   if(min<max)  
                        {  
                         k1=Vec_a.vecM[i].X; 
                         k2=Vec_a.vecM[i].Y;
                         Vec_a.vecM[i].X = Vec_a.vecM[i+1].X;
                         Vec_a.vecM[i].Y = Vec_a.vecM[i+1].Y;
                         Vec_a.vecM[i+1].X=k1;
                         Vec_a.vecM[i+1].Y=k2;
                        } 
                   }
                   
            }     
     }
Не получается, все перепробовал, может я чего то не понимаю? индексом j мы заставляем выполниться цикл с индеком i - n-раз, в цикле с i мы выполняем счет и перемещение. в условии if описывается условие перемещения, вопрос, если я ему сказал крутить цикл n раз, почему он крутит его только 1н?
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
17.12.2013, 10:55     Векторы #18
внешний цикл идет по ДРУГОЙ переменной (не по i):
C++
1
2
3
4
for( j=0; j<n; j++)
{
   for (i=j; i<n-1; i++)
   {
EdNaron
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 18
17.12.2013, 11:50  [ТС]     Векторы #19
я опечатался, простите, сразу же исправил. по циклу все так же не сортирует
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int i, j; 
 
    for( j=0; j<n; j++) //ïåðåìåùГ*ГҐГІ òîëüêî ïåðâûé ýëåìåГ*ГІ
     { 
         for (i=j; i<n-1; i++)
            {
                   min=Vec_a.DlinaM(Vec_a.vecM[i]);
                   max=Vec_a.DlinaM(Vec_a.vecM[i+1]);
                   {  
                   if(min<max)  
                        {  
                         k1=Vec_a.vecM[i].X; 
                         k2=Vec_a.vecM[i].Y;
                         Vec_a.vecM[i].X = Vec_a.vecM[i+1].X;
                         Vec_a.vecM[i].Y = Vec_a.vecM[i+1].Y;
                         Vec_a.vecM[i+1].X=k1;
                         Vec_a.vecM[i+1].Y=k2;
                        } 
                   }
                   
            }     
     }
Добавлено через 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
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
#include <iostream>
#include <cmath>
using namespace std;
class Vector 
{
public:
    struct VEC 
    {double X,Y;};
   VEC vec;
   VEC vecM[30];
   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));
   }      
   
   double DlinaM (VEC VecM) //длина вектора
   {int i;
           return sqrt(pow(vecM[i].X,2) + pow(vecM[i].Y,2));
   }      
   
   void Sort(VEC VecM, int n)
{
 VEC tmp;
 
    for(int i = 0; i < n - 1; ++i) // i - номер прохода
    {            
        for(int j = i; j < n - 1; ++j) // внутренний цикл прохода
        {     
            if (DlinaM(vecM[j+1]) < DlinaM(vecM[j])) 
            {
                tmp = vecM[j+1]; 
                vecM[j+1] = vecM[j]; 
                vecM[j] = tmp;
            }
        }
    }
}
 };
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;    
    
double k1, k2, d1, d2, min, max;
int i, j; 
 
Vec_a.Sort(Vec_a.vecM[i],n);
 
for ( i=0; i<n; i++) //Вывод массива
        {cout << "(" << Vec_a.vecM[i].X<<";"<<Vec_a.vecM[i].Y<<")  " ;}
    cout<<endl;       
 
         
    system("PAUSE");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2013, 12:14     Векторы
Еще ссылки по теме:

Векторы! C++
Векторы C++
Векторы в с++ C++

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
17.12.2013, 12:14     Векторы #20
В функцию Sort надо передавать параметр не по значению, а по ссылке,
иначе все операции выполняются над копией.
C++
1
  void Sort(VEC& VecM, int n)
Добавлено через 3 минуты
И еще. А Вы понимаете в принципе, что Вы сортируете?
Yandex
Объявления
17.12.2013, 12:14     Векторы
Ответ Создать тему
Опции темы

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