Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/54: Рейтинг темы: голосов - 54, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 15

Перемножение булевых (единичных) матриц

29.05.2012, 19:12. Показов 11561. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, помогите! В принципе простое задание перемножить единичные матрицы и получиться должна тоже единичная матрица, только вот уткнулся в булеву алгебру. Нужны свежие идеи)))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.05.2012, 19:12
Ответы с готовыми решениями:

Возведение булевых матриц в степень
Здравствуйте! Есть задача, возвести булевую матрицу смежности в степень, равную её размерности, для дальнейшего нахождения циклов. Так вот,...

Возведение в степень булевых матриц
Здравствуйте! Нужна помощь, не могу разобраться где ошибка. Требуется возвести в степень булевую матрицу, но в итоге получается не верно....

Перемножение матриц
Очень нужна ваша помощь, курсач горит а написать не получается.) задача такова, нужно сделать перемножение матриц линейных уравнений в...

21
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.05.2012, 10:59
А что такое булева матрица, расскажите?

PS. Вот здесь Реализовать функцию перемножения матриц я выкладывал реализацию перемножения матриц.
1
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 15
30.05.2012, 11:27  [ТС]
Матрица состоящая из нулей и единиц. И тип данных, соответственно, не int, а bool. К тому же все операции (сложение, умножение и пр.) проводятся в булевой алгебре(логическое сложение, умножение).
P.S. Спасибо за ссылочку))
0
 Аватар для Remmor
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
30.05.2012, 12:49
Цитата Сообщение от DolphinLover Посмотреть сообщение
Нужны свежие идеи)))
Свежие идеи о чем?
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
30.05.2012, 14:27
Цитата Сообщение от DolphinLover Посмотреть сообщение
Матрица состоящая из нулей и единиц. И тип данных, соответственно, не int, а bool. К тому же все операции (сложение, умножение и пр.) проводятся в булевой алгебре(логическое сложение, умножение).
P.S. Спасибо за ссылочку))
Логическое сложение - исключающее или (xor)?
Логическое умножение - логическое И?
Я правильно вас понимаю?
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
30.05.2012, 15:51
Цитата Сообщение от DolphinLover Посмотреть сообщение
только вот уткнулся в булеву алгебру
И то правда, очень сложная формула:
c[i,j] += a[i,k] * b[k,j];
Превращается в:
c[i,j] |= a[i,k] && b[k,j];
Цитата Сообщение от Lasur Посмотреть сообщение
Логическое сложение - исключающее или (xor)?
А xor - это не "исключающее или", по вашему? Логическое сложение - это операция "или".

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
using System;
 
namespace ConsoleApplication
{
    internal class Program
    {
        private static void Main()
        {
            var arr1 = new[,] {{false, false}, {false, true}};
            var arr2 = new[,] {{false, false, false}, {true, true, false}};
            var result = Mul(arr1, arr2);
 
            for (var i = 0; i < result.GetLength(0); i++)
            {
                for (var j = 0; j < result.GetLength(1); j++)
                    Console.Write("{0} ", result[i, j]);
                Console.WriteLine();
            }
        }
 
        private static bool[,] Mul(bool[,] left, bool[,] right)
        {
            if (left.GetLength(1) != right.GetLength(0))
                throw new ArgumentException();
 
            var result = new bool[left.GetLength(0),right.GetLength(1)];
            for (var i = 0; i < result.GetLength(0); i++)
                for (var j = 0; j < result.GetLength(1); j++)
                {
                    result[i, j] = false;
                    for (var k = 0; k < left.GetLength(1); k++ )
                        result[i, j] |= left[i, k] && right[k, j];
                }
 
            return result;
        }
    }
}
1
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
30.05.2012, 16:20
Цитата Сообщение от Blood-Angel Посмотреть сообщение
А xor - это не "исключающее или", по вашему?
xor как раз "исключающее или" по-моему, о чем я в скобках и написал.
Цитата Сообщение от Blood-Angel Посмотреть сообщение
Логическое сложение - это операция "или".
В разных случая по-разному. Например, когда оперируют с булевыми функциями, под сложением обычно подразумевают xor.
0
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 15
30.05.2012, 21:18  [ТС]
Lasur, да, правильно понимаете)
Blood-Angel, Спасибо за совет) А упираюсь Я в ввод элементов матрицы, а там выходит проблема конвертации bool.
Вот поэтому,Remmor, Я и хотел посмотреть реализацию это программы другими. Так как с шарпом толком не знаком, проблема может быть самой банальной))
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
30.05.2012, 21:56
Цитата Сообщение от DolphinLover Посмотреть сообщение
Lasur, да, правильно понимаете)
В таком случае вам следует заменить | в коде Blood-Angel на ^.
Цитата Сообщение от DolphinLover Посмотреть сообщение
А упираюсь Я в ввод элементов матрицы, а там выходит проблема конвертации bool.
Какая именно проблема? bool.Parse распознает строки "true" и "false" без учета регистра.
0
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 15
30.05.2012, 22:01  [ТС]
Lasur, т.е. поставить ^ для логического сложения? А проблема при считывании данных,введенных с клавиатуры.
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
30.05.2012, 22:12
Цитата Сообщение от DolphinLover Посмотреть сообщение
Lasur, т.е. поставить ^ для логического сложения?
Если под логическим сложением вы подразумеваете xor, то да. Если обычное "или" - оставьте как есть.
Цитата Сообщение от DolphinLover Посмотреть сообщение
А проблема при считывании данных,введенных с клавиатуры.
Я выше уже написал. Вводите true/false и
C#
1
bool.Parse(Console.ReadLine());
должен все распознать.
1
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 15
30.05.2012, 22:25  [ТС]
Lasur, спасибо) Но Parse не принимает 2 аргумента, а у Меня не получается с консоли ввести матрицу. Вот код, вторая строка и является основной проблемой))

C#
1
2
3
4
5
6
7
8
9
10
Console.WriteLine("Введите размерность первой матрицы: ");
            var A = bool.Parse (Console.ReadLine(),Console.ReadLine());(????????)
            for (int i = 0; i < A.GetLength(0); i++)
            {
                for (int j = 0; j < A.GetLength(1); j++)
                {
                    Console.Write("A[{0},{1}] = ", i, j);
                    A[i, j] = Convert.ToBoolean(Console.ReadLine());
                }
            }
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
30.05.2012, 22:36
C#
1
var A = bool.Parse (Console.ReadLine(),Console.ReadLine());(????????)
---->
C#
1
var A = new bool[int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine())];
Даже непонятно что вы пытались сделать такой строкой. То ли создать "true" матрицу, то ли создать матрицу размерностью true*false.
1
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 15
30.05.2012, 22:49  [ТС]
Lasur, тут просто вставил блок для примера, а строка так и осталась не дописанной))
А вот финальную часть сообщения Я не понял..Размерность матрицы всегда целое число)) Или имелось ввиду "содержимое" матрицы?
0
30.05.2012, 22:54

Не по теме:

Это просто шутка такая была. По поводу строки

C#
1
var A = bool.Parse (Console.ReadLine(),Console.ReadLine());(????????)

0
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 15
30.05.2012, 22:56  [ТС]
Ааааа))) Под конец вечера уже туго с пониманием...
0
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 15
01.06.2012, 23:56  [ТС]
Lasur, Почему то во второй строке выводит ошибку, о недопустимых аргументах. В чем проблема, некоторые говорят, что это вообще компилятор...? Вот код:
C#
1
2
3
4
5
6
7
8
9
10
Console.WriteLine("Введите размерность матрицы: ");
            var A = new bool[int.Parse(Console.ReadLine(),Console.ReadLine())];
            for (int i = 0; i < A.GetLength(0); i++)
            {
                for (int j = 0; j < A.GetLength(1); j++)
                {
                    Console.Write("A[{0},{1}] = ", i, j);
                    A[i, j] = bool.Parse(Console.ReadLine());
                }
            }
 Комментарий модератора 
Используйте специальные теги форматирования программного кода
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
02.06.2012, 00:09
Сравните ваш код
C#
1
var A = new bool[int.Parse(Console.ReadLine(),Console.ReadLine())];
и то, что я написал вам несколькими постами выше
C#
1
var A = new bool[int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine())];
Пример работы:
1
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 15
02.06.2012, 18:44  [ТС]
Lasur, тысяча извинений за Мою не внимательность)))

Добавлено через 18 часов 0 минут
Lasur, не могли бы ли вы подсказать)) Почему программа не выводит результат?
код C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BooleanMatrix
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите размерность матрицы: ");
var A = new bool[int.Parse(Console.ReadLine()),int.Parse( Console.ReadLine())];
for (int i = 0; i < A.GetLength(0); i++)
{
for (int j = 0; j < A.GetLength(1); j++)
{
Console.Write("A[{0},{1}] = ", i, j);
A[i, j] = bool.Parse(Console.ReadLine());
}
}

Console.WriteLine("\nМатрица A:");
Print(A);
var B = Mul(A, A);
Print(B);


}

static void Print(bool[,] a)
{
for (var i = 0; i < a.GetLength(0); i++)
{
for (var j = 0; j < a.GetLength(1); j++)
{
Console.Write("{0} ", a[i, j]);
}
Console.WriteLine();
}
}

private static bool[,] Mul(bool[,] left, bool[,] right)
{
if (left.GetLength(1) != right.GetLength(0))
throw new ArgumentException();

var result = new bool[left.GetLength(0), right.GetLength(1)];
for (var i = 0; i < result.GetLength(0); i++)
for (var j = 0; j < result.GetLength(1); j++)
{
result[i, j] = false;
for (var k = 0; k < left.GetLength(1); k++)
result[i, j] |= left[i, k] && right[k, j];
}

return result;
}
}
}
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
02.06.2012, 19:04
Выводит, причем даже правильный.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2012, 19:04
Помогаю со студенческими работами здесь

Перемножение 2-х матриц
Добрый день, есть два двух мерных массива. Нужно их перемножить и вывести значения на консоль, так как выдает ошибку на 127...

Перемножение матриц
Есть много матриц в массивах var Matrix = new int; Как их все перемножить?

Перемножение матриц
Добрый вечер. Как запихнуть перемножение матриц в 2 for-a? Мои попытки оказались не правильными. На три так без проблем. for (i...

Перемножение матриц
Подскажите, как перемножить две матрицы: var a = new { {5, 10, 13, -4, 10}, {20, 2, 9, 9, -1}, {5,...

Перемножение матриц
можете помоч с задачей: нужно написать программу, которая перемножает 2 матрицы и выводит результат. Программы должна работать так:...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru