С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
#1

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

23.01.2014, 18:20. Просмотров 287. Ответов 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
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;
}
Правильно работает только с квадратными матрицами, а должен работать с любыми(если они подходят под правило умножения матриц)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 18:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в коде (C++):

Ошибка в коде (Ошибка сегментирования (core dumped) - C++
Добрый день. Подскажите пожалуйста, где ошибка в коде? char ch; string s; while ((ch = cin.get()) != '0' ) ...

В чём ошибка.В коде там где коментарий там ошибка поучается. - C++
#include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; class CMyString{ char *pStr; public: ...

Ошибка в коде - C++
Задание Составить программу, которая описывает структуру в соответствии с вариантом и записывает введенные пользователем данные в...

Ошибка в коде - C++
1 Составить программу, которая описывает структуру в соответствии с вариантом и записывает введенные пользователем данные в бинарный файл...

Ошибка в коде - C++
Создать абстрактную ф-ю, класса UZ, с подклассами SUZ и DUZ, вывести их на экран. #include &lt;iostream&gt; using namespace std; ...

Ошибка в коде - C++
Подскажите пожалуйста, почему не работает. Выдает ошибку: error LNK2019: ссылка на неразрешенный внешний символ &quot;public: void __thiscall...

6
zss
Модератор
Эксперт С++
6580 / 6142 / 2024
Регистрация: 18.12.2011
Сообщений: 16,015
Завершенные тесты: 1
23.01.2014, 18:23 #2
106 строка
C++
1
x+=NM1[i][y]*NM2[y][j];
0
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
23.01.2014, 18:25  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
106 строка
C++
1
x+=NM1[i][y]*NM2[y][j];
Всё равно выдает ошибку:
Кликните здесь для просмотра всего текста
Код
Необработанное исключение по адресу 0x68DD2208 (msvcp110d.dll) в prg7.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFDFDFDFD.
0
zss
Модератор
Эксперт С++
6580 / 6142 / 2024
Регистрация: 18.12.2011
Сообщений: 16,015
Завершенные тесты: 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;
}
0
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
24.01.2014, 12:55  [ТС] #5
Ошибка осталась
Код
Необработанное исключение по адресу 0x012158BE в prg7.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFDFDFDFD.
0
zss
Модератор
Эксперт С++
6580 / 6142 / 2024
Регистрация: 18.12.2011
Сообщений: 16,015
Завершенные тесты: 1
24.01.2014, 18:42 #6
Скоприруйте ВЕСЬ мой текст снова.
Я делал изменения уже после публикации.
Сейчас все правильно работает.
0
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
24.01.2014, 18:59  [ТС] #7
Цитата Сообщение от zss Посмотреть сообщение
Скоприруйте ВЕСЬ мой текст снова.
Я делал изменения уже после публикации.
Сейчас все правильно работает.
Все также появляется ошибка, но теперь другого плана. Попробую решить сам
Прошу закрыть тему.
0
24.01.2014, 18:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 18:59
Привет! Вот еще темы с ответами:

Ошибка в коде - C++
Написать программу формирования файла, содержащего данные соглас варианту индивидуального задания. В программе предусмотреть сохранен ...

Ошибка в коде - C++
Создать класс “Поликлиника”, состоящей из класса ”Врач”. Класс “Поликлиника”: номер поликлиники, фамилия заведующей, телефон...

Ошибка в коде - C++
Создать иерархию классов транспорт – воздушный транспорт – вертолет. Определить конструктор копирования, оператор присваивания через...

Ошибка в коде - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;iomanip&gt; #define N 3 #define M 3 using namespace std; int main() { int...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.