Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 21.12.2017, 01:53   #1
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
Репутация: 10
По умолчанию [C++] Подскажите, как дописать код. Построить вектор, элементы которого скалярное произведение строк на столбец, содержащий наибольший элемент в этой строке

Задача: "На основе заданной матрицы А (n х n) построить вектор Х(n), элементы которого хi - скалярное произведение i-й строки матрицы А на столбец, содержащий наибольший элемент в этой строке."
Я написал такой фрагмент кода, в котором вместо (w) я думал потом фактическим параметром подставлять номер строки (i):
Код:
typedef int matrix[10][10];
void input(matrix, int);
void output(matrix, int);
int max(matrix, int, int);
 
int main()
{
    matrix A;
    int n;
    cin >> n ;
    input(A, n);
    output(A, n);
    system("pause");
    
}
 
void input(matrix p, int q)
{
    srand(time(NULL));
    for (int i = 0; i < q; i++) {
        for (int j = 0; j < q; j++)
            p[i][j] = rand() % 9;
    }
}
void output(matrix p, int q)
{
    for (int i = 0; i < q; i++) {
        for (int j = 0; j < q; j++) {
            cout << setw(4) << p[i][j];
        }
        cout << endl;
    }
}
int max(matrix l,int h, int w)
{
    int m = l[w][0];
    int jmax = 0;
    for (int j = 0; j < h; j++) {
        if (l[w][j] > m)
        {
            m = l[w][j];
            jmax = j;
        }
    }
    return jmax;
}
В функции max я написал как находить номер столбца с максимальным элементом в строке (jmax) (по крайней мере, я думаю, что это верно), но как дописать функцию которая будет создавать массив, в котором элементы будут равны скалярному произведению каждой строки на соответствующий каждой строке столбец?(т.е. и функцию произвидения тоже надо)

Последний раз редактировалось alexboliam; 21.12.2017 в 01:59. Причина: Лишние строки
alexboliam вне форума   Ответить с цитированием
Старый 21.12.2017, 02:09   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,679
Репутация: 2631
По умолчанию

Прям по определению. Или вы не знаете, что такое скалярное произведение? Там же фактически один цикл будет.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 21.12.2017, 02:32   #3
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Прям по определению. Или вы не знаете, что такое скалярное произведение? Там же фактически один цикл будет.
a[0]*b[0] + a[1]*b[1] + ...
Я попросил помочь с этим циклом, я в нем немного запутался
Сначала , думаю, берем
Код:
for(i=0;i<q;i++){
   j = max(p,q,i);
   а вот дальше я запутался

Последний раз редактировалось alexboliam; 21.12.2017 в 02:43.
alexboliam вне форума   Ответить с цитированием
Старый 21.12.2017, 10:13   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,679
Репутация: 2631
По умолчанию

Так разберитесь в математике и цикл сам появится. Вот a[0], a[1], ... кто это? a[w][0] или a[0][w] для вашей матрицы? Так же и с b.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 21.12.2017, 21:53   #5
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
Репутация: 10
По умолчанию

Еле сегодня сделал её. Нарисовал для себя таблицу, как располагаются элементы этого массива и додумал таки.
Код:
int max(matrix p,int q, int row)
{
	int m = p[row][0];
	int jmax = 0;
	for (int j = 0; j < q; j++) {
		if (p[row][j] > m)
		{
			m = p[row][j];
			jmax = j;
		}
	}
	return jmax;
}
void calc(matrix p, int q, matrix2 k)
{
	for (int i = 0; i < q;i++)
	{
		int solve = 0;
		int jmax = max(p, q, i);
		for (int j = 0; j < q; j++)
		{
			solve += p[i][j]*p[j][jmax];
		}
		k[i] = solve;
	}
	output2(k, q);
}
alexboliam вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скалярное произведение строк матрицы на 2-ой столбец seniks Windows Forms 1 07.12.2017 00:35
Построить вектор, элементы которого равны произведению соответствующих элементов двух других векторов Andarg C# (си шарп) 0 25.05.2014 15:11
процедуры и функции : Дан вектор A(n). Построить вектор B(n), i-ый элемент которого равен среднему арифметическому (Паскаль) vladicvladic123 Помощь студентам 2 04.12.2013 14:56
Найти скалярное произведение i строки на i столбец элементы матрицы зада по след правилу (Нафаня) Помощь студентам 5 07.06.2012 13:49
Построить вектор, каждый элемент которого равен наибольшему количеству равных элементов в соответствующей abakuz Помощь студентам 0 28.05.2011 18:08


08:47.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.