Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508

Ошибка в коде

03.12.2017, 14:45. Показов 645. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание такое:
Даны мозаичные изображения замочной скважины и ключа. Пройдет ли ключ в скважину? Т. е. даны матрицы k(m1, n1) и l(m2, n2), m1 > m2, n1 > n2, состоящие из нулей и единиц. Проверить, можно ли наложить матрицу l на матрицу k так, чтобы каждой единице матрицы l соответствовал нуль в матрице k. «Ключ» можно поворачивать на угол, кратный 90° и также можно зеркально отображать.

Есть такой код:

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
#include <iostream>
 
using namespace std;
 
//функция вывода матрицы
void Output(int **L,int n1,int m1)
{ 
    for (int i=0;i<n1;i++)
    { 
        for(int j=0;j<m1;j++) 
        cout<<L[i][j]<< " ";
        cout<<" "<<endl;             
    }
}
 
// Функция проверки
bool Sr(int **L, int **K, int T, int P, int n1,
int m1, int n2, int m2, int i, int j)
{
    for(int T=0; T< n1; T++)
    {
        for(int P=0; P<m1;P++)
        {
            if(L[T][P]+K[i+T][j+P] !=1)
            {
             return false;
             break;
            }
        }
    } 
    return true;
}
 
// функция переворота ключа
int Perevorot(int **L, int **K, int T, int P, int n1,
int m1, int n2, int m2, int i, int j)
{
    int Z=4;
    if (Sr==false)
    {
        do
        {
            for(int i=0; i<n2+10; i++)
            {
                for(int j=0; j<m2+10; j++)
                { 
                    K[i][j]=K[i][j]+K[j][i];
                    K[j][i]=K[i][j]-K[j][i];
                    K[i][j]=K[i][j]-K[j][i];
                }
            Z--;
            }
        }
        while (Z>=0);
    }
    if (Z>=4 && Sr(L, K, T, P, n1, m1, n2, m2, i, j)==false) 
    cout << "Не подходит!";
    return **K;
}
 
//функция ввода размерности матрицы
void SizeMatrix(int &n1,int &m1)
{
    cout<<"Введите количество строк: "<<endl;
    cin>>n1;
    cout<<"Введите количество столбцов: "<<endl;
    cin>>m1;
}
 
//функция формирования самой матрицы
void Matrix(int **L,int &n1,int &m1)
{
    for (int i=0;i<n1;i++)
        for(int j=0;j<m1;j++)
        {
            cout<<"Введите элемент L["<<i<<"]["<<j<<"]";    
            cin>>L[i][j];
        }
}    
 
int main()
{
setlocale(LC_ALL,"Russian");
 
// Матрица "Замка"
int i=0, j=0;
int **L,n1,m1;
SizeMatrix(n1,m1);
L=new int*[n1];
for(int i=0; i<n1; i++)
    L[i]=new int[m1];
Matrix(L,n1,m1);
 
//Матрица "Ключа"
int **K,n2,m2;
SizeMatrix(n2,m2);
K=new int*[n2];
for(int i=0; i<n2; i++)
    K[i]=new int[m2];
Matrix(K,n2,m2);
 
cout << "Матрица <<ЗАМКА>>\n";
Output(L, n1, m1);
cout << "\n";
 
cout << "Матрица <<КЛЮЧА>>\n";
Output(K, n2, m2);
cout << "\n";
 
int T=0, P=0;
Sr(L, K, T, P, n1, m1, n2, m2, i, j);
Perevorot(L, K, T, P, n1, m1, n2, m2, i, j);
cout << "\n";
 
 
for (int i=0; i<n2; i++)
    delete [] K[i];
delete [] K;
 
for (int i=0; i<n1; i++)
    delete [] L[i];
delete [] L;
 
return 0;
}
Вроде бы все работает, но выдает предупреждение как на скрине. Вот как бы его убрать?
Миниатюры
Ошибка в коде  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2017, 14:45
Ответы с готовыми решениями:

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

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

Ошибка в коде
Помогите пожалуйста найти ошибку #include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;cmath&gt; #include &lt;conio.h&gt; #include...

4
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
03.12.2017, 14:49
убрать условие if (Sr==false) и его скобки
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
03.12.2017, 15:23  [ТС]
Зря изначально кое-что удалил из этого кода. Однако ошибка осталась.
Более того, попробовал ввести такие матрицы:

Замок:
1111
1001
1110
1111

Ключ:
01
10
10

И пишет, что ключ не подходит.

Цитата Сообщение от TRam_ Посмотреть сообщение
убрать условие if (Sr==false) и его скобки
Да по такой логике можно пол кода убрать и оставить ввод и вывод матриц. Только задание от этого выполнено не будет.

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
145
#include <iostream>
 
using namespace std;
 
//функция вывода матрицы
void Output(int **L,int n1,int m1)
{ 
    for (int i=0;i<n1;i++)
    { 
        for(int j=0;j<m1;j++) 
        cout<<L[i][j]<< " ";
        cout<<" "<<endl;             
    }
}
 
// Функция проверки
bool Sr(int **L, int **K, int T, int P, int n1,
int m1, int n2, int m2, int i, int j)
{
    for(int T=0; T< n1; T++)
    {
        for(int P=0; P<m1;P++)
        {
            if(L[T][P]+K[i+T][j+P] !=1)
            {
             return false;
             break;
            }
        }
    } 
    return true;
}
 
 
// фунция сдвига "ключа"
int Move(int **K, int **L, int n1,
int n2, int m1, int m2)
{
    for (int i=0; i+n2<=n1; i++)
    {
        for(int j=0;j+m2<=m1; j++)
        { 
            int T=0, P=0;
            if(Sr(L, K, T, P, n1, m1, n2, m2, i, j))
            {
                cout << "Podhodit!";
                return 0;
            }
        }
    }
}
 
// функция переворота ключа
int Perevorot(int **L, int **K, int T, int P, int n1,
int m1, int n2, int m2, int i, int j)
{
    int Z=4;
    if (Sr==false)
    {
        do
        {
            for(int i=0; i<n2+10; i++)
            {
                for(int j=0; j<m2+10; j++)
                { 
                    K[i][j]=K[i][j]+K[j][i];
                    K[j][i]=K[i][j]-K[j][i];
                    K[i][j]=K[i][j]-K[j][i];
                }
            Z--;
            }
        }
        while (Z>=0);
    }
    if (Z>=4 && Sr(L, K, T, P, n1, m1, n2, m2, i, j)==false) 
    cout << "Ne podhodit!";
    return **K;
}
 
//функция ввода размерности матрицы
void SizeMatrix(int &n1,int &m1)
{
    cout<<"Stroki: "<<endl;
    cin>>n1;
    cout<<"Stolbsi: "<<endl;
    cin>>m1;
}
 
//функция формирования самой матрицы
void Matrix(int **L,int &n1,int &m1)
{
    for (int i=0;i<n1;i++)
        for(int j=0;j<m1;j++)
        {
            cout<<"Vvedite elemet L["<<i<<"]["<<j<<"] = ";    
            cin>>L[i][j];
        }
}    
 
int main()
{
setlocale(LC_ALL,"Russian");
 
// Матрица "Замка"
int i=0, j=0;
int **L,n1,m1;
SizeMatrix(n1,m1);
L=new int*[n1];
for(int i=0; i<n1; i++)
    L[i]=new int[m1];
Matrix(L,n1,m1);
 
//Матрица "Ключа"
int **K,n2,m2;
SizeMatrix(n2,m2);
K=new int*[n2];
for(int i=0; i<n2; i++)
    K[i]=new int[m2];
Matrix(K,n2,m2);
 
cout << "Matrisa <<ZAMKA>>\n";
Output(L, n1, m1);
cout << "\n";
 
cout << "Matrica <<KLUCHA>>\n";
Output(K, n2, m2);
cout << "\n";
 
int T=0, P=0;
Sr(L, K, T, P, n1, m1, n2, m2, i, j);
Move(K, L, n1, n2, m1, m2);
Perevorot(L, K, T, P, n1, m1, n2, m2, i, j);
cout << "\n";
 
 
for (int i=0; i<n2; i++)
    delete [] K[i];
delete [] K;
 
for (int i=0; i<n1; i++)
    delete [] L[i];
delete [] L;
 
return 0;
}
Добавлено через 14 минут

Плюс выдает еще одно предупреждение, как на скрине.
Миниатюры
Ошибка в коде  
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
03.12.2017, 16:05
Цитата Сообщение от Imperion Посмотреть сообщение
Да по такой логике можно пол кода убрать
содерживое в скобках оставить, а сами скобки и условие убрать. Вторая ошибка из-за того, что int Move() ничего не возвращает
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
03.12.2017, 16:26  [ТС]
Ну она вроде бы ничего и не должна возвращать.
А вот с условием все не могу понять, что именно вы имеете ввиду. Можете поправить код этой функции?

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
int Perevorot(int **L, int **K, int T, int P, int n1, int m1, int n2, int m2, int i, int j)
{
    int Z=4;
    if (Sr==false)
    {
        do
        {
            for(int i=0; i<n2+10; i++)
            {
                for(int j=0; j<m2+10; j++)
                { 
                    K[i][j]=K[i][j]+K[j][i];
                    K[j][i]=K[i][j]-K[j][i];
                    K[i][j]=K[i][j]-K[j][i];
                }
            Z--;
            }
        }
        while (Z>=0);
    }
    if (Z>=4 && Sr(L, K, T, P, n1, m1, n2, m2, i, j)==false) 
    cout << "Ne podhodit!";
    return **K;
}
Добавлено через 18 минут
Дело в том, что если прописать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int Perevorot(int **L, int **K, int T, int P, int n1, int m1, int n2, int m2, int i, int j)
{
    int Z=4;
 
        do
        {
            for(int i=0; i<n2+10; i++)
            {
                for(int j=0; j<m2+10; j++)
                { 
                    K[i][j]=K[i][j]+K[j][i];
                    K[j][i]=K[i][j]-K[j][i];
                    K[i][j]=K[i][j]-K[j][i];
                }
            Z--;
            }
        }
        while (Z>=0);
 
    if (Z>=4 && Sr(L, K, T, P, n1, m1, n2, m2, i, j)==false) 
    cout << "Ne podhodit!";
    return **K;
}
то программа просто вылетает. Т.е. после заполнения матриц вылетает окно: Работа программы прекращена
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2017, 16:26
Помогаю со студенческими работами здесь

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

Ошибка в коде
Друзья, помогите. Почему программа не открывает указанный файл? Вчём может быть ошибка? #include &quot;stdafx.h&quot; #include...

Ошибка в коде С++
Помогите пожалуйста, налажал в цикле. Место где начинается цикл не работает, а должно в цикле взять цифры из файла которые написаны в...

Ошибка в коде
Долго сижу и никак не могу понять в чём ошибка. Вот 3 файла. Они подключены правильно и работают. main.cpp #include &lt;iostream&gt;...

Ошибка в коде
Добрый вечер! Объясните чайнику, почему не компилируется код. Ругается на 5, 7, 11, 17, 19, 21, 23 строки. / WhileDemo - введите...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru