Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 30 Déc 2012, 17:37
Si tu stockes dans le programme les masses molaires de chaque élément c'est possible.
Cependant le programme ne peut pas reconnaître/différencier facilement des éléments dont le symbole utilise deux lettres.
En outre la longueur des termes pose problème si elle est variable.
Il faut fixer des conventions pour que le programme puisse le gérer facilement.
C'est possible de se passer de certaines conventions mais je n'ai pas le courage de monter une usine à gaz sur le tas.
Mon idée :
Saisir des symboles d'éléments à un caractère et leur masse molaire puis la formule.
Fixer une syntaxe de la formule : des virgules et des points pour séparer les couples symbole/indices.
"AA.11,BB.22,CC.33"
Je veux que le nombre de caractères du symbole soit au maximum 2 sans imposer de second caractère. (longueur 1 et longueur 2 sont acceptées mais pas si c'est plus long c'est tronqué)
Je veux que l'indice ai la longueur désirée par l'utilisateur.
Sinon il faudrait fixer un certain nombre de caractères pour chaque symbole et chaque indice.
J'écris le programme de façon à ce que la formule ne soit pas forcément brute. Il pourra y avoir une répétiton d'éléments, mais en aucun cas il ne dois y avoir de parenthèses ni groupements.
Code
Input "COMBIEN D'ELEMEN",N
N->dim(L1
" "->Str1
For(N,1,N // remarque : à ne pas faire dans un autre language
Input "SYMBOLE:",Str2 // symbole, voulu à un ou deux caractères
Input "M:",A // masse molaire
Str1+sub(Str2+" ",1,2->Str1 // contrôle de la longueur
A->L1(N
End
ClrHome
Input "FORMULE:",Str2
","+Str2+",->Str2 // simple mise en forme
1->A
DelVar M
length(Str2 ->L
Repeat A=L
inString(Str2,".",A+1->B // détection des ponctuations
inString(Str2,",",A+1->C
.5inString(Str1,sub(sub(Str2,A+1,B-A-1)+" ",1,2->N // détermine l'élément
M+L1(N)*expr(sub(Str2,B+1,C-B-1->M // somme des masses molaires coefficientées
C->A
End
Disp "MASSE MOLAIRE",M
Un symbole déclaré à 1 caractère est en fait géré comme ce caractère suivi d'un espace.
Un symbole déclaré à plus de deux caractères est tronqué.
Un symbole de longueur suppérieure à 2 dans la formule ne sera pas reconnu même s'il commence par les deux bons caractères.
Un symbole non reconnu dans la formule causera normalement une erreur de dimension.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 02 Jan 2013, 14:17
Dans ce cas il te faudra l'aide du manuel ou d'un catalogue comme celui de ma signature.
Le code que j'ai écrit est en anglais pour les ti82stat et ti83.
Si tu as une ti82 je ne peux pas t'aider, il faudra changer de concept et de programme.
Si tu as une ti82statfr, il faut traduire le code en français (plutôt pseudo-français) avec le catalogue.
Str1 se saisi avec le menu [var]+[7] et se traduit par Chaine1.
Toutes les fonctions (dès la ti82stat) sont dans le catalogue de la calculatrice [2nde]+[0] et les variables sont dans [var].
J'ai modifié mon premier message notamment pour être plus clair concernant la longueur des symboles et des indices.
Je viens de m'apercevoir d'un bug possible : un symbole d'un seul caractère sera confondu avec des symboles de deux caractères commençant par le même caractère. J'ai corrigé le programme à la ligne de détermination des éléments de la formule par rapport à ceux déclarés.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Mer 02 Jan 2013, 16:03
Sinon, en utilisant un menu qui affiche les possibilités après avoir entré les premières lettres.
En gros afficherai tous les atomes/groupements commençant par C si l'on rentre a lettre C donc C, Co, Ca etc. Puis on choisis dans la liste celui qu'on veut.
Sangohan38
Haker Invité
Posté le : Mar 29 Jan 2013, 20:52
As tu fini par trouver comment faire ou pas ? car ça m'interésserai
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 29 Jan 2013, 23:23
Il n'a probablement pas réfléchi au problème depuis son post.
Il proposait d'effectuer les saisies avec des menus prévoyant tous les éléments, avec pour unique saisie manuelle le premier caractère.
Dans ce genre là :
Code
Lbl SS
Input Str3
If Str3="C"
Menu("","CA",CA,"CO",CO,"CL",CL
If Str3="N"
Menu(...
...
Goto SS
Lbl CA
"CA->Str2
Goto 0
Lbl ...
...
Goto 0
...
Lbl 0
Quoi qu'il en soit mon programme fonctionne.
---------------------- 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)