JE PRECISE QUE LE PROGRAMME N'EST PAS TOUT A FAIT AU POINT !
Toute manipulation en Physique (Mécanique, Optique, Chimie, Electronique, Electricité,...), se basant sur des expérimentations, engendre des imprécisions sur la mesure effectuée. En conséquence, il est nécessaire de calculer cette incertitude de mesure due à la précision des appareils, de la manipulation
Pour se faire, nous nous basons sur une formule générale de calcul dincertitude. Sur une formule du type :
On applique la formule suivante afin de déterminer lincertitude sur la valeur souhaitée :
Ainsi le programme que nous allons effectuer sera censé effectuer ce calcul automatiquement. Il suffira dentrer les valeurs de chaque terme ainsi que les incertitudes sur chacun de ces termes pour que le logiciel calcule lincertitude composée et lincertitude élargie (incertitude composée multipliée par 2) selon la loi rectangulaire (chaque précision doit être divisée par racine de 3). Ainsi on a 95 % de chance que la valeur théorique se situe dans lincertitude calculée.
Nous restreindrons les possibilités de calcul du programme à un quotient simple où toutes les variables seront successivement dérivées. Ainsi après la saisie du nombre de termes du numérateur et du dénominateur, il ne restera plus quà saisir les valeurs numériques de chaque grandeur suivie des incertitudes absolues.
Ce programme aura une utilité toute particulière dans les dosages pHmétriques où lon utilise souvent une formule se présentant sous la forme dun quotient.
Appliquée à un quotient, la formule générale se simplifie quelque peu, elle devient :
Le programme se compose de :
- 9 textbox dont 6 pour lentrée des données et un pour laffichage
- 10 labels pour la plupart statiques mais dont 2 servent à afficher le numéro du terme
- 3 commandeboutons : Recommencer, Calculer, Quitter
Le plus important dans la réalisation de ce programme est la création dun tableau qui nous permettra de stocker toutes les données rentrées par lutilisateur. Pour cela nous commencerons par créer un tableau à 18 lignes et 2 colonnes qui va limiter le nombre de numérateurs à 9 et le nombre de dénominateurs à 9. En effet, nous stockons les grandeurs en première colonne et les incertitudes sur ces grandeurs en deuxième colonne en face de leur grandeur respective. Cependant, si lutilisateur entre 9 termes au numérateur et 9 au dénominateur, les 9 termes du numérateurs seront stockés dans les 9 premières lignes du tableaux tandis que les 9 termes du dénominateur seront stockés de la ligne 10 à la ligne 18. Ainsi quoiquil en soit, il nous reste la colonne 0 et la ligne 0 intégralement vides. Puis en manipulant les données dans le tableau (colonne 0) à laide dune procédure Calcul qui effectuera le calcul précédent, nous obtiendrons le résultat dans une fenêtre de texte.
Des tests seront effectués tout au long de lentrée des données afin de sassurer de labsence d'erreur susceptible de planter le programme. Seul le bouton Recommencer ne fonctionne pas correctement, je suppose que le tableau ne se met pas véritablement à 0, les résultats étant sans cesse différents lorsque lon utilise le bouton Recommencer.
Source / Exemple :
Option Explicit
'Création d'un tableau afin d'y placer les valeurs
'des grandeurs et des incertitudes'
'Ouverture de toutes les variables necessaire au stockage et au calcul'
Dim singleatab(18, 2)
Dim ligne, colonne, NBNU, NBDE, CUMUL, I, W As Integer
Dim TOT, RESULT As Single
'Bouton Quitter'
Private Sub cmdQuitter_Click()
End
End Sub
'Bouton Recommencer : Remise à 0 de toutes les fenêtres.
'En cas d'erreur dans l'entrée des données, les fenêtres
'doivent redevenir blanches'
'Remise à 0 du tableau : retour à la ligne 0 du tableau'
'Placement du curseur dans la case nombre de termes au numérateur'
Private Sub cmdRecommencer_click()
txtNbtermesNu = ""
txtNbtermesDe = ""
txtResultat = ""
txtGrandeurNu = ""
txtGrandeurDe = ""
txtIncertitudeNu = ""
txtIncertitudeDe = ""
lblTermesNu = ""
lblTermesDe = ""
txtNbtermesNu.BackColor = &H80000005
txtNbtermesDe.BackColor = &H80000005
txtGrandeurNu.BackColor = &H80000005
txtGrandeurDe.BackColor = &H80000005
txtIncertitudeNu.BackColor = &H80000005
txtIncertitudeDe.BackColor = &H80000005
ligne = 0
txtNbtermesNu.SetFocus
End Sub
'Case Nombre de termes au numérateur :'
Private Sub txtnbtermesNu_keypress(keyascii As Integer)
Select Case keyascii
Case 13
'Réalisation d'un test de remplissage de la case afin d'éviter tout bug'
'Si le test est négatif (case vide), la case devient grise et la case
'réservée au résultat affiche "Entrer Chiffre"
'le programme attend l'entrée d'un terme pour continuer'
If txtNbtermesNu.Text = "" Then
txtNbtermesNu.SetFocus
txtNbtermesNu.BackColor = &H80000000
txtResultat.Text = "ENTRER CHIFFRE !"
'Si test positif (entrée d'un terme) et que la touche entrée est pressée,
'le curseur passe a la case Nombre de termes au dénominateur'
Else
NBNU = Val(txtNbtermesNu.Text)
txtNbtermesDe.SetFocus
txtNbtermesNu.BackColor = &H80000005
txtResultat.Text = ""
End If
'Les caractères autorisés dans cette case sont la touche d'effacement,
'les chiffres et la virgule'
Case 8, 49 To 57
Case Else
Beep
keyascii = 0
End Select
End Sub
'Case Nombre de termes au dénominateur :'
Private Sub txtnbtermesDe_keypress(keyascii As Integer)
Select Case keyascii
Case 13
'meme test que précédement'
If txtNbtermesDe.Text = "" Then
txtNbtermesDe.SetFocus
txtNbtermesDe.BackColor = &H80000000
txtResultat.Text = "ENTRER CHIFFRE !"
'Si test positif, une case affiche "terme1" en face des cases
'Grandeur et Incertitude pour le numérateur, indiquant ainsi
'qu'il faut entrer les grandeurs et incertitudes du terme 1'
Else
NBDE = Val(txtNbtermesDe.Text)
CUMUL = NBNU + NBDE
txtGrandeurNu.SetFocus
txtNbtermesDe.BackColor = &H80000005
lblTermesNu.Caption = "Terme 1"
txtResultat.Text = ""
End If
Case 8, 49 To 57
Case Else
Beep
keyascii = 0
End Select
End Sub
'Case Grandeur du numérateur'
Public Sub txtGrandeurNu_keypress(keyascii As Integer)
Select Case keyascii
Case 13
'même test que précédement'
If txtGrandeurNu.Text = "" Then
txtGrandeurNu.SetFocus
txtGrandeurNu.BackColor = &H80000000
txtResultat.Text = "ENTRER CHIFFRE !"
'Envoie du curseur à la case Incertitudes du numérateur'
Else
txtIncertitudeNu.SetFocus
txtGrandeurNu.BackColor = &H80000005
txtResultat.Text = ""
End If
Case 8, 46, 48 To 57
Case Else
Beep
keyascii = 0
End Select
End Sub
'Case incertitudes du numérateur'
Public Sub txtIncertitudeNu_keypress(keyascii As Integer)
Select Case keyascii
Case 13
'même test que précédement'
If txtIncertitudeNu.Text = "" Then
txtIncertitudeNu.SetFocus
txtIncertitudeNu.BackColor = &H80000000
txtResultat.Text = "ENTRER CHIFFRE !"
'si test positif, appel de la procédure stocke1 qui a pour but de
'savoir si l'on doit continuer à rentrer des termes au numérateur
'ou si l'on doit passer à la saisie des termes du dénominateur'
Else
Stocke1
txtIncertitudeNu.BackColor = &H80000005
txtResultat.Text = ""
End If
Case 8, 46, 48 To 57
Case Else
Beep
keyascii = 0
End Select
End Sub
'Case Grandeur du dénominateur'
Private Sub txtGrandeurDe_keypress(keyascii As Integer)
Select Case keyascii
Case 13
'même test que précédement'
If txtGrandeurDe.Text = "" Then
txtGrandeurDe.SetFocus
txtGrandeurDe.BackColor = &H80000000
txtResultat.Text = "ENTRER CHIFFRE !"
Else
txtIncertitudeDe.SetFocus
txtGrandeurDe.BackColor = &H80000005
txtResultat.Text = ""
End If
Case 8, 46, 48 To 57
Case Else
Beep
keyascii = 0
End Select
End Sub
'Case Incertitude du dénominateur'
Private Sub txtIncertitudeDe_keypress(keyascii As Integer)
Select Case keyascii
Case 13
'même test que précédemment
If txtIncertitudeDe.Text = "" Then
txtIncertitudeDe.SetFocus
txtIncertitudeDe.BackColor = &H80000000
txtResultat.Text = "ENTRER CHIFFRE !"
'Si test positif, appel de la procédure stocke2 qui a les mêmes
'fonctions que stocke1 mais pour le dénominateur'
Else
Stocke2
txtIncertitudeDe.BackColor = &H80000005
End If
Case 8, 46, 48 To 57
Case Else
Beep
keyascii = 0
End Select
End Sub
'Procédure stocke1 : numérateur'
'stockage des valeurs des grandeurs dans la colonne 1 du tableau
'avec passage à la ligne suivante pour chaque grandeur'
'En colonne 2 du tableau on place les incertitudes correspondants
'aux grandeurs à la même ligne que celles-ci'
Public Sub Stocke1()
ligne = ligne + 1
singleatab(ligne, 1) = Val(txtGrandeurNu.Text)
singleatab(ligne, 2) = Val(txtIncertitudeNu.Text)
'Test : Si toutes les données du numérateur sont entrées,
'on passe au dénominateur( procédure stocke2)'
If ligne = NBNU Then
lblTermesDe.Caption = "Terme 1"
txtGrandeurDe.SetFocus
End If
'Sinon, Entrée de toutes les valeurs et de leurs incertitudes
'correspondant au numérateur'
If ligne < NBNU Then
txtGrandeurNu.Text = ""
txtIncertitudeNu.Text = ""
txtGrandeurNu.SetFocus
lblTermesNu.Caption = "Terme " & ligne + 1
End If
End Sub
'Procédure stocke2 : dénominateur'
'stockage des grandeurs en colonne1 mais à la suite de stocke1 c'est à dire
'à la suite des valeurs du numérateur'
'De meme nous stockons les incertitudes correspondantes en colonne2'
Public Sub Stocke2()
ligne = ligne + 1
singleatab(ligne, 1) = Val(txtGrandeurDe.Text)
singleatab(ligne, 2) = Val(txtIncertitudeDe.Text)
'Test : Lancement de la procédure de Calcul si toutes les données du dénominateur
'sont entrées dans le tableau'
If ligne = CUMUL Then
Calcul
End If
'Sinon, entrée de toutes les valeurs et de leurs incertitudes
'correspondant au dénominateur'
If ligne < CUMUL Then
txtGrandeurDe.Text = ""
txtIncertitudeDe.Text = ""
lblTermesDe.Caption = "Terme " & ligne - NBNU + 1
txtGrandeurDe.SetFocus
End If
End Sub
'TOUTES LES DONNES SONT STOCKEES DANS LE TABLEAU : IL NE RESTE PLUS QU'A
'LES MANIPULER POUR OBTENIR L'INCERTITUDE COMPOSEE SYSTEMATIQUE'
'Procédure de Calcul (voir détail sur la présentation jointe)'
Public Sub Calcul()
TOT = 1
'numérateur : dérivés partielles avec ligne = variable'
For I = 1 To NBNU
TOT = TOT * singleatab(I, 1)
Next
'dénominateur : dérivés partielles avec ligne = variable'
W = NBNU + 1
For I = W To CUMUL
TOT = TOT / singleatab(I, 1)
Next
TOT = (TOT ^ 2) / 3
'Calcul finale : prise en compte des incertitudes absolues sur chaque terme'
For I = 1 To CUMUL
singleatab(I, 0) = TOT * (singleatab(I, 2) ^ 2) / (singleatab(I, 1) ^ 2)
RESULT = RESULT + singleatab(I, 0)
Next
'Affichage du résultat dans la case txtresultat + présentattion'
RESULT = Sqr(RESULT)
txtResultat.Text = "INCERTITUDE" & vbCrLf & "Composée : " & vbCrLf & "uc = " _
& RESULT & vbCrLf & " soit uc = " & Format(RESULT, "0.00") & vbCrLf & "Elargie :" _
& vbCrLf & "Uc = " & RESULT * 2 & vbCrLf & " soit Uc = " & Format(RESULT * 2, "0.00")
End Sub
'Bouton de commande Calculer : même fonction que la touche Entrée en fin de saisie'
Private Sub cmdCalculer_Click()
txtResultat.Text = RESULT
End Sub
Conclusion :
Ci-joint le fichier-source du programme (fichier visual basic). Ecrivez-moi en cas de problème !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.