Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
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> |