Autorisation : Membre
Nb de messages : 6
Inscrit le : Mer 03 Juil 2013, 17:30
Posté le : Sam 17 Mai 2014, 10:29
Bonjour,
Je poste ma nouvelle merveille.
C'est un programme qui calcule la table de vérité associée à une équation logique.
On entre l'équation logique, ensuite on entre les variables, et on attend... parce qu'à partir de 4 variables, il faut attendre longtemps (>30 sec)
'fin bref, vous verrez par vous même. La table de vérité est stockée dans la matrice [A], et comme l'affichage de la matrice dans le programme ne permet pas de la faire défiler, il faudra surement rappeler la matrice une fois le programme effectué.
ps: j'aurais bien mis le nom des variables sur la première ligne du tableau pour plus de visibilité, mais c'est malheureusement impossible... dommage.
Il est surement possible de détecter les variables directement dans l'équation au lieu de les entrer à la mais, mais j'ai eu la flemme de le coder et de tt façon, c'est pas génant.
Postez vos impressions !
voila le code :
Code
EffEcr
Disp "EQUATION:
Input "S=",Chaîne1
Disp "","NB DE VARIABLES:
Input "",N
" "->Chaîne2
Disp ""
For(X,1,N
Input "VAR:",Chaîne0
Chaîne2+Chaîne0->Chaîne2
End
sous-Chaîne(Chaîne2,2,N)->Chaîne2
2^N->L
N+1->C
EffVar [A]
{L,C}->dim([A]
EffEcr
Output(3,3,"VEUILLEZ
Output(5,5,"PATIENTER...
For(X,1,L
X-1->X
"0"->Chaîne0
1->Q
While Q!=0
partEnt(N/2)->Q
N-2*Q->R
sous-Chaîne("01",R+1,1)+Chaîne0->Chaîne0
Q->N
End
sous-Chaîne(Chaîne0,1,longueur(Chaîne0)-1)->Chaîne0
longueur(Chaîne0)->M
If M<C
Then
For(H,M,C-2
"0"+Chaîne0->Chaîne0
End
End
For(Y,1,C-1
expr(sous-Chaîne(Chaîne0,Y,1))->[A](X,Y)
End
End
"("+Chaîne1+")"->Chaîne1
For(X,1,L
Chaîne1->Chaîne5
For(Y,1,C-1
While carChaîne(Chaîne5,sous-Chaîne(Chaîne2,Y,1))!=0
carChaîne(Chaîne5,sousChaîne(Chaîne2,Y,1))->R
sous-Chaîne(Chaîne5,1,R-1)+sous-Chaîne("01",([A](X,Y)=1)+1,1)+sous-Chaîne(Chaîne5,R+1,longueur(Chaîne5)-R)->Chaîne5
End
End
expr(Chaîne5)->[A](X,C)
End
EffEcr
Disp [A]
Output(1,1,Chaîne1
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Sam 17 Mai 2014, 23:37
Par contre à la dernière ligne tu as du oublier d'ouvrir un guillemet (on comprend normalement mais pour ceux qui ne s'y connaissent pas on risque d'avoir des questions "pourquoi err:syntaxe") :
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 18 Mai 2014, 1:03
Intéressant.
Je ne sais pas par qule bout prendre ton algorithme. J'apprécierais des commentaires.
Sache que le dernier calcul d'un programme est renvoyé comme résultat de calcul à l'écran principal, et donc une Pause est facultative puisque l'écran principal permet alors de défiler. Je te propose de simplement placer la matrice sur la dernière ligne.
Je me demande si générer les entrées du tableau est vraiment important pour le code naturel. Par contre j'envisage de permettre le code Gray ("binaire réfléchi").
Dans certains cas tu peux stocker l'expression dans une variable d'équation et te passer de expr().
J'ai mes propres idées à appliquer à ce problème. Je posterai ça ailleurs.
Je veux gérer les variables une par une avec de la récursivité ou un équivalent.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Il est bien plus performant car il ne repose pas sur les substitutions de la chaîne de caractères pour les valeurs binaires : il remplace les variables puis les calculs sont réalisés par application numérique.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)