1 / 1 / 2
Регистрация: 31.01.2010
Сообщений: 63
1

Матрицы

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

Author24 — интернет-сервис помощи студентам
Как реализовать две квадратные матрицы одинакового размера, значения которого вводит пользователь, а затем выводит сумму матриц?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2010, 17:49
Ответы с готовыми решениями:

Матрицы. Найти и распечатать сумму элементов 5-го столбца матрицы А и сумму элементов последней строки матрицы В
Даны две матрицы А(mxn)и В(m1xn1).программа находит и распечатывает сумму элементов 5-го столбца...

Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент
Я новичок в с++...поэтому оооочень нужна Ваша помощь!!! Необходимо написать программу, которая...

Сформировать одномерный массив из диагональных элементов матрицы. Найти след матрицы
Для заданной квадратной матрицы сформировать одномерный массив из ее диагональных элементов. Найти...

Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии матрицы
Здравствуйте! Помогите написать 3 программмы на C++ на задачи с двумерными массивами 3. Дана...

19
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
10.02.2010, 18:29 2
kursant:
Пример будет на C++.
0
1 / 1 / 2
Регистрация: 31.01.2010
Сообщений: 63
10.02.2010, 18:38  [ТС] 3
Да в С++
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
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;
}
1
1 / 1 / 2
Регистрация: 31.01.2010
Сообщений: 63
10.02.2010, 18:56  [ТС] 5
А как сделать проверку чтобы пользователь не мог ввести отрицательную матрицу?
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
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 минуты
А как сделать проверку чтобы пользователь не мог ввести отрицательную матрицу?
А какая реакция программы на это должна быть.
0
1 / 1 / 2
Регистрация: 31.01.2010
Сообщений: 63
10.02.2010, 19:01  [ТС] 7
Добавлено через 2 минуты

А какая реакция программы на это должна быть.
Чтобы выдовало ему снова ввести.
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
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';
}
Всё правильно работает если пользователь не попытается ввести отрицательное ещё раз.
Надеюсь пользователь не будит тупить.
1
1 / 1 / 2
Регистрация: 31.01.2010
Сообщений: 63
10.02.2010, 19:28  [ТС] 9
Добавлено через 17 минут
Genius Ignat, А как посчитать произведение опредилителей этих матриц?
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
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
0
1 / 1 / 2
Регистрация: 31.01.2010
Сообщений: 63
10.02.2010, 19:43  [ТС] 11
Цитата Сообщение от Genius Ignat Посмотреть сообщение
**matr1
А что значит две звёздочки?
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
10.02.2010, 19:44 12
Указатель на указатель.
1
1 / 1 / 2
Регистрация: 31.01.2010
Сообщений: 63
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
А что нужно переделать для той программы которую Вы дали?
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
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';
0
1 / 1 / 2
Регистрация: 31.01.2010
Сообщений: 63
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';
Значит по отдельности для каждой матрицы рассчитать по этому коду определитель, а потом умножить их?
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
10.02.2010, 20:21 16
Да если пока вы не проходили функции тебе придётся писать одно и тоже три раза.

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

Используй блоки кода чтобы можно было тупо копировать код три раза, блоки кода отделяют зоны
видимости, и позволяют использовать одинаковые имена в функции main.
Мы проходили функции.
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
10.02.2010, 20:39 18
Тогда ты должен знать как вызвать determinant(int **a, int N) ; // что бы не писать одно и тоже.
0
1 / 1 / 2
Регистрация: 31.01.2010
Сообщений: 63
11.02.2010, 15:22  [ТС] 19
Но мы не проходили такую функцию.
0
31 / 10 / 1
Регистрация: 07.04.2010
Сообщений: 3
18.04.2010, 14:08 20
kursant, Определитель матрицы! - С/С++
0
18.04.2010, 14:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2010, 14:08
Помогаю со студенческими работами здесь

Для матрицы найти такие k, что k-я строка матрицы совпадает с k-м столбцом
Помогите пожалуйста с первой частью задания: найти такие k. что k -строка матрицы совпадает с k-м...

Разделить все элементы матрицы на максимальный по абсолютной величине элемент матрицы
Добрый день! Помогите пожалуйста с задачей -- напишите код... Если все элементы главной диагонали...

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

Найти количество элементов матрицы, которые совпадают с элементами другой матрицы
Помогите найти количество элементов 2 мерного массива, которые совпадают с элементами другого...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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