Apresento-lhes um programa bem básico para cálculo de tabelas-verdade, a partir de uma expressão lógica dada, bastante útil para a parte de Circuitos Lógicos. Segue o código (desenvolvido no Dev-C++):
/*****************************************************
Construtor de tabelas-verdade
http://yzcoding.blogspot.com
25/03/2012
******************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int entrada, saida;
int A, B, C, D; // variáveis de entrada
int n = 4; // quantidade de variáveis
printf("\n (A . ~B . C) + (A . ~D) + (~A . B . D)\n\n");
printf(" A B C D | S\n ---------+---\n");
// 2^n - quantidade de linhas da tabela
for(entrada = 0; entrada < (pow(2, n)); entrada++) {
A = (entrada & 8)?1:0; // x ? a:b <=> if(x) a; else b;
B = (entrada & 4)?1:0; // inline if
C = (entrada & 2)?1:0;
D = (entrada & 1)?1:0;
saida = (A & !B & C) | (A & !D) | (!A & B & D); // expressão
printf(" %d %d %d %d | %d\n", A, B, C, D, saida); // saída
}
getchar();
return 0;
} // main end
Este código foi feito, inicialmente, para 4 variáveis de entrada (A, B, C e D). A parte mais importante está na variável saida, onde temos a expressão a ser calculada. "&" corresponde à operação AND (e), "|" corresponde à OR (ou), e "!A" representa o complemento de A. Assim, basta reescrever sua operação lógica utilizando esses operadores, e rodar o programa.
Segue um screenshot desse código compilado:
Para aumentar ou diminuir o número de variáveis, faz-se necessário mudar várias partes do programa. Para evitar isso, estou trabalhando numa solução. Já tentei pensar numa solução para isso, mas nada tão simples, ou prático.
Portanto, para aumentar ou diminuir o número de variáveis, alteram-se as seguintes partes:
- Declaração de variáveis;
- Atribuição dos valores para entrada, dentro do for; no caso, adicionar ou remover uma das atribuições, sempre começando da primeira (A) (exemplo abaixo);
- Exibições em geral (printf)
Por exemplo, caso sejam 5 variáveis, ficaria assim (partes principais):
A = (entrada & 16)?1:0;
B = (entrada & 8)?1:0;
C = (entrada & 4)?1:0;
D = (entrada & 2)?1:0;
E = (entrada & 1)?1:0;
...
printf(" %d %d %d %d %d | %d\n", A, B, C, D, E, saida); // saída
Bem, é isso. Qualquer dúvida, é só postar nos comentários. Até mais!
Muito Obrigado esse comando "?1:0" me ajudou muito
ResponderExcluirVLW!!!
Olá de novo tenho uma duvida sim!
ResponderExcluirPara fazer isso inserindo em uma matriz
não consigo estipular a dimensão da matriz (qualquer que seja o tamanho)e inserir somente na coluna 0 ou 1 ou 2 ...
Só funcionou se colocar a dimensão da matriz na declaração por exemplo tab[4][2] para duas variaveis.
segue o código abaixo:
#include
#include
#include
#include
int main(){
setlocale(LC_ALL,"Portuguese");
int tab[4][2],i=0,j=0;
for(i=0;i<4;i++){
for(j=0;j<2;j++){
tab[i][0]=(i&2)?1:0;
tab[i][1]=(i&1)?1:0;
}
}
printf("\n");
for(i=0;i<4;i++){
printf("\t");
for(j=0;j<2;j++){
printf("%d\t",tab[i][j]);
}
printf("\n\n");
}
getchar();
getchar();
return 0;
}
O código que tá dando problema é esse abaixo:
#include
#include
#include
#include
int main(){
setlocale(LC_ALL,"Portuguese");
int pos=0,var=0,i=0,j=0,tab[pos][var]; //numero de variaveis e possibilidades//
printf("Informe o número de variáveis:\n");
scanf("%d%*C",&var);
pos=pow(2,var);
printf("%d||%d\n\n",var,pos);
for(i=0;i<pos;i++){
for(j=0;j<var;j++){
tab[i][0]=(i&2)?1:0;
tab[i][1]=(i&1)?1:0;
}
}
printf("\n"); //imprimindo matriz//
for(i=0;i<pos;i++){
printf("\t");
for(j=0;j<var;j++){
printf("%d\t",tab[i][j]);
}
printf("\n\n");
}
getchar();
getchar();
return 0;
}
Vê se possível colocar a tabela verdade em uma matriz de dimensão variável?
Desde já Obrigado!!!