Dificuldades com a automatização da tabela da verdade [RESOLVIDO]

1. Dificuldades com a automatização da tabela da verdade [RESOLVIDO]

Amanda Silva Bueno Menezes
mandyy

(usa Manjaro Linux)

Enviado em 15/05/2020 - 02:04h

Bom, eu estou aprendendo Shell Script e estudando tabela da verdade em filosofia, então pensei "por que não juntar a lógica da tabela da verdade com a lógica do Shell Script?" E eu tentei, mas estou tendo dificuldades

#!/bin/bash

echo "Script para automatização da tabela da verdade"

echo "Digite o valor de p:"
read p

echo "Digite o valor de q:"
read q

if [[ ! $p =~ ^[VvFf]$ ]] && [[ ! $q =~ ^[VvFf]$ ]];then
echo "Erro: valor inválido. Digite apenas 'v' ou 'f'"
exit 1
fi

valores () {
echo "Negação de p: $negacao_p"
echo "Negação de q: $negacao_q"
echo "Conjunção de p e q: $p_e_q"
echo "Disjunção de p e q: $p_ou_q"
echo "Condicional de p e q: $se_p_entao_q"
echo "Bi-condicional de p e q: $p_se_e_somente_se_q"
}

if p=^[Vv]$ && q=[Vv]$; then
negacao_p=F && negacao_q=F && p_e_q=V && p_ou_q=V && se_p_entao_q=V && p_se_e_somente_se_q=V
elif p=^[Vv]$ && q=^[Ff]$; then
negacao_p=F && negacao_q=V && p_e_q=F && p_ou_q=V && se_p_entao_q=F && p_se_e_somente_se_q=F
elif p=^[Ff]$ && q=[Vv]$; then
negacao_p=V && negacao_q=F && p_e_q=F && p_ou_q=V && se_p_entao_q=V && p_se_e_somente_se_q=F
elif p=^[Ff]$ && q=^[Ff]$; then
negacao_p=V && negacao_q=V && p_e_q=F && p_ou_q=F && se_p_entao_q=V && p_se_e_somente_se_q=V
fi
valores

Eu quero que o script pegue a combinação que o usuário digitar, mais precisamente V V, V F, F V e F F e com base nisso coloque V ou F em variáveis, que são chamadas pelo echo, o problema é que ele n tá conseguindo analisar o que o usuário digitou e dar um resultado com base nisso. Como eu comecei a aprender ainda essa semana Shell Script, n faço ideia de como fazer esse trem funcionar


  


2. Re: Dificuldades com a automatização da tabela da verdade [RESOLVIDO]

Ruan
ru4n

(usa Debian)

Enviado em 15/05/2020 - 08:53h

Esses ifs estão todos incorretos:
if p=^[Vv]$ && q=[Vv]$; then
negacao_p=F && negacao_q=F && p_e_q=V && p_ou_q=V && se_p_entao_q=V && p_se_e_somente_se_q=V
elif p=^[Vv]$ && q=^[Ff]$; then
negacao_p=F && negacao_q=V && p_e_q=F && p_ou_q=V && se_p_entao_q=F && p_se_e_somente_se_q=F
elif p=^[Ff]$ && q=[Vv]$; then
negacao_p=V && negacao_q=F && p_e_q=F && p_ou_q=V && se_p_entao_q=V && p_se_e_somente_se_q=F
elif p=^[Ff]$ && q=^[Ff]$; then


Veja como vc fez no primeiro if e corrija esses.

Não precisa usar and (&&) para declarar mais de uma variável. Pode colocar uma embaixo da outra...


3. Re: Dificuldades com a automatização da tabela da verdade [RESOLVIDO]

João Cláudio de Alcântara
aguamole

(usa Lubuntu)

Enviado em 15/05/2020 - 16:36h

Na linha 11
if [[ ! $p =~ ^[VvFf]$ ]] && [[ ! $q =~ ^[VvFf]$ ]];then 
falta um espaço entre ";" e o "then"

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


4. Re: Dificuldades com a automatização da tabela da verdade [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 15/05/2020 - 20:08h


mandyy escreveu:

Bom, eu estou aprendendo Shell Script e estudando tabela da verdade em filosofia, então pensei "por que não juntar a lógica da tabela da verdade com a lógica do Shell Script?" E eu tentei, mas estou tendo dificuldades

#!/bin/bash

echo "Script para automatização da tabela da verdade"

echo "Digite o valor de p:"
read p

echo "Digite o valor de q:"
read q

if [[ ! $p =~ ^[VvFf]$ ]] && [[ ! $q =~ ^[VvFf]$ ]];then
echo "Erro: valor inválido. Digite apenas 'v' ou 'f'"
exit 1
fi

valores () {
echo "Negação de p: $negacao_p"
echo "Negação de q: $negacao_q"
echo "Conjunção de p e q: $p_e_q"
echo "Disjunção de p e q: $p_ou_q"
echo "Condicional de p e q: $se_p_entao_q"
echo "Bi-condicional de p e q: $p_se_e_somente_se_q"
}

if p=^[Vv]$ && q=[Vv]$; then
negacao_p=F && negacao_q=F && p_e_q=V && p_ou_q=V && se_p_entao_q=V && p_se_e_somente_se_q=V
elif p=^[Vv]$ && q=^[Ff]$; then
negacao_p=F && negacao_q=V && p_e_q=F && p_ou_q=V && se_p_entao_q=F && p_se_e_somente_se_q=F
elif p=^[Ff]$ && q=[Vv]$; then
negacao_p=V && negacao_q=F && p_e_q=F && p_ou_q=V && se_p_entao_q=V && p_se_e_somente_se_q=F
elif p=^[Ff]$ && q=^[Ff]$; then
negacao_p=V && negacao_q=V && p_e_q=F && p_ou_q=F && se_p_entao_q=V && p_se_e_somente_se_q=V
fi
valores

Eu quero que o script pegue a combinação que o usuário digitar, mais precisamente V V, V F, F V e F F e com base nisso coloque V ou F em variáveis, que são chamadas pelo echo, o problema é que ele n tá conseguindo analisar o que o usuário digitou e dar um resultado com base nisso. Como eu comecei a aprender ainda essa semana Shell Script, n faço ideia de como fazer esse trem funcionar

Boa noite mandyy.
Veja que converti a "Resposta do Usuário", para maiúscula....
E "Juntei" p e q, na var "RESP", mais prático para avaliar.....
Usei o case, mas, nada impede que utilize o "if"
Segue:
#!/bin/bash
clear;

pergunta(){
read -n1 -p "Digite o valor de $1: "
[[ ! "$REPLY" =~ ^[VvFf]$ ]] && { echo;pergunta "$1";} || RESP+=${REPLY^}
}

echo -e "\nScript para automatização da tabela da verdade\n"
pergunta "p";
echo "";
pergunta "q";

case $RESP in
VV) Neg_P=F;Neg_Q=F;p_e_q=V;p_ou_q=V;spentq=V;psessq=V;;
VF) Neg_P=F;Neg_Q=V;p_e_q=F;p_ou_q=V;spentq=F;psessq=F;;
FV) Neg_P=V;Neg_Q=F;p_e_q=F;p_ou_q=V;spentq=V;psessq=F;;
FF) Neg_P=V;Neg_Q=V;p_e_q=F;p_ou_q=F;spentq=V;psessq=V;;
esac
echo -e "\n\nResp:[$RESP]\nNegação p: $Neg_P\nNegação q: $Neg_Q\nConjunção p e q: $p_e_q\nDisjunção p e q: $p_ou_q\nCondicional p e q: $spentq\nBi-condicional p e q: $psessq"



______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


5. Re: Dificuldades com a automatização da tabela da verdade [RESOLVIDO]

Amanda Silva Bueno Menezes
mandyy

(usa Manjaro Linux)

Enviado em 15/05/2020 - 22:06h

Já consegui fazer a tabela funcionar gente, obrigada a todos os envolvidos