Outils d'utilisateurs

Outils du Site


elnnum:sen:qmc:script

Ceci est une ancienne révision du document ! —-

Script bash pour qmc et wiki

wiki_logique.sh

 
#!/bin/bash 
#les fonctions pour QMC: - simplification tool (by using the Quine - McClusky process) 
# voir le fichier wiki_qmc.sh pour l'explication des equations 
source wiki_qmc.sh 
#TD1  
#voici les 6 équations à résoudre  
A="/b/c/d+a/bcd+/bc/d+abc/d+bd" 
B="ab+/c/d+/a/bc/d+/abc/d" 
C="c(a/d+/ab)+acd(a+/b)" 
D="abc+a/bc+ab/cd" 
E="(a+bc)+/a(/b+/c)(ad+c)" 
F="/a/bc+a/bc+/(a+c)+/bc/d+/(/a+c)" 

fichier="logique_td.txt" 
: >"$fichier" 
for eq in $(echo {A..F}) # eq prend les valeurs de A à F 
do # ${!eq} c'est de l'adressage indirect, eq prend la valeur (du contenu de A à F),ici une des équations 
	ecrire "${!eq}" $eq >>"$fichier" #on aurait pu utiliser eval t=\$$eq 
done 

wiki_qmc.sh

 
#!/bin/bash 
# QMC: - simplification tool (by using the Quine - McClusky process) 
# Pour simplifier des équations logiques avec qmc 
# ce petit script remplace "c(a/d+/ab)+acd(a+/b)" par "c*[a*/d+/a*b]+a*c*d*[a+/b]" 
# il le transforme aussi pour Dokuwiki ou OpenOffice 
equ() 
{ 
    s=$1 # équation à traiter  
    l=${#s} 
    for i in $(seq 0 $((l-1)))  
    do  
	x=${s:$i:1} # caractère par caractère de l'équation s 
	y=${s:$((i+1)):1}; #caractère suivant 
	t=$t$x 
	if [[ "$x" == [a-z] ]] && ! [[ -z $y ]] && ! [[ "$y" == [+*\)] ]] 
	# si le caractère traité est une variable (lettre de a à z) et le caratère suivant  
	# n'est pas le dernier, ni le caractère + ou * ou ) alors on ajoute le caractère *    
	then  
	    t="${t}*" 
	fi 
    done 
    echo $t 
} 
oo() # remplace la barre / par overline entouré d'espace, et * par circ 
{ 
    equ $1 |sed 's!/! overline !g;s/*/ circ /g' 
} 
ecrire() 
{ 
	echo "===== $2 = $1 ====="	 
	echo "**Équation logique ** <m> $2 = $(oo $1) </m>"  
	u=$(equ $1 |tr "()" "[]") 
	echo "commande :qmc -g -s \" $u \""  
	qmc -g -s $u |sed '/+--/d'|sed '$d'  
	#res=$(qmc -g -s $u |sed -n '$p'|cut -d : -f2) 
	echo $res 
	echo " Résultat de la simplification de <m> $2 = $(oo $(qmc -g -s $u |sed -n '$p'|cut -d : -f2)) </m>"  
} 
interactive() 
{ 
	if [ $# -lt 2 ]  
	then echo 'erreur, il faut deux arguments, exemple : eq_qmc.sh "abc+a/bc+ab/cd" eq_wiki.txt ' 
		exit 1 
	else   
		ecrire $1 "S" >$2 
	fi 
} 

[ -n "$PS1" ] && interactive 
# le fichier peut être mis dans Dokuwiki si le plugins math est installé 
elnnum/sen/qmc/script.1267650689.txt.gz · Dernière modification: 2010/03/03 22:11 par per