Ir ao conteúdo
  • Cadastre-se
Shiftz

C++ Criar tabela verdade com quantidade "X" de entrada

Recommended Posts

Boa tarde, estou precisando de uma ajuda para criar uma tabela verdade, preciso que o usuario digite quantas entradas serão usadas e então será imprimido as entradas e será feito a tabela até as entradas estarem com todos valores em 1, EX: A B 

                                               0  0 

                                               1  0
                                               0  1 

                                               1  1

eu tenho a tabela assim no momento, porém só consegui fazer criando todas as entradas e quando imprimo ele aparece todas mesmo que não sejam utilizadas.

 

 


#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int entrada;
  char A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z;    // variáveis de entrada
  int qnt; // quantidade de variáveis
  printf("Digite a quantidade de entrada para sua tabela\n");
  scanf ("%d", &qnt);
  printf ("%d\n" , qnt);


   printf("  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n");

  //                          2^n - quantidade de linhas da tabela
  for(entrada = 0; entrada < (pow(2, qnt)); entrada++) {

      A = (entrada & 1)?1:0;         // x ? a:b <=> if(x) a; else b;
      B = (entrada & 2)?1:0;         // inline if
      C = (entrada & 4)?1:0;
      D = (entrada & 8)?1:0;
      E = (entrada & 16)?1:0;
      F = (entrada & 32)?1:0;
      G = (entrada & 64)?1:0;
      H = (entrada & 128)?1:0;
      I = (entrada & 256)?1:0;
      J = (entrada & 512)?1:0;
      K = (entrada & 1024)?1:0;
      L = (entrada & 2048)?1:0;
      M = (entrada & 4096)?1:0;
      N = (entrada & 8192)?1:0;
      O = (entrada & 16384)?1:0;
      P = (entrada & 32768)?1:0;
      Q = (entrada & 65536)?1:0;
      R = (entrada & 131072)?1:0;
      S = (entrada & 262144)?1:0;
      T = (entrada & 524288)?1:0;
      U = (entrada & 1048576)?1:0;
      V = (entrada & 2097152)?1:0;
      W = (entrada & 4194304)?1:0;
      X = (entrada & 8388608)?1:0;
      Y = (entrada & 16777216)?1:0;
      Z = (entrada & 33554432)?1:0;


      printf("  %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z);  
      }

  getchar();
  return 0;
}

 

 

Só posso utilizar as bibliotecas <stdio.h> <stdlib.h> <math.h> <iso646.h> para criar a tabela

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Shiftz     para imprimir apenas as entradas que foram pedidas seria melhor usar um vetor de char com as 26 posições correspondente as 26 letras ,  assim usando um laço de repetição indo de zero até a quantidade de entradas pedidas para imprimir as entradas ,  então seu código pode ser assim  :

#include <stdio.h>
#include <math.h>
#include <iso646.h>
#include <stdlib.h>
int main(void){
    int entrada;
    char vet[26];
    int qnt,j; /*// quantidade de variáveis*/
    printf("Digite a quantidade de entrada para sua tabela\n");
    scanf ("%d", &qnt);
    printf ("%d\n" , qnt);
    printf("  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n");
    /*//                          2^n - quantidade de linhas da tabela*/
    for(entrada = 0; entrada < (pow(2,qnt)); entrada++) {
        vet[0 ] = (entrada & 1       )?1:0;      /*   // x ? a:b <=> if(x) a; else b;*/
        vet[1 ] = (entrada & 2       )?1:0;      /*   // inline if*/
        vet[2 ] = (entrada & 4       )?1:0;
        vet[3 ] = (entrada & 8       )?1:0;
        vet[4 ] = (entrada & 16      )?1:0;
        vet[5 ] = (entrada & 32      )?1:0;
        vet[6 ] = (entrada & 64      )?1:0;
        vet[7 ] = (entrada & 128     )?1:0;
        vet[8 ] = (entrada & 256     )?1:0;
        vet[9 ] = (entrada & 512     )?1:0;
        vet[10] = (entrada & 1024    )?1:0;
        vet[11] = (entrada & 2048    )?1:0;
        vet[12] = (entrada & 4096    )?1:0;
        vet[13] = (entrada & 8192    )?1:0;
        vet[14] = (entrada & 16384   )?1:0;
        vet[15] = (entrada & 32768   )?1:0;
        vet[16] = (entrada & 65536   )?1:0;
        vet[17] = (entrada & 131072  )?1:0;
        vet[18] = (entrada & 262144  )?1:0;
        vet[19] = (entrada & 524288  )?1:0;
        vet[20] = (entrada & 1048576 )?1:0;
        vet[21] = (entrada & 2097152 )?1:0;
        vet[22] = (entrada & 4194304 )?1:0;
        vet[23] = (entrada & 8388608 )?1:0;
        vet[24] = (entrada & 16777216)?1:0;
        vet[25] = (entrada & 33554432)?1:0;
        printf("  ");
        for(j=0;j<qnt;j++){
            printf("%d ",vet[j]);
        }
        printf("\n");
    }
    getchar();
    return 0;
}

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, devair1010 disse:

@Shiftz     para imprimir apenas as entradas que foram pedidas seria melhor usar um vetor de char com as 26 posições correspondente as 26 letras ,  assim usando um laço de repetição indo de zero até a quantidade de entradas pedidas para imprimir as entradas ,  então seu código pode ser assim  :


#include <stdio.h>
#include <math.h>
#include <iso646.h>
#include <stdlib.h>
int main(void){
    int entrada;
    char vet[26];
    int qnt,j; /*// quantidade de variáveis*/
    printf("Digite a quantidade de entrada para sua tabela\n");
    scanf ("%d", &qnt);
    printf ("%d\n" , qnt);
    printf("  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n");
    /*//                          2^n - quantidade de linhas da tabela*/
    for(entrada = 0; entrada < (pow(2,qnt)); entrada++) {
        vet[0 ] = (entrada & 1       )?1:0;      /*   // x ? a:b <=> if(x) a; else b;*/
        vet[1 ] = (entrada & 2       )?1:0;      /*   // inline if*/
        vet[2 ] = (entrada & 4       )?1:0;
        vet[3 ] = (entrada & 8       )?1:0;
        vet[4 ] = (entrada & 16      )?1:0;
        vet[5 ] = (entrada & 32      )?1:0;
        vet[6 ] = (entrada & 64      )?1:0;
        vet[7 ] = (entrada & 128     )?1:0;
        vet[8 ] = (entrada & 256     )?1:0;
        vet[9 ] = (entrada & 512     )?1:0;
        vet[10] = (entrada & 1024    )?1:0;
        vet[11] = (entrada & 2048    )?1:0;
        vet[12] = (entrada & 4096    )?1:0;
        vet[13] = (entrada & 8192    )?1:0;
        vet[14] = (entrada & 16384   )?1:0;
        vet[15] = (entrada & 32768   )?1:0;
        vet[16] = (entrada & 65536   )?1:0;
        vet[17] = (entrada & 131072  )?1:0;
        vet[18] = (entrada & 262144  )?1:0;
        vet[19] = (entrada & 524288  )?1:0;
        vet[20] = (entrada & 1048576 )?1:0;
        vet[21] = (entrada & 2097152 )?1:0;
        vet[22] = (entrada & 4194304 )?1:0;
        vet[23] = (entrada & 8388608 )?1:0;
        vet[24] = (entrada & 16777216)?1:0;
        vet[25] = (entrada & 33554432)?1:0;
        printf("  ");
        for(j=0;j<qnt;j++){
            printf("%d ",vet[j]);
        }
        printf("\n");
    }
    getchar();
    return 0;
}

 

Era isso mesmo que eu queria, muito obrigado, aproveitando a oportunidade de me aproveitar um pouco hehe teria como fazer o printf imprimir apenas as letras que vão ser usadas, ex: eu peço 3 entradas ele vai imprimir as letras A B C e fazer a tabela, estou aprendendo ainda c++ desculpe a burrice x.x

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Shiftz     para imprimir apenas as letras referentes as entradas , você pode usar um laço de repetição de acordo com o valor de qnt que é a quantidade de entradas  , e imprime os caracteres começando de A maiúsculo até Z maiúsculo , então no lugar dessa linha  :

printf("  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n");

coloque essas aqui  :

printf("  ");
for(j=65;j<qnt+65;j++)
    printf("%c ",j);
printf("\n");

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda :thumbsup: era exatamente o que precisava, agora com isso posso fazer mais algumas coisas que tinha em mente hehe, valeu!

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×