Outils d'utilisateurs

Outils du Site


elnnum:sen:qmc:script

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

elnnum:sen:qmc:script [2010/03/03 22:08]
per créée
elnnum:sen:qmc:script [2010/03/06 23:30] (Version actuelle)
per
Ligne 1: Ligne 1:
-====== Script bash pour qmc et wiki ======+====== Script bash pour qmc , karnaugh et wiki ====== 
 +[[.|retour]] 
 +Le paquet qmc présent sous Debian et Ubuntu doit-être installé 
 + 
 +Ces scripts sont libres. 
 +Vous pouvez les modifier, exécuter , redistribuer   
 ===== wiki_logique.sh =====  ===== wiki_logique.sh ===== 
 +  * Copiez dans un éditeur de texte comme gedit ou vim les lignes de #!/bin/bash à done
 +  * Enregistrez le fichier sous wiki_logique.sh
 +  * Le rendre exécutable, dans un terminal taper après le dollar $ chmod u+x  wiki_logique.sh
 +  * Ce fichier a besoin des fichier wiki_qmc.sh et karnaugh.py, il faut donc les avoir soit dans le même répertoire ou dans votre PATH
 +  * Utilisation : dans un terminal taper après le $ ./wiki_logique.sh
 +Il doit vous créer le fichier "logique_td.txt" que vous pourrez lire avec votre éditeur de texte préféré ou
 +copier le fichier dans une page DokuWiki si l'extension (plugins) math est installé
 +
 +On peut modifier les équations de A à F après la ligne : #voici les 6 équations à résoudre
 +On peut aussi modifier le fichier de destination dans la ligne : fichier="logique_td.txt"
 +
 <code> <code>
 #!/bin/bash #!/bin/bash
Ligne 23: Ligne 40:
 </code> </code>
  
 +===== wiki_qmc.sh =====
 +  * Copiez dans un éditeur de texte comme gedit ou vim les lignes de #!/bin/bash à # le fichier...
 +  * Enregistrez le fichier sous wiki_qmc.sh
 +  * Le rendre exécutable, dans un terminal taper après le dollar $ chmod u+x wiki_qmc.sh
 +  * Placer ce fichier dans $HOME/bin, il se trouvera alors dans votre PATH lire le fichier .bash_profile ou .profile
 +  * Utilisation : dans un terminal taper après le $ wiki_qmc.sh voir la macro "interactive"
 +
 +<code>
 +#!/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é
 +</code>
 +
 +===== karnaugh.py =====
 +Ce fichier écrit en python nécessite puthon qui est installé par défaut sur Debian et Ubuntu
 +  * Copiez dans un éditeur de texte comme gedit ou vim les lignes de #!/usr/bin/python à if len(var) == 3
 +  * Enregistrez le fichier sous karnaugh.py
 +  * Le rendre exécutable, dans un terminal taper après le dollar $ chmod u+x karnaugh.py
 +  * Utilisation  : dans un terminal taper après le $ ./karnaugh.py "équation logique"
 +  * Attention "équation logique" doit respecter la syntaxe de qmc, sinon regarder la [[.|page précédente]] 
 +
 +<code>
 +#!/usr/bin/python
 +# -*- coding:utf-8 -*-
 +#karnaugh.py
 +import commands,os,sys
 +if len(sys.argv) != 2 : sys.exit(1)
 +retour=commands.getoutput("qmc -g -s "+sys.argv[1])
 +#print retour
 +s=retour.splitlines()
 +del s[1] # on enlève la ligne  '+---+---+---+---+---+'
 +resultat = s[-1]
 +del s[-1]
 +lb=[]
 +for ligne in s :
 + l=ligne.split("|")
 + del l[0]
 + del l[-1]
 + lb.append(l)
 +bl=[]
 +for i in range(len(lb[0])) : #i nb de colonnes
 + bl.append([])
 + for j in range(len(lb)): #j nombres de lignes
 + #print i,j,lb[j][i]
 + bl[i].append(lb[j][i])
 +bl.sort(reverse=True)
 +lb=[]
 +for j in range(len(bl[0])): #j nombres de lignes
 + lb.append([])
 + t=len(bl)
 + val=0
 + lb[j].append('')
 + for i in range(len(bl)) : #i nb de colonnes
 + lb[j].append(bl[i][j])
 + if (j !=0) and (i<t-1) : val+=int(bl[i][j])*2**(t-(2+i))
 + lb[j][0]=val
 +la=lb[1:]
 +def croissant(x, y):
 + return x[0] - y[0]
 +la.sort(croissant)
 +var=lb[0][1:]
 +#for elt in la : print elt
 +
 +# Affichage tableau de Karnaugh
 +
 +def tab4(entree,liste):
 + tableau4 = ''' Tableau de Karnaugh 4 variables
 +^ %s  ^^       %s     ^^^^
 +^    ^^<m>overline %s circ overline %s</m>^<m>overline %s circ %s</m>^<m>%s circ %s</m>^<m>%s circ overline %s</m>^
 +^  %s  || 00 | 01 | 11 | 10 |
 +^<m>overline %s circ overline %s</m>| 00  | %s| %s| %s| %s|
 +^<m>overline %s circ %s</m>| 01  | %s| %s| %s| %s|
 +^<m>%s circ %s</m>| 11  | %s| %s| %s| %s|
 +^<m>%s circ overline %s</m>| 10  | %s| %s| %s| %s|'''%(entree[-1][1],entree[2][1]+entree[3][1],
 +entree[2][1],entree[3][1],entree[2][1],entree[3][1],entree[2][1],entree[3][1],entree[2][1],entree[3][1],
 +entree[0][1]+entree[1][1],
 +entree[0][1],entree[1][1],liste[0][-1],liste[1][-1],liste[3][-1],liste[2][-1],
 +entree[0][1],entree[1][1],liste[4][-1],liste[5][-1],liste[7][-1],liste[6][-1], 
 +entree[0][1],entree[1][1],liste[12][-1],liste[13][-1],liste[15][-1],liste[14][-1],
 +entree[0][1],entree[1][1],liste[8][-1],liste[9][-1],liste[11][-1],liste[10][-1])
 + return tableau4
 +
 +def tab3(entree,liste):
 + tableau3 = ''' Tableau de Karnaugh 3 variables
 +^ %s  ^     %s  ^^^^
 +^ %s  | 00 | 01 | 11 | 10 |
 +| 0  | %s| %s| %s| %s|
 +| 1  | %s| %s| %s| %s|'''%(entree[-1][1],entree[1][1]+entree[2][1],entree[0][1],
 +liste[0][-1],liste[1][-1],liste[3][-1],liste[2][-1],liste[4][-1],liste[5][-1],liste[7][-1],liste[6][-1])
 + return tableau3
 +
 +def tab2(entree,liste):
 + tableau2 = ''' Tableau de Karnaugh 2 variables
 +^ %s  ^    %s  ^^
 +^ %s  |  0 |  1 |
 +| 0  | %s| %s|
 +| 1  | %s| %s|'''%(entree[-1][1],entree[1][1],entree[0][1],
 +liste[0][-1],liste[1][-1],liste[2][-1],liste[3][-1])
 + return tableau2
 +
 +if len(var) == 5 : print tab4(var,la)
 +if len(var) == 4 : print tab3(var,la)
 +if len(var) == 3 : print tab2(var,la)
 +</code>
elnnum/sen/qmc/script.1267650488.txt.gz · Dernière modification: 2010/03/03 22:08 par per