Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Матрицы - C++

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

Как реализовать две квадратные матрицы одинакового размера, значения которого вводит пользователь, а затем выводит сумму матриц?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2010, 17:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Матрицы (C++):

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

Для матрицы найти такие k, что k-я строка матрицы совпадает с k-м столбцом - C++
Помогите решить задачку Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом. Найти...

Вычесть из элементов первого столбца матрицы значение максимального элемента матрицы - C++
Составить программу, в которой 1) организовать ввод матрицы размера mxn из целых чисел; 2) вычесть из элементов первого столбца матрицы...

Алгоритм обработки матрицы: Нахождение максимального элемента матрицы и его номера. - C++
Алгоритм обработки матрицы: Нахождение максимального элемента матрицы и его номера.

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

Найти количество элементов матрицы, которые совпадают с элементами другой матрицы - C++
Помогите найти количество элементов 2 мерного массива, которые совпадают с элементами другого аналогичного массива. Массив 5х3.

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

А какая реакция программы на это должна быть.
Чтобы выдовало ему снова ввести.
0
Genius Ignat
1237 / 775 / 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';
}
Всё правильно работает если пользователь не попытается ввести отрицательное ещё раз.
Надеюсь пользователь не будит тупить.
1
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 19:28  [ТС] #9
Добавлено через 17 минут
Genius Ignat, А как посчитать произведение опредилителей этих матриц?
0
Genius Ignat
1237 / 775 / 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
0
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
10.02.2010, 19:43  [ТС] #11
Цитата Сообщение от Genius Ignat Посмотреть сообщение
**matr1
А что значит две звёздочки?
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.02.2010, 19:44 #12
Указатель на указатель.
1
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
А что нужно переделать для той программы которую Вы дали?
0
Genius Ignat
1237 / 775 / 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';
0
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';
Значит по отдельности для каждой матрицы рассчитать по этому коду определитель, а потом умножить их?
0
10.02.2010, 20:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2010, 20:13
Привет! Вот еще темы с ответами:

Поменять большие элементы в строке матрицы с маленькими элементами этой же матрицы - C++
Дана мне задача надо заменить большие элементы в строке матрицы с маленькими элементами этой же матрицы. Помогите пацаны

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

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

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


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

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

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