2 / 2 / 0
Регистрация: 20.05.2021
Сообщений: 27
1

Программа вычисления следа матриц

29.05.2021, 11:45. Показов 1196. Ответов 6
Метки нет (Все метки)

Доброго времени суток!
Нужна ваша помощь. Помогите грамотно оформить эту программу! Саму программу написала верно, а как начинаю вводить функцию, вид сразу портится.
Вот моя программа(без использования функции):
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
# include <iostream>
#include<locale.h>
#include<math.h>
using namespace std;
int main ()
{
    setlocale(LC_ALL,"Russian");
    int const n=4;
    int A[n][n],B[n][n];
    cout<<"Введите матрицу А"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>A[i][j];
        cout<<"Введите матрицу B"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>B[i][j];
 int SpA=0;
 for(int i=0; i<n;i++)
        {
            SpA+=A[i][i];
        }
        int SpB=0;
        for(int i=0;i<n; i++)
        {
            SpB+=B[i][i];
        }
    cout<<"SpА="<<SpA<<endl;
    cout<<"SpB="<<SpB<<endl;
return 0;
}
Программа(с использованием функции):

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
# include <iostream>
#include<locale.h>
#include<math.h>
using namespace std;
int const n=4;
int scent(int A[n][n], int B[n][n], int SpA, int SpB)
{SpA=0;
for(int i=0; i<n;i++)
        {
            SpA+=A[i][i];
        }
        SpB=0;
        for(int i=0;i<n; i++)
        {
            SpB+=B[i][i];
        }
        return SpA, SpB;
 
}
 
int main ()
{
    setlocale(LC_ALL,"Russian");
    int const n=4;
    int A[n][n],B[n][n];
    cout<<"Введите матрицу А"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>A[i][j];
        cout<<"Введите матрицу B"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>B[i][j];
    scent(A,B,SpA,SpB)
    cout<<"SpА="<<SpA<<endl;
    cout<<"SpB="<<SpB<<endl;
return 0;
}
Буду очень благодарна!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2021, 11:45
Ответы с готовыми решениями:

Функция для вычисления следа матрицы и произведения матриц
Дан ряд квадратных матриц A, {A}^{2}, ..., {A}^{N}. Причем N вводим сами. Надо вычислить след(сумма...

Написать функцию вычисления следа матрицы
Описать функцию вычисления следа матрицы - суммы диагональных элементов. Определить, какая из...

Программа для вычисления матриц с использованием класса
Пожалуйста, перепишите эту прогу, используя класс.:) #include &lt;iostream&gt; #include &lt;iomanip&gt; ...

Составить программу вычисления следа квадратной матрицы
Ввести матрицу целых чисел A. Составить программу вычисления следа квадратной матрицы. Следом...

6
35 / 22 / 13
Регистрация: 12.04.2020
Сообщений: 152
29.05.2021, 13:48 2
А как должен выглядеть вывод? У меня получилось вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
Введите матрицу А
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
Введите матрицу B
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
SpА=-2
SpB=-1536741112
Кажется, суммирует значения главной диагонали?

Добавлено через 17 минут
Только здесь я объявил глобальные переменные. Насколько я понимаю, их стараются избегать (но могу ошибаться)

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
#include <iostream>
#include<locale.h>
#include<math.h>
 
using namespace std;
 
int const n=4;
int SpA, SpB;
int A[n][n], B[n][n];
 
int scent(int A[n][n], int B[n][n], int SpA, int SpB){
    setlocale(LC_ALL,"Russian");
 
    cout<<"Введите матрицу А"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>A[i][j];
 
    cout<<"Введите матрицу B"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>B[i][j];
 
    for(int i=0; i<n;i++) SpA+=A[i][i];
    for(int j=0;j<n; j++) SpB+=B[j][j];
 
    cout << "SpА=" << SpA << endl;
    cout << "SpB=" << SpB << endl;
 
    return 0;
 
}
 
int main () {
    scent(A,B,SpA,SpB);
    return 0;
}
Вывод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
Введите матрицу А
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
Введите матрицу B
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
SpА=10
SpB=10
1
2 / 2 / 0
Регистрация: 20.05.2021
Сообщений: 27
29.05.2021, 18:01  [ТС] 3
Спасибо вам большое!
Но есть маленькая проблема. Мой косяк, я не написала, что нужно написать функцию вычисления следа матрицы. Остальная часть решения должна быть в main.
Посмотрите пожалуйста, я сделала вот так:

Код
#include <iostream>
#include<locale.h>
#include<math.h>

using namespace std;

int const n=4;


int scent(int A[n][n], int B[n][n], int SpA, int SpB){


    for(int i=0; i<n;i++) SpA+=A[i][i];
    for(int j=0;j<n; j++) SpB+=B[j][j];

    cout << "SpА=" << SpA << endl;
    cout << "SpB=" << SpB << endl;

    return 0;

}

int main ()
{setlocale(LC_ALL,"Russian");
int SpA, SpB;
 int A[n][n], B[n][n];
 cout<<"Введите матрицу А"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>A[i][j];

    cout<<"Введите матрицу B"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>B[i][j];
    scent(A,B,SpA,SpB);
    return 0;
}
След матрицы А считает верно, но след матрицы В вычисляется неверно. Я сделала что-то не так?
0
35 / 22 / 13
Регистрация: 12.04.2020
Сообщений: 152
29.05.2021, 18:30 4
Лучший ответ Сообщение было отмечено Aks58 как решение

Решение

Aks58, Получается только если переменные сделаю глобальными. (про глобальные переменные лучше спросить у знающих)

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
#include <iostream>
#include<locale.h>
#include<math.h>
 
using namespace std;
 
int const n=4;
int SpA, SpB;
int A[n][n], B[n][n];
 
int scent(int A[n][n], int B[n][n], int SpA, int SpB){
    for(int i=0; i<n;i++) SpA+=A[i][i];
    for(int j=0;j<n; j++) SpB+=B[j][j];
 
    cout << "SpА=" << SpA << endl;
    cout << "SpB=" << SpB << endl;
 
    return 0;
 
}
 
int main ()
{
    setlocale(LC_ALL,"Russian");
    cout<<"Введите матрицу А"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>A[i][j];
 
    cout<<"Введите матрицу B"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>B[i][j];
 
    scent(A,B,SpA,SpB);
    return 0;
}
1
2 / 2 / 0
Регистрация: 20.05.2021
Сообщений: 27
29.05.2021, 18:54  [ТС] 5
Все прекрасно работает, спасибо вам!
(если препод сделает замечание, дам знать)
0
2 / 2 / 0
Регистрация: 20.05.2021
Сообщений: 27
30.05.2021, 17:56  [ТС] 6
Добрый день!
Программу требуется выполнить немного иначе: функция scent вычисляет сумму - след матрицы, поэтому аргументом функции является матрица, а функция возвращает этот результат, т.е. сумму. А функцию нужно вызвать дважды- с матрицей A и B.
Будьте добры, посмотрите пожалуйста:
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
#include <iostream>
#include<locale.h>
#include<math.h>
 
using namespace std;
 
int const n=4;
int SpA, SpB;
int A[n][n], B[n][n];
 
int scent(int A[n][n], int B[n][n], int SpA, int SpB){
    for(int i=0; i<n;i++) SpA+=A[i][i];
    for(int j=0;j<n; j++) SpB+=B[j][j];
 
 
    return 0;
 
}
 
int main ()
{
    setlocale(LC_ALL,"Russian");
    int A[n][n],B[n][n];
    int SpA, SpB;
    cout<<"Введите матрицу А"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>A[i][j];
 
    cout<<"Введите матрицу B"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>B[i][j];
 
    scent(A,B,SpA,SpB);
    cout << "SpА=" << SpA << endl;
    cout << "SpB=" << SpB << endl;
 
    return 0;
}
Наверняка, я ошиблась. Не пойму, как вызвать функцию еще раз.
0
35 / 22 / 13
Регистрация: 12.04.2020
Сообщений: 152
30.05.2021, 19:41 7
Aks58,
Но только с шаблоном.
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
#include <iostream>
#include<locale.h>
#include<math.h>
 
using namespace std;
 
int const n=4;
 
template <class T>
int scent(T X[n][n], T SLED){
    for(int i=0; i<n;i++) SLED+=X[i][i];
 
    return SLED;
}
 
int main () {
    setlocale(LC_ALL,"Russian");
    int A[n][n], B[n][n];
    int SpA{0}, SpB{0};
 
    cout<<"Введите матрицу А"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>A[i][j];
 
    cout<<"Введите матрицу B"<<endl;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)cin>>B[i][j];
 
    cout << "SpА=" << scent(A, SpA) << endl;
    cout << "SpB=" << scent(B, SpB) << endl;
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2021, 19:41
Помогаю со студенческими работами здесь

Написать функцию для вычисления следа квадратной матрицы
Здравствуйте! Помогите, пожалуйста написать функцию для вычисления следа квадратной матрицы.

Вычисление степени матрицы, вычисления произведения двух матриц, вычисление суммы двух матриц
Здравствуйте, помогите решить, пожалуйста: Заданы две квадратные матрицы А и В. Вычислить матрицу...

Программа для вычисления следа матриц (с промежуточными вычислениями)
Приветствую всех! Пишу небольшую курсовую, никак не могу разобраться в ряде мелочей. Из меня не...

Программа вычисления произведения матриц
Почему моя программа всегда вычисляет нулевую матрицу? Я как то не так применяю такую штуку, как...

Программа на VBA для вычисления матриц
Дана матрица: A11*X1+A12*X2+….+A1N*XN = B1 A21*X1+A22*X2+….+A2N*XN = B2 ...

Описать подпрограмму вычисления следа матрицы
помогите составить программу пожалуйста: описать подпрограмму вычисления следа матрицы - суммы...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru