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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
#1

Построение таблицы истинности - C++

23.01.2014, 13:06. Просмотров 2406. Ответов 28
Метки нет (Все метки)

Нужно построить таблицу истинности. Таблицу программа вроде строит, но строит только до: при n=3 и 2^n=8, а если уже будет 4 и 16, выдает ошибку. Помогите найти.
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int m=8, n=3;
    int a[8][3];
    int k=1,i,j,p,p1=n,N=2,p3=1,t;
    for(i=1;i<=n;i++)
        p3=N*p3;
    
    cout<<endl<<p3<<endl;
 
 
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            a[i][j]=0;
 
 
 
    for(j=p1-1;j>=0;j--)
    {
        for(i=0+k;i<p3;i++)
        {
            for(t=0;t<k;t++)
            {
                a[i][j]=1;
                i++;
            }
            
        }
            k*=2;
    }
 
 
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 13:06     Построение таблицы истинности
Посмотрите здесь:

Построение таблицы истинности - C++
Здравствуйте. Задание такое: Построить таблицу истинности булевой функции. Функция вводится пользователем. Это часть программы. ...

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

Заполнение таблицы истинности - C++
Подскажите пожалуйста, как можно, используя матрицу, заполнить таблицу истинности 0 и 1. Например: даны A и B. Получается: A B 0 0 0...

Построить таблицы истинности следующих высказываний - C++
1) Построить таблицы истинности следующих высказываний: а) A || B, б) A &amp;&amp; B || C, в) A &amp;&amp; (B || C). Для этого следует написать столько...

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

Bool переменные - как записать таблицы истинности функции, используя цикл - C++
Пусть есть 4 переменых типа bool (x1, x2, x3 ,x4) и логическая функция (y = !x1 x3 + x2!x4) как записать таблицы истинности даной функции...

построение таблицы - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt; using namespace std; int main () { const int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev_Hyper
Заблокирован
23.01.2014, 13:17     Построение таблицы истинности #2
ruTwit, выкладывайте код, который выдает ошибку

C++
1
2
    for(i=1;i<=n;i++)
        p3=N*p3;
for тут не нужен.

Могу предположить, что ошибка связана с тем что вы выходите за границы массива.

Добавлено через 2 минуты
Виноват, for все таки нужен.
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
23.01.2014, 13:20     Построение таблицы истинности #3
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Виноват, for все таки нужен.
зачем?
чтобы возвести в степень 2?
C++
1
p3=1<<n;
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
23.01.2014, 13:22  [ТС]     Построение таблицы истинности #4
Ev_Hyper, ошибка вот здесь, нашел, но как она получается не понимаю. В этом цикле не используется m, при этом после окончания цикла m уменьшается до 1, хотя с ней не работали.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for(j=p1-1;j>=0;j--)
    {
        for(i=0+k;i<p3;i++)
        {
            for(t=0;t<k;t++)
            {
                a[i][j]=1;
                i++;
            }
            
        }
            k*=2;
            cout<<m<<" "<<n<<endl;
    }
 
    cout<<m<<" "<<n<<endl;
Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
Код C++
1
p3=1<<n;
Да, чтобы возвести в степень n
Ev_Hyper
Заблокирован
23.01.2014, 13:24     Построение таблицы истинности #5
C++
1
2
3
    int n, a[256][8];
    cin>>n;
    int m = pow(2,n);
будет работать до n=7. При желании можно еще расширить

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
зачем?
чтобы возвести в степень 2?
ну да, я сразу и подумал что он не нужен. А потом сообразил, что это - такое возведение в степень
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
23.01.2014, 13:26     Построение таблицы истинности #6
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
будет работать до n=7.
27=128
что больше int не поддерживает?
Цитата Сообщение от ruTwit Посмотреть сообщение
Да, чтобы возвести в степень n
ну так я тебе показал
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
p3=1<<n;
Добавлено через 1 минуту
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
int m = pow(2,n);
нарвешься на ошибку что pow для целочисленных не определен, нужно приводить
Ev_Hyper
Заблокирован
23.01.2014, 13:28     Построение таблицы истинности #7
Цитата Сообщение от ValeryS Посмотреть сообщение
27=128
что больше int не поддерживает?
конечно поддерживает, но читать такую ТИ с консоли? Смысла нет. Поэтому и остановился на 7.

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
нарвешься на ошибку что pow для целочисленных не определен, нужно приводить
могу ошибаться, но разве компилятор, в данном случае,не приводит к правильному виду сам?
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
23.01.2014, 13:30  [ТС]     Построение таблицы истинности #8
Всем спасибо большое за разъяснения, но у меня немного другой вопрос. В этом цикле не используется m, при этом после окончания цикла m уменьшается до 1, хотя с ней не работали и она должна быть равна 16 при n=4 и m=16. Почему так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for(j=p1-1;j>=0;j--)
    {
        for(i=0+k;i<p3;i++)
        {
            for(t=0;t<k;t++)
            {
                a[i][j]=1;
                i++;
            }
            
        }
            k*=2;
            cout<<m<<" "<<n<<endl;
    }
 
    cout<<m<<" "<<n<<endl;
Ev_Hyper
Заблокирован
23.01.2014, 13:34     Построение таблицы истинности #9
Цитата Сообщение от ruTwit Посмотреть сообщение
Всем спасибо большое за разъяснения, но у меня немного другой вопрос. В этом цикле не используется m, при этом после окончания цикла m уменьшается до 1, хотя с ней не работали и она должна быть равна 16 при n=4 и m=16. Почему так?
Вы исправили на мой вариант?
Кликните здесь для просмотра всего текста

Код
4

16
16 4
16 4
16 4
16 4
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 1 1
0 1 1 0
0 1 0 1
1 0 1 0
1 1 1 1
1 1 0 0
1 1 1 1
1 1 1 0
1 0 0 1
1 1 1 0
1 1 1 1
Для продолжения нажмите любую клавишу . . .
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
23.01.2014, 13:36     Построение таблицы истинности #10
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
могу ошибаться, но разве компилятор, в данном случае,не приводит к правильному виду сам?
нет
потому что есть для double и для float и он не знает к чему приводить
Цитата Сообщение от ruTwit Посмотреть сообщение
В этом цикле не используется m, при этом после окончания цикла m уменьшается до 1,
потому что выходишь за границы массива и затираешь значение m
Показать где или найдешь?
Ev_Hyper
Заблокирован
23.01.2014, 13:37     Построение таблицы истинности #11
Цитата Сообщение от ValeryS Посмотреть сообщение
потому что есть для double и для float и он не знает к чему приводить
Вот так будет правильно?

C++
1
int m = pow(2.0,(double)n);
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
23.01.2014, 13:40     Построение таблицы истинности #12
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Вот так будет правильно?
да
но второе мог и не приводить
2.0 по умолчанию double
для флоата специальную буковку можно ставить
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
23.01.2014, 13:45  [ТС]     Построение таблицы истинности #13
ValeryS, вроде понял, но лучше покажите

Добавлено через 2 минуты
из-за k?
Ev_Hyper
Заблокирован
23.01.2014, 13:50     Построение таблицы истинности #14
ruTwit,
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
int main()
{
    int n, a[256][8];
    cin>>n;
    int m = pow(2.0,(double)n);
    int k=1,i,j,t;
 
 
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            a[i][j]=0;
 
   for(j=n-1;j>=0;j--)
    {
        for(i=0+k;i<m;i++)
        {
            for(t=0;t<k;t++)
            {
                a[i][j]=1;
                i++;
            }
            
        }
            k*=2;
            cout<<m<<" "<<n<<endl;
    }
 
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
23.01.2014, 13:55  [ТС]     Построение таблицы истинности #15
Ev_Hyper, но при n>2, числа некоторые повторяются(
Ev_Hyper
Заблокирован
23.01.2014, 14:04     Построение таблицы истинности #16
я сам алгоритм построения ТИ не проверял.
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
23.01.2014, 14:06     Построение таблицы истинности #17
Цитата Сообщение от ruTwit Посмотреть сообщение
но лучше покажите
смотри
Цитата Сообщение от ruTwit Посмотреть сообщение
C++
1
int a[8][3];
Цитата Сообщение от ruTwit Посмотреть сообщение
C++
1
2
3
for(j=p1-1;j>=0;j--)
  {
   for(i=0+k;i<p3;i++)
а что такое p3?
это 2n
и вот при 3 у тебя p3 равно 8 укладываемся в размер массива
а при 4 p3 равно 16 уже вылазим
или делай массив динамический
или как Ev_Hyper, зафигачь очень большой
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
C++
1
int n, a[256][8];

Цитата Сообщение от ruTwit Посмотреть сообщение
C++
1
int k=1,i,j,p,p1=n,N=2,p3=1,t;
вот это разнеси по разным строчкам
не разберешь где инициализированные переменные где нет
времена экранов 25х80 уже прошли
Alex5
1048 / 711 / 104
Регистрация: 12.04.2010
Сообщений: 1,789
23.01.2014, 14:06     Построение таблицы истинности #18
Цитата Сообщение от ruTwit Посмотреть сообщение
C++
1
2
int m=8, n=3;
 int a[8][3];
ruTwit, возможная причина ошибки: одну восьмёрку поменяем на 16, а вторую забудем. Лучше сразу написать
C++
1
2
const int m=8, n=3;
int a[m][n];
8 == ( 2 в степени 3 ). Верно ли, что должно быть m == ( 2 в степени n ) ? Если так, то можно написать
C++
1
2
3
const int n = 3;
const int m = 1 << n; // 2 в степени n 
int a[m][n];
Ev_Hyper
Заблокирован
23.01.2014, 14:12     Построение таблицы истинности #19
Цитата Сообщение от Alex5 Посмотреть сообщение
Верно ли, что должно быть m == ( 2 в степени n ) ?
Это же ТИ. Конечно верно.

Цитата Сообщение от ValeryS Посмотреть сообщение
вот это разнеси по разным строчкам
не разберешь где инициализированные переменные где нет
большая часть из которых избыточна
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2014, 14:16     Построение таблицы истинности
Еще ссылки по теме:

Построение сильноветвящегося дерева на основе таблицы отношений - C++
Мое задание состоит в том, чтоби построить дерево, имея таблицу отношений родителя к потомку. Эта таблица находиться в базе данных, а...

Построение таблицы значений функции y=f(x) для x на отрезке [a;b] с шагом h - C++
Помогите, пожалуйста, исправить следующую ситуацию: при a=-2, b=1 и h=0.3 на экран не выводится значение функции в крайней точке отрезка...

Построение таблицы значений для функции с разбиением отрезков - C++
Задача: Построить таблицу значений для функции на отрезке с числом разбиений отрезка m=15. Собственно, прощу объяснить данную...

таблица истинности - C++
Может у кого завалялась или кто поможет? Реализовать программу таблица истинности , для выражения 3 переменных

Таблица истинности - C++
Ребят возникла сложность при написании программы, которая по заданному выражении создаст таблицу истинности, а именно нет идей как ее...


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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
23.01.2014, 14:16     Построение таблицы истинности #20
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
большая часть из которых избыточна
а вот когда разнесет
увидит что половина это дубли
например
Цитата Сообщение от ruTwit Посмотреть сообщение
p1=n

Не по теме:

Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Это же ТИ.
я кстати таки не врубился что за ТИ
какой функции?

Yandex
Объявления
23.01.2014, 14:16     Построение таблицы истинности
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru