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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 81
15.12.2011, 12:39     Необходимо вывести суммы главных диагоналей матрицы. Как?! #1
Приветствую! Прошу помочь разобраться с загвосткой, необходимо чуть чуть подправить код, чтобы осуществлялся вывод суммы по двум диагоналям заданной пользователем матрицы.
Свой код прилагаю к посту. Буду бескрайне благодарен, если подскажите в чем проблема.
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();}}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 12:39     Необходимо вывести суммы главных диагоналей матрицы. Как?!
Посмотрите здесь:

C++ Вычеслить суммы элементов главных диагоналей матриц
C++ Вывести на экран суммы элементов каждой строки матрицы.
C++ как правильно вывести на экран суммы элементов каждой строки матрицы
C++ Вычислить сумму элементов двух главных диагоналей квадратной матрицы
Посчитать суммы в четвертях матрицы которые образуются пересечением главной и побочной диагоналей. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Heidel
 Аватар для Heidel
110 / 110 / 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;
}
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 81
15.12.2011, 15:27  [ТС]     Необходимо вывести суммы главных диагоналей матрицы. Как?! #3
Благодарю Вас. А каким образом произвести ввод строки матрицы пользователем для дальнешего складывания суммы главной и побочной диагонали? Напишите пожалуйста.
Heidel
 Аватар для Heidel
110 / 110 / 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>
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 81
15.12.2011, 15:56  [ТС]     Необходимо вывести суммы главных диагоналей матрицы. Как?! #5
Heidel, прошу прощения за неточность, но я имел ввиду задание размерности матрицы вручную, например 5х5, а числа подбираются рандмно Как в таком случае будет выглядеть программа? Спасибо за помощь.
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 16:02     Необходимо вывести суммы главных диагоналей матрицы. Как?! #6
Flamius, можно задавать размерность квадратной матрицы, изменяя число в строке программы
C++
1
#define n 3
Если вы хотите, чтобы размерность матрицы задавалась пользователем (вводилась с клавиатуры), вам необходимо использовать двумерный динамический массив.
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 81
15.12.2011, 16:06  [ТС]     Необходимо вывести суммы главных диагоналей матрицы. Как?! #7
Извените за внимание, но не могли бы Вы реализовать данную программу через динамический массив? Пользователь вводи размерность матрицы, а программа подчитывает ему сумму двух диагональ. Похожее я делал для суммы всех элементов матрицы(вы это можете в 1ом посте увидеть). Спасибо.
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]}
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 81
15.12.2011, 16:40  [ТС]     Необходимо вывести суммы главных диагоналей матрицы. Как?! #9
Совсем запутался. Извените за надоедливость, но немогли бы полностью сформировать программу двумерный массивом? Буду признателен.
Heidel
 Аватар для Heidel
110 / 110 / 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;
}
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)
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 07:57     Необходимо вывести суммы главных диагоналей матрицы. Как?! #12
Dr.Urban, поясни, зачем ?
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 81
16.12.2011, 08:25  [ТС]     Необходимо вывести суммы главных диагоналей матрицы. Как?! #13
Heidel, Dr.Urban! Спасибо вам за помощь! Многое прояснилось!
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
16.12.2011, 16:49     Необходимо вывести суммы главных диагоналей матрицы. Как?! #14
Heidel,
Цитата Сообщение от Heidel Посмотреть сообщение
Dr.Urban, поясни, зачем ?
первым делом я скинул себе Ваш код и попробовал запустить, за что и получил ерор вида "Undefined symbol i". В коде не было об’явления даной переменной, а если были - то не в той области действия. Разве я не прав?
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 19:10     Необходимо вывести суммы главных диагоналей матрицы. Как?! #15
Dr.Urban, я писала программу в Microsoft Visual C++ 6.0, и у меня компилируется и запускается без ошибок и предупреждений.
Переменная i объявляется и ей присваивается значение в цикле (36 строка кода), и так как цикл, в котором она объявлена, не является вложенным, то при использовании её далее в программе объявлять её снова нет необходимости - область видимости переменной i распространяется на всю главную функцию. В отличие, например, от переменной j, которая в первый раз объявляется в программе во вложенном цикле (строка 40), поэтому если бы она использовалась в программе где-либо дальше, её снова пришлось бы объявлять.
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
16.12.2011, 22:25     Необходимо вывести суммы главных диагоналей матрицы. Как?! #16
Как я говорил у меня заерорило, для уверености поставить в начале програми обявление и не бояться за обстоятельства
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2011, 22:34     Необходимо вывести суммы главных диагоналей матрицы. Как?!
Еще ссылки по теме:

C++ Как наити суммы всех диагоналей выше главной
Найти ряд главных элементов матрицы C++
C++ Как посчитать сумму диагоналей матрицы

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

Или воспользуйтесь поиском по форуму:
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 22:34     Необходимо вывести суммы главных диагоналей матрицы. Как?! #17
Dr.Urban, ну таки да, тоже надежный вариант )))

Добавлено через 5 минут
Но, если не ошибаюсь, объявление без присваивания значения не исключает возможности того, что в переменную будет "положен" какой-то мусор. В этой программе это не принципиально, так как начальное значение счетчика цикла будет задаваться в любом случае, но все равно это надо иметь в виду.
Yandex
Объявления
16.12.2011, 22:34     Необходимо вывести суммы главных диагоналей матрицы. Как?!
Ответ Создать тему
Опции темы

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