le ministère de l’éducation organise une olympiade d’informatique à l’échelle nationale.
Pour générer un code pour chaque participant à cette olympiade, on se propose un programme Python qui permet de :
- remplir deux tableaux tn et tg respectivement par, les noms et les gouvernorats d’origine des n participants avec 5≤n≤26. Il est à noter que le nom d’un participant ne doit pas dépasser 15 lettres et celui du gouvernorat est d’au maximum 10 lettres.
- générer dans un troisième tableau tc, un code pour chaque participant. Ce code est formé de 5 caractères dont :
les trois premiers caractères représentant les trois premières lettres du gouvernorat du participant.
Et les deux dernières caractères est un nombre de 2 chiffres représentant le rang du participant par rapport aux autres participants du même gouvernorat.
– afficher pour chaque participant, son nom et son code.
Exemple : pour n=9 et les deux tableaux tn et tg suivants :
tn :
Rahma | Ayoub | Aya | Ali | Mohamed | Bilel | Meriem | Sana | Anis |
tg :
Jendouba | Monasrir | Beja | Jendouba | Tataouine | Jendouba | Monastir | Sfax | Sfax |
Après génération des codes, la tableau tc sera :
Jen01 | Mon01 | Bej01 | Jen02 | Tat01 | Jen03 | Mon02 | Sfa01 | Sfa02 |
En effet, la participante Rahma aura le code Jen01 puisque les trois premières lettres de son gouvernorat est Jen et elle est la première participante du gouvernorat de Jendouba.
le participant Anis aura le code Sfa02 puisque les trois premières lettres de son gouvernorat est Sfa et il est le deuxième participant du gouvernorat de Sfax.
Le programme affiche :
Rahma Jen01
Ayoub Mon01
Aya Bej01
Ali Jen02
Mohamed Tat01
Bilel Jen03
Meriem Mon02
Sana Saf01
Anis Saf02
Pour résoudre ce problème, nous allons suivre un principe algorithmique en plusieurs étapes :
1- Entrée des données :
Nous avons deux tableaux : tn
pour les noms des participants et tg
pour leurs gouvernorats respectifs.
Le nombre de participants n
est tel que 5≤n≤26, et chaque nom ne dépasse pas 15 lettres, tandis que chaque gouvernorat ne dépasse pas 10 lettres.
2- Initialisation d'un dictionnaire pour les rangs par gouvernorat :
Utiliser un dictionnaire pour stocker le nombre de participants par gouvernorat. Ce dictionnaire permettra de compter le rang de chaque participant dans son gouvernorat.
3- Génération du code :
Pour chaque participant, le code sera généré en concaténant :
Les trois premières lettres de son gouvernorat.
Un numéro à deux chiffres correspondant à son rang parmi les participants de ce gouvernorat.
4- Affichage des résultats :
Pour chaque participant, afficher son nom ainsi que son code.
Dans cet algorithme, On va utiliser trois fonctions et quatre procédures:
Algorithme du programme Principal
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Algorithme code_participant Debut n<-saisie_taille() Ecrire('remplissage du tableau des noms') remplir(tn,n,'nom',15) Ecrire('remplissage du tableau des gouvernorats') remplir(tg,n,'gouvernorats',10) generer_code(tg,tc,n) Ecrire('affichage du tableau des codes') afficher_tableau(tc,n,'tc') Ecrire('affichage noms codes') afficher_noms_codes(tn,tc,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
tn | tableaux des chaînes |
tg | tableaux des chaînes |
tc | tableaux des chaînes |
La fonction saisie_taille
Cette fonction saisit la taille du tableau entre 5 et 26.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille():entier Début Ecrire('donner un entier entre 5 et 26') Lire(n) Tant que (n<5) ou (n>26) faire Ecrire('donner un entier entre 5 et 26') Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La fonction verif_chaine
Cette fonction vérifie si une chaîne est composée uniquement des lettres.
1 2 3 4 5 6 7 8 |
fonction verif_chaine(ch):booleen Début i<-0 Tant que (i<long(ch)-1) et ('A'<=Majus(ch[i])<='Z') faire i<-i+1 Fin tant que retourner ('A'<=Majus(ch[i])<='Z') Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure remplir
Cette procédure remplit le tableau t par des chaines composé uniquement des lettres et dont leurs longueurs dépend du rôle du tableau à remplir.
1 2 3 4 5 6 7 8 9 10 11 |
procedure remplir(@t:tab;n:entier,nbr_caracteres) Début Pour i de 0 à n-1 faire Ecrire("donner "+nom+ "["+i+"] forme des lettres et sa longueur <="+nbr_caractere+":") lire(t[i]) Tant que long(t[i])>nbr_caracteres or verif_chaine(t[i])=Faux faire Ecrire("donner "+nom+ "["+i+"] forme des lettres et sa longueur <="+nbr_caractere+":") lire(t[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction rang_participant
Cette fonction recherche et retourne le rang du participant par rapport aux autres participants du même gouvernorat.
1 2 3 4 5 6 7 8 9 |
fonction rang_participant(t:tab;i:entier):entier Début rang<-1 Pour j de 0 à i-1 faire Si t[j]=t[i] alors rang<-rang+1 Fin si retourner rang Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
j | entier |
La procédure generer_code
Cette procédure génère dans un troisième tableau tc, un code pour chaque participant.
1 2 3 4 5 6 7 8 9 10 11 12 |
procedure generer_code(tg:tab,@tc:tab,n:entier) Début Pour i de 0 à n-1 faire ch<-tg[i] cp<-1 rang<-rang_participant(tg,i) Si rang<10 alors tc[i]<-ch[0:3]+'0'+rang Sinon tc[i]<-ch[0:3]+rang Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
ch | chaîne des caractères |
rang | entier |
cp | entier |
La procédure afficher
Cette procédure affiche les éléments du tableau
1 2 3 4 5 6 |
procedure afficher(t:tab;n:entier,nom:chaine) Début Pour i de 0 à n-1 faire Ecrire(nom+'['+i+']= '+t[i]) Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure afficher_noms_codes
Cette procédure parcourt les deux tableaux tn et tc pour afficher pour chaque participant, son nom et son code.
1 2 3 4 5 6 |
procedure afficher_noms_codes(tn,tc,n)(tn:tab;tc:tab;n:entier) Début Pour i de 0 à n-1 faire Ecrire(nom+'['+i+']= '+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 |
from numpy import array tn=array([str]*30) #declaration du tableau pour les noms tg=array([str]*30) #declaration du tableau pour les gouvernorats tc=array([str]*30) #declaration du tableau pour les codes def saisie_taille() : n=int(input("donner un entier entre 5 et 26 ")) while(n<5) or (n>26) : n=int(input("donner un entier entre 5 et 26 ")) return n def verif_chaine(ch): i=0 while (i<len(ch)-1) and ('A'<=ch[i].upper()<='Z'): i=i+1 return ('A'<=ch[i].upper()<='Z') def remplir(t,n,nom,nbr_caracteres): for i in range (n) : t[i]=input("donner "+nom+ "["+str(i)+"] forme des lettres et sa longueur <="+str(nbr_caractere)+": ") while len(t[i])>nbr_caracteres or verif_chaine(t[i])==False: t[i]=input("donner "+nom+ "["+str(i)+"] forme des lettres et sa longueur <="+str(nbr_caractere)+": ") def rang_participant(t,i): rang=1 for j in range (i): if t[j]==t[i]: rang=rang+1 return rang def generer_code(tg,tc,n): for i in range(n): ch=tg[i] cp=1 rang=rang_participant(tg,i) if rang<10: tc[i]=ch[0:3]+'0'+str(rang) else: tc[i]=ch[0:3]+str(rang) def afficher_tableau(t,n,nom): for i in range (n) : print(nom+'['+str(i)+']= '+ str(t[i])) def afficher_noms_codes(tn,tc,n): for i in range (n) : print(str(tn[i])+' '+tc[i]) # programme principal n=saisie_taille() print('remplissage du tableau des noms') remplir(tn,n,'nom',15) print('remplissage du tableau des gouvernorats') remplir(tg,n,'gouvernorats',10) generer_code(tg,tc,n) print('affichage du tableau des codes') afficher_tableau(tc,n,'tc') print('affichage noms codes') afficher_noms_codes(tn,tc,n) |
Exécution du programme
Pour créer une application en Python et Designer QT qui génère un code pour chaque participant à cette olympiade, 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 nom des participants.
QLineEdit
nommé 'ch2' pour entrer les noms des gouvernorats.
QPushButton
nommé 'remplirtn_bt' pour mettre les nom des participants dans le tableau tn.
QPushButton
nommé 'remplirtg_bt' pour mettre les nom des gouvernorats dans le tableau tg.
QPushButton
nommé 'bt_generer' pour générer et stocker des codes dans le tableau tc.
QPushButton
nommé 'bt_afficher' pour rechercher et afficher pour chaque participant, son nom et son code.
QLabel
nommé 'msg' pour afficher des messages d'erreur.
QLabel
nommé 'tabtn_label' pour afficher les noms participants du tableau tn.
QLabel
nommé 'tabtg_label' pour afficher les noms des gouvernorats du tableau tg.
QLabel
nommé 'tabtc_label' pour afficher les codes du tableau tc.
QLabel
nommé 'resultat' pour afficher les noms participants et leurs codes.
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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array tn=array([str]*30) #declaration du tableau pour les noms tg=array([str]*30) #declaration du tableau pour les gouvernorats tc=array([str]*30) #declaration du tableau pour les codes app = QApplication([]) windows = loadUi ("tabtab-2.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 a partir d'une chaine des caractère def createTab(ch,t,nom,tab_label): global n # pour la taille di tableau 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='' # parcourir les caracteres de la chaine while(i<len(ch)) and (('A'<=ch[i].upper()<='Z') or (ch[i]==' ')): if ('A'<=ch[i].upper()<='Z') : ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : t[j]=ch1 ch1='' j=j+1 i=i+1 if (i<len(ch)) : # si la chaine contient des valeurs non alphabetiques windows.msg.setText("la chaîne contient des valeurs non alphabetiques") else : if 1<=j<=25: n=j tab='' for k in range (j) : tab=tab+ nom+'['+str(k)+']= '+ t[k]+ '\n' #afficher les elements du tableau tab_label.setText(tab) else: windows.msg.setText("la taille du tableau doit etre entre 5 et 25") def createTabN(): ch = windows.ch1.text() createTab(ch,tn,'tn',windows.tabtn_label) def createTabG(): ch = windows.ch2.text() createTab(ch,tg,'tg',windows.tabtg_label) def rang_participant(t,i): rang=1 for j in range (i): if t[j]==t[i]: rang=rang+1 return rang def generer_code(): for i in range(n): ch=tg[i] cp=1 rang=rang_participant(tg,i) if rang<10: tc[i]=ch[0:3]+'0'+str(rang) else: tc[i]=ch[0:3]+str(rang) tab='' for k in range (n) : tab=tab+'tc['+str(k)+']= '+ tc[k]+ '\n' #afficher les elements du tableau windows.tabtc_label.setText(tab) def afficher_noms_codes(): tab='' for i in range (n) : tab=tab+(str(tn[i])+' '+tc[i])+'\n' windows.resultat.setText(tab) windows.remplirtn_bt.clicked.connect ( createTabN ) windows.remplirtg_bt.clicked.connect ( createTabG ) windows.bt_generer.clicked.connect ( generer_code ) windows.bt_afficher.clicked.connect ( afficher_noms_codes ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau des noms des participants
2) Remplissage du tableau des noms des gouvernorats
3) Générer les codes et les stocker dans le tableau tc.
4) Afficher les noms des participants avec leur codes.
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