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

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

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

Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение - C++

01.07.2015, 14:38. Просмотров 421. Ответов 15
Метки нет (Все метки)

Добрый день, подскажите пожалуйста как создать n векторов или массивов, если изначально не известно сколько их будет?

Вот условие задания:

Даны p различных векторов одинаковой размерности. Написать программу, которая находит ту пару векторов из заданного набора, которая обладает минимальным скалярным произведением.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2015, 14:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение (C++):

Найти пару векторов из заданного набора имеющую минимальное скалярное произведение - C++
Даны p различных векторов одинаковой размерности N: a^((1))={〖a^((1))〗_n }= , и a^((2))={〖a^((2))〗_n }=,..,a^((p))={〖a^((p))〗_n...

ОпенМП расспаралелить скалярное произведение двух n-мерных векторов (массивов) - C++
Существует следующий код int main() { setlocale(LC_ALL, "Russian"); size_t n; cout << "Введите размерность...

Скалярное произведение векторов - C++
Здравствуйте! Помогите пожалуйста найти ошибки #include <iostream> using namespace std; int main(int argc, char *argv) { ...

Скалярное произведение векторов - C++
Объясните, пожалуйста, значение вот этой строки: int scalar(int V1, int V2, int n)

Найти скалярное произведение векторов - C++
нужно написать две программы 1) нахождение скалярного произведения векторов 2) вычисление...

Скалярное произведение двух векторов - C++
Даны два вектора (одномерных массива), содержащих n вещественных элементов. Найти скалярное произведение двух векторов.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Sallat
2 / 2 / 0
Регистрация: 31.05.2015
Сообщений: 10
01.07.2015, 14:46 #2
Цитата Сообщение от bogdan_z Посмотреть сообщение
подскажите пожалуйста как создать n векторов или массивов, если изначально не известно сколько их будет
Используй динамический массив.
zss
Модератор
Эксперт С++
6358 / 5922 / 1920
Регистрация: 18.12.2011
Сообщений: 15,220
Завершенные тесты: 1
01.07.2015, 14:56 #3
Образцы (шаблоны) программ для типовых задач
AlexVRud
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 431
01.07.2015, 15:52 #4
  • Если пишешь на С++, используй std::vector. Он более функционален и удобен.
  • У тебя по заданию длина векторов заранее не дана. Сказано только что она одинаковая.
  • Используй вектор от вектора (не забывая добавлять пробел между внешними < >):
    C++
    1
    
    std::vector< std::vector <double> > M;
  • Можно отдельно реализовать функцию скалярного произведения, но не забывая правильно передавать вектора как параметры:
    C++
    1
    2
    3
    4
    5
    
    double DotProduct(std::vector<double> &a, std::vector<double> &b) {
        /// ...
    }
    ...
        d = DotProduct(M[i], M[j]);
  • Используй разные сценарии инициализации векторов, в зависимости от известности его длины:
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    
      size_t N;
      // N = ... Длина векторов
      std::vector v(N);
      for(size_t i=0; i<N; ++i) {
        // v[i] = ...
      }
      //...
      M.push_back(v);
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 244
01.07.2015, 17:41  [ТС] #5
AlexVRud, а как мне сделать чтобы прогрмма генерировала n-ое количество векторов?
zss
Модератор
Эксперт С++
6358 / 5922 / 1920
Регистрация: 18.12.2011
Сообщений: 15,220
Завершенные тесты: 1
01.07.2015, 17:45 #6
Что-то невнимательно Вы смотрите предложенное (row - количество векторов, columns - длина каждого):
C++
1
2
3
4
5
6
7
8
9
10
11
12
//
// заполнение матрицы случайными числами из диапазона [0, 99] -----------
//
void FillRandomNumbers(int **matrix, const size_t rows, const size_t columns)
{
    srand((unsigned int)time(0)); // инициализируем ПГСЧ
 
    for (size_t row=0; row < rows; row++)
        for (size_t column=0; column < columns; column++)
            matrix[row][column] = rand() % 100; // присваиваем СЧ
}
//
Еще раз посмотрите
Образцы (шаблоны) программ для типовых задач
AlexVRud
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 431
01.07.2015, 18:00 #7
bogdan_z, По примеру выше n раз заполнить v и вызвать M.push_back(v)

Добавлено через 14 минут
Для генерации используем uniform_real_distribution если компилятор поддерживает С++11, иначе старый добрый (но уже не рекомендуемый) rand
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 244
01.07.2015, 18:23  [ТС] #8
zss, у меня будет двухменый массив, а каждая строчка массива это типо одномерный вектор??
я правильно понял?
zss
Модератор
Эксперт С++
6358 / 5922 / 1920
Регистрация: 18.12.2011
Сообщений: 15,220
Завершенные тесты: 1
01.07.2015, 18:43 #9
Именно так
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 244
02.07.2015, 21:34  [ТС] #10
AlexVRud, как перемножить вектора не подскажете,очень уж трудный там алгоритм
AlexVRud
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 431
02.07.2015, 22:32 #11
Пусть у тебя есть два вектора
http://www.cyberforum.ru/cgi-bin/latex.cgi?\vec{a}=(a_0, a_1, ..., a_{n-1}),\ \vec{b}=(b_0, b_1, ..., b_{n-1}).
В программе они могут быть представлены, например, так:
C++
1
2
std::vector<double> a;
std::vector<double> b;
Тогда математический http://www.cyberforum.ru/cgi-bin/latex.cgi?a_i эквивалентен a[i] в программе.
Тебе надо найти:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\langle \vec{a}, \vec{b} \rangle = a_0\cdot b_0 + a_1\cdot b_1 + ... + a_{n-1}\cdot b_{n-1}=\sum_{i=0}^{n-1}a_i\cdot b_i
Написать в программе
C++
1
dot_product = a[0]*b[0]+a[1]*b[1]+...+a[n-1]*b[n-1];
Ты не можешь. А вот http://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=0}^{n-1} можно записать через цикл. Что ты и должен сделать.
Прототип функции я писал выше.

З.Ы.: Но различай две реализации динамических массивов.
C++
1
2
double *xs;
std::vector<double> ys;
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 244
02.07.2015, 23:23  [ТС] #12
AlexVRud,
вот мой код

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
#include <iostream>
#include <ctime>
#include <vector>
#include <map>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    srand(time(0));
 
    int N, D;
 
    cout << "Введите количество векторов -> ";
    cin >> N;
 
    cout << "Введите размер векторов -> ";
    cin >> D;
 
    vector< vector <double> > M(N);
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j < D; j++)
            M[i].push_back(rand() % 100 - 20);
 
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < D; j++)
        {
            cout.width(3);
            cout << M[i][j] << " ";
        }
        cout << endl;
    }
 
    map<int, int> mas;
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j < D;j++)
            mas
 
    system("pause");
 
}
Добавлено через 10 минут
AlexVRud, вы может не совсем правильно меня поняли, мне нужно перемножить множество векторов,чтобы выполнялась проверка чтобы не перемножались уже те вектора которые были перемножены
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 23:36 #13
Цитата Сообщение от bogdan_z Посмотреть сообщение
как перемножить вектора не подскажете,очень уж трудный там алгоритм
std::inner_product
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 244
02.07.2015, 23:38  [ТС] #14
Mr.X, по подробнее если можно
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 23:49 #15
Цитата Сообщение от bogdan_z Посмотреть сообщение
по подробнее если можно
Вводите в Яндекс "std::inn" и переходите по первой же ссылке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2015, 23:49
Привет! Вот еще темы с ответами:

Найти скалярное произведение векторов - C++
Помогите пожалуйста, у самой никак не получается, надо написать программу на С++. Даны координаты двух n-мерных векторов A(a1; a2;..; an)...

Найти скалярное произведение векторов - C++
Даны два вектора x, y есть Rn. Найти скалярное произведение векторов.

[Геометрия]Скалярное произведение векторов - C++
Добрый день. Есть вот такая задача: Я написал программу, но не уверен верно ли написал. #include &lt;iostream.h&gt;

Распараллелить скалярное произведение векторов - C++
Задание - распараллелить скалярное произведение векторов. вектора vec1 и vec2 заполняются не рандомом для однозначности результата. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.07.2015, 23:49
Ответ Создать тему
Опции темы

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