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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 85
#1

Необходимо вывести суммы главных диагоналей матрицы. Как?! - C++

15.12.2011, 12:39. Просмотров 1714. Ответов 16
Метки нет (Все метки)

Приветствую! Прошу помочь разобраться с загвосткой, необходимо чуть чуть подправить код, чтобы осуществлялся вывод суммы по двум диагоналям заданной пользователем матрицы.
Свой код прилагаю к посту. Буду бескрайне благодарен, если подскажите в чем проблема.
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
#include<iostream.h>
#include<math.h>
#include<stdio.h>
#include<conio.h>
int i,j,z,x,y,sum=0;
int mas[100][100];
su (int q, int w )
{int s=0;
for ( i=1;i<=q;i++)
{for ( j=1;j<=w;j++)s=s+mas[i][j];}
return s;}
void main ()
{ for (z=1;z<=2;z++) {
clrscr();
cout<<"Vvedite razmernost massiva:"<<endl<<"kol-vo strok=";cin>>x;
cout<<"kol-vo stolbcov=";cin>>y;
randomize();
clrscr();
cout<<"Massiv:("<<x<<","<<y<<")"<<endl;for ( i=1;i<=x;i++) 
{for ( j=1;j<=y;j++) { mas[i][j]=random(10);
cout<<mas[i][j]<<" ";
if(j==y) cout<<endl;}}
sum=su(x,y);
cout <<"Summa elementov massiva:="<<sum;
getch();}}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 12:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Необходимо вывести суммы главных диагоналей матрицы. Как?! (C++):

Вычеслить суммы элементов главных диагоналей матриц - C++
Вычеслить суммы элементов главных диагоналей матриц A(N,N) B(M,M).M и N(&lt;=20)

Вычислить сумму элементов двух главных диагоналей квадратной матрицы - C++
Двумерные массивы: 10)Вычислить сумму элементов двух главных диагоналей квадратной матрицы A=(ai,k), i=k. Спасибо большое.

Посчитать суммы в четвертях матрицы которые образуются пересечением главной и побочной диагоналей. - C++
дана матрица A Посчитать суммы в четвертях матрицы которые образуются пересечением главной и побочной диагоналей. Помоги,СРОЧНО! ...

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

Как наити суммы всех диагоналей выше главной - C++
Вопрос в названии, вроде элементарно но как то не догоняю

Как посчитать сумму диагоналей матрицы - C++
Как посчитать сумму диагоналей матрицы 4*4?

16
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 14:32 #2
Индексация элементов массива начинается с 0, соответственно в циклах, пробегая по элементам двумерного массива, должно быть
C++
1
2
for ( i = 0; i < х; i++)
    for ( j = 0; j < y; j++)
где х - число строк, у - число столбцов прямоугольной матрицы.

Главная и побочная диагональ есть только в квадратной матрице, в которой число строк = числу столбцов.

Не совсем поняла, что должна находить программа. Если она должна вычислять сумму элементов главной и побочной диагонали квадратной матрицы, то код программы может выглядеть например таким образом
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
#include <iostream.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
 
#define n 10 //размерность матрицы
 
//Функция для нахождения суммы элементов главной и побочной диагонали квадратной матрицы
int sum (int massiv[][n])
{
    int s = 0;
    for (int i=0; i < n; i++)
    {
        s = s + massiv[i][i]; // нахождение суммы элементов главной диагонали
    }
 
    for (i=0; i < n; i++)
    {
        s = s + massiv[i][n-i-1]; // к сумме элементов главной диагонали добавляются элементы побочной диагонали
    }
 
    return s;
}
 
int main ()
{ 
    srand(time(NULL));
 
    int mas[n][n];
 
    cout << "Massiv (" << n << ", " << n << ")" << "\n\n";
    
    for (int i=0; i < n; i++)
    {
        for (int j=0; j < n; j++)
        {
            mas[i][j] = rand()%11; // заполнение массива случайными числами от 0 до 10
            cout << mas[i][j] << " ";
        }
        cout << "\n";
    }
 
    int summa = sum(mas);
    
    cout << "\nSumma elementov glavnoi i pobochnoi diagonaley massiva\n";
    cout << "S = " << summa << "\n";
 
    return 0;
}
1
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 85
15.12.2011, 15:27  [ТС] #3
Благодарю Вас. А каким образом произвести ввод строки матрицы пользователем для дальнешего складывания суммы главной и побочной диагонали? Напишите пожалуйста.
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 15:48 #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
#include <iostream.h>
 
#define n 3 //êîëè÷åñòâî ýëåìåГ*òîâ ГЄГўГ*äðГ*ГІГ*îé Г¬Г*òðèöû
 
//ÔóГ*êöèÿ äëÿ Г*Г*õîæäåГ*ГЁГї ñóììû ýëåìåГ*òîâ ГЈГ«Г*ГўГ*îé ГЁ ïîáî÷Г*îé äèГ*ГЈГ®Г*Г*ëè ГЄГўГ*äðГ*ГІГ*îé Г¬Г*òðèöû
int sum (int massiv[][n])
{
    int s = 0;
    for (int i=0; i < n; i++)
    {
        s = s + massiv[i][i]; // Г*Г*õîæäåГ*ГЁГҐ ñóììû ýëåìåГ*òîâ ГЈГ«Г*ГўГ*îé äèГ*ГЈГ®Г*Г*ëè
    }
 
    for (i=0; i < n; i++)
    {
        s = s + massiv[i][n-i-1]; // ГЄ ñóììå ýëåìåГ*òîâ ГЈГ«Г*ГўГ*îé äèГ*ГЈГ®Г*Г*ëè äîáГ*âëÿþòñÿ ýëåìåГ*ГІГ» ïîáî÷Г*îé äèГ*ГЈГ®Г*Г*ëè
    }
 
    return s;
}
 
int main ()
{ 
    int mas[n][n];
 
    cout << "Vvedite massiv iz " << n*n << " elementov\n";
 
    for (int i=0; i < n; i++)
    {
        for (int j=0; j < n; j++)
        {
            cin >> mas[i][j];
        }
    }
 
    cout << "\nMassiv (" << n << ", " << n << ")" << "\n\n";
    
    for (i=0; i < n; i++)
    {
        for (int j=0; j < n; j++)
        {
            cout << mas[i][j] << " ";
        }
        cout << "\n";
    }
 
    int summa = sum(mas);
    
    cout << "\nSumma elementov glavnoi i pobochnoi diagonaley matrizy\n";
    cout << "S = " << summa << "\n";
 
    return 0;
}
И да, в первом варианте программы подключение библиотеки math.h излишне, достаточно
C++
1
2
3
#include <iostream.h>
#include <time.h>
#include <stdlib.h>
0
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 85
15.12.2011, 15:56  [ТС] #5
Heidel, прошу прощения за неточность, но я имел ввиду задание размерности матрицы вручную, например 5х5, а числа подбираются рандмно Как в таком случае будет выглядеть программа? Спасибо за помощь.
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 16:02 #6
Flamius, можно задавать размерность квадратной матрицы, изменяя число в строке программы
C++
1
#define n 3
Если вы хотите, чтобы размерность матрицы задавалась пользователем (вводилась с клавиатуры), вам необходимо использовать двумерный динамический массив.
0
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 85
15.12.2011, 16:06  [ТС] #7
Извените за внимание, но не могли бы Вы реализовать данную программу через динамический массив? Пользователь вводи размерность матрицы, а программа подчитывает ему сумму двух диагональ. Похожее я делал для суммы всех элементов матрицы(вы это можете в 1ом посте увидеть). Спасибо.
0
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
15.12.2011, 16:23 #8
Flamius, елементы главной удовлетворяют условие: i = j
елементы побочной удовлетворяют условие: i + j = N + 1

HTML5
1
2
3
4
5
6
     1        2        3
1                   3+1 = 4
 
2          2+2 = 4
 
3 1+3 = 4
C++
1
if( (i == j) || (i + j - 1 == N)){ Sum += a[i][j]}
Если индексация начинается с 0, тогда условие следущее:
C++
1
if( (i == j) || (i + j + 1 == N)){ Sum += a[i][j]}
1
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 85
15.12.2011, 16:40  [ТС] #9
Совсем запутался. Извените за надоедливость, но немогли бы полностью сформировать программу двумерный массивом? Буду признателен.
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 22:48 #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
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 <iostream.h>
#include <time.h>
#include <stdlib.h>
 
/*ÔóГ*êöèÿ äëÿ Г*Г*õîæäåГ*ГЁГї ñóììû ýëåìåГ*òîâ ГЈГ«Г*ГўГ*îé ГЁ ïîáî÷Г*îé äèГ*ГЈГ®Г*Г*ëè ГЄГўГ*äðГ*ГІГ*îé Г¬Г*òðèöû*/
int sum (int **massiv, int size)
{
    int s = 0;
    for (int i = 0; i < size; ++i)
    {
        for (int j = 0; j < size; ++j)
        {
            if ( (i == j) || (i + j + 1 == size))
            { s += massiv[i][j];}
        }
    }
 
    return s;
}
 
int main ()
{
    srand(time(NULL));
 
    int n;
    int **mas = NULL;
    
    cout << "Vvedite n = ";
    cin >> n;
    
    cout << "\nMatriza razmerom " << n << "x" << n <<"\n\n";
 
    /* Âûäåëÿåì ГЇГ*ìÿòü ïîä Г¬Г*òðèöó */
    /* Âûäåëÿåì ГЇГ*ìÿòü ïîä Г¬Г*Г±Г±ГЁГў ñòðîê Г¬Г*òðèöû */
    mas = new int*[n];
    for (int i=0; i < n; ++i)
        {
            /* Âûäåëÿåì ГЇГ*ìÿòü ïîä ГЄГ*æäóþ ñòðîêó Г¬Г*òðèöû */
            mas[i] = new int[n];
            for (int j=0; j < n; ++j)
            {
                mas[i][j] = rand()%101; /*заполнение матрицы случайными числами от 0 до 100*/
                cout << mas[i][j] << " " ;
            }
            cout <<"\n" ;
        }
 
    int summa = sum(mas, n);
 
    cout << "\nSumma elementov glavnoi i pobochnoi diagonaley matrizy\n";
    cout << "S = " << summa << "\n";
 
    /* Удаление матрицы из памяти*/
    /* ÓäГ*ëåГ*ГЁГҐ ГЄГ*æäîé ñòðîêè Г¬Г*òðèöû */
    for(i = 0; i < n; ++i)
    delete[] mas[i];
 
    /* ÓäГ*ëåГ*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ* ñòðîê Г¬Г*òðèöû */
    delete[] mas;
 
return 0;
}
1
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
16.12.2011, 00:33 #11
Heidel, простенько и работает, но в 55 строчке надо i обявить еще раз..
C++
1
for(int i = 0; i < n; ++i)
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 07:57 #12
Dr.Urban, поясни, зачем ?
0
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 85
16.12.2011, 08:25  [ТС] #13
Heidel, Dr.Urban! Спасибо вам за помощь! Многое прояснилось!
0
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
16.12.2011, 16:49 #14
Heidel,
Цитата Сообщение от Heidel Посмотреть сообщение
Dr.Urban, поясни, зачем ?
первым делом я скинул себе Ваш код и попробовал запустить, за что и получил ерор вида "Undefined symbol i". В коде не было об’явления даной переменной, а если были - то не в той области действия. Разве я не прав?
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 19:10 #15
Dr.Urban, я писала программу в Microsoft Visual C++ 6.0, и у меня компилируется и запускается без ошибок и предупреждений.
Переменная i объявляется и ей присваивается значение в цикле (36 строка кода), и так как цикл, в котором она объявлена, не является вложенным, то при использовании её далее в программе объявлять её снова нет необходимости - область видимости переменной i распространяется на всю главную функцию. В отличие, например, от переменной j, которая в первый раз объявляется в программе во вложенном цикле (строка 40), поэтому если бы она использовалась в программе где-либо дальше, её снова пришлось бы объявлять.
1
16.12.2011, 19:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2011, 19:10
Привет! Вот еще темы с ответами:

Найти ряд главных элементов матрицы - C++
Дано натуральное число n и |a_ij |_(i=1,…,n,j=1,…,m) действительная матрица. Найти ряд главных элементов a_(11,) a_22…,a_(nn ) заранее...

Вывести на экран суммы элементов каждой строки матрицы. - C++
Задана матрица размером NxM. Вывести на экран суммы элементов каждой строки матрицы.

Вывести на экран суммы элементов каждой строки матрицы - C++
как я понимаю, сумма элементов одной строки матрицы выводится так: for(i=0;i&lt;4;i++) {b1=0; for (j=0;j&lt;m;j++) b1+=b; } ...

Расставить в порядке возрастания элементы в главных диагоналях каждой матрицы. - C++
Здравствуйте, помогите решить эту задачу, пож-та. Я вроде всё сделал, не знаю что где не так. Вот эта задача: Заданы матрицы A= (i=1,...


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

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

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