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

Задача на сканирование элементов матрицы - C++

Восстановить пароль Регистрация
 
DIEZEL-man
13 / 13 / 0
Регистрация: 17.02.2013
Сообщений: 54
28.05.2013, 20:20     Задача на сканирование элементов матрицы #1
В общем условие задание такое:
Дана матрица А, размерности m*n. Сформировать матрицу B, размерности m*n, состоящую только из 0 и 1. Элемент матрицы B равен единице, если элемент того же индекса и соседние к нему равны 0.
Вот начатая работа, я не могу придумать алгоритм для ситуаций, когда одого или двух соседей вообще нет.
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
#include<iostream>
#include<iomanip>
using namespace std;
int main() { 
    int n, m;
    cout<<"Vvedite razmernost' matrici:"<<endl;
    cout<<"Vvedite N:"<<endl;
    cin>>n;
    cout<<"Vvedite M:"<<endl;
    cin>>m;
    int a[n][m], b[n][m];
    cout<<"Vvedite znacheniya elementov matrici:"<<endl;
    for(int i=0; i<n; i++) { 
            cout<<i+1<<" stroka:"<<endl;
            for(int j=0; j<m; j++) { 
                    cin>>a[i][j];
                    b[i][j]=0;}}
     for(int i=0; i<n; i++) { 
            for(int j=0; j<m; j++) { 
                    if(a[i][j]==0) 
                                   if(a[i-1][j]==0) 
                                                    if(a[i+1][j]==0) 
                                                                     if(a[i][j-1]==0) 
                                                                                      if(a[i][j+1]==0)
                  b[i][j]=1;}}
    cout<<"Ishodnaya matrica A:"<<endl;
    for(int i=0; i<n; i++) { 
            cout<<endl; 
            for(int j=0; j<m; j++) { 
                    cout<<setw(3)<<a[i][j];}}
    cout<<endl;
    cout<<"Celevaya matrica B:"<<endl;
     for(int i=0; i<n; i++) { 
            cout<<endl; 
            for(int j=0; j<m; j++) { 
                    cout<<setw(3)<<b[i][j];}}
     cout<<endl;
     system("pause");
     return 0;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 20:20     Задача на сканирование элементов матрицы
Посмотрите здесь:

C++ Для заданной матрицы размера NхN найти такие k и n, что сумма элементов k- столбца матрицы совпадает с суммой элементов n- го строки
Получить новую матрицу умножением элементов первой матрицы на наибольшее из значений элементов соответствующий строки второй матрицы C++
Задача на вывод элементов матрицы по спирали C++
Матрицы. Найти и распечатать сумму элементов 5-го столбца матрицы А и сумму элементов последней строки матрицы В C++
C++ Задача на "закрашивание" некоторых элементов матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kostya-vrn
10 / 10 / 4
Регистрация: 16.03.2013
Сообщений: 30
28.05.2013, 20:29     Задача на сканирование элементов матрицы #2
Воспользуйся ifом, если дошло до края одно значение(m или n), то не учитывать следующий его элемент, а если оба(m и n), то не учитывай оба, а учитывай только предыдущие и все
DIEZEL-man
13 / 13 / 0
Регистрация: 17.02.2013
Сообщений: 54
28.05.2013, 20:35  [ТС]     Задача на сканирование элементов матрицы #3
Цитата Сообщение от kostya-vrn Посмотреть сообщение
Воспользуйся ifом, если дошло до края одно значение(m или n), то не учитывать следующий его элемент, а если оба(m и n), то не учитывай оба, а учитывай только предыдущие и все
Этот способ мне был известен, он называется "в лоб". Код получается слишком большим, мне нужен алгоритм, который не будет занимать столько места.
kostya-vrn
10 / 10 / 4
Регистрация: 16.03.2013
Сообщений: 30
28.05.2013, 20:49     Задача на сканирование элементов матрицы #4
Воспользуйтесь функциями. Чтобы не писать 100500 раз if воспользуйтесь логической операцией &
if ((a[i][j]==0) & (...) & (...) & (...)), тоже уменьшит объем кода
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
28.05.2013, 20:54     Задача на сканирование элементов матрицы #5
Как вариант - увеличить размеры массивов на 2, добавив по краям таблицы границу из нулей. Во всем, кроме проверки условия, работать только со внутренней частью. Тогда даже у крайних будут все соседи, причем соседи из границы никак не влияют на результат.
DIEZEL-man
13 / 13 / 0
Регистрация: 17.02.2013
Сообщений: 54
28.05.2013, 20:57  [ТС]     Задача на сканирование элементов матрицы #6
Цитата Сообщение от Гром Посмотреть сообщение
Как вариант - увеличить размеры массивов на 2, добавив по краям таблицы границу из нулей. Во всем, кроме проверки условия, работать только со внутренней частью. Тогда даже у крайних будут все соседи, причем соседи из границы никак не влияют на результат.
Отличная идея, спасибо. Этот называется "расширь границы мышления" )
Yandex
Объявления
28.05.2013, 20:57     Задача на сканирование элементов матрицы
Ответ Создать тему
Опции темы

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