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

Умножение матриц и нахождение суммы элементов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Массивы2. http://www.cyberforum.ru/cpp-beginners/thread420036.html
Сумму элементов массива, расположенных после последнего элемента, равного нулю Кто может напишите пожалуйста)
C++ ввести последовательность чисел ввести последовательность из n чисел с клавы, произведение этих чисел. http://www.cyberforum.ru/cpp-beginners/thread420035.html
C++ Задача на строки в С:
Дана строка символов, содержащая слова с корнями кас/кос(косн). Проверить правильность написания слов, и в случае неправильного написания – исправить.
C++ Работа с экраном в текстовом режиме
По меню с выбором пунктов перемещением Курсорной Планки с клавиатуры вводятся буквы и цифры в 3-е окно: на синем фоне буквы желтые, цифры ярко красные. На 3-е окно нанести рамку. Помогите...
C++ Многопоточное и параллельное программирование http://www.cyberforum.ru/cpp-beginners/thread420027.html
Уважаемые участники форума! Подскажите, пожалуйста, литературу по многопоточному и параллельному программированию на русском и возможно английском языке. Среди прочего интересуют следующие...
C++ inner join Привет народ , интересует вопрос: что такое inner join, расскажите словами алгоритм его! еще пример такой есть 2 таблицы там просто цифры в них, select * from t1 inner join t2 , что у нас... подробнее

Показать сообщение отдельно
devilcry86
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 6

Умножение матриц и нахождение суммы элементов - C++

28.12.2011, 21:39. Просмотров 822. Ответов 11
Метки (Все метки)

надо умножить матрицу A на матрицу B, где матрица A размером m на n,
и найти в получившейся матрице сумму элементов строк и столбцов, на пересечении которых отрицательные элементы, помогите кто может, внизу наработки программы, единственное что надо это как определить эти элементы и сложить элементы срок и столбцов, пишу программу на xcode, так как другого компьютера нет
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
#include <stdio.h>
using namespace std;
double ** AllocMatrix(int Rows, int Colomns)
{
    double ** Matrix;
    try
    {
        Matrix = new double * [Rows];
        if( Matrix == NULL ) throw 0;
        for (int i = 0; i < Rows; i++)
        {
            Matrix[i] = new double [Colomns];
            if( Matrix[i] == NULL ) throw i;
        }
    }
    catch( int index )
    {
        cout << "Error" << endl;
        for (int i = 0; i < index; i++)
        {
            delete [] Matrix[i];
            Matrix[i] = NULL;
        }
        return NULL;
    }
    return Matrix;
}
 
//vvod matrici
bool GetMatrix(double ***Matrix, int *Rows, int *Colomns)
{
    cout << "Rows: "; cin >> (*Rows);
    cout << "Colomns: "; cin >> (*Colomns);
    //Memory for massiv
    double **Ret;
    Ret = AllocMatrix(*Rows, *Colomns);
    *Matrix = Ret;
    if (Ret != NULL)
    {
        for (int i = 0; i < *Rows; i++)
            for (int j = 0; j < *Colomns; j++)
            {
                printf("Matrix[%d][%d] = ", i, j);
                cin >> Ret[i][j];
            }
        return true;
    }else return false;
}
//Razmernost
bool CheckMatrixes(int Rows1, int Colomns1, int Rows2, int Colomns2)
{
    return (Rows2 == Colomns1);
}
 
//Umnpzhenie matric
bool MultiplyMatrix(double **Matrix1, int Rows1, int Columns1,
                    double **Matrix2, int Rows2, int Columns2,
                    double ***ResultMatrix, int *ResultRows, int *ResultColumns)
{
    *ResultRows = Rows1;
    *ResultColumns = Columns2;
    double **Ret;
    Ret = AllocMatrix(*ResultRows, *ResultColumns);
    *ResultMatrix = Ret;
    if (Ret != NULL)
    {
        for (int i = 0; i < *ResultRows; i++)
            for (int j = 0; j < *ResultColumns; j++)
            {
                double Sum = 0;
                for (int n = 0; n < Rows2; n++)
                {
                    Sum += Matrix1[i][n]*Matrix2[n][j];
                }
                (*ResultMatrix)[i][j] = Sum;
            }
        return true;
    }else return false;
}
 
//Vivod matric
void MatrixOut(double **Matrix, int Rows, int Columns)
{
    for (int i = 0; i < Rows; i++)
    {
        for (int j = 0; j < Columns; j++)
            cout << Matrix[i][j] << "\t";
    }
}
 
 
//Osvobodit' pamyat
void FreeMatrix(double **Matrix, int Rows)
{
    for (int i = 0; i < Rows; i++)
    {
        
        delete [] Matrix[i];
        Matrix[i] = NULL;
    }
    delete [] Matrix;
    Matrix = NULL;
}
void MinusElementRows(double **Matrix, int Rows, int Columns, int minus[100])
{for (int i=0;i<Rows;i++)
 
    for (int j=0;j<Columns;j++)
        {
        if (Matrix[i][j]<0)
            (Matrix[i][j]) = minus[i]; i++;
        }
    }
void SumRows(int* minus, int i, int n, int sum )
{
    for (n=0, sum = 0; n<i; n++) sum+= minus[i];
    cout << sum;
}
int main()
{
    double ***A = new double **, ***B = new double **, ***C = new double **;
    int ARowCount, AColCount, BRowCount, BColCount, CRowCount, CColCount, *minus, i, n, sum;
    do
    {
        cout << "vvedite matricu A:\n";
    } while (!GetMatrix(A, &ARowCount, &AColCount));
    do
    {
        cout << "vvedite matricu B:\n";
    } while (!GetMatrix(B, &BRowCount, &BColCount));
    if (CheckMatrixes(ARowCount, AColCount, BRowCount, BColCount))
    {
        if (MultiplyMatrix(*A, ARowCount, AColCount,
                           *B, BRowCount, BColCount, C, &CRowCount, &CColCount))
        {
            cout << "result:\n";
            MatrixOut(*C, CRowCount, CColCount);
        }
    }else cout << "Nevozmozhno peremnozhit\n";
    
    cout << "otricatelnie elementi";
    MinusElementRows(*C, CRowCount, CColCount, minus);
    SumRows(minus, i, n, sum);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru