Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Gреобразовать троичную булеву матрицу в двоичную 
:(
    Опции темы
mozarinni
Дата 12.4.2017, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.4.2017

Репутация: нет
Всего: нет



Добрый день. Скажите, пожалуйста, как реализовать на С++ преобразование троичной булевой матрицы в двоичную. То есть перебор возможных значений 0 или 1 на месте "-".
Например
Исходная матрица:
0 1 - 0
- 0 - 1
0 0 0 0
1 1 1 0

Конечная матрица:
0 1 1 0
0 1 0 0
0 0 0 1
0 0 1 1
1 0 0 1
1 0 1 1
0 0 0 0
1 1 1 0

Это сообщение отредактировал(а) mozarinni - 12.4.2017, 20:10
PM MAIL   Вверх
borisbn
Дата 13.4.2017, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Код
/*
Исходная матрица:
0 1 - 0
- 0 - 1
0 0 0 0
1 1 1 0

Конечная матрица:
0 1 1 0
0 1 0 0
0 0 0 1
0 0 1 1
1 0 0 1
1 0 1 1
0 0 0 0
1 1 1 0
*/

#include <vector>
#include <algorithm>

template< typename T >
std::vector< T > operator+( const std::vector< T > & left, const std::vector< T > & right ) {
    std::vector< T > result( left.begin(), left.end() );
    result.insert( result.end(), right.begin(), right.end() );
    return result;
}

using Line = std::vector< char >;

std::vector< Line > three_2_two( const Line & line )
{
    auto found = std::find( line.begin(), line.end(), '-' );
    if ( found == line.end() )
    {
        return { line };
    }
    Line temp[ 2 ];
    for ( auto it = line.begin(); it != found; ++it )
    {
        temp[ 0 ].push_back( *it );
        temp[ 1 ].push_back( *it );
    }
    temp[ 0 ].push_back( '0' );
    temp[ 1 ].push_back( '1' );
    for ( auto it = found + 1; it != line.end(); ++it )
    {
        temp[ 0 ].push_back( *it );
        temp[ 1 ].push_back( *it );
    }
    return three_2_two( temp[ 0 ] ) + three_2_two( temp[ 1 ] );
}

#include <iostream>

int main() {
    std::vector< Line > in = {
        { '0', '1', '-', '0' },
        { '-', '0', '-', '1' },
        { '0', '0', '0', '0' },
        { '1', '1', '1', '0' },
    };
    std::vector< Line > out;
    for ( auto line : in ) {
        out = out + three_2_two( line );
    }

    auto printMatrix = []( const std::vector< Line > & m ) {
        for ( auto line : m )
        {
            for ( auto ch : line )
            {
                std::cout << ch << ' ';
            }
            std::cout << std::endl;
        }
    };

    printMatrix( in );
    std::cout << "----------------" << std::endl;
    printMatrix( out );
}



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0407 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.