Страница 1 из 1

Даны вещественные n-мерные векторы x,y,z. Найти xy+yz+xz

Добавлено: 11 май 2016, 09:48
Ronin94
Народ помогите исправить код, сам уже не могу

Код: Выделить всё

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <ctime>
 
using namespace std;
 
void ShowVector(vector<int>& x, vector<int>& y, vector<int>& z);
int UmnozhVector(vector<int> &x, vector<int> &y, vector<int> &z, int n);
int SumVector(vector<int> &xy, vector<int> &yz, vector<int> &xz, int n)
 
int main()
{
    setlocale(LC_ALL, "rus");
    int n;
    cout<<"Введите размерность векторов: ";
    cin>>n;
 
    vector<int> x(n);  //Объявляем векторы и заполняем
    for (int i = 0; i < n; i++)
        x[i] = rand() % n;
 
    vector<int> y(n);
    for (int j = 0; j < n; j++)
        y[j] = rand() % n;
 
    vector<int> z(n);
    for (int k = 0; k < n; k++)
        z[k] = rand() % n;
    
    ShowVector(x, y, z);
    UmnozhVector(x, y, z, n);
    system("PAUSE");
    return 0;
}
 
void ShowVector(vector<int> &x, vector<int> &y, vector<int> &z)
{
    cout << "Векторы:\n";
 
    cout << "x{ ";
    int size = x.size(); //Чтобы каждую итерацию не вызывать
    for (int i = 0; i < size; i++)
    {
        cout << x[i] << " ";
    }
    cout << "}" << endl;
 
    cout << "y{ ";
    size = y.size();
    for (int j = 0; j < size; j++)
    {
        cout << y[j] << " ";
    }
    cout<<"}"<<endl;
 
    cout << "z{ ";
    size = z.size();
    for (int k = 0; k < size; k++)
    {
        cout << z[k] << " ";
    }
    cout << "}" <<endl;
}
 
int UmnozhVector(vector<int> &x, vector<int> &y, vector<int> &z, int n)
{
    cout<<"Умножение:\n";
    vector<int> xy(n);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            x[i] * y[j];
    }
    vector<int> yz(n);
    for (int j = 0; j < n; j++)
    {
        for (int k = 0; k < n; k++)
            y[j] * z[k];
    }
    vector<int> xz(n);
    for (int i = 0; i < n; i++)
    {
        for (int k = 0; k < n; k++)
            x[i] * z[k];
    }
    cout << xy[n] <<endl;
    cout << yz[n] <<endl;
    cout << xz[n] <<endl;
    SumVector(xy,yz,xz,n);
}
 
int SumVector(vector<int> &xy, vector<int> &yz, vector<int> &xz, int n)
{
    cout<<"Сумма:\n";
    vector<int> S(n);
    for(int i=0;i<n;i++)
    S[i]=xy[i]+yz[i]+xz[i];
    cout << S[n];
}

Re: Даны вещественные n-мерные векторы x,y,z. Найти xy+yz+xz

Добавлено: 11 май 2016, 10:41
Romeo
Из того, что заметил при беглом осмотре: на строках 74, 80 и 86 ты вычисляешь произведения, но никуда не помещаешь результат этого вычисления. Возможно, есть ещё какие-то проблемы.

И, кстати, результат умножения двух векторов - это либо матрица, либо число (в зависимости от того, как исходные вектора ориентированны в матричном представлении), но никак не вектор. Подробности тут.

Re: Даны вещественные n-мерные векторы x,y,z. Найти xy+yz+xz

Добавлено: 11 май 2016, 11:27
Romeo
Решил чуть вникнуть в задание. Конечно же имеется в виду скалярное произведение векторов, и последующая сумма трёх обычных скалярных значений.

Re: Даны вещественные n-мерные векторы x,y,z. Найти xy+yz+xz

Добавлено: 13 май 2016, 00:31
Ronin94
Все исправил, теперь работает как надо....если кому надо то вот

Код: Выделить всё

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <ctime>
 
using namespace std;
 
void ShowVector(vector<int> x, vector<int> y, vector<int> z, int n);
void UmnozhVector(vector<int> x, vector<int> y, vector<int> z, int n);
void SumVector(vector<int> xy, vector<int> yz, vector<int> xz, int n);
 
int main()
{
    setlocale(LC_ALL, "rus");
    int n;
    cout<<"Введите размерность векторов: ";
    cin>>n;
 
    vector<int> x(n);  //Объявляем векторы и заполняем
    for (int i = 0; i < n; i++)
        x[i] = rand() % n;
 
    vector<int> y(n);
    for (int j = 0; j < n; j++)
        y[j] = rand() % n;
 
    vector<int> z(n);
    for (int k = 0; k < n; k++)
        z[k] = rand() % n;
    
    ShowVector(x, y, z, n);
    UmnozhVector(x, y, z, n);
    system("PAUSE");
    return 0;
}
 
void ShowVector(vector<int> x, vector<int> y, vector<int> z, int n)
{
    cout << "\nВекторы:\n";
 
    cout << "x{ ";
   
    for (int i = 0; i < n; i++)
    {
        cout << x[i] << " ";
    }
    cout << "}" << endl;
 
    cout << "y{ ";
    
    for (int i = 0; i < n; i++)
    {
        cout << y[i] << " ";
    }
    cout<<"}"<<endl;
 
    cout << "z{ ";
   
    for (int i = 0; i < n; i++)
    {
        cout << z[i] << " ";
    }
    cout << "}" <<endl;
}

void UmnozhVector(vector<int> x, vector<int> y, vector<int> z, int n)
{
	cout<<"\nУмножение:\n";
    vector<int> xy(n);
	for (int i = 0; i < n; i++)
	{
			xy[i]=x[i] * y[i];
	}
	vector<int> yz(n);
	for (int i = 0; i < n; i++)
	{
			yz[i]=y[i] * z[i];
	}
	vector<int> xz(n);
	for (int i = 0; i < n; i++)
	{
			xz[i]=x[i] * z[i];
	}
	//вывод
	cout << "xy{ ";
   
    for (int i = 0; i < n; i++)
    {
        cout << xy[i] << " ";
    }
    cout << "}" << endl;
 
    cout << "yz{ ";
    
    for (int i = 0; i < n; i++)
    {
        cout << yz[i] << " ";
    }
    cout<<"}"<<endl;
 
    cout << "xz{ ";
   
    for (int i = 0; i < n; i++)
    {
        cout << xz[i] << " ";
    }
    cout << "}" <<endl;
	
	SumVector(xy,yz,xz,n);
}

void SumVector(vector<int> xy, vector<int> yz, vector<int> xz, int n)
{
	cout<<"\nСумма:\n";
	cout<<"Sum { ";

	vector<int> S(n);

	for(int i=0;i<n;i++)
	{
    S[i]=xy[i] + yz[i] + xz[i];
	}
	for (int i = 0; i < n; i++)
    {
        cout << S[i] << " ";
    }
	cout<<"}"<<endl;
}

Re: Даны вещественные n-мерные векторы x,y,z. Найти xy+yz+xz

Добавлено: 13 май 2016, 01:41
Romeo
Судя по коду, напечатается набор значений из вектора S. А на самом деле результат должен быть скалярным числом.

Вот мой вариант:

Код: Выделить всё

#include <iostream>
#include <vector>
#include <cassert>

int ScalarMultiplication(const std::vector<int>& x, const std::vector<int>& y)
{
   assert(x.size() == y.size());

   int result = 0;
   for (int i = 0; i < (int)x.size(); ++i)
   {
      result += x[i] * y[i];
   }

   return result;
}

void ShowVector(const std::vector<int>& vec)
{
   for (int i = 0; i < (int)vec.size(); ++i)
   {
      std::cout << vec[i] << " ";
   }
}

void FillVector(std::vector<int>& vec, int n)
{
   vec.reserve(n);
   for (int i = 0; i < n; ++i)
   {
      int value = 0;
      std::cin >> value;
      vec.push_back(value);
   }
}

int main()
{
   int n = 0;

   std::vector<int> x, y, z;

   std::cout << "Enter n:";
   std::cin >> n;

   std::cout << "Enter x vector: ";
   FillVector(x, n);
   std::cout << "Enter y vector: ";
   FillVector(y, n);
   std::cout << "Enter z vector: ";
   FillVector(z, n);

   std::cout << "Result of (xy + yz + zx) = " <<
      ScalarMultiplication(x, y) +
      ScalarMultiplication(y, z) +
      ScalarMultiplication(z, x) << std::endl;

	return 0;
}