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

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

Войти
Регистрация
Восстановить пароль
 
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 125
#1

Проверить принадлежит ли первая матрица второй - C++

12.08.2015, 13:40. Просмотров 162. Ответов 5
Метки нет (Все метки)

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

Спасибо за разъяснение
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2015, 13:40     Проверить принадлежит ли первая матрица второй
Посмотрите здесь:

C++ Нужно проверить принадлежит точка выбранной области
C++ Как проверить подстра ли первая введённая строчка второй строчки
C++ Является ли первая строка циклическим сдвигом второй строки
Проверить, принадлежит ли введенная точка заданной области C++
C++ Геометрия (проверить, принадлежит ли третья точка кругу!)
Вычислить количество строк, первая половина которых совпадает со второй C++
В заданном тексте (первая строка) подсчитать количество буквосочетания, введенного во второй строке C++
Проверить принадлежит ли точка части плоскости между заданными прямыми C++
C++ Проверить, принадлежит ли одна из матриц другой
C++ Проверить, принадлежит ли число ряду фибоначчи
Проверить принадлежит ли введенное число заданному диапазону C++
Сравнить даты: в случае если первая дата больше второй - выводить 1, в остальных случаях - 0. C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Даценд
Модератор
Эксперт .NET
2943 / 2858 / 1452
Регистрация: 20.04.2015
Сообщений: 5,271
12.08.2015, 13:48     Проверить принадлежит ли первая матрица второй #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Думаю, что не так все просто. Чтобы первая матрица принадлежала второй, нужно чтобы было так:
Первая матрица:
0 2 0
0 2 0
Вторая матрица:
1 1 1 1 1
1 0 2 0 1
1 0 2 0 1
1 1 1 1 1
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 125
12.08.2015, 13:53  [ТС]     Проверить принадлежит ли первая матрица второй #3
Спасибо, то есть по центру должны быть элементы, или возможен вариант:
Первая матрица:
0 2 0
0 2 0
Вторая матрица:
1 1 1 1 1
1 1 0 2 0
1 1 0 2 0
1 1 1 1 1
ture
437 / 330 / 123
Регистрация: 27.11.2014
Сообщений: 1,038
12.08.2015, 13:53     Проверить принадлежит ли первая матрица второй #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
bool contains(int**, int, int, int**, int, int);
 
int main() {
    setlocale(LC_ALL, "rus");
    //строим первую матрицу
    cout << "Укажите размер  MxN матрицы A - ";
    int m1, n1;
    cin >> m1 >> n1;
    int ** A = new int*[m1];
 
    cout << "Заполнение:\n";
    for(int i = 0; i < m1; i++) {
        A[i] = new int[n1];     
        cout << "Элементы строки " << i + 1 << ": ";
        for(int j = 0; j < n1; j++) 
            cin >> A[i][j];             
    }
 
    //строим вторую матрицу
    cout << "Укажите размер  MxN матрицы B - ";
    int m2, n2;
    cin >> m2 >> n2;
    int ** B = new int*[m2];
 
    cout << "Заполнение:\n";
    for(int i = 0; i < m2; i++) {
        B[i] = new int[n2];
        cout << "Элементы строки " << i + 1 << ": ";
        for(int j = 0; j < n2; j++)
            cin >> B[i][j];
    }
 
    if(contains(A, m1, n1, B, m2, n2))
        cout << "Матрица B содержит A.\n";
    else
        cout << "Матрица B не содержит A.\n";
 
 
    //досвидос
    for(int i = 0; i < m1; i++) {
        delete[] A[i];
    }
    delete[] A;
    for(int i = 0; i < m2; i++) {
        delete[] B[i];
    }
    delete[] B;
    system("pause");
    return 0;
}
 
bool contains(int** A, int m1, int n1, int** B, int m2, int n2) {
    bool isOk = false;
 
    if(m1 > m2) 
        isOk = false;
    else if(n1 > n2) 
        isOk = false;
    else {
        for(int i = 0; i < m2;i++)
            for(int j = 0; j < n2; j++) {
                if(i + m1 - 1 < m2 && j + n1 - 1 < n2) {
                    isOk = true;
                    for(int k = 0; isOk && k < m1; k++)
                        for(int t = 0; isOk && t < n1; t++)
                            if(B[i + k][j + t] != A[k][t])
                                isOk = false;
                    if(isOk) return isOk;
                }
            }
    }
 
    return isOk;
}
Даценд
Модератор
Эксперт .NET
2943 / 2858 / 1452
Регистрация: 20.04.2015
Сообщений: 5,271
12.08.2015, 13:54     Проверить принадлежит ли первая матрица второй #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Melany,
матрица 1 может располагаться в любом месте матрицы 2
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 125
12.08.2015, 14:14  [ТС]     Проверить принадлежит ли первая матрица второй #6
ture, спасибо, Вы память выделяете, а потом ее удаляете, я пока этого не учила и оператор contain тоже, к сожалению, так что мне придется самой подумать над решением, но спасибо за алгоритм

Добавлено через 35 секунд
Даценд, Спасибо, за помощь, сейчас подумаю над решением,,,
Yandex
Объявления
12.08.2015, 14:14     Проверить принадлежит ли первая матрица второй
Ответ Создать тему
Опции темы

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