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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Deutsch
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 6
#1

Определить сумму элементов, расположенных на главной диагонали матрицы - C++

10.01.2014, 22:38. Просмотров 1705. Ответов 3
Метки нет (Все метки)

Ввести матрицу размером NxM. Память для массива выделить динамически. вывести на экран исходные данные и полученный результат. Предусмотреть в программе использование функции пользователя. Определить сумму элементов, расположенных на главной диагоналb матрицы, и произведение элементов, расположенных на побочной диагонали матрицы.

я в с++ новичок и делаю всё по по шаблонам пока что. не могу понять почему считает не правельно.
пожалуйста помогите исправить это недрозумение.
vs 2010


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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "iomanip"
 
using namespace std;
 
void sp(double**, int, int, int*, int*);
 
int main()
{
double **a;
int i, j, n, m,s,p;
 
cout << "Vvedite razmer massiva A:\n";
cout << "row n=";
cin >> n ;
cout << "column m=";
cin >> m;
a = new double*[n]; 
for(i=0; i<n; i++) 
a[i] = new double[m]; 
cout << "\nVvedite massiv A:\n"; 
for (i=0; i<n; i++)
for (j=0; j<m; j++)
{
cout << "Vvedite a[" << i << "][" << j << "]: ";
cin >> a[i][j];
}
cout << "\nMassiv A:\n";
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
cout << setw (9) << a[i][j];
cout << endl;
}
 
sp (a, n, m, &s, &p);
 
cout<<"\nSumma elementov, raspolojenih na glavnoj diagonali \nmatrici = "<<s;
cout<<"\nProizvedenie elementov, raspolojenih na pobochnoj diagonali\nmatrici = "<<p<<endl;
 
for(i=0; i<n; i++) 
delete [] a[i];
delete []a;
a = NULL;
cin>>n;
return 0;
 
}
void sp (double **a,int n,int m,int *s,int *p)
{
    int i, j;
    *p=1;
    *s=0;
    for (i=0; i<n; i++)
        for (j=0; j<m; j++)
        {
            *s+=a[i][j];
           *p*= a[i][n-i-1];
            }
        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 22:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить сумму элементов, расположенных на главной диагонали матрицы (C++):

Определить сумму элементов, расположенных на главной диагонали матрицы - C++
Народ очень нужна помощь. Задание такое: Определить сумму элементов, расположенных на главной диагонали матрицы, и произведение...

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

Найти сумму элементов матрицы расположенных по главной диагонали - C++
как найти сумму элементов матрицы расположенных по главной диагонали 1 2 3 А=4 5 6 &lt;----матрица ок) 6 7 8 в С++...

Найти сумму максимальных элементов, расположенных на главной диагонали матрицы - C++
Даны три массива a, b, c. Найти сумму максимальных элементов, расположенных на главной диагонали помогите пожалуистаа прошу

В массиве А(12, 12) найти сумму элементов расположенных на главной диагонали матрицы - C++
Найти А(12,12) сумма элементов, расположенных на главной диагонали матрицы.

Вычислить сумму элементов матрицы, расположенных выше главной диагонали - C++
выдает ошибки: Ошибка 1 error LNK2001: неразрешенный внешний символ &quot;_mainCRTStartup&quot; Ошибка 2 error LNK1120: 1 неразрешенных внешних...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
__General__
24 / 24 / 3
Регистрация: 04.01.2014
Сообщений: 91
Завершенные тесты: 2
10.01.2014, 22:52 #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
68
69
70
71
72
73
74
#include <iostream>
#include <locale>    //нужно, чтобы подключить русский язык.
#include <iomanip>   //требуется для форматирования вывода (используем манипуляторы left и setw в функции print_matrix(...)).
 
using namespace std;
 
int get_max_el(int **matr, int M, int N);
void print_matrix(int **matr, int M, int N); //удобный вывод матрицы на экран.
 
int main()
{
    locale::global(locale("Russian")); //подключаем русский язык.
 
    int M, N;
    cout <<"Введите размеры матрицы: "; //для того, чтобы в матрице содержались элементы, лежащие ниже побочной диагонали, нужно, чтобы M > 1.
    cin >>M >>N;
 
    //динамически выделяем память под матрицу:
    int **matrix = new int*[M];  
    int i, j;
    for (i = 0; i < M; i++) {
        matrix[i] = new int[N];
    }
 
    cout <<"Введите элементы матрицы:\n"; //вводим матрицу размера MxN.
    for (i = 0; i < M; i++) {
        for (j = 0; j < N; j++) {
            cin >>matrix[i][j];
        }
    }
 
    cout <<"Итак, вы ввели матрицу:\n";
    print_matrix(matrix, M, N);
 
    int max = get_max_el(matrix, M, N);
    cout <<"Максимальный элемент, лежащий ниже побочной диагонали: " <<max <<'\n';
 
    cin.get(); //задержка консольного окна - чтобы не погасло раньше времени.
    cin.get();
 
    //освобождаем память:
    for (i = 0; i < M; i++) {
        delete [] matrix[i];
    }
    delete [] matrix;
 
    return 0;
}
 
int get_max_el(int **matr, int M, int N)   //элементы, лежащие ниже побочной диагонали, удовлетворяют неравенству: i > N-1-j;
{
    int i, j, max = matr[1][N-1];
    for (i = 2; i < M; i++) { 
        for (j = N-1; i > N-1-j; j--) {
            if (matr[i][j] > max) {
                max = matr[i][j];
            }
        }
    }
 
    return max;
}
 
void print_matrix(int **matr, int M, int N) 
{
    int i, j;
    for (i = 0; i < M; i++) {
        for (j = 0; j < N; j++) {
            cout <<left <<setw(5) <<matr[i][j];
        }
        cout <<'\n';
    }
    cout <<'\n';
}
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
10.01.2014, 22:57 #3
матрица я так понимаю квадратная.
нужно обрабатывать только то, что на диагоналях, а не все подряд. т.е. когда i == j
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  for (i=0; i<n; i++)
  {
    for (j=0; j<m; j++)
    {
      if (i == j)
      {
        *s+=a[i][j];
        *p*= a[i][n-i-1];
      }
    }
  }
 
 
  //можно одним фором. для побочной лень думать над индексами:
  for (i=0; i<n; i++)
  {
     *s += a[i][i];
  }
__General__
24 / 24 / 3
Регистрация: 04.01.2014
Сообщений: 91
Завершенные тесты: 2
10.01.2014, 23:24 #4
Матрица по условию произвольная (но главная диагональ есть у любой матрицы:-) )
А в остальном замечание верное)

Разумеется, считать нужно одним циклом (будет работать намного быстрее).

Добавлено через 5 минут
Вычисление произведение элементов побочной диагонали:

C++
1
2
3
4
5
...
for (i = 0; i < min(n, m); i++) {  //n - количество строк, m - количество столбцов.
    *p *= a[i][m-1-i];
}
...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 23:24
Привет! Вот еще темы с ответами:

Найти сумму отрицательных элементов расположенных на главной диагонали матрицы - C++
Задана матрица A 1.Найти сумму отрицательных элементов расположенных на главной диагонали 2.Найти максимальный элемент среди...

Найти сумму всех элементов матрицы, расположенных ниже главной диагонали - C++
Дан массив A(n,n) найти сумму всех его элементов, расположенных ниже главной диагонали Название темы должно отражать ее суть

Найти сумму модулей элементов, расположенных выше главной диагонали матрицы - C++
for( int i = 0; i &lt; n; i++ ) for( int j = i+1; j &lt; n; j++ ) s += abs(array); Так он находит сумму модулей элементов ниже главной...

Вычислить сумму элементов матрицы, расположенных на главной диагонали и выше нее - C++
Дано задание: Дана действительная квадратная матрица порядка 7. Вычислить сумму тех её элементов, расположенных на главной...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.01.2014, 23:24
Ответ Создать тему
Опции темы

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