Afin de gérer le suivi de vaccination des citoyens contre la COVID-19, le minsitère de la santé sauvegarde pour chaque citoyen les données suivantes:
- Un nombre de 9 chiffres désignant son code
- Le nom du vaccin injecté ârmi la liste (Pfizer, Moderna, Johson, AstraZeneca) ou le caractère "*" pour celui qui n'a pas encore été vacciné.
- Le nombre de doses (0, 1 ou 2)
Ces données sont concaténées dans une chaîne de caractères et séparées par le caractère "-".
Exemples:
Ce code désigne que le citoyen ayant le code 832950153 a reçu sa première dose de type Pfizer.
- "990354015-Pfizer-2" désigne que le citoyen ayant le code 990354015 a reçu sa deuxième dose de type Pfizer.
- "199384915-Johnson-1" désigne que le citoyen ayant le code 199384915 a reçu sa deuxième dose de type Johnson.
- "771750163-*-0" désigne que le citoyen ayant le code 771750163 n'a pas encore reçu sa première dose.
Pour lutter contre pandémie et inciter les citoyens à adhérer à la vaccination contre ce virus le ministère décide d'envoyer des messages SMS aux citoyens pour :
- les inviter à complété leurs schémas de vaccination : pour les citoyens qui n'ont reçu aucune dose ou qui ont reçu une dose d'un vaccin autre que Johnson.
- les inviter à télécharger leurs passes sanitaires: pour les citoyens qui ont reçu une dose de type Johnson ou deux doses de type Pfizer, Moderna ou AstraZenaca.
On se propose d'écrire un algorithme et un programme Python pour saisir un entier n (5<=n<=100) puis remplir un tableau T par les données de n citoyens et d'afficher pour chaque citoyen le contenu du message SMS qui lui correspond Exemple: Pour n=5 et le tableau T suivant :
8329500153-Pfizer-1 | 990354015-Pfizer-2 | 199384915-Johnson-1 | 771750163-*-0 | 673028501-Moderna-2 |
Le programme affiche les messages suivants :
Le titulaire du code 8329500153, vous êtes appelé à compléter votre schéma vaccinal
Le titulaire du code 990354015, vous pouvez télécharger votre passe vaccinale
Le titulaire du code 199384915, vous pouvez télécharger votre passe vaccinale
Le titulaire du code 771750163, vous êtes appelé à compléter votre schéma vaccinal
Le titulaire du code 673028501, vous pouvez télécharger votre passe vaccinale
Dans cet algorithme, On va utiliser 4 fonctions et 2 procédures:
Algorithme du programme Principal
1 2 3 4 5 6 |
Algorithme suivi_vaccin_COV19 Debut n<-saisie_taille() remplir(t,n) afficher_messages(t,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
t | tableau des chaînes des caractères |
n | entier |
La fonction saisie_taille
Cette fonction saisit la taille du tableau entre 5 et 100.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille():entier Début Ecrire("donner un entier entre 5 et 100 ")) Lire(n) Tant que (n<5) ou (n>100) faire Ecrire("donner un entier entre 5 et 100 ")) Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La fonction verif_code
Cette fonction vérifie la validité du code de vaccination.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
fonction verif_code(ch:chaine):booleen Début i<-0 # verifier que le partie 1 du code est forme de 8 chiffres Tant que (i<Pos(ch,'-')) et ('0'<=ch[i]<='9') faire i<-i+1 Fin tant que # verfier la partie 2 du code Si (i=9) et (ch[i]='-') et ((Sous_chaine(ch,Pos(ch,'-')+1 , Pos(ch,'-', Pos(ch,'-')+1,long(ch))] ='Johnson' et Sous_chaine(ch,Pos(ch,'-'), Pos(ch,'-')+1,long(ch))+1,long(ch)] ='1') ou (Sous_chaine(ch,Pos(ch,'-')+1,Pos(ch,'-'), Pos(ch,'-')+1,long(ch))] dans {'Pfizer','Moderna','AstraZeneca'} et Sous_chaine(ch,Pos(ch,'-'), Pos(ch,'-')+1,long(ch))+1,long(ch)] dans {'1','2'}) ou (Sous_chaine(ch,Pos(ch.'-')+1,Pos(ch,'-'), Pos(ch,'-')+1,long(ch))] =='*' et Sous_chaine(ch,Pos(ch'-'), Pos(ch,'-')+1,long(ch))+1,long(ch)] =='0')) alors retourner True Sinon retourner Faux Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction verif_unicite_code
Cette fonction vérifie que le code de vaccination est unique dans le tableau T
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
fonction verif_unicite_code(ch:chaine):booleen Début j<-0 ch1<-t[i] ch2<-t[j] #verifier que la partie 1 du nouveau code est unique Tant que j<i et Sous_chaine(ch1,0,9) != Sous_chaine(ch2,0,9) alors j<-j+1 Fin tant que Si j=i alors retourner Vrai # le partie 1 du nouveau code est unique Sinon retourner Faux # le partie 1 du nouveau code n'est pas unique Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
j | entier |
ch1 | chaîne des caractères |
ch2 | chaîne des caractères |
La procédure remplir
Cette procédure remplit le tableau T par les codes de vaccination.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
procedure remplir(@t:tab;n:entier) Début # remplir le tableau des codes vaccins Ecrire("donner code unique N°0 forme de 9 chiffres, vaccin et nbr vaccin: ") Lire(t[0]) Tant que (verif_code(t[0])=Faux) faire Ecrire("donner code unique N°0 forme de 9 chiffres, vaccin et nbr vaccin: ") Lire(t[0]) Fin tant que Pour i de 1 à n-1 faire Ecrire("donner code unique N°"+i+" forme de 9 chiffres, vaccin et nbr vaccin: ") Lire(t[i]) Tant que (verif_code(t[i])=Faux) ou (verif_unicite_code(t,i)=Faux) faire Ecrire("donner code unique N°"+i+" forme de 9 chiffres, vaccin et nbr vaccin: ") Lire(t[i]) Fin tant que Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure generer_message
Cette fonction génère un message à parti du code de vaccination.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Procedure generer_message(ch:chaine) Début # En cas du vaccin Johnson Si (Sous_chaine(ch,Pos(ch,'-')+1,Pos(ch,'-', Pos(ch,'-')+1,long(ch))] = 'Johnson') alors Ecrire('Le titulaire du code '+Sous_chaine(ch,0,9)+'Vous pouvez télécharger votre passe vaccinale') # En cas des autres vaccins Sinon (Sous_chaine(ch,Pos(ch,'-')+1,Pos(ch,'-'), Pos(ch,'-')+1,long(ch)) dans {'Pfizer','Moderna','AstraZeneca'}): Selon Sous_chaine(ch,Pos(ch,'-'), Pos(ch,'-')+1,long(ch))+1,long((ch)] faire cas '1': Ecrire('Le titulaire du code '+Sous_chaine(ch,0,9)+' Vous etes appele a completer votre schema vaccinal') cas '2': Ecrire('Le titulaire du code '+Sous_chaine(ch,0,9)+' Vous pouvez télécharger votre passe vaccinale') Sinon # en cas le citoyen n'a pas encore sa premiere dose Ecrire('Le titulaire du code '+Sous_chaine(ch,0,9)+' Vous etes appele a completer votre schema vaccinal') Fin selon Fin |
La procédure afficher_messages
Cette procédure affiche les messages pour tous les codes du tableau T
1 2 3 4 5 6 |
procedure afficher_messages(t:tab;n:entier) Début Pour i de 0 à n-1 faire generer_message(t[i]) Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
from numpy import array # declaration du tableau des codes citoyens vaccins t=array([str]*100) def saisie_taille(): n=int(input("donner un entier entre 5 et 100: ")) while (n<5) or (n>100): n=int(input("donner un entier entre 5 et 100: ")) return n def verif_code(ch): i=0 # verifier que le partie 1 du code est forme de 8 chiffres while (i<ch.find('-')) and ('0'<=ch[i]<='9'): i=i+1 # verfier la partie 2 du code if (i==9) and (ch[i]=='-') and ((ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] =='Johnson' and ch[ch.find('-', ch.find('-')+1,len(ch))+1:len(ch)] =='1') or (ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] in {'Pfizer','Moderna','AstraZeneca'} and ch[ch.find('-', ch.find('-')+1,len(ch))+1:len(ch)] in {'1','2'}) or (ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] in {'*'} and ch[ch.find('-', ch.find('-')+1,len(ch))+1:len(ch)] =='0')): return True else: return False def verif_unicite_code(t,i): j=0 ch1=t[i] ch2=t[j] #verifier que la partie 1 du nouveau code est unique while j<i and ch1[0:9]!=ch2[0:9]: j=j+1 if j==i : return True # le partie 1 du nouveau code est unique else: return False # le partie 1 du nouveau code n'est pas unique def remplir(t,n): # remplir le tableau des codes vaccins t[0]=input("donner code unique N°0 forme de 9 chiffres, vaccin et nbr vaccin: ") while (verif_code(t[0])==False): t[0]=input("donner code unique N°0 forme de 9 chiffres, vaccin et nbr vaccin: ") for i in range (1,n) : t[i]=input("donner code unique N°"+str(i)+" forme de 9 chiffres, vaccin et nbr vaccin: ") while (verif_code(t[i])==False) or (verif_unicite_code(t,i)==False): t[i]=input("donner code unique N°"+str(i)+" forme de 9 chiffres, vaccin et nbr vaccin: ") def generer_message(ch): # En cas du vaccin Johnson if (ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] == 'Johnson'): print('Le titulaire du code '+ch[0:9]+'Vous pouvez télécharger votre passe vaccinale') # En cas des autres vaccins elif (ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] in {'Pfizer','Moderna','AstraZeneca'}): match ch[ch.find('-', ch.find('-')+1,len(ch))+1:len(ch)]: case '1': print('Le titulaire du code '+ch[0:9]+' Vous etes appele a completer votre shema vaccinal') case '2': print('Le titulaire du code '+ch[0:9]+' Vous pouvez télécharger votre passe vaccinale') else: # en cas le citoyen n'a pas encore sa premiere dose print('Le titulaire du code '+ch[0:9]+' Vous etes appele a completer votre shema vaccinal') def afficher_messages(t,n): for i in range(n): generer_message(t[i]) #programme principal n=saisie_taille() remplir(t,n) print() afficher_messages(t,n) |
Exécution du programme:
Pour créer une application en Python et Designer QT afin de gérer le suivi de la vaccination contre le COVID-19, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'ch' pour entrer les codes de vaccination
QPushButton
nommé 'remplir_bt' pour mettre les codes dans le tableau T.
QPushButton
nommé 'afficher_bt' pour afficher la liste des codes et leurs messages correspondants
QLabel
nommé 'tabt_label' pour contenir les codes de vaccination.
QLabel
nommé 'msg' pour afficher des messages d'erreur.
QLabel
nommé 'message' pour contenir la liste des codes et leurs messages correspondants.
Enregistrez le fichier avec l'extension .ui
, par exemple tabtab-3.ui
.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication from numpy import array # declaration du tableau des codes vaccins t=array([str]*110) app = QApplication([]) windows = loadUi ("tabtab-3.ui") # Fonction qui supprime des espaces de la chaine des carcatères def supprimer_espaces (ch) : while(ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=ch[1:len(ch)] while(ch[len(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=ch[0:len(ch)-1] while (ch.find(' ')>0): ch=ch.replace(" ", " ") # remplacer les doubles espaces apar un seul espace return ch def verif_code(ch): i=0 # verifier que le partie 1 du code est forme de 8 chiffres while (i<ch.find('-')) and ('0'<=ch[i]<='9'): i=i+1 # verfier la partie 2 du code if (i==9) and (ch[i]=='-') and ((ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] =='Johnson' and ch[ch.find('-', ch.find('-')+1,len(ch))+1:len(ch)] =='1') or (ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] in {'Pfizer','Moderna','AstraZeneca'} and ch[ch.find('-', ch.find('-')+1,len(ch))+1:len(ch)] in {'1','2'}) or (ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] in {'*'} and ch[ch.find('-', ch.find('-')+1,len(ch))+1:len(ch)] =='0')): return True else: return False def verif_unicite_code(t,i): j=0 ch1=t[i] ch2=t[j] #verifier que la partie 1 du nouveau code est unique while j<i and ch1[0:9]!=ch2[0:9]: j=j+1 if j==i : return True # le partie 1 du nouveau code est unique else: return False # le partie 1 du nouveau code n'est pas unique # Procedure qui remplit le tableau IDENT des identificateurs def createTabT(): windows.tabt_label.clear() windows.msg.clear() global n #pour la taile du tableau a des utilisateurs ch = windows.ch.text() if ch=="": windows.msg.setText("Veuillez remplir la chaîne") else: windows.msg.clear() # effacer le message d erreur ch= supprimer_espaces(ch) i=0 j=0 ch1='' verifcode=True # pour verifier le code unicite_code=True # pour verifier l'unicite du code # parcourir les caracteres de la chaine CH1 while(i<len(ch)) and (verifcode) and (unicite_code) : if (ch[i]!=' ') : ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau T par des codes vaccins t[j]=ch1 print(t[j]) verifcode=verif_code(ch1) if j>=1: unicite_code=verif_unicite_code(t,j) ch1='' j=j+1 i=i+1 if (i==len(ch)) and (verifcode) and (unicite_code) : if 1<=j<=100: n=j tab='' for k in range (j) : tab=tab+ 't['+str(k)+']= '+t[k]+ '\n' #afficher les elements du tableau windows.tabt_label.setText(tab) else: windows.msg.setText("la taille du tableau a doit etre entre 5 et 100") else: windows.msg.setText("donner des code uniques formes de 9 chiffres, vaccin et nbr vaccin") def afficher_messages(): message='' for i in range(n): ch=t[i] # En cas du vaccin Johnson if (ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] == 'Johnson'): message=message+('Le titulaire du code '+ch[0:9]+'Vous pouvez télécharger votre passe vaccinale\n') # En cas des autres vaccins elif (ch[ch.find('-')+1:ch.find('-', ch.find('-')+1,len(ch))] in {'Pfizer','Moderna','AstraZeneca'}): match ch[ch.find('-', ch.find('-')+1,len(ch))+1:len(ch)]: case '1': message=message+('Le titulaire du code '+ch[0:9]+' Vous etes appele a completer votre shema vaccinal\n') case '2': message=message+('Le titulaire du code '+ch[0:9]+' Vous pouvez télécharger votre passe vaccinale\n') else: # en cas le citoyen n'a pas encore sa premiere dose message=message+('Le titulaire du code '+ch[0:9]+' Vous etes appele a completer votre shema vaccinal\n') windows.message.setText(message) windows.remplir_bt.clicked.connect ( createTabT ) windows.afficher_bt.clicked.connect ( afficher_messages ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau T
2) Affichage de chaque titulaire du code ainsi que le message généré.
Vous pouvez voir aussi :
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info