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

Ошибки при умножении динамических матриц

04.11.2018, 20:45. Показов 577. Ответов 1

В строке ввода в вызывающее окружение матрицы выдает ошибку : "Вызвано исключение по адресу 0x00E228A0 в MultiplicationMatrix.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFDFD."
В чем проблема, как исправить ?

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
using namespace std;
// создаю функцию которая умножает динамическую матрицу A на B и создает матрицу С, которая =А*Р
long double mnozim(long double **A, long double **P) {
    // нахожу количество элементов матрицы А(матрицы А Р квадратные и одинакового размера)
    int n = sizeof(*A) / sizeof(long double);
    // создаю двухмерный динамический массив - квадратная матрицу С размерами n*n (такими же, как и А Р)
    long double  **C;
    C = new long double *[n];
    for (int i = 0; i < n; i++) {
        C[i] = new long double[n];
    }
    // умножаю матрицу A на матрицу P и присваиваю результату матрицу С
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; ++j) {
            for (int r = 1; r < n; ++r) {
                C[i][j] = A[0][r] * P[r][0];
            }
        }
    }
    return **C; // ввожу в вызывающе окружение матрицу С
}
 
 
int main()
{
 
    cout << "BBedite rozmeri" << endl;
    cout << "n=m=";
    int n;
    cin >> n;
    /*создаю 2 динамических двухмерных массива(2 квадратные матрицы)*/
    long double  **A;
    long double  **P;
    A = new long double *[n];
    P = new long double *[n];
    for (int i = 0; i < n; i++) {
        A[i] = new long double[n];
        P[i] = new long double[n];
    }
 
 
 
    /* заполняю матрицу А*/
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; ++j) {
            A[i][j] = rand() % 10;
        }
    }
    /* заполняю матрицу P*/
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; ++j) {
            P[i][j] = rand() % 10;
        }
    }
    /*создаю матрицу Q в которую будет записыватся результат умнодение A на P (матрица C)*/
    long double  **Q;
    Q = new long double *[n];
    for (int i = 0; i < n; i++) {
        Q[i] = new long double[n];
    }
    // вызываю функцию mnozim
    **Q = mnozim(A, P);
    //вывожу матрицу Q
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; ++j) {
            if (j + 1 < n) {
                cout << Q[i][j] << " ";
            }
            else {
                cout << Q[i][j] << " " << endl;
            }
        }
    }
 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2018, 20:45
Ответы с готовыми решениями:

Проверить ассоциативность при умножении матриц
Делаю лабораторную с дискретной математики. Нужно проверить ассоциативность при умножении матриц. ...

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

Не могу найти ошибку при умножении 2х матриц
Доброго времени суток! Помогите найти ошибку в матрице, который час сижу и не могу найти. При...

При умножении матриц результат равен нулю
При умножении матриц мне вместо нормального ответа выводит нули, почему? помогите плиз... #include...

1
1503 / 967 / 811
Регистрация: 30.04.2016
Сообщений: 3,334
04.11.2018, 21:06 2
Medovik, здравствуйте! Вот:

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
#include <iostream>
 
    using namespace std;
 
    void matrixInput(int** a, int n, int m) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                cin >> a[i][j];
            }
        }
    }
 
int main()
{
    int k, m, n;
    cout << "Enter a matrix A size:\n";
    cout << "k = ";
    cin >> k;
    cout << "m = ";
    cin >> m;
    cout << "Enter a matrix B size:\n";
    cout << "m = " << m << "\n";
    cout << "n = ";
    cin >> n;
    int** a = new int*[k];
    for (int i = 0; i < k; i++) {
        a[i] = new int[m];
    }
    int** b = new int*[m];
    for (int i = 0; i < m; i++) {
        b[i] = new int[n];
    }
    int** c = new int*[k];
    for (int i = 0; i < k; i++) {
        c[i] = new int[n];
    }
    cout << "Enter the 1-st matrix:\n";
    matrixInput(a, k, m);
    cout << "Enter the 2-nd matrix:\n";;
    matrixInput(b, m, n);
    cout << "Output of the program:\n";
    for (int j = 0; j < k; j++) {
        for (int i = 0; i < n; i++) {
            c[j][i] = 0;
            for (int r = 0; r < m; r++) {
                c[j][i] += a[j][r] * b[r][i];
            }
            cout << c[j][i] << " ";
        }
        cout << "\n";
    }
    for (int i = 0; i < k; i++) {
        delete [] a[i];
        delete [] c[i];
    }
    delete [] a;
    delete [] c;
    for (int i = 0; i < m; i++) {
        delete [] b[i];
    }
    delete [] b;
    system("pause");
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2018, 21:06
Помогаю со студенческими работами здесь

Исправить ошибку из-за которой приложение падает при умножении матриц
Привет прогеры! Объясните обезьяне почему у меня кидает exeption программа при перемножении матриц....

Найти все двузначные числа, которые при умножении на 2 заканчиваются на 8, а при умножении на 3 - на 4.
Привет мозги, нужно решить задачу по Си++. Найти все двузначные числа, которые при умножении на 2...

Ошибки при удалении динамических массивов
компилируется все нормально, но при вызове delete к абсолютно валидным указателям почему то...

Инициализация динамических матриц в с++
Необходимо реализовать класс матриц, вот мой набросок: // Класс.cpp: определяет точку входа для...


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

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

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