petite rétrospective : tu as eu à la fois :
-variable N au lieu de Z
-tolérance inadaptée
-mes erreurs dans les formules de tolérance
-la valeur Z inadaptée
Maintenant je sais pourquoi mes test du programme complet fonctionnaient et pas les tiens : je ne saisissais pas avec les Input A,B,C ... c'est de ma faute.
Toutefois j'avais signalé le problème de la saisie
au tout début, et l'absence de réponse à ce propos, l'a faite tomber dans l'oubli.
============
Quant à la tolérance à choisir, je signale que dans certaines situations la tolérance sera trop grande devant les données, dans d'autres elle sera trop petite.
Il n'existe pas de valeur miracle de tolérance.
Si la longueur d'onde est un résultat de calcul, et que tu veux l'inclure dans le programme, tu as intérêt à stocker le résultat dans une variable directement, et saisir son nom dans l'input "LAMDA(NM):" lors de l'exécution de programme.
Et si tu as calculé la longueur d'onde avec l'émission dans le programme, tu peux simplement saisir "L" dans le champ Lamda de l'absorption.
Ce sont les chiffres significatifs qui comptent, pas le nombre de décimales, donc tu n'as pas forcément besoin de saisir tout ce que tu vois.
- incertitudes et abandon de l'automate:
Pour que le système fonctionne, il faudrait trouver un ensemble acceptable entre :
-les différentes valeurs de niveau d'énergie
-la tolérance
-l'incertitude des données du calcul // le plus énervant
-l'incertitude de la saisie
-la capacité de la calculatrice
-???
Traiter précisément l'ensemble n'est pas aisé.
Je pense qu'il serait plus sage d'afficher les paires et les sauts d'énergie avec
une tolérance très grande, et laisser l'utilisateur juger de la marge d'erreur lui-même dans les cas mitigieux.
Ainsi le programme remplira les calculs laborieux de soustraction, et la validité de l'absorption sera jugée par l'utilisateur.Cela peut se faire avec :
- Code:
Input L
1241.5285520433/L->E
Disp E
For(B,1,Z-1
For(C,B+1,Z
If 0.1>abs(1-E/abs(L1(C)-L1(B)))
Then
Disp L1(C)-L1(B)
Pause {B-1,C-1}
End
End
End
=================
Je poste des corrections complètes (ou je l'espère), et en adaptant Z lors de la saisie plutôt que dans la boucle de recherche.
Il manque quelques cas mais je fais confiance à ceux qui pourraient le lire, ils recouperont les cas pour adapter chaque morceau.
début : variables VS liste
début et fin : Z est SOIT le nombre d'états, SOIT l'indice maximal
fin : automatique VS comparaison manuelle
- variables, nombre_etats, auto:
// saisie variables (influe sur le début)
// Z est le nombre d'états (influe sur tout le début, et les Z à la fin)
// la fin automatique
EffEcr
Input "NB ETATS:",Z
If Z<8
Then
Input "ETAT 0:",A
If Z>=2
Input "ETAT 1:",B
If Z>=3
Input "ETAT 2:",C
If Z>=4
Input "ETAT 3:",D
If Z>=5
Input "ETAT 4:",E
If Z>=6
Input "ETAT 5:",F
If Z>=7
Input "ETAT 6:",G
Else
Disp "TROP !"
Stop
End
{A,B,C,D,E,F,G->L1
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->E
1241.5285520433/E->L
Disp "E(eV)=",E
Disp "LAMBDA(NM)=",L
Pause
Goto M
Lbl B
Input"LAMBDA(NM)=",L
1241.5285520433/L->E
Disp E
For(B,1,Z-1
For(C,B+1,Z
If 0.01>abs(1-E/abs(L1(C)-L1(B)))
Pause {B-1,C-1
End
End
Pause "FIN
Goto M
- variables, indice_max, auto:
// saisie variables (influe sur le début)
// Z est le maximum d'indice (influe sur tout le début, et les Z à la fin)
// la fin automatique
EffEcr
Input "ETATS DE 0 A:",Z
If Z<6
Then
Input "ETAT 0:",A
If Z>=1
Input "ETAT 1:",B
If Z>=2
Input "ETAT 2:",C
If Z>=3
Input "ETAT 3:",D
If Z>=4
Input "ETAT 4:",E
If Z>=5
Input "ETAT 5:",F
If Z>=6
Input "ETAT 6:",G
Else
Disp "TROP !"
Stop
End
{A,B,C,D,E,F,G->L1
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->E
1241.5285520433/E->L
Disp "E(eV)=",E
Disp "LAMBDA(NM)=",L
Pause
Goto M
Lbl B
Input"LAMBDA(NM)=",L
1241.5285520433/L->E
Disp E
For(B,1,Z
For(C,B+1,Z+1
If 0.01>abs(1-E/abs(L1(C)-L1(B)))
Pause {B-1,C-1
End
End
Pause "FIN
Goto M
- liste, nombre_etats, auto:
// saisie liste (influe sur le début)
// Z est le nombre d'états (influe sur le début, et les Z à la fin)
// la fin automatique
EffEcr
Input "NB ETATS:",Z
EffEcr
For(A,1,Z
// Output(1,14,A-1 \\ soit vous écrivez ça, soit vous remplacez TOUT avec le tout premier message de m@thieu41
Input "ETAT:",X \\
X->L1(A
End
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->E
1241.5285520433/E->L
Disp "E(eV)=",E
Disp "LAMBDA(NM)=",L
Pause
Goto M
Lbl B
Input"LAMBDA(NM)=",L
1241.5285520433/L->E
Disp E
For(B,1,Z-1
For(C,B+1,Z
If 0.01>abs(1-E/abs(L1(C)-L1(B)))
Pause {B-1,C-1
End
End
Pause "FIN
Goto M
- liste, indice_max, auto:
// saisie liste (influe sur le début)
// Z est le nombre d'états (influe sur le début, et les Z à la fin)
// la fin automatique
EffEcr
Input "ETATS 0 A",Z
EffEcr
For(A,1,Z+1
// Output(1,14,A-1 \\ soit vous écrivez ça, soit vous remplacez TOUT CECI avec le tout premier message de m@thieu41
Input "ETAT:",X \\
X->L1(A
End
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->E
1241.5285520433/E->L
Disp "E(eV)=",E
Disp "LAMBDA(NM)=",L
Pause
Goto M
Lbl B
Input"LAMBDA(NM)=",L
1241.5285520433/L->E
Disp E
For(B,1,Z
For(C,B+1,Z+1
If 0.01>abs(1-E/abs(L1(C)-L1(B)))
Pause {B-1,C-1
End
End
Pause "FIN
Goto M
- liste, nombre_etat, manuel:
// saisie liste (influe sur le début)
// Z est le nombre d'états (influe sur le début, et les Z à la fin)
\\ la fin est manuelle (l'utilisateur compare lui-même l'énergie des sauts à celle du photon), mais elle scrute tous les calculs
EffEcr
Input "NB ETATS:",Z
EffEcr
For(A,1,Z
// Output(1,14,A-1 \\ soit vous écrivez ça, soit vous remplacez TOUT avec le tout premier message de m@thieu41
Input "ETAT:",X \\
X->L1(A
End
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->E
1241.5285520433/E->L
Disp "E(eV)=",E
Disp "LAMBDA(NM)=",L
Pause
Goto M
Lbl B
Input"LAMBDA(NM)=",L
1241.5285520433/L->E
Disp E
For(B,1,Z-1
For(C,B+1,Z
Output(2,1,{B-1,C-1
Pause L1(C)-L1(B)
End
End
Pause "FIN
Goto M