Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 22.01.2019
Сообщений: 57
1

Алгоритм работы с матрицей для таблицы истинности

13.12.2019, 23:22. Показов 1175. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, столкнулся с такой проблемой: нужно написать процедурку, которая формирует матрицу таблицы истинности. К примеру:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Вот таблица истинности для трех переменных. Сам я создаю динамический массив, спрашивая у пользователя сколько будет переменных (число n), а число строк (m) задается посредством возведения двойки в степень n. Сама проблема у меня с заполнением, я иду с правого верхнего края, но не знаю как грамотно организовать тут цикл. Ах, да, динамический массив создается размера n+1, так как правый столбик потом введет пользователь, поэтому мы работаем не со всей матрицей по сути, но тут в приницпе ничего страшного я думаю. В общем помогите мне правильно организовать заполнение матрицы нулями и единицами.
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int i, k1, k2, j, n, ** matr;
 
    cout << "n=?" << endl;
    cin >> n;
    cout << "m=n^2" << endl;
    int m = pow(2, n);
    int s = m / 2;
    cout << "n=" << n << endl << "m=" << m << endl;
 
    matr = new int* [m];
    for (i = 0; i < m; i++)
        matr[i] = new int[n + 1];
 
 
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n + 1; j++)
        {
         matr[i][j]=-1;
        }
    }
    k2 = 1;
 
    for (j = n-1; j >= 0; j--)
    {
        for (i = 0; i < m; i++)
        {
            for (k1 = 0; k1 < k2; k1++)
            {
                if (i < s)
                {
                    matr[i][j] = 1;
                }
                else
                {
                    matr[i][j] = 0;
                }
            }
            k2 = k2 * 2;
        }
        s = s / 2;
    }
 
    for (i = 0; i < m; i++)
    {
        for (j = n; j < n + 1; j++)
        {
            cin >> matr[i][j];
        }
    }
 
    cout << "matrix";
    for (i = 0; i < m; i++)
    {
        cout << endl;
        for (j = 0; j < n; j++)
        {
            cout << matr[i][j] <<" ";
        }
    }
 
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2019, 23:22
Ответы с готовыми решениями:

Алгоритм для работы с матрицей
Помогите, пожалуйста, написать на языке С++ &quot;алгоритм перестановки левой и правой половин...

Шаблон для работы с матрицей
Доброе время суток!:) надеюсь вы мне поможете. вот такое задание: Определите шаблон функции...

Интерфейс для работы с матрицей
Помогите, пожалуйста. После обращения к процедуре Dimension программа должна запомнить новый...

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

3
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
14.12.2019, 02:26 2
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
#include <iostream>
#include <functional>
 
int main()
{
    size_t m, n;    //rows, columns
    std::cin >> n;
    m = int(pow(2, n));
    int* matrix = new int[m * n]; //2D
 
    int* mIt = matrix;
    int* tmpArr = new int[n];
    std::function<void(size_t)> mFill_func = [&](size_t k) {
        if (k) for (uint8_t i(0); i != 2; ++i) *(tmpArr + n - k) = i, mFill_func(k - 1);
        else std::copy(tmpArr, tmpArr + n, mIt), mIt += n;
    };
    mFill_func(n);
 
    for (size_t i(0); i != m; ++i) {
        for (size_t j(0); j != n; ++j)
            std::cout << *(matrix + i * n + j) << ' ';
        std::cout << '\n';
    }
 
    delete[] tmpArr;
    delete[] matrix;
    return 0;
}
0
0 / 0 / 0
Регистрация: 22.01.2019
Сообщений: 57
14.12.2019, 21:19  [ТС] 3
Спасибо большое за ответ, но что то тут прям очень все сложно. Для меня пока строки 13-15 совсем не понятны, да и суть стоит в том, чтобы решить задачу простыми методами. Но все равно спасибо что ответили, потом я обязательно разберусь с этим.
0
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
14.12.2019, 21:25 4
artemor3228, зато идея простая: рекурсивная функция заполняет временный массив, генерирует все сочетания. Как заполнился массив, копирует его в матрицу по указателю. Матрицу удобно хранить как одномерный массив, чтобы смещать указатель построчно.
0
14.12.2019, 21:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2019, 21:25
Помогаю со студенческими работами здесь

Создать класс для работы с матрицей
создать класс для работы с матрицей согласно задания. Предусмотреть наличие функций конструктора и...

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

Создать класс для работы с матрицей по условию
Ребят привет... Есть задание... Создайте класс matrix, который осуществляет проверку индексов...

Программа для построения таблицы истинности булевой функции
Нужно написать программу на C++ для построения таблицы истинности по введённой функции, минимум 4...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru