Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2017, 19:54   #1
mozarinni
Новичок
Джуниор
 
Регистрация: 12.04.2017
Сообщений: 2
По умолчанию Как преобразовать троичную булеву матрицу в двоичную

Добрый день. Скажите, пожалуйста, как реализовать на С++ преобразование троичной булевой матрицы в двоичную. То есть перебор возможных значений 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.04.2017, 20:18   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну взять и преобразовать с помощью циклов.

В чем именно проблема?

Покажите свои наработки, конкретные вопросы и т.п.

Или в раздел Фриланс если вы не хотите ничего делать, а ищете кого-то, кто выполнит ваши задачи за вознаграждение.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.04.2017, 20:30   #3
mozarinni
Новичок
Джуниор
 
Регистрация: 12.04.2017
Сообщений: 2
По умолчанию

Создал новую матрицу нужных размеров и дальнейшие затруднения вызывает её заполнение. Опишите, пожалуйста, алгоритм, по которому будет лучше это сделать.
Код:
void Combination(int **m, int row, int col) {
	int index=0,numOfPositiveRows=0, tempIndex = 0;
	int row1;
	int *temp = new int[col];
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			if (m[i][j] == -1) {
				tempIndex+=1;
			}
		if (j == (col - 1) && (tempIndex == 0)) {
			numOfPositiveRows += 1;
				}
		}
		index += tempIndex;
		tempIndex = 0;
	}
		row1 = pow(2, index)+numOfPositiveRows;
		int **newMatr = new int *[row1];
		for (int i = 0; i < row1; i++) {
			newMatr[i] = new int[col];
		}
mozarinni вне форума Ответить с цитированием
Старый 13.04.2017, 00:36   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Протестируй при разных комбинациях и количестве (в строке символов):

Код:
#include <iostream>
using namespace std;

int main()
{
	int a[6] = { -1, 0, -1, -1, 1, -1 };
	int N = 6;	

	int i, j;
	int kol = 0;
	for (i = 0; i < N; i++)
	{
		if (a[i] == -1)
		{
			kol += 1;
		}
	}
	int b[25][25];
	for (i = 0; i < pow(2, kol); i++)
	{
		for (j = 0; j < N; j++)
		{
			b[i][j] = a[j];
		}
	}
	
	int chastota = 1;
	for (i = 0; i < N; i++)
	{
		if (a[i] == -1)
		{		
			int p;
			int delta = pow(2, kol) / pow(2, chastota);
			j = 0;
			while (j < pow(2, kol))
			{
				for (p = 0; p < delta; p++)
				{
					b[j][i] = 0;
					j++;
				}
				for (p = 0; p < delta; p++)
				{
					b[j][i] = 1;
					j++;
				}	
			}
			chastota += 1;
		}
	}
	
	for (i = 0; i < pow(2, kol); i++)
	{
		for (j = 0; j < N; j++)
		{
			cout << " " << b[i][j];
		}
		cout << endl;
	}

	cin >> i; // что бы консоль не закрывалась	 
	return 0;
}
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из двоичную в троичную Fanyuus Общие вопросы C/C++ 6 14.12.2012 11:36
Как преобразовать строку в двоичную матрицу? (Delphi) foxii Помощь студентам 0 27.09.2012 14:46
из десятичной системы счисления преобразовать в двоичную систему в экспоненциальный вид [Паскаль] Yamkin Помощь студентам 3 16.12.2010 00:08
Преобразовать матрицу A(n,m) Doublefaced Помощь студентам 18 27.06.2009 19:56
Как экономично проверить булеву переменную? Иллидан Общие вопросы Delphi 7 15.10.2008 19:04