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

Задача "замочная скважина" и "ключ" ошибка в коде

05.12.2017, 21:30. Показов 1089. Ответов 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
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;
}
Более того, выдает ошибку в строке If (Sr==false), она приведена на скрине.
Вот что здесь не так? Пробую вводить такие матрицы:
Замок:
1111
1001
1110
1111

Ключ:
01
10
10

а программа выдает, что ключ не подходит. Почему так? Помогите, пожалуйста, исправить ошибку и починить программу, буду очень благодарен!)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Задача "замочная скважина" и "ключ" ошибка в коде  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2017, 21:30
Ответы с готовыми решениями:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую классы: − воин;...

Даны три слова - "мама", "мыла", "раму". Задача - напечатать всевозможные варианты построения слов
Я записал код, однако эту часть надо автоматизировать, поможете? КОД: } #include &lt;iostream&gt;...

4
nd2
3417 / 2797 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
06.12.2017, 07:19 2
Цитата Сообщение от Imperion Посмотреть сообщение
Более того, выдает ошибку в строке If (Sr==false),
Sr - имя функции, и что, тогда, ты здесь сравниваешь?
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
06.12.2017, 07:25  [ТС] 3
Если честно, то программа не моя. Начал в ней копаться и впал в ступор. Если подставить параметры в Sr() в указанном условии, программа также не хочет работать.

P.S. Фигово у меня с движением по матрице, если бы размерность их была одинаковая то проблем нет, а так... Поэтому и прошу помочь.
0
nd2
3417 / 2797 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
06.12.2017, 07:29 4
Цитата Сообщение от Imperion Посмотреть сообщение
Если подставить параметры в Sr() в указанном условии, программа также не хочет работать.
Подставить всё равно нужно, потом дальше разбираться.
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
06.12.2017, 11:38  [ТС] 5
Цитата Сообщение от nd2 Посмотреть сообщение
Подставить всё равно нужно, потом дальше разбираться.
Параметры подставил, но теперь программа попросту завершается с ошибкой, т.е. она вылетает.
0
Миниатюры
Задача "замочная скважина" и "ключ" ошибка в коде  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2017, 11:38

Необработанное исключение в "0x76f015de" в "контрольная 1 задача 2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x334e2c64"
доброго времени суток. Необработанное исключение в &quot;0x76f015de&quot; в &quot;контрольная 1 задача 2.exe&quot;:...

Патерн "прототип" не работает, выдаёт ошибку "недопустимый вызов нестатической ф-ции", где я в коде ошибка?
Вот мой код... #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;vector&gt; #define vrom...

Error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено "SHL"
visual studio выдал такую ошибку error C2400: синтаксическая ошибка во встроенном коде на языке...

Ошибка Необработанное исключение в "0x001d18f8" в "lr7v2.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde9"
class Hdd { public: char Hdd_name; int total_space; int free_space; int speed; ...


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

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

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