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

в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А - C++

Восстановить пароль Регистрация
 
un4got10
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 2
19.06.2013, 14:46     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #1
2. в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А
заранее спасибо, буду очень благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2013, 14:46     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А
Посмотрите здесь:

Проверить, есть ли в матрице хотя бы один столбец, содержащий элемент, равный нулю, и найти его номер C++
C++ Проверить, есть ли в матрице хотя бы один столбец, содержащий элемент, равный нулю, и найти его номер.
Найти обратную матрицу и умножить ее на вектор C++
C++ Среди столбцов матрицы А найти столбец, содержащий минимальное произведение своих элементов и принять этот столбец за вектор X
Заполнить матрицу произвольного размера с клавиатуры. найти в матрице столбец с минимальным значением произведения элементов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Марат_09
5 / 5 / 1
Регистрация: 23.05.2013
Сообщений: 18
19.06.2013, 17:03     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #2
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
67
    const int n = 2 , m = 4;
 
    int flag = 0;
    int ink = 0;
 
    int A[n][m];
    int vector[n];
 
    for(int i=0; i<n; i++)
        for(int j=0; j<m; j++)
        {
            cout <<" A["<< i <<"]["<< j <<"]= ";
            cin >> A[i][j];
            cout << endl;
        }
          
    for(int i=0; i<m; i++)
    {
        if( flag != -1 )
        {
            for(int j=0; j<n; j++)
            {
                if( A[j][i] >= 0 )
                    flag ++;
                else
                    flag = 0;
 
                if( flag == m )
                    ink = j;
            }
 
            if( flag == m )
            {
                for(int k=0; k<n; k++)
                {
                    vector[k] = 0;
 
                    for(int d=0;d<m;d++)
                        vector[k] += A[d][ink] * A[k][d];
                }
 
                flag = -1;
                break;
            }
            else
            {
                flag = 0;
                ink = 0;
            }
        }
        else
            break;
    }
 
    //
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
            cout <<"  "<< A[i][j];
        cout << endl;
        cout << endl;
    }
 
    //
    for(int i=0; i<n; i++)
        cout <<" "<< vector[i];
    cout << endl;
Добавлено через 16 секунд
надо будет отладить!
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 18:58     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #3
Цитата Сообщение от Марат_09 Посмотреть сообщение
надо будет отладить!
задача имеет смыл только для квадратных матриц!
Марат_09
5 / 5 / 1
Регистрация: 23.05.2013
Сообщений: 18
19.06.2013, 21:50     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #4
в данном случае она может применяться для любого случая! Если хотите, то задавайте квадратную матрицу!
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 21:53     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #5
Цитата Сообщение от Марат_09 Посмотреть сообщение
в данном случае она может применяться для любого случая!
ну-ну, умножьте любой столбец матрица размера 2 на 3 на саму матрицу, например
матрица
1 2 3
4 5 6
и столбец
1
4
что получится?
Марат_09
5 / 5 / 1
Регистрация: 23.05.2013
Сообщений: 18
19.06.2013, 21:57     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #6
Получится вектор длины 3! Если умножить vector * Matrix!! А то, что операции над матрицами не коммутативны , думаю объясняют еще в классе 10!!!

Добавлено через 1 минуту
Ответ на ваш пример 17 22 27!
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 21:59     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #7
у вас был курс линейной алгебры?
Марат_09
5 / 5 / 1
Регистрация: 23.05.2013
Сообщений: 18
19.06.2013, 21:59     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #8
http://www.math-pr.com/matr_mul_3.php

Добавлено через 21 секунду
можете проверить!
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 22:03     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #9
Цитата Сообщение от Марат_09 Посмотреть сообщение
можете проверить!

Не по теме:

MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
19.06.2013, 22:05     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #10
Цитата Сообщение от Thinker Посмотреть сообщение
задача имеет смыл только для квадратных матриц!
Почему?

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
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
 
int main() {
  srand(time(0));
  setlocale(0, "");
  
  int n, m;
  
  std::cout << "n = ";
  std::cin >> n;
  std::cout << "m = ";
  std::cin >> m;
  
  int *matrix = new int[n*m];
  int *vec = new int[m];  
  
  std::cout << "Матрица:" << std::endl;
  for(int i = 0; i != n; ++i) {
    for(int j = 0; j != m; ++j) {
      *(matrix + i * m + j) = 1 + rand() % 5;
      std::cout << std::setw(4) << *(matrix + i * m + j);
    }
    std::cout << std::endl;
  }
  
  std::cout << "\nВектор:" << std::endl;
  for(int j = 0; j != m; ++j) {
    *(vec + j) = 1 + rand() % 5;
    std::cout << std::setw(4) << *(vec + j) << std::endl;
  }
  
  int *result_vec = new int[n];
    
  std::cout << "\nПроизведение матрицы на вектор:" << std::endl;
  for(int i = 0; i != n; ++i) {
    *(result_vec + i) = 0;
    for(int j = 0; j != m; ++j) {
      *(result_vec + i) += *(matrix + i * m + j) * *(vec + j);
    }
    std::cout << *(result_vec + i) << std::endl;
  }
  
  delete[] vec;
  delete[] matrix;
  delete[] result_vec;
  
  return 0;
}
Миниатюры
в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А  
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
19.06.2013, 22:07     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #11
ну т.е. матрица(3x5) и вектор (5x1) - результат умножения (3x1)
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 22:07     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #12
MarVaL, вектор это столбец исходной матрицы, смотрите задание
Марат_09
5 / 5 / 1
Регистрация: 23.05.2013
Сообщений: 18
19.06.2013, 22:07     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #13
Ты че прикалуешься или гонишь?? У тебя вектор транспонированный 2Х1, умножаем на матрицу 2Х3 получаешь вектор 3Х1! Я тебе написал, что операции над матрицами не коммутируют! У тебя не написано в задании , умножение с обоих сторон! А написано вырезать вектор и умножить на саму матрицу. Если ты проходил курс линейной алгебры, как ты выразился, то догонишь, что надо умножать вектор на матрицу, а не матрицу на вектор! Разберись сначало с заданием и пойму, что от тебя требуется!
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
19.06.2013, 22:23     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А #14
Цитата Сообщение от Thinker Посмотреть сообщение
MarVaL, вектор это столбец исходной матрицы, смотрите задание
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 <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
 
int getIndex(int *matrix, int n, int m) {
  int index = 0;
  for(int j = 0; j != m; ++j) {
    for(int i = 0; i != n; ++i) {
      if(*(matrix + i * m + j) < 0)
        break;
      index = j;
      return index;
    }
  }
  return index;
}
 
 
int main() {
  srand(time(0));
  setlocale(0, "");
  
  int n, m;
  
  std::cout << "n = ";
  std::cin >> n;
  std::cout << "m = ";
  std::cin >> m;
  
  int *matrix = new int[n*m];
  int *vec = new int[n];  
  
  std::cout << "Матрица:" << std::endl;
  for(int i = 0; i != n; ++i) {
    for(int j = 0; j != m; ++j) {
      *(matrix + i * m + j) = 1 + rand() % 5;
      std::cout << std::setw(4) << *(matrix + i * m + j);
    }
    std::cout << std::endl;
  }
  
  int index = getIndex(matrix, n, m);
  std::cout << "Первый столбец без отрицательных элементов:" << std::endl;
  for(int i = 0; i != n; ++i) {
    *(vec + i) =  *(matrix + i * m + index);
    std::cout << std::setw(4) << *(vec + i) << std::endl;
  }
  
  int *result_vec = new int[m];
    
  std::cout << "\nПроизведение вектора на матрицу" << std::endl;
   for(int j = 0; j != m; ++j) {
    *(result_vec + j) = 0;
    for(int i = 0; i != n; ++i) {
      *(result_vec + j) += *(vec + i) * *(matrix + i * m + j);
    }
    std::cout << *(result_vec + j) << std::endl;
  }
  
  delete[] vec;
  delete[] matrix;
  delete[] result_vec;
  
  return 0;
}
Миниатюры
в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2013, 22:26     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А
Еще ссылки по теме:

C++ Найти столбец с содержащий наибольшее количество кратных 3 элементов, и поменять его местами со столбцом, имеющим тот же номер
Умножить матрицу 10х10 на вектор из 10 элементов C++
В матрице К размером m*n найти в каждом столбце произведение отрицательных элементов и количество нулевых элементов в матрице C++

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

Или воспользуйтесь поиском по форуму:
Thinker
19.06.2013, 22:26     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А
  #15

Не по теме:

хорошо, согласен, не стал столбец транспонировать, вот и ступил, мой косяк...

Yandex
Объявления
19.06.2013, 22:26     в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А
Ответ Создать тему
Опции темы

Текущее время: 00:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru