Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.01.2019
Сообщений: 1

Как найти сумму элементов главной и побочной диагонали

21.01.2019, 11:14. Показов 1064. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,только учу C++,пока знакомлюсь с цыклами.Дали задачу: найти сумму элементов главной и побочной диагонали матрицы NxN.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
    const int n = 3;
    int a[n][n];
    for (int i = 0;i < n;i++)
    {
        for (int j = 0;j < n;j++)
        {
            cout << "Vvedite element a[" << i << "][" << j << "] ";
            cin >> a[i][j];
            cout << endl;
        }
    }
    
 
    return 0;
}
Сделал ввод,а вот как искать сумму диагоналей не знаю(
Если сделал что-то не так - поправте
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.01.2019, 11:14
Ответы с готовыми решениями:

Дан двухмерный массив.Найти сумму элементов побочной диагонали и сумму элементов главной диагонали
Дан двухмерный массив.Найти сумму элементов побочной диагонали и сумму элементов главной диагонали... Программу надо в С.

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

Найти сумму элементов матрицы, расположенных выше главной диагонали и ниже побочной диагонали
не соображу В среде MS Visual C++ разработать программу, которая формирует матрицу размером n х n (значение n вводится с клавиатуры) и...

6
 Аватар для JohnBlack123
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
21.01.2019, 12:02
Как-то так:
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
int main()
{
    const int size = 10;
 
    double Array[size][size]; // создаем статический двумерный массив
 
    int n; cout << " Enter n= "; cin >> n; // вводим количество рядов и столбцов
 
    double SumMainDiagonal = 0; // перменная, которая отвечает за сумму элементов главной диагонали
    double SumSideDiagonal = 0; // перменная, которая отвечает за сумму элементов побочной диагонали
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << " Array[" << i << "][" << j << "] = "; // заполням массив
            cin >> Array[i][j];
        }
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << " " << Array[i][j]; // выводим массив
        }
        cout << endl;
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i == j) // если это элемент главной диагонали, то
                SumMainDiagonal += Array[i][j];  // складываем элементы
        }
    }
 
    for (int i = 0; i < n; i++) {
        SumSideDiagonal += Array[i][n - i - 1]; // складываем элементы побочной диагонали 
    }
 
    cout << " Sum of elments of Main Diagonal : " << SumMainDiagonal << endl; // выводим сумму элементов главной диагонали
    cout << " Sum of elments of Side Diagonal : " << SumSideDiagonal << endl; // выводим сумму элементов побочной диагонали
 
    return 0; // если Visual Studio>
}
}


Добавлено через 18 минут
Чтобы проверить на какой диагонали элемент находится, воспользуйтесь следующими условиями:
1. Если индекс i равен индексу j, то это элемент главной диагонали:
[0,0] [0,1] [0,2]
[1,0] [1,1] [1,2]
[2,0] [2,1] [2,2]
Обратите внимание на выделенные элементы. Очевидно, что они соответствуют условию :
[0,0] - индекс i равен индексу j.
Это утверждение справедливо остальным элементам главной диагонали.
2. Индекс j (отвечает за столбцы) должен быть равен [n-i-1] - это индексы побочной диагонали (и при том нам все равно какой здесь i)
Тут реализуется без if (как у меня в коде).
[0,0] [0,1] [0,2]
[1,0] [1,1] [1,2]
[2,0]-[2,1] [2,2]

Code
1
2
3
4
5
6
7
n=3;
i=0;
j=0;
 
suma += Array[i][n-i-1]; // что значит в этом случае следующее  :
                                     // suma += Array[i][3-0-1] 
                                     // suma += Array[0][2]
Так оно и работает (только i тут изменяется, а цикл j вовсе не нужен).

Добавлено через 7 минут
Во второй матрице ошибка - выделил главную диагональ, должна быть побочная
0
 Аватар для Alexandr_Ivanov
3 / 3 / 0
Регистрация: 08.10.2018
Сообщений: 31
Записей в блоге: 2
21.01.2019, 12:57
Можно просто сделать цикл по i:

Для главной диагонали :
C++
1
 for (i=0; i<n; i++) suma+=a[i][i];
Для побочной :
C++
1
 for (i=0; i<n; i++) sum+=a[i][n-1-i];
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
21.01.2019, 13:57
JohnBlack123, Alexandr_Ivanov, В ваших кодах центральный элемент считается 2 раза.
0
 Аватар для JohnBlack123
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
21.01.2019, 14:56
Уважаемый Байт, в решении я посчитал суммы диагоналей отдельно, поэтому они обе считают средний элемент. Вот решения с общей суммой. Я проверил - тут центральный элемент считается один раз.
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
int main()
{
    const int size = 10;
 
    double Array[size][size]; // создаем статический двумерный массив
 
    int n; cout << " Enter n= "; cin >> n; // вводим количество рядов и столбцов
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << " Array[" << i << "][" << j << "] = "; // заполням массив
            cin >> Array[i][j];
        }
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << " " << Array[i][j];
        }
        cout << endl;
    }
    cout << endl;
 
    double sum = 0;
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i == j || j == n - i - 1)
                sum += Array[i][j];
        }
    }
 
            cout << " Sum of elements of Main Diagonal and Side Diagonal : " << sum << endl;
 
    return 0; // если Visual Studio
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
21.01.2019, 15:48
JohnBlack123, очень ловким это решение назвать нельзя, но оно хотя бы решает поставленную задачу.
0
 Аватар для JohnBlack123
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
21.01.2019, 15:49
Байт, расту как программист благодаря Вашей помощи
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2019, 15:49
Помогаю со студенческими работами здесь

Найти произведение элементов главной диагонали и сумму элементов побочной диагонали
Не могу разобраться с задачей, помогите пожалуйста: 3. Найти произведение элементов главной диагонали и сумму элементов побочной...

Найти сумму элементов главной (побочной) диагонали матрицы
Дана квадратная матрица порядка M. Найти сумму элементов ее главной1|побочной2 диагонали.

Найти сумму элементов главной (побочной) диагонали матрицы
. Дана квадратная матрица порядка M. Найти сумму элементов ее главной1|побочной2 диагонали. \помогите ришь плиииизз

Найти сумму всех элементов главной диагонали матрицы, и сумму всех отрицательных элементов побочной диагонали
15. Найти сумму всех элементов главной диагонали матрицы P(10*10) и сумму всех отрицательных элементов побочной диагонали.

Найти сумму элементов на главной и произведение элементов на побочной диагонали матрицы
Помогите срочно нужно. Ввести квадратную матрицу 5 х 5. Найти сумму элементов на главной диагонали и произведение элементов на боковой...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru