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

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

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

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

23.01.2014, 13:06. Просмотров 2467. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 13:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построение таблицы истинности (C++):

Построение таблицы истинности - 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) как записать таблицы истинности даной функции...

28
Ev_Hyper
Заблокирован
23.01.2014, 13:17 #2
ruTwit, выкладывайте код, который выдает ошибку

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

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

Добавлено через 2 минуты
Виноват, for все таки нужен.
0
ValeryS
Модератор
6674 / 5083 / 474
Регистрация: 14.02.2011
Сообщений: 17,054
23.01.2014, 13:20 #3
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Виноват, for все таки нужен.
зачем?
чтобы возвести в степень 2?
C++
1
p3=1<<n;
0
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
0
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?
ну да, я сразу и подумал что он не нужен. А потом сообразил, что это - такое возведение в степень
0
ValeryS
Модератор
6674 / 5083 / 474
Регистрация: 14.02.2011
Сообщений: 17,054
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 для целочисленных не определен, нужно приводить
1
Ev_Hyper
Заблокирован
23.01.2014, 13:28 #7
Цитата Сообщение от ValeryS Посмотреть сообщение
27=128
что больше int не поддерживает?
конечно поддерживает, но читать такую ТИ с консоли? Смысла нет. Поэтому и остановился на 7.

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
нарвешься на ошибку что pow для целочисленных не определен, нужно приводить
могу ошибаться, но разве компилятор, в данном случае,не приводит к правильному виду сам?
0
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;
0
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
Для продолжения нажмите любую клавишу . . .
0
ValeryS
Модератор
6674 / 5083 / 474
Регистрация: 14.02.2011
Сообщений: 17,054
23.01.2014, 13:36 #10
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
могу ошибаться, но разве компилятор, в данном случае,не приводит к правильному виду сам?
нет
потому что есть для double и для float и он не знает к чему приводить
Цитата Сообщение от ruTwit Посмотреть сообщение
В этом цикле не используется m, при этом после окончания цикла m уменьшается до 1,
потому что выходишь за границы массива и затираешь значение m
Показать где или найдешь?
2
Ev_Hyper
Заблокирован
23.01.2014, 13:37 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
потому что есть для double и для float и он не знает к чему приводить
Вот так будет правильно?

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

Добавлено через 2 минуты
из-за k?
0
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;
}
1
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
23.01.2014, 13:55  [ТС] #15
Ev_Hyper, но при n>2, числа некоторые повторяются(
0
23.01.2014, 13:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2014, 13:55
Привет! Вот еще темы с ответами:

построение таблицы - 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...

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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