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

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

Войти
Регистрация
Восстановить пароль
 
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
#1

Матрицы - C++

10.02.2010, 17:49. Просмотров 817. Ответов 19
Метки нет (Все метки)

Как реализовать две квадратные матрицы одинакового размера, значения которого вводит пользователь, а затем выводит сумму матриц?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2010, 17:49     Матрицы
Посмотрите здесь:

В заданной матрицы А (6, 4) найти значение крупнейшего по модулю элемента матрицы - C++
В заданной матрицы А (6,4) найти значение крупнейшего по модулю элемента матрицы, а также его индексы. Вывести исходную матрицу, наибольший...

Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. - C++
Если след матрицы A больше 50, то все эелементы матрицы увеличить на 2.

какими средствами пользоваться для того, чтобы умножать матрицы, складывать матрицы? - C++
Кто знает скажите плз какими средствами пользоваться для того, чтобы умножать матрицы, складывать матрицы. Самому как-то лень писать эту...

Для заданной матрицы найти такие k что k-я строка матрицы совпадает с k-м столбцом - C++
П.5.4. Правил Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п. Для заданной матрицы размером 8...

На главной диагонали новой матрицы разместить элементы заданного столбца исходной матрицы - C++
У меня вот небольшой ступр, помогите, пожалуйста. Дана квадратная матрица действительных чисел D размерности NxN. Создать новую матрицу С...

Вычеркнуть х строку и k столбец из матрицы A[1.N,1.M], содержащие минимальное значение этой матрицы - Turbo Pascal
Вычеркнуть х строку и k столбец из матрицы A, содержащие минимальное значение этой матрицы Добавлено через 3 часа 14 минут Заранее...

Вычеркнуть строку и столбец матрицы, содержащие минимальное значение этой матрицы. - Pascal
Добрый день. Необходимо вычеркнуть x строку и k столбец из матрицы, содержащие минимальное значение этой матрицы.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 18:29     Матрицы #2
kursant:
Пример будет на C++.
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 18:38  [ТС]     Матрицы #3
Да в С++
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 18:46     Матрицы #4
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream.h>
int main(){
int H(0),W(0);              //размеры матриц
 
int **matrix1 = NULL;
int **matrix2 = NULL;
int **smatrix = NULL;    
cout<<"Input Height and Width matrix\t";cin>>H;
W = H;
 
//Выделяем память под три матрицы:
matrix1 = new int*[H];
int i;
for(i=0;i<H;i++)matrix1[i]= new int[W];
matrix2 = new int*[H];
for(i=0;i<H;i++)matrix2[i]= new int[W];
smatrix = new int*[H];
for(i=0;i<H;i++)smatrix[i]= new int[W];
 
//Заполняем две матрицы
for(i=0;i<H;i++){
    for(int j=0;j<W;j++){
cout<<"input "<<' '<<i<<' '<<j<<'\t';cin>>matrix1[i][j];
    }
cout<<'\n';
}
 
cout<<'\n';
 
for(i=0;i<H;i++){
    for(int j=0;j<W;j++){
cout<<"input "<<' '<<i<<' '<<j<<'\t';cin>>matrix2[i][j];
    }
cout<<'\n';
}
 
 
//Показываем на экран матрицы
 
for(i=0;i<H;i++){
    for(int j=0;j<W;j++){
cout<<' '<<matrix1[i][j];
    }
cout<<'\n';
}
 
cout<<'\n';
 
for(i=0;i<H;i++){
    for(int j=0;j<W;j++){
cout<<' '<<matrix2[i][j];
    }
cout<<'\n';
}
 
cout<<'\n';
 
 
//Вычисляем сумму матриц
for(i=0;i<H;i++)for(int j=0;j<W;j++)smatrix[i][j]=matrix1[i][j]+matrix2[i][j];
 
cout<<'\n';
 
//Выводим матрицу суммы
for(i=0;i<H;i++){
    for(int j=0;j<W;j++){
cout<<' '<<smatrix[i][j];
    }
cout<<'\n';
}
 
 
 
 
 
 
//Освобождаме память из под трёх матриц
for(i = 0;i<H;i++)delete[]matrix1[i];
delete[]matrix1;
for(i = 0;i<H;i++)delete[]matrix2[i];
delete[]matrix2;
for(i = 0;i<H;i++)delete[]smatrix[i];
delete[]smatrix;
 
return 0;
}
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 18:56  [ТС]     Матрицы #5
А как сделать проверку чтобы пользователь не мог ввести отрицательную матрицу?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 18:59     Матрицы #6
Что то я с циклами не очень, можно конечно оптимизировать:
C++
1
2
3
4
5
for(i=0;i<H;i++){
matrix1[i]= new int[W];
matrix2[i]= new int[W];
smatrix[i]= new int[W];
}
и
C++
1
2
3
4
5
for(i = 0;i<H;i++){
delete[]matrix1[i];
delete[]matrix2[i];
delete[]smatrix[i];
}
Добавлено через 2 минуты
А как сделать проверку чтобы пользователь не мог ввести отрицательную матрицу?
А какая реакция программы на это должна быть.
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 19:01  [ТС]     Матрицы #7
Добавлено через 2 минуты

А какая реакция программы на это должна быть.
Чтобы выдовало ему снова ввести.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 19:07     Матрицы #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for(i=0;i<H;i++){
    for(int j=0;j<W;j++){
cout<<"input "<<' '<<i<<' '<<j<<'\t';cin>>matrix1[i][j];
if(matrix1[i][j]<0){cout<<"You input negative number, input >=0\t";cin>>matrix1[i][j];}
    }
cout<<'\n';
}
 
cout<<'\n';
 
for(i=0;i<H;i++){
    for(int j=0;j<W;j++){
cout<<"input "<<' '<<i<<' '<<j<<'\t';cin>>matrix2[i][j];
if(matrix2[i][j]<0){cout<<"You input negative number, input >=0\t";cin>>matrix2[i][j];}
    }
cout<<'\n';
}
Всё правильно работает если пользователь не попытается ввести отрицательное ещё раз.
Надеюсь пользователь не будит тупить.
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 19:28  [ТС]     Матрицы #9
Добавлено через 17 минут
Genius Ignat, А как посчитать произведение опредилителей этих матриц?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 19:39     Матрицы #10
Могу дать функцию нахождения определителя:
Может кто это переделать в сплошной код.

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
double determinant(int **a, int N) 
{ 
  int i,j; 
  int **matr1; 
/*  int sign=1;*/ 
  double determ=0; 
 
  if (N==2) 
  { 
    determ=a[0][0]*a[1][1]-a[0][1]*a[1][0]; 
  } 
  else 
  { 
    matr1=new int*[N-1]; 
 
    for(i=0;i<N;i++) 
    { 
      for(j=0;j<N-1;j++) 
    { 
      if(j<i)   {matr1[j]=a[j];} 
      else      {matr1[j]=a[j+1];} 
    } 
      determ+=pow(-1,(i+j))*determinant(matr1,N-1)*a[i][N-1]; 
    } 
    delete matr1; 
  } 
 
  return determ; 
  cout<<'\n'; 
}
Добавлено через 2 минуты
pow // надо подключить math.h
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 19:43  [ТС]     Матрицы #11
Цитата Сообщение от Genius Ignat Посмотреть сообщение
**matr1
А что значит две звёздочки?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 19:44     Матрицы #12
Указатель на указатель.
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 19:48  [ТС]     Матрицы #13
Добавлено через 32 секунды
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Могу дать функцию нахождения определителя:
Может кто это переделать в сплошной код.

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
double determinant(int **a, int N) 
{ 
  int i,j; 
  int **matr1; 
/*  int sign=1;*/ 
  double determ=0; 
 
  if (N==2) 
  { 
    determ=a[0][0]*a[1][1]-a[0][1]*a[1][0]; 
  } 
  else 
  { 
    matr1=new int*[N-1]; 
 
    for(i=0;i<N;i++) 
    { 
      for(j=0;j<N-1;j++) 
    { 
      if(j<i)   {matr1[j]=a[j];} 
      else      {matr1[j]=a[j+1];} 
    } 
      determ+=pow(-1,(i+j))*determinant(matr1,N-1)*a[i][N-1]; 
    } 
    delete matr1; 
  } 
 
  return determ; 
  cout<<'\n'; 
}
Добавлено через 2 минуты
pow // надо подключить math.h
А что нужно переделать для той программы которую Вы дали?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 19:56     Матрицы #14
// int **a - подразумевается в вашей программе, как имя одной из матриц
// N - размер матрицы
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
int i,j; 
  int **matr1; 
/*  int sign=1;*/ 
  double determ=0; 
 
  if (N==2) 
  { 
    determ=a[0][0]*a[1][1]-a[0][1]*a[1][0]; 
  } 
  else 
  { 
    matr1=new int*[N-1]; 
 
    for(i=0;i<N;i++) 
    { 
      for(j=0;j<N-1;j++) 
    { 
      if(j<i)   {matr1[j]=a[j];} 
      else      {matr1[j]=a[j+1];} 
    } 
      determ+=pow(-1,(i+j))*determinant(matr1,N-1)*a[i][N-1]; 
    } 
    delete matr1; 
  } 
 
  // determ;  определитель
  cout<<'\n';
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 20:13  [ТС]     Матрицы #15
Цитата Сообщение от Genius Ignat Посмотреть сообщение
// int **a - подразумевается в вашей программе, как имя одной из матриц
// N - размер матрицы
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
int i,j; 
  int **matr1; 
/*  int sign=1;*/ 
  double determ=0; 
 
  if (N==2) 
  { 
    determ=a[0][0]*a[1][1]-a[0][1]*a[1][0]; 
  } 
  else 
  { 
    matr1=new int*[N-1]; 
 
    for(i=0;i<N;i++) 
    { 
      for(j=0;j<N-1;j++) 
    { 
      if(j<i)   {matr1[j]=a[j];} 
      else      {matr1[j]=a[j+1];} 
    } 
      determ+=pow(-1,(i+j))*determinant(matr1,N-1)*a[i][N-1]; 
    } 
    delete matr1; 
  } 
 
  // determ;  определитель
  cout<<'\n';
Значит по отдельности для каждой матрицы рассчитать по этому коду определитель, а потом умножить их?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 20:21     Матрицы #16
Да если пока вы не проходили функции тебе придётся писать одно и тоже три раза.

Используй блоки кода чтобы можно было тупо копировать код три раза, блоки кода отделяют зоны
видимости, и позволяют использовать одинаковые имена в функции main.
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 20:34  [ТС]     Матрицы #17
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Да если пока вы не проходили функции тебе придётся писать одно и тоже три раза.

Используй блоки кода чтобы можно было тупо копировать код три раза, блоки кода отделяют зоны
видимости, и позволяют использовать одинаковые имена в функции main.
Мы проходили функции.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 20:39     Матрицы #18
Тогда ты должен знать как вызвать determinant(int **a, int N) ; // что бы не писать одно и тоже.
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
11.02.2010, 15:22  [ТС]     Матрицы #19
Но мы не проходили такую функцию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2010, 14:08     Матрицы
Еще ссылки по теме:

Найти седловой элемент матрицы и упорядочить элементы строк матрицы по возрастанию - Pascal
Дана целочисленная матрица размера M x N. 1) Найти элемент, являющийся максимальным в свое строке и минимальным в своем столбце. Если...

Заменить каждый элемент матрицы А значением этого элемента матрицы В по условию - Turbo Pascal
Кроме матрицы А, дана матрица В такого же размера. Если для всех i,j выполняется неравенство {A}_{ij}+{B}_{ij}&gt;0 , заменить значение...

Найти минимальный элемент матрицы и добавить его к максимальному элементу матрицы - Pascal
6)Найти минимальный элемент матрицы и добавить его к максимальному элементу матрицы.

Матрица. Продублировать столбцы матрицы, содержащие максимальный и минимальные элементы матрицы - Visual C++
Задана целочисленная матрица размера N*M. Продублировать столбцы матрицы, содержащие максимальный и минимальные элементы матрицы.

Для матрицы E (8,8) найти все отрицательные элементы нижней треугольной матрицы - Turbo Pascal
нужно написать программу: Для матрицы E (8,8) найти все отрицательные элементы нижней треугольной матрицы. Функция f(x) и диапазон...


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

Или воспользуйтесь поиском по форуму:
Omlet
28 / 7 / 1
Регистрация: 07.04.2010
Сообщений: 3
18.04.2010, 14:08     Матрицы #20
kursant, Определитель матрицы! - С/С++
Yandex
Объявления
18.04.2010, 14:08     Матрицы
Ответ Создать тему
Опции темы

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