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

Ошибка в коде - C++

Восстановить пароль Регистрация
 
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
23.01.2014, 18:20     Ошибка в коде #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
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
#include<conio.h>
#include<iostream>
#include<cmath>
#include<cctype>
#include<cstring>
using namespace std;
 
int main(){
    setlocale(LC_ALL, "Russian");
    int N1, M1, N2, M2, N, M;
    
    cout<<"\t\tУмножение произвольных матриц\n\n";
    cout<<"Введите размер первой матрицы: ";
    cin>>M1>>N1;
    cout<<"\n\n\n\n\n\n\nРазмер матрицы(MxN), M - кол-во строк, N - кол-во столбцов!!!";
    while(N1<=0 || M1<=0)
    {
        cout<<"\n\nВведены ошибочные данные!!!\n\n";
        cout<<"Для повтора нажмите любую клавишу...";
        _getch();
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Введите размер первой матрицы: ";
        cin>>M1>>N1;
        cout<<"\n\n\n\n\n\n\nРазмер матрицы(MxN), M - кол-во строк, N - кол-во столбцов!!!";
    }
    system("cls");
    cout<<"\t\tУмножение произвольных матриц\n\n";
    cout<<"Размеры первой матрицы: "<< M1<<"x"<<N1<<endl;
    cout<<"Введите размер второй матрицы: ";
    cin>>M2>>N2;
    cout<<"\n\n\n\n\n\n\nРазмер матрицы(MxN), M - кол-во строк, N - кол-во столбцов!!!";
    while(N2<=0 || M2<=0)
    {
        cout<<"\n\nВведены ошибочные данные!!!\n\n";
        cout<<"Для повтора нажмите любую клавишу...";
        _getch();
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Размеры первой матрицы: "<< M1<<"x"<<N1<<endl;
        cout<<"Введите размер второй матрицы: ";
        cin>>M2>>M2;
        cout<<"\n\n\n\n\n\n\nРазмер матрицы(MxN), M - кол-во строк, N - кол-во столбцов!!!";
    }
    while(N1!=M2)
    {
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Введены ошибочные данные!!!\n\n";
        cout<<"\n\nКол-во столбцов в 1 матрице(N) должно равняться кол-ву строк(M) во 2 матрице!!!";
        cout<<"\nДля повтора нажмите любую клавишу...";
        _getch();
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Размеры первой матрицы: "<< N1<<"x"<<M1<<endl;
        cout<<"Введите размер второй матрицы: ";
        cin>>M2>>M2;
    }
 
    int **NM1 = new int*[N1];
    for(int i(0); i<N1; i++){
        NM1[i] = new int[M1];
    }
    int **NM2 = new int*[N2];
    for(int i(0); i<N1; i++){
        NM2[i] = new int[M2];
    }
 
    N=M1;
    M=N2;
    int x(0);
 
    int **NM = new int*[N];
    for(int i(0); i<N1; i++){
        NM[i] = new int[M];
    }
    
    for(int i(0); i < M1; i++)
    {
        for(int j(0); j<N1; j++)
        {
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Введите "<< j+1 <<" элемент "<< i+1 << " строки первой матрицы: ";
        cin >> NM1[i][j];       
        }
    }
 
 
    for(int i(0); i < M2; i++)
    {
        for(int j(0); j<N2; j++)
        {
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Введите "<< j+1 <<" элемент "<< i+1 << " строки второй матрицы: ";
        cin >> NM2[i][j];       
        }
    }
    for(int i(0); i < M; i++)
    {
        for(int j(0); j<N; j++)
        {
            for(int y(0); y<N1;y++)
            {
                x=x+(NM1[i][y]*NM2[y][i]);
            }
            NM[i][j]=x;
            x=0;            
        }
    }
    for(int i(0); i < M1; i++)
    { 
        cout<<"|";
        for(int j(0); j<N1; j++) {
        cout<<" "<<NM[i][j]<<" ";       
        }
        cout<<"|"<<endl;
    }
    for(int i(0); i < N1; i++)
    {
            delete [] NM1[i];
    }
    delete [] NM1;
 
    for(int i(0); i < N2; i++)
    {
            delete [] NM2[i];
    }
    delete [] NM2;
 
    for(int i(0); i < N; i++)
    {
            delete [] NM[i];
    }
    delete [] NM;
 
 
 
    cout<<"\n\nДля выхода нажмите любую клавишу...";
    _getch();
    return 0;
}
Правильно работает только с квадратными матрицами, а должен работать с любыми(если они подходят под правило умножения матриц)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 18:20     Ошибка в коде
Посмотрите здесь:

Ошибка в коде.. C++
C++ ошибка в коде
C++ Ошибка в коде
Ошибка в коде C++
C++ Ошибка в коде
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,211
Завершенные тесты: 1
23.01.2014, 18:23     Ошибка в коде #2
106 строка
C++
1
x+=NM1[i][y]*NM2[y][j];
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
23.01.2014, 18:25  [ТС]     Ошибка в коде #3
Цитата Сообщение от zss Посмотреть сообщение
106 строка
C++
1
x+=NM1[i][y]*NM2[y][j];
Всё равно выдает ошибку:
Кликните здесь для просмотра всего текста
Код
Необработанное исключение по адресу 0x68DD2208 (msvcp110d.dll) в prg7.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFDFDFDFD.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,211
Завершенные тесты: 1
23.01.2014, 19:22     Ошибка в коде #4
Еще ошибка при вводе обоих матриц перепутаны строки и столбцы
Индексы N1,N2 - должны идти по строкам,
а M1,M2 - По столбцам.
Также ошибки при вводе M1,N1,M2,N2
Окончательный код
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
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    int N1, M1, N2, M2, N, M;
    
    cout<<"\t\tУмножение произвольных матриц\n\n";
    cout<<"Введите к-во строк первой матрицы: ";
    cin>>N1;
    cout<<"Введите к-во столбцов первой матрицы: ";
    cin>>M1;
    cout<<"\n\n\n\n\n\n\nРазмер матрицы(MxN), M - кол-во строк, N - кол-во столбцов!!!";
    while(N1<=0 || M1<=0)
    {
        cout<<"\n\nВведены ошибочные данные!!!\n\n";
        cout<<"Для повтора нажмите любую клавишу...";
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Введите размер первой матрицы: ";
        cin>>N1>>M1;
        cout<<"\n\n\n\n\n\n\nРазмер матрицы(MxN), M - кол-во строк, N - кол-во столбцов!!!";
    }
    system("cls");
    cout<<"\t\tУмножение произвольных матриц\n\n";
    cout<<"Размеры первой матрицы: "<< M1<<"x"<<N1<<endl;
    cout<<"Введите к-во строк второй матрицы: ";
    cin>>N2;
    cout<<"Введите к-во столбцов второй матрицы: ";
    cin>>M2;
    cout<<"\n\n\n\n\n\n\nРазмер матрицы(MxN), M - кол-во строк, N - кол-во столбцов!!!";
    while(N2<=0 || M2<=0)
    {
        cout<<"\n\nВведены ошибочные данные!!!\n\n";
        cout<<"Для повтора нажмите любую клавишу...";
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Размеры первой матрицы: "<< M1<<"x"<<N1<<endl;
        cout<<"Введите размер второй матрицы: ";
        cin>>N2>>M2;
        cout<<"\n\n\n\n\n\n\nРазмер матрицы(MxN), M - кол-во строк, N - кол-во столбцов!!!";
    }
    while(M1!=N2)
    {
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Введены ошибочные данные!!!\n\n";
        cout<<"\n\nКол-во столбцов в 1 матрице(N) должно равняться кол-ву строк(M) во 2 матрице!!!";
        cout<<"\nДля повтора нажмите любую клавишу...";
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Размеры первой матрицы: "<< N1<<"x"<<M1<<endl;
        cout<<"Введите размер второй матрицы: ";
        cin>>N2>>M2;
    }
 
    int **NM1 = new int*[N1];
    for(int i(0); i<N1; i++){
        NM1[i] = new int[M1];
    }
    int **NM2 = new int*[N2];
    for(int i(0); i<N2; i++){
        NM2[i] = new int[M2];
    }
 
    N=M2;
    M=N1;
    int x(0);
 
    int **NM = new int*[N];
    for(int i(0); i<N; i++){
        NM[i] = new int[M];
    }
    
    for(int i(0); i < N1; i++)
    {
        for(int j(0); j<M1; j++)
        {
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Введите "<< j+1 <<" элемент "<< i+1 << " строки первой матрицы: ";
        cin >> NM1[i][j];       
        }
    }
 
 
    for(int i(0); i < N2; i++)
    {
        for(int j(0); j<M2; j++)
        {
        system("cls");
        cout<<"\t\tУмножение произвольных матриц\n\n";
        cout<<"Введите "<< j+1 <<" элемент "<< i+1 << " строки второй матрицы: ";
        cin >> NM2[i][j];       
        }
    }
    for(int i(0); i < M; i++)
    {
        for(int j(0); j<N; j++)
        {
            for(int y(0); y<M1;y++)
            {
                x=x+(NM1[i][y]*NM2[y][j]);
            }
            NM[i][j]=x;
            x=0;            
        }
    }
    for(int i(0); i < M; i++)
    { 
        cout<<"|";
        for(int j(0); j<N; j++) {
        cout<<" "<<NM[i][j]<<" ";       
        }
        cout<<"|"<<endl;
    }
    for(int i(0); i < N1; i++)
    {
            delete [] NM1[i];
    }
    delete [] NM1;
 
    for(int i(0); i < N2; i++)
    {
            delete [] NM2[i];
    }
    delete [] NM2;
 
    for(int i(0); i < N; i++)
    {
            delete [] NM[i];
    }
    delete [] NM;
 
 
 
    cout<<"\n\nДля выхода нажмите любую клавишу...";
    system("pause");
    return 0;
}
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
24.01.2014, 12:55  [ТС]     Ошибка в коде #5
Ошибка осталась
Код
Необработанное исключение по адресу 0x012158BE в prg7.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFDFDFDFD.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,211
Завершенные тесты: 1
24.01.2014, 18:42     Ошибка в коде #6
Скоприруйте ВЕСЬ мой текст снова.
Я делал изменения уже после публикации.
Сейчас все правильно работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 18:59     Ошибка в коде
Еще ссылки по теме:

C++ ошибка в коде
Ошибка в коде C++
Ошибка в коде C++

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

Или воспользуйтесь поиском по форуму:
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
24.01.2014, 18:59  [ТС]     Ошибка в коде #7
Цитата Сообщение от zss Посмотреть сообщение
Скоприруйте ВЕСЬ мой текст снова.
Я делал изменения уже после публикации.
Сейчас все правильно работает.
Все также появляется ошибка, но теперь другого плана. Попробую решить сам
Прошу закрыть тему.
Yandex
Объявления
24.01.2014, 18:59     Ошибка в коде
Ответ Создать тему
Опции темы

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