Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 18.09.2014
Сообщений: 249

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

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

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

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

Даны p различных векторов одинаковой размерности. Написать программу, которая находит ту пару векторов из заданного набора, которая обладает минимальным скалярным произведением.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.07.2015, 14:38
Ответы с готовыми решениями:

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

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

Определите функцию, которая возвращает скалярное произведение двух векторов на плоскости
Ребят помогите пожалуйста. Определите функцию, которая возвращает скалярное произведение двух векторов на плоскости, где,- координаты...

15
2 / 2 / 1
Регистрация: 31.05.2015
Сообщений: 10
01.07.2015, 14:46
Цитата Сообщение от bogdan_z Посмотреть сообщение
подскажите пожалуйста как создать n векторов или массивов, если изначально не известно сколько их будет
Используй динамический массив.
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
01.07.2015, 14:56
Образцы (шаблоны) программ для типовых задач
0
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
01.07.2015, 15:52
  • Если пишешь на С++, используй 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);
0
4 / 4 / 1
Регистрация: 18.09.2014
Сообщений: 249
01.07.2015, 17:41  [ТС]
AlexVRud, а как мне сделать чтобы прогрмма генерировала n-ое количество векторов?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
01.07.2015, 17:45
Что-то невнимательно Вы смотрите предложенное (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; // присваиваем СЧ
}
//
Еще раз посмотрите
Образцы (шаблоны) программ для типовых задач
0
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
01.07.2015, 18:00
bogdan_z, По примеру выше n раз заполнить v и вызвать M.push_back(v)

Добавлено через 14 минут
Для генерации используем uniform_real_distribution если компилятор поддерживает С++11, иначе старый добрый (но уже не рекомендуемый) rand
0
4 / 4 / 1
Регистрация: 18.09.2014
Сообщений: 249
01.07.2015, 18:23  [ТС]
zss, у меня будет двухменый массив, а каждая строчка массива это типо одномерный вектор??
я правильно понял?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
01.07.2015, 18:43
Именно так
0
4 / 4 / 1
Регистрация: 18.09.2014
Сообщений: 249
02.07.2015, 21:34  [ТС]
AlexVRud, как перемножить вектора не подскажете,очень уж трудный там алгоритм
0
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
02.07.2015, 22:32
Пусть у тебя есть два вектора
https://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;
Тогда математический https://www.cyberforum.ru/cgi-bin/latex.cgi?a_i эквивалентен a[i] в программе.
Тебе надо найти:
https://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];
Ты не можешь. А вот https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=0}^{n-1} можно записать через цикл. Что ты и должен сделать.
Прототип функции я писал выше.

З.Ы.: Но различай две реализации динамических массивов.
C++
1
2
double *xs;
std::vector<double> ys;
0
4 / 4 / 1
Регистрация: 18.09.2014
Сообщений: 249
02.07.2015, 23:23  [ТС]
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, вы может не совсем правильно меня поняли, мне нужно перемножить множество векторов,чтобы выполнялась проверка чтобы не перемножались уже те вектора которые были перемножены
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 23:36
Цитата Сообщение от bogdan_z Посмотреть сообщение
как перемножить вектора не подскажете,очень уж трудный там алгоритм
std::inner_product
0
4 / 4 / 1
Регистрация: 18.09.2014
Сообщений: 249
02.07.2015, 23:38  [ТС]
Mr.X, по подробнее если можно
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 23:49
Цитата Сообщение от bogdan_z Посмотреть сообщение
по подробнее если можно
Вводите в Яндекс "std::inn" и переходите по первой же ссылке.
0
4 / 4 / 1
Регистрация: 18.09.2014
Сообщений: 249
02.07.2015, 23:56  [ТС]
AlexVRud, проблема перемножить здоровую кучу векторов и выбрать оттуда ту пару у которой произведение минимально

Добавлено через 5 минут
Mr.X, проблема перемножить здоровую кучу векторов и выбрать оттуда ту пару у которой произведение минимально
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.07.2015, 23:56
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru