Vous êtes sur la page 1sur 12

École de technologie supérieure Auteur : Francis Bourdeau

INF-130 Travail pratique #1

Travail en équipe de 2
Amélioration d'un électrocardiogramme

1 Objectifs
- Se familiariser avec le langage Visual Basic for Application (VBA).
- Utiliser l’ensemble des notions présentées à présent : les variables, les instructions
conditionnelles et itératives, les entrées/sorties, le découpage en sous-programmes, etc.
- Respecter les exigences de programmation : l’indentation, l’utilisation de constantes, l’ajout de
commentaires, etc.

2 Description du problème : Amélioration d'un électrocardiogramme


Dans le cadre d’un projet d'aide humanitaire, le PRÉCI décide d'améliorer les installations d'un hôpital.
L'un des problèmes auquel est confronté cet établissement est la dégradation de la performance de
ses électrocardiogrammes1. En effet, les années d’utilisation et le manque d’entretien de ces appareils
ont affecté la fiabilité des capteurs.

Fiabilité de 100% Fiabilité de 10%

Le coût de remplacement de ces appareils étant trop élevé pour le budget amassé par le PRÉCI, les
étudiants du projet vous mandatent de trouver une solution logicielle permettant d'approximer le signal
cardiaque des patients avec le plus de fidélité possible.

1
Appareil servant à mesurer l'activité électrique du cœur.

INF130 Ordinateurs et programmation Hiver 2023 / Page 1


3 Description de la tâche à accomplir
Votre travail consiste à écrire un programme en VBA qui permet de :
a) simuler le menu d'un électrocardiogramme;
b) afficher les données obtenues des capteurs d'un électrocardiogramme ;
c) améliorer l'apparence du signal cardiaque en approximant les données manquantes à l’aide d’une
approximation linéaire ou d’une approximation quadratique ;

ModuleEcran

ModuleMenu

ModuleSignal ModuleTraitement

L’application que vous devez développer comportera 4 modules :


• ModuleSignal : ce module simule les capteurs de l’électrocardiogramme ;
• ModuleEcran : ce module simule les contrôles de l’écran d’affichage ;
• ModuleMenu : ce module correspond aux fonctions offertes par l’électrocardiogramme (les
différents boutons sur l’appareil) ;
• ModuleTraitement : ce module gère le fonctionnement de l’appareil et communique avec
tous les autres modules.

Vous aurez à implémenter les modules ModuleMenu et ModuleTraitement alors que les modules
ModuleSignal et ModuleEcran vous sont fournis.

INF130 Ordinateurs et programmation Hiver 2023 / Page 2


4 Description des modules fournis

4.1 Description du module ModuleSignal

Ce module vous est offert et vous ne devez pas le modifier. Il offre deux sous-programmes qui
simulent l’acquisition de données à l’aide des capteurs :
- ObtenirProchaineMesure : cette procédure permet de simuler l’obtention d’une nouvelle
donnée (un temps et un voltage) à l’aide des capteurs.
- ReinitialiserLecture : cette procédure permet de redémarrer la lecture des
battements au temps 0.

4.2 Description du module ModuleEcran

Ce module vous est offert et vous ne devez pas le modifier. Il offre des sous-programmes qui
simulent l’affichage du signal sur l’écran de l’électrocardiogramme :
- AfficherDonnee : cette procédure ajoute un point dans le graphe.
- AfficherElementsGraphique : cette procédure ajoute au graphe les axes, la grille et
les titres du graphe.

- ConfigurerAxe : cette procédure change les valeurs limites des axes horizontaux
ou verticaux. Elle attend les deux nouvelles limites ainsi que l'axe qui doit être modifié
(HORIZONTAL ou VERTICAL).
- ConfigurerMode : cette procédure change la manière utilisée pour tracer le signal
cardiaque lors du prochain affichage. Il ne modifie pas le signal actuellement affiché.

- EffacerElementsGraphique : cette procédure retire les axes, la grille et les titres du


graphe. De plus, elle modifie la couleur de fond du graphe pour simuler l'arrêt de l'appareil.
- EffacerToutesDonnees : cette procédure efface le signal cardiaque présentement affiché.

Les sous-programmes suivants permettent de consulter certaines informations sur le graphe :


- ObtenirMode : cette fonction retourne la valeur numérique représentant le mode
utilisé pour tracer le graphe.
- ObtenirTempsMaximal : cette fonction retourne la valeur limite utilisée sur l'axe horizontal.

INF130 Ordinateurs et programmation Hiver 2023 / Page 3


5 Ordre de développement suggéré

5.1 Phase 1 : Mise en place des trois programmes principaux


La première phase de ce projet a pour but de simuler le démarrage et l’arrêt de l’appareil. De plus,
l’objectif est de créer le menu permettant de configurer le graphe de l’appareil.

Sous-programme : ArreterECG (ModuleMenu)

Ce programme permet de simuler l'arrêt de l’appareil.

Entrée : Aucune entrée.


Sortie : Aucune sortie.
Requis 1 : Les données du graphe de l’ECG doivent être effacé (voir ModuleEcran).
Requis 2 : Les axes et le quadrillage du graphe de l'ECG doit être remplacé par un fond noir (voir
ModuleEcan).

Test :

Sous-programme : DemarrerECG (ModuleMenu)

Ce programme permet de simuler le démarrage de l’appareil.

Entrée : Aucune entrée.


Sortie : Aucune sortie.
Requis 3 : Les données du graphe de l’ECG doivent être effacé (voir ModuleEcran).
Requis 4 : Les axes et le quadrillage du graphe de l'ECG doivent être affiché (ModuleEcan).

Test :

INF130 Ordinateurs et programmation Hiver 2023 / Page 4


5.2 Phase 2 : Affichage d'un signal ECG dégradé

La deuxième phase de ce projet a pour but d'afficher un premier signal ECG dans le graphe.

Note : Les requis inscrits selon ce format ont déjà été réalisés :
Requis 3 : Le trajet à effectuer est créé.

Les requis inscrits selon ce format ont à être supprimés de votre code.
Requis 5 : Lorsque l'une des saisies est annulée, un message d'erreur est affiché.

Sous-programme : DemarrerECG

Entrée : Aucune entrée.


Sortie : Aucune sortie.
Requis 3 : Les données du graphe de l’ECG doivent être effacé (voir ModuleEcran).
Requis 4 : Les axes et le quadrillage du graphe de l'ECG doivent être affiché (ModuleEcan).
Requis 5 : Le mode du tracé est configuré (voir ModuleMenu).
Requis 6 : Le mode du tracé est récupéré à partir du graphe (voir ModuleÉcran).
Requis 7 : Le signal est traité.

Sous-programme : TraiterSignal (ModuleTraitement)

Entrée : Un entier représentant le mode du tracé.


Sortie : Aucune sortie.
Requis 8 : La lecture du signal est réinitialisée (voir ModuleSignal)
Requis 9 : Le temps en X maximal employé le graphe est récupéré (voir ModuleÉcran)
Requis 10 : L'affichage du signal se poursuit tant que le temps du point à afficher est inférieur au
temps maximal récupéré.
Requis 11 : La prochaine mesure à afficher est obtenue (voir ModuleSignal).
Requis 12 : Le nombre de mesures obtenu est dénombré.
Requis 13 : Si le mode d'affichage correspond au mode #1, la donnée est affichée.
(voir ModuleÉcran)

Test:

Call TraiterSignal(1)

INF130 Ordinateurs et programmation Hiver 2023 / Page 5


5.3 Phase 3 : Correction du signal ECG dégradé

La troisième phase de ce projet a pour but d'améliorer l'affichage du signal ECG créé lors de la phase 2.

Sous-programme : PenteDroite (ModuleTraitement)

Entrée : Quatre nombres représentant les coordonnées en X et en Y de deux mesures.


Sortie : La pente du segment de droite entre les deux segments.
Requis 14 : La pente d'une droite se calcule à l'aide de l'équation : m = dy/dx.

Test :

Sous-programme : OrdonneeDroite (ModuleTraitement)

Entrée : Deux nombres représentant les coordonnées en X et en Y d'une mesure.


Un nombre représentant la pente d'une droite.
Sortie : L'ordonnée à l'origine du segment de droite entre les deux segments.

Requis 15 : L'ordonnée à l'origine d'une droite se calcule à l'aide de l'équation : b = y – m * x.

Exemple :

INF130 Ordinateurs et programmation Hiver 2023 / Page 6


Sous-programme : DessinerSegmentDroite (ModuleTraitement)

Ce programme permettra de dessiner un segment de droite entre deux points dans le graphe.

Entrée : Quatre nombres représentant les coordonnées en X et en Y de deux mesures.


Sortie : Aucune sortie.
Requis 16 : Trouver la pente du segment de droite qui relie les deux points.
Requis 17 : Trouver l'ordonnée à l'origine qui relie les deux points.
Requis 18 : Le segment de droite est dessinée grâce à une série de donnée affichée dans le
graphe. Chaque point sur la droite à un intervalle de 0.0001 secondes.

Exemple :

Call DessinerSegmentDroite(2.8, 0.8, 0.5, -0.75)

INF130 Ordinateurs et programmation Hiver 2023 / Page 7


Sous-programme : TraiterSignal [Mise à jours] (ModuleTraitement)

Entrée : Un entier représentant le mode du tracé.


Sortie : Aucune sortie.
Requis 19 : La lecture du signal est réinitialisée (voir ModuleSignal)
Requis 20 : Le temps en X maximal employé le graphe est récupéré (voir ModuleÉcran)

Requis 26 : La lecture du signal est réinitialisée (voir ModuleSignal)


Requis 27 : Le temps en X maximal employé le graphe est récupéré (voir ModuleÉcran)
Requis 28 : L'affichage du signal se poursuit tant que le temps du point à afficher est inférieur au
temps maximal récupéré.
Requis 29 : La prochaine mesure à afficher est obtenue (voir ModuleSignal).
Requis 30 : Le nombre de mesures obtenu est dénombré.
Requis 31 : Si le mode d'affichage correspond au mode #1, la donnée est affichée.
Requis 21 : Si le mode d'affichage correspond au mode #2 et qu'au moins deux données ont été
obtenues, la droite entre les deux dernières données obtenues est dessinée.

Exemple :

Call TraiterSignal(2)

INF130 Ordinateurs et programmation Hiver 2023 / Page 8


Sous-programme : EquationParabole (ModuleTraitement)

Entrée : Six nombres représentant les coordonnées en X et en Y de trois mesures.


Sortie : Trois coefficient a, b et c représentant l'équation d'une parabole sous la forme
a*x^2 + b*x + c
Requis 22 : Calculer trois coefficients intermédiaires
𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡1 = 𝑦1 / ((𝑥1 − 𝑥2) ∗ (𝑥1 − 𝑥3))
𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡2 = 𝑦2 / ((𝑥2 − 𝑥1) ∗ (𝑥2 − 𝑥3))
𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡3 = 𝑦3 / ((𝑥3 − 𝑥1) ∗ (𝑥3 − 𝑥2))

Requis 23 : Calculer trois coefficients caractéristiques de l'équation de la parabole.


𝑎 = 𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡1 + 𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡2 + 𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡
𝑏 = −(𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡1 ∗ (𝑥2 + 𝑥3) + 𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡2 ∗ (𝑥1 + 𝑥3) + 𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡3 ∗ (𝑥1 + 𝑥2))
c = 𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡1 ∗ 𝑥2 ∗ 𝑥3 + 𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡2 ∗ 𝑥1 ∗ 𝑥3 + 𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡3 ∗ 𝑥1 ∗ 𝑥2

Exemple :

INF130 Ordinateurs et programmation Hiver 2023 / Page 9


Sous-programme : DessinerSegmentCourbe (ModuleTraitement)

Ce programme permettra de dessiner un segment de parabole entre deux points dans le graphe.

Entrée : Six nombres représentant les coordonnées en X et en Y de six mesures.


Sortie : Aucune sortie.
Requis 24 : Trouver l'équation de la parabole qui relie les trois points
Requis 25 : Le segment de parabole est dessinée grâce à une série de donnée affichée dans le
graphe. Chaque point de la droite est calculé en appliquant l’équation de la parabole
en utilisant les coefficients trouvés. Les points doivent être affichés à un intervalle de
0.0001 secondes (voir ModuleEcran).

Exemple :

Call DessinerSegmentCourbe(1.75, -0.33, 1.25, 1.25, 0.75, -0.33)

INF130 Ordinateurs et programmation Hiver 2023 / Page 10


Sous-programme : TraiterSignal [Mise à jours] (ModuleTraitement)

Entrée : Un entier représentant le mode du tracé.


Sortie : Aucune sortie.
Requis 26 : Le signal est chargé dans le projet (voir ModuleSignal)
Requis 27 : Le temps en X maximal employé dans l'axe des X du graphe est récupéré.
Requis 28 : L'affichage du signal se poursuit tant que le temps du point à afficher est inférieur au
temps maximal récupéré.
Requis 29 : La prochaine mesure à afficher est obtenue (voir ModuleSignal).
Requis 30 : Le nombre de mesures obtenu est dénombré.
Requis 31 : Si le mode d'affichage correspond au mode #1, la donnée est affichée.
Requis 39 : Si le mode d'affichage correspond au mode #2 et qu'au moins deux données ont été
obtenues, la droite entre les deux dernières données est dessinée.
Requis 26 : Si le mode d'affichage correspond au mode #3 et qu'au moins trois données ont été
obtenues, la parabole entre les trois dernières données est dessinée.

Exemple :

Call TraiterSignal(3)

INF130 Ordinateurs et programmation Hiver 2023 / Page 11


6 Contraintes de l'enseignant
Votre programme devra respecter les contraintes suivantes :

• Il devra respecter les exigences de remise des travaux pratiques. D’ailleurs, la qualité du code
vaudra au moins autant de points que le fonctionnement du programme.

• Il ne devra contenir aucune variable globale. La présence d’une variable globale entraînera la
perte de 25 % des points.

• Il ne devra contenir aucun goto. La présence d’une de ces instructions entraînera la perte de
25 % des points.
En cas de doute, n’hésitez pas à consulter votre enseignant.
Bon travail !

INF130 Ordinateurs et programmation Hiver 2023 / Page 12

Vous aimerez peut-être aussi