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

Определить, между какими строками матрицы расстояние минимально

22.06.2022, 18:05. Показов 705. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста.
Дана матрица размером n×m. Расстояние
между k-й и l-й строками матрицы вычисляется по формуле Rkl(k и l в нижнем регистре) = akj + alj(k, l, j в нижнем).
Определить, между какими строками матрицы расстояние минимально. Использовать функцию для вычисления расстояний и для поиска максимума.
Как определить между какими строками расстояние минимально? В моем коде я могу задать строки и он только между ними расстояние найдет. Можно это как-нибудь автоматически посчитать? У меня не получается написать так, чтобы он посчитал строки 1 2, 1 3, 2 3.
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
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
 
 
 
using namespace std;
 
 
void vvod_matr(int** massi, int N, int M) {
    int k = 0;
    for (int l = 0; l < N; l++)
    {
        for (int j = 0; j < M; j++)
        {
            cin >> massi[l][j];
        }
    }
}
 
void findDistance(int** massi, int** R, int N, int M) {
    int l, k;
    cout << "Задайте строки" << endl;
    cin >> k >> l;
    R[k][l] = 0;
    for (int j = 0; j < M; j++) {
        R[k][l] += massi[k][j] * massi[l][j];
        }
    }
 
 
void vivod_obnov_matr(int** massi, int**  R, int N, int M) {
    for (int k = 0; k < N; k++)
    {
        for (int l = 0; l < M; l++) 
        if (R[k][l] > 0)
            cout << "Расстояние равно: " << R[k][l] << " ";
        cout << endl;
    }
}
 
 
 
int main() {
    setlocale(LC_ALL, "RUSSIAN");
    int N, M;
    cout << "Введите количество строк матрицы\n";
    cin >> N;
    cout << "Введите количество столбцов матрицы\n";
    cin >> M;
    int** R = new int* [N];
    for (int i = 0; i < N; i++)
    {
        R[i] = new int[M];
    }
    int** massi = new int* [N];
    for (int i = 0; i < N; i++)
    {
        massi[i] = new int[M];
    }
    cout << "Введите матрицу\n";
    vvod_matr(massi, N, M);
    findDistance(massi, R, N, M);
    cout << "\n";
    vivod_obnov_matr(massi, R, N, M);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2022, 18:05
Ответы с готовыми решениями:

Определить, между какими из пар точек самое большое расстояние
Условие программы. На плоскости заданы своими координатами n точек.Составить программу,...

Определить между какими из пар точек самое большое расстояние
Помогите пожалуйста в решении этих двух задач на С++ 1) На плоскости заданы своими координатами...

Найти максимальное расстояние между строками матрицы
Помогите бедному студенту решить задачку. Хотя бы сами процедуры, без ввода данных. Дана...

Дана матрица N*M. Определить расстояние между минимальным и максимальным элементами матрицы (расстояние должно быть нуле
Дана матрица N*M. Определить расстояние между минимальным и максимальным элементами матрицы...

9
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
22.06.2022, 18:33 2
Shouko28, Тебе нужно просто найти минимальный элемент матрицы R среди расположенных ниже главной диагонали. Причем только эти элементы и имеет смысл считать
Вообще, если немножко подумать, то без матрицы R вполне можно обойтись
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
22.06.2022, 18:39 3
Цитата Сообщение от Shouko28 Посмотреть сообщение
Расстояние
между k-й и l-й строками матрицы вычисляется по формуле Rkl(k и l в нижнем регистре) = akj + alj(k, l, j в нижнем).
Не понял.
"Расстояние" == сумма элементов строк k и l ??
0
0 / 0 / 0
Регистрация: 22.06.2022
Сообщений: 4
22.06.2022, 18:43  [ТС] 4
Там получается сумма произведений элементов строк k и l
Изображения
 
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
22.06.2022, 19:03 5
Цитата Сообщение от Folian Посмотреть сообщение
Не понял.
Цитата Сообщение от Shouko28 Посмотреть сообщение
Там получается сумма произведений элементов строк k и l
Как я понял, это скалярное произведение строк. Так?
Но для "расстояния" это не совсем подходит. Ибо может получиться и отрицательным. Впрочем, на это нам плевать.... Надо просто перебирать все пары строк, считать расстояние и запоминать минимальное (вместо с номерами строк, конечно)
1
0 / 0 / 0
Регистрация: 22.06.2022
Сообщений: 4
22.06.2022, 19:07  [ТС] 6
Цитата Сообщение от Байт Посмотреть сообщение
Надо просто перебирать все пары строк, считать расстояние и запоминать минимальное (вместо с номерами строк, конечно)
Вот да, и я не знаю как написать цикл который это все сам сделает.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
22.06.2022, 19:08 7
Лучший ответ Сообщение было отмечено Shouko28 как решение

Решение

Типо такого
C++
1
2
3
4
5
6
7
8
9
for( i=0; i< N; i++)
  for (j=i+1; j<N; j++) {
    R = расстояние меж строк i, j
    if ((i==0 && j==1) ||  Min > R) {
      Min = R;
      iMin = i;
      jMin = j;
   }
 }
0
0 / 0 / 0
Регистрация: 22.06.2022
Сообщений: 4
22.06.2022, 20:01  [ТС] 8
Цитата Сообщение от Байт Посмотреть сообщение
for( i=0; i< N; i++)
  for (j=i+1; j<N; j++) {
    R = расстояние меж строк i, j
    if ((i==0 && j==1) ||  Min > R) {
      Min = R;
      iMin = i;
      jMin = j;
   }
 }
Это цикл выделяет только одну пару чисел у меня.
Если матрица
Код
1 2 3
4 5 6
7 8 9
и ввести 1 и 3 строку, то в выводе получается 7
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
22.06.2022, 20:12 9
Можна заделать std::multimap, где ключ - эт вот это вот всё, сцумма перемноженных элементов строк k и l - а значение - это сами k и l.
Тогда всё само рассосётся и можно будет исследовать и при одинаковых значениях "расстояния".
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
22.06.2022, 20:42 10
Цитата Сообщение от Shouko28 Посмотреть сообщение
Это цикл выделяет только одну пару чисел у меня.
Как-о неправильно считаешь расстояния. Если как в твоем коде (findDistance) то там бредятина. Зачем вводить номера строк? Их надо перебирать в двойном цикле. Как я показал.
Цитата Сообщение от Folian Посмотреть сообщение
Можна заделать
Стоит ли путать малыша. У него и так каша в голове.
0
22.06.2022, 20:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2022, 20:42
Помогаю со студенческими работами здесь

Определить два множества, расстояние между которыми минимально
Определить два множества, расстояние между которыми минимально. Расстоянием между двумя...

Определить, между какими парами точек наибольшее расстояние
На плоскости заданы своими координатами n точек. Составить программу с использованием процедур и...

Определить, между какими из пар точек самое большое расстояние
На плоскости заданы своими координатами N точек. Составить программу, определяющую, между какими из...

Определить, между какими из пар точек самое большое расстояние
Помогите пожалуйста решить задачу при помощи ПОДПРОГРАММ-ПРОЦЕДУР. (Procedure &lt;&gt;(...)): На...

Определить, между какими из пар заданных точек самое большое расстояние
На плоскости заданы координаты точек. Определить, между какими из пар заданных точек самое большое...

Определить, между какими из пар точек на плоскости самое большое расстояние
(Подпрограмма) На плоскости заданы своими координатами n точек. Составить про- грамму,...

Расстояние между к-й и 1-й строками матрицы
Расстояние между к-й и 1-й строками матрицы.... к завтрашнему дню,помогите пожалуйста...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru