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

Матрицы - C++

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

Алгоритм обработки матрицы: Нахождение максимального элемента матрицы и его номера. C++
Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии матрицы C++
Матрицы. Найти и распечатать сумму элементов 5-го столбца матрицы А и сумму элементов последней строки матрицы В C++
Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент C++
Поменять большие элементы в строке матрицы с маленькими элементами этой же матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 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
1233 / 771 / 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
1233 / 771 / 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
1233 / 771 / 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
1233 / 771 / 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
1233 / 771 / 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
1233 / 771 / 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
1233 / 771 / 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
1233 / 771 / 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     Матрицы
Еще ссылки по теме:

C++ Вычесть из элементов первого столбца матрицы значение максимального элемента матрицы
C++ Найти количество элементов матрицы, которые совпадают с элементами другой матрицы
C++ Преобразование матрицы (удалить из матрицы столбец с наибольшей по модулю суммой элементов)

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

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

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