Un spécialiste en psychologie analytique veut faire une étude sur les heures qui se disent heures miroirs et ce, à partir des heures de naissances des nouveau-nés. Les heures miroirs sont classées selon trois types à savoir les heures miroirs doublées, les heures miroirs triplées et les heures miroirs inversées. Pour commencer cette étude, il a demandé auprès de l’administration d’un hôpital de lui fournir, pour une journée donnée, la liste des noms et prénoms des nouveau-nés ainsi que les heures de leurs naissances.
Selon la représentation horaire HH:MM, l’heure miroir est dite :
- doublée si le nombre qui représente l’heure est le même que celui qui représente les minutes (exemples 13:13, 22:22, 15:15, …)
- triplée s’il existe une séquence de trois chiffres identiques et consécutifs (exemples 22:22, 22:29, 10:00, …)
- inversée si les chiffres qui représentent les minutes sont l’inverse de ceux qui représentent l’heure (exemples 13:31, 14:41, 22:22, …)
NB : Une heure miroir peut être à la fois doublée, triplée et inversée.
Pour faire cette étude, on se propose d’écrire un programme Python qui permet de remplir deux tableaux NP et HN respectivement par :
les noms et les prénoms des N nouveau-nés de la journée, l’heure de naissance de chacun, puis d’afficher :
- la liste des nouveau-nés ayant une heure de naissance miroir, en précisant pour chacun le type de l’heure miroir correspondant (doublée, triplée ou inversée),
- le nombre des nouveau-nés ayant l’heure de naissance miroir doublée,
- le nombre des nouveau-nés ayant l’heure de naissance miroir triplée,
- le nombre des nouveau-nés ayant l’heure de naissance miroir inversée.
Exemple :
Pour N = 10 et les tableaux NP et HN suivants :
NP:
Rania
Kefi |
Karim
Salhi |
Hatem
Krid |
Sahar
Feki |
Maha
Sessi |
Fedi
Krayem |
Amin
Douaji |
Dina
Selmi |
Samir
Siala |
Abir
Zekri |
HN:
06:05 | 11:14 | 12:23 | 13:13 | 14:44 | 15:51 | 20:33 | 21:11 | 22:22 | 23:07 |
Dans cet algorithme, On va utiliser 4 fonctions et 2 procédures:
Algorithme du programme Principal
1 2 3 4 5 6 |
Algorithme naissances Debut n<-saisie_taille() remplir(np,hn,n) afficher_nouveaunes_heuremiroir(np,hn,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
np | tableau des chaînes des caractères |
hn | tableau des chaînes des caractères |
n | entier |
La fonction saisie_taille
Cette fonction saisit la taille du tableau entre 3 et 20.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille():entier Début Ecrire("donner un entier entre 3 et 20 ")) Lire(n) Tant que (n<3) ou (n>20) faire Ecrire("donner un entier entre 3 et 20 ")) Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La fonction verif_nom
Cette fonction vérifie que la chaîne commence par une lettre majuscule et est formée au maximum de 30 lettres,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
fonction verif_nom(ch:chaine):booleen Début #si le nom est compose au maximum 30 caracteres et commence par une lettre majuscule Si ('A'<=ch[0]<='Z') alors i<-1 # verifier si la chaine est forme uniquement des lettres et/ou espaces Tant que (i<long(ch)-1) et ('A'<=Majus(ch[i])<='Z'): i<-i+1 Fin tant que retourner ('A'<=Majus(ch[i])<='Z') Sinon retourner Faux Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction verif_heure
Cette fonction vérifie que l'heure de naissance respecte le format horaire HH:MM, sachant que la valeur de HH est comprise entre 0 et 23 et celle de MM est comprise entre 0 et 59 représentée chacune sur deux chiffres.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
fonction verif_heure(ch:chaine):booleen Début # verifier la longueur de la chaine Si len(ch)=5 alors # verifier la chaine est compse des chiffres et le symbole : Si ('0'<=ch[0]<='2') et ('0'<=ch[1]<='9') et (ch[2]==':') et ('0'<=ch[3]<='5') et ('0'<=ch[4]<='9'): # verifier la valeur de HH est comprise entre 0 et 23 # et verifier la valeur de MM est comprise entre 0 et 59 Si (0<=Valeur(ch[0]+ch[1])<=23) and (0<=Valeur(ch[3]+ch[4])<=59): retourner Vrai Sinon retourner Faux Fin si Sinon retourner Faux Fin si Sinon retourner Faux Fin si Fin |
La fonction test_heuremiroir
Cette fonction vérifie que l'heure de naissance est une heure miroir ou non
1 2 3 4 5 6 7 8 9 10 11 12 |
fonction test_heuremiroir(ch:chaine):booleen Début Si (ch[0]+ch[1]=ch[3]+ch[4]) alors retourner 'heure miroir doublee' Sinon si ((ch[0]=ch[1]) et (ch[0]=ch[3]) ou (ch[1]=ch[3]) et (ch[1]=ch[4])) alors retourner 'heure miroir triplee' Sinon Si (ch[0]=ch[4]) and (ch[1]=ch[3]) alors retourner 'heure miroir inversee' Sinon retourner ' ' Fin si Fin |
La procédure remplir
Cette procédure remplit deux tableaux NP et HN respectivement par : les noms et les prénoms des N nouveau-nés de la journée, l’heure de naissance de chacun.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
procedure remplir(@np:tab,@hn:tab;n:entier) Début Pour i de 0 à n-1 faire Ecrire("donner prenom du nouveau-ne N°"+str(i)+" forme des lettres et commencant par majuscule: ") Lire(prenom) Ecrire("donner nom du nouveau-ne N°"+str(i)+" forme des lettres et commencant par majuscule: ") Lire(nom) Tant que long(prenom+' '+nom)>30 ou (verif_nom(prenom)=Faux) ou (verif_nom(nom)=Faux) faire Ecrire("donner prenom du nouveau-ne N°"+str(i)+" forme des lettres et commencant par majuscule: ") Lire(prenom) Ecrire("donner nom du nouveau-ne N°"+str(i)+" forme des lettres et commencant par majuscule: ") Lire(nom) Fin tant que np[i]<-prenom+' '+nom Ecrire("donner heure naissance du nouveau-ne N°"+str(i)+" sous forme HH:MM :") Lire(hn[i]) Tant que (verif_heure(hn[i])=Faux) faire Ecrire("donner heure naissance du nouveau-ne N°"+str(i)+" sous forme HH:MM :") Lire(hn[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
prenom | chaine des caractères |
nom | chaine des caractères |
La procédure afficher_nouveaunes_heuremiroir
Cette procédure affiche la liste des nouveau-nés ayant une heure de naissance miroir et les nombres des nouveau-nés pour chaque type d'heure miroir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
procedure afficher_nouveaunes_heuremiroir(np:tab,hn:tab,n:entier) Début cp_doublee<-0 cp_triplee<-0 cp_inversee<-0 Ecrire('La liste des nouveau-nes ayant une heure de naissance miroir') Pour i de 0 à n-1 faire Selon test_heuremiroir(hn[i]) faire cas 'heure miroir doublee' : Ecrire(np[i]+': heure miroir doublee' ) cp_doublee<-cp_doublee+1 cas 'heure miroir triplee' : Ecrire(np[i]+': heure miroir triplee' ) cp_triplee<-cp_triplee+1 cas 'heure miroir inversee' : Ecrire(np[i]+': heure miroir inversee' ) cp_inversee<-cp_inversee+1 Fin selon Ecrire("Le nombre des nouveeau-nes ayant l'heure de naissance doubee est "+cp_doublee) Ecrire("Le nombre des nouveeau-nes ayant l'heure de naissance triplee est "+cp_triplee) Ecrire("Le nombre des nouveeau-nes ayant l'heure de naissance inversee est "+cp_inversee) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
cp_doublee | entier |
cp_triplee | entier |
cp_inversee | 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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
from numpy import array np=array([str]*100) # declaration du tableau des noms des nouveaux nes hn=array([str]*100) # declaration du tableau des heures de naissances def saisie_taille(): n=int(input("donner la taille du tableau entre 3 et 20: ")) while (n<3) or (n>20): n=int(input("donner la taille du tableau entre 3 et 20: ")) return n def verif_nom(ch): #si le nom est compose au maximum 30 caracteres et commence par une lettre majuscule if ('A'<=ch[0]<='Z') : i=1 # verifier si la chaine est forme uniquement des lettres et/ou espaces while (i<len(ch)-1) and ('A'<=ch[i].upper()<='Z'): i=i+1 return ('A'<=ch[i].upper()<='Z') else: return False def verif_heure(ch): # verifier la longueur de la chaine if len(ch)==5: # verifier la chaine est compse des chiffres et le symbole : if ('0'<=ch[0]<='2') and ('0'<=ch[1]<='9') and (ch[2]==':') and ('0'<=ch[3]<='5') and ('0'<=ch[4]<='9'): # verifier la valeur de HH est comprise entre 0 et 23 ## verifier la valeur de MM est comprise entre 0 et 59 if (0<=int(ch[0]+ch[1])<=23) and (0<=int(ch[3]+ch[4])<=59): return True else: return False else: return False else: return False def test_heuremiroir(ch): if (ch[0]+ch[1]==ch[3]+ch[4]): return 'heure miroir doublee' elif ((ch[0]==ch[1]) and (ch[0]==ch[3]) or (ch[1]==ch[3]) and (ch[1]==ch[4])): return 'heure miroir triplee' elif (ch[0]==ch[4]) and (ch[1]==ch[3]): return 'heure miroir inversee' else: return ' ' def remplir(np,hn,n): # remplir le tableau des noms for i in range (n) : prenom=input("donner prenom du nouveau-ne N°"+str(i)+" forme des lettres et commencant par majuscule: ") nom=input("donner nom du nouveau-ne N°"+str(i)+" forme des lettres et commencant par majuscule: ") while len(prenom+' '+nom)>30 or (verif_nom(prenom)==False) or (verif_nom(nom)==False) : prenom=input("donner prenom du nouveau-ne N°"+str(i)+" forme des lettres et commencant par majuscule: ") nom=input("donner nom du nouveau-ne N°"+str(i)+" forme des lettres et commencant par majuscule: ") np[i]=prenom+' '+nom hn[i]=input("donner heure naissance du nouveau-ne N°"+str(i)+" sous forme HH:MM :") while (verif_heure(hn[i])==False): hn[i]=input("donner heure naissance du nouveau-ne N°"+str(i)+" sous forme HH:MM : ") def afficher_nouveaunes_heuremiroir(np,hn,n): cp_doublee=0 cp_triplee=0 cp_inversee=0 print('La liste des nouveau-nes ayant une heure de naissance miroir') for i in range(n): match test_heuremiroir(hn[i]) : case 'heure miroir doublee' : print(np[i]+': heure miroir doublee' ) cp_doublee=cp_doublee+1 case 'heure miroir triplee' : print(np[i]+': heure miroir triplee' ) cp_triplee=cp_triplee+1 case 'heure miroir inversee' : print(np[i]+': heure miroir inversee' ) cp_inversee=cp_inversee+1 print("Le nombre des nouveeau-nes ayant l'heure de naissance doubee est "+str(cp_doublee)) print("Le nombre des nouveeau-nes ayant l'heure de naissance triplee est "+str(cp_triplee)) print("Le nombre des nouveeau-nes ayant l'heure de naissance inversee est "+str(cp_inversee)) #programme principal n=saisie_taille() remplir(np,hn,n) afficher_nouveaunes_heuremiroir(np,hn,n) |
Exécution du programme:
Pour créer une application en Python et Designer QT qui fait une étude sur les heures de naissances des nouveau-nés, 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é 'ch1' pour entrer les prénoms et les noms des nouveaux né
QLineEdit
nommé 'ch2' pour entrer les heures de naissances
QPushButton
nommé 'remplirnp_bt' pour mettre les prénoms et les noms des nouveaux né dans le tableau NP.
QPushButton
nommé 'remplirhn_bt' pour mettre les heures de naissances dans le tableau HN.
QPushButton
nommé 'afficher_bt' pour afficher la liste des nouveau-nés ayant une heure de naissance miroir et les nombres des nouveau-nés pour chaque type d'heure miroir.
QLabel
nommé 'msg' pour afficher des messages d'erreur.
QLabel
nommé 'tabnp_label' pour contenir les prénoms et les noms des nouveaux né du tableau NP
QLabel
nommé 'tabhn_label' pour contenir les heurs de naissance des nouveaux né du tableau HN
QLabel
nommé 'resultat' pour contenir la liste des nouveau-nés ayant une heure de naissance miroir et les nombres des nouveau-nés pour chaque type d'heure miroir.
Enregistrez le fichier avec l'extension .ui
, par exemple tabtab-2.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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array np=array([str]*100) # declaration du tableau des noms des nouveaux nes hn=array([str]*100) # declaration du tableau des heures de naissances 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 # Procedure qui remplit un tableau des noms et prenoms des nouveaux nes def createTabNP(): windows.tabnp_label.clear() windows.msg.clear() global n #pour la taile du tableau a des utilisateurs ch = windows.ch1.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='' test_1majus=True # pour tester si le prenom commence par une lettre majuscule test_2majus=True # pour tester si le nom commence par une lettre majuscule # parcourir les caracteres de la chaine CH1 while(i<len(ch)) and (test_1majus) and (test_2majus) and (('A'<=ch[i].upper()<='Z')or (ch[i]=='#') or (ch[i]==' ')): if (ch[i]!='#') : ch1=ch1+ch[i] if ((ch[i]=='#') or (i==len(ch)-1)) : ch1=supprimer_espaces(ch1) # remplir le tableau np par les noms et les prenoms np[j]=ch1 test_1majus=('A'<=ch1[0]<='Z') if ch1.find(' ')>=0 : test_2majus=('A'<=ch1[ch1.find(' ')+1]<='Z') else : test_2majus=False ch1='' j=j+1 i=i+1 if (i==len(ch)) and (test_1majus) and (test_2majus) : if 1<=j<=20: n=j tab='' for k in range (j) : tab=tab+ 'np['+str(k)+']= '+np[k]+ '\n' #afficher les elements du tableau windows.tabnp_label.setText(tab) else: windows.msg.setText("la taille du tableau a doit etre entre 5 et 10") else: windows.msg.setText("donner prenom et nom du nouveau-ne forme des lettres et commencant par majuscule") def verif_heure(ch): # verifier la longueur de la chaine if len(ch)==5: # verifier la chaine est compse des chiffres et le symbole : if ('0'<=ch[0]<='2') and ('0'<=ch[1]<='9') and (ch[2]==':') and ('0'<=ch[3]<='5') and ('0'<=ch[4]<='9'): # verifier la valeur de HH est comprise entre 0 et 23 ## verifier la valeur de MM est comprise entre 0 et 59 if (0<=int(ch[0]+ch[1])<=23) and (0<=int(ch[3]+ch[4])<=59): return True else: return False else: return False else: return False # Procedure qui remplit un tableau des heures de naissance def createTabHN(): windows.tabhn_label.clear() windows.msg.clear() ch = windows.ch2.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='' verifheure=True # parcourir les caracteres de la chaine CH2 while(i<len(ch)) and (verifheure) and (('0'<=ch[i]<='9')or (ch[i]==' ' )or (ch[i]==':')): if ('0'<=ch[i]<='9')or (ch[i]==':'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau hn par des heures de naissance hn[j]=ch1 # verifier le format de l'heure HH:MM verifheure=verif_heure(ch1) ch1='' j=j+1 i=i+1 if (i==len(ch)) and (verifheure) : if j==n: #la taille du tableau r doit etre egal a la taille du tableau q tab='' for k in range (j) : tab=tab+ 'hn['+str(k)+']= '+hn[k]+ '\n' #afficher les elements du tableau windows.tabhn_label.setText(tab) else: windows.msg.setText("la taille du tableau HN doit etre egal a "+str(n)) else: windows.msg.setText("Les heures doivent etre sous forme HH:NN ") def test_heuremiroir(ch): if (ch[0]+ch[1]==ch[3]+ch[4]): return 'heure miroir doublee' elif ((ch[0]==ch[1]) and (ch[0]==ch[3]) or (ch[1]==ch[3]) and (ch[1]==ch[4])): return 'heure miroir triplee' elif (ch[0]==ch[4]) and (ch[1]==ch[3]): return 'heure miroir inversee' else: return ' ' def afficher_nouveaunes_heuremiroir(): cp_doublee=0 cp_triplee=0 cp_inversee=0 resultat='La liste des nouveau-nes ayant une heure de naissance miroir \n' for i in range(n): match test_heuremiroir(hn[i]) : case 'heure miroir doublee' : resultat=resultat+np[i]+': heure miroir doublee \n' cp_doublee=cp_doublee+1 case 'heure miroir triplee' : resultat=resultat+np[i]+': heure miroir triplee \n' cp_triplee=cp_triplee+1 case 'heure miroir inversee' : resultat=resultat+np[i]+': heure miroir inversee\n' cp_inversee=cp_inversee+1 resultat=resultat+"Le nombre des nouveeau-nes ayant l'heure de naissance doubee est "+str(cp_doublee)+'\n' resultat=resultat+"Le nombre des nouveeau-nes ayant l'heure de naissance triplee est "+str(cp_triplee)+'\n' resultat=resultat+"Le nombre des nouveeau-nes ayant l'heure de naissance inversee est "+str(cp_inversee)+'\n' print(resultat) windows.resultat.setText(resultat) windows.remplirnp_bt.clicked.connect ( createTabNP ) windows.remplirhn_bt.clicked.connect ( createTabHN ) windows.afficher_bt.clicked.connect ( afficher_nouveaunes_heuremiroir ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau NP
2) Remplissage du tableau HN
3) Afficher la liste des nouveau-nés ayant une heure de naissance miroir et les nombres des nouveau-nés pour chaque type d'heure miroir.
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