Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

Editado por Shiftz
  • 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






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

×