A la fin d'un tournoi, une ligue régionale des amateurs de Basket-Ball attribue le trophée Most Value Player (MVP) au meilleur joueur ayant eu le plus grand impact sur son équipe.
L'élection du joueur MVP est réalisée par un groupe de journalistes sportifs considérés comme des experts. Chaque journaliste vote pour trois joueurs en les classant par ordre de préférence. Selon cet ordre, on accorde 5 points au premier choix, 3 points au deuxième choix et 1 point au troisième choix. A la clôture de l'élection, le joueur ayant obtenu le plus grand nombre de points au total est déclaré comme MVP.
Afin d'automatiser l'élection du joueur MVP, on se propose d'écrire une solution algorithmique et un programme Python permettant :
- de remplir un tableau TJ par n noms de joueurs distincts et composés uniquement de lettres alphabétiques et d'espaces (avec 5≤n≤30) .
- de déterminer, dans un tableau TS, le total des points cumulés des joueurs en fonction des votes des m journaliste(avec 2≤m≤50) sachant que :
a) chaque journaliste doit obligatoirement proposer, dans son vote, trois noms de joueurs distincts et existants dans et existants dans le tableau TJ.
b) TS[i] est le total des points cumulés du joueurs ayant pour nom TJ|i]
- d'afficher le score MVP de la saison, ainsi que le nom de chaque joueur ayant ce score tout en respectant le format suivant:
Le score MVP est : valeur
Le(s) joueur(s) MVP:nom1, nom2, etc.
Exemple:
Soit TJ un tableau contenant six noms de joueurs.
TJ
Ali Saidi | Maher Bahri | Sami Doggi | Rami Daoued | Seif Toumi | Ouday Kefi |
L'élection du joueur MVP, réalisée par trois journalistes, se déroule comme suit :
Au départ le tableau TS est initialisé à zéro.
TS
0 | 0 | 0 | 0 | 0 | 0 |
Puis après chaque vote, les totaux des points cumulés des trois joueurs choisis sont mis à jour.
Vote du premier journaliste :
Choix 1: Rami Daoued
Choix 2: Ali Saidi
Choix 3: Seif Toumi
Les éléments TS[3], TS[0] et TS[4] sont incrémentés respectivement de 5, 3 et 1.
TS
3 | 0 | 0 | 5 | 1 | 0 |
Vote du deuxième journaliste :
Choix 1: Ali Saidi
Choix 2: Ali Saidi
Choix 3: Rami Daoued
Les éléments TS[0], TS[3] et TS[1] sont incrémentés respectivement de 5, 3 et 1.
TS
6 | 5 | 0 | 6 | 1 | 0 |
Vote du troisième journaliste :
Choix 1: Ali Saidi
Choix 2: Rami Daoued
Choix 3: Maher Bahri
Les éléments TS[1], TS[0] et TS[3] sont incrémentés respectivement de 5, 3 et 1.
TS
11 | 6 | 0 | 9 | 1 | 0 |
Le résultat à afficher est :
Le score MVP est : 11
Le(s) joueur(s) MVP : Ali Saidi
Dans cet algorithme, On va utiliser trois fonctions et une procédure:
Algorithme du programme Principal
1 2 3 4 5 6 7 8 9 10 |
Algorithme vote_joueur_MVP Debut Ecrire('Remplissage du tableau tj') n<-saisie_taille(5,30) remplir_tj(tj,n) Ecrire('Votes des journalistes') m<-saisie_taille(2,50) remplir_ts(ts,m) afficher_MVP(tj,ts,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
tj | tableau des chaînes des caractères |
ts | tableau des entiers |
n | entier |
m | entier |
La fonction saisie_taille
Cette fonction saisit la taille du tableau entre deux bornes a et b.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille(a:entier;b:entier):entier Début Ecrire("donner un entier entre "+a+" et "+b+": ")) Lire(n) Tant que (n<a) ou (n>b) faire Ecrire("donner un entier entre "+a+" et "+b+": ")) 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 si la chaine est formée uniquement des lettres et/ou espaces
1 2 3 4 5 6 7 8 9 |
fonction verif_nom(ch:chaine):booleen Début i<-0 # verifier si la chaine est forme uniquement des lettres et/ou espaces Tant que (i<long(ch)-1) et (('A'<=Majus(ch[i])<='Z') ou ch[i]=' '): i<-i+1 Fin tant que retourner ('A'<=Majus(ch[i])<='Z') ou (ch[i]=' ') Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction verif_unicite
Cette fonction vérifie que le nom du joueur est distinct des autres noms du tableau tj
1 2 3 4 5 6 7 8 |
fonction verif_unicite(tj:tab1;i:entier):booleen Début j<-0 Tant que (j<i-1) et (t[i]!=t[j]) faire j<-j+1 Fin tant que retourner (t[i]!=t[j]) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
j | entier |
La procédure remplir_tj
Cette procédure remplit le tableau des joueurs tj.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
procedure remplir_tj(@tj:tab1;n:entier) Début Ecrire("donner prenom et nom joueur N°0 forme des lettres et/ou espaces: ") Lire(tj[0]) # verifier la validite du nom du jour Tant que (verif_nom(tj[0])=Faux) alors Ecrire("donner prenom et nom joueur N°0 forme des lettres et/ou espaces: ") Lire(tj[0]) Fin tant que Pour i de 1 à n-1 faire Ecrire("donner prenom et nom joueur N°"+i+" forme des lettres et/ou espaces: ") Lire(tj[i]) # verifier la validite du nom du jour et son unicite dans le tableau tj Tant que (verif_nom(tj[i])=Faux) ou (verif_unicite(tj,i)=Faux) faire Ecrire("donner prenom et nom joueur N°"+i+" forme des lettres et/ou espaces: ") Lire(tj[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction exist_joueur
Cette fonction vérifie que le nom du joueur choisi par le journaliste existe dans le tableau des joueurs tj.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
fonction exist_joueur (tj:tab1;n:entier;vote:chaine):booleen Début i<-0 Tant que (i<n-1) et (tj[i]!=vote) faire i<-i+1 Fin tant que # Si le nom du joueur existe dans le tableau tj Si tj[i]=vote alors retourner i Sinon retourner -1 Finsi Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure remplir_ts
Cette procédure remplit le tableau des scores ts.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
procedure remplir_ts(@ts:tab2;m:entier) Début liste_choix<-'' Pour i de 0 à m-1 faire Pour j de 0 à 2 faire Ecrire("Journaliste "+i+" donne choix joueur N°"+j+" : ")) Lire(vote) # verifier si le nom du jour existe et unique dans les choix du journaliste Tant que exist_joueur(tj,n,vote)=-1 ou Pos(liste_choix.find,vote)>=0 faire Ecrire("Journaliste "+i+" donne choix joueur N°"+j+" : ")) Lire(vote) Fin tant que liste_choix<-liste_choix+vote indice<-exist_joueur(tj,n,vote) ts[indice]<-ts[indice]+5-2*j Fin pour Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
indice | entier |
liste_choix | chaine |
La procédure afficher_MVP
Cette procédure affiche le score MVP de la saison, ainsi que le nom de chaque joueur ayant ce score.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
procedure afficher_MVP(tj:tab1;ts:tab2;n:entier) Début max<-0 # recherche du score MVP Pour i de 1 à n-1 faire Si ts[max]<ts[i] alors max<-i Finsi Fin pour Ecrire("Le score MVP est :"+ts[max]) # Recherche de(s) nom de(s) joueur(s) ayant le score MVP Pour i de 0 à n-1 faire Si ts[i]=ts[max] alors Ecrire(tj[i]) Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
max | 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 |
from numpy import array tj=array([str]*100) # declaration du tableau des noms joueurs ts=array([int()]*100) # declaration du tableau des scores def saisie_taille(a,b): n=int(input("donner un entier entre "+str(a)+" et "+str(b)+": ")) while (n<a) or (n>b): n=int(input("donner un entier entre "+str(a)+" et "+str(b)+": ")) return n def verif_nom(ch): i=0 # verifier si la chaine est forme uniquement des lettres et/ou espaces while (i<len(ch)-1) and (('A'<=ch[i].upper()<='Z')or ch[i]==' '): i=i+1 return ('A'<=ch[i].upper()<='Z')or (ch[i]==' ') def verif_unicite(t,i): j=0 while (j<i-1) and (t[i]!=t[j]): j=j+1 return (t[i]!=t[j]) def remplir_tj(tj,n): # remplir le tableau des noms tj[0]=input("donner prenom et nom joueur N°0 forme des lettres et/ou espaces: ") # verifier la validite du nom du jour while (verif_nom(tj[0])==False): tj[0]=input("donner prenom et nom joueur N°0 forme des lettres et/ou espaces: ") for i in range (1,n) : tj[i]=input("donner prenom et nom joueur N°"+str(i)+" forme des lettres et/ou espaces: ") # verifier la validite du nom du jour et son unicite dans le tableau tj while (verif_nom(tj[i])==False) or (verif_unicite(tj,i)==False): tj[i]=input("donner prenom et nom joueur N°"+str(i)+" forme des lettres et/ou espaces: ") def exist_joueur(tj,n,vote): i=0 while (i<n-1) and (tj[i]!=vote): i=i+1 # Si le nom du joueur existe dans le tableau tj if tj[i]==vote: return i else: return -1 def remplir_ts(ts,m): # remplir le tableau des scores liste_choix='' for i in range(m): for j in range(3): vote=(input("Journaliste "+str(i)+" donne choix joueur N°"+str(j)+" : ")) # verifier si le nom du jour existe et unique dans les choix du journaliste while exist_joueur(tj,n,vote)==-1 or liste_choix.find(vote)>=0: vote=(input("Journaliste "+str(i)+" donne choix joueur N°"+str(j)+" : ")) liste_choix=liste_choix+vote indice=exist_joueur(tj,n,vote) ts[indice]=ts[indice]+5-2*j def afficher_MVP(tj,ts,n): max=0 for i in range (1,n) : if ts[max]<ts[i]: max=i print("Le score MVP est :"+str(ts[max])) for i in range(n): if ts[i]==ts[max]: print(tj[i],end=" , ") #programme principal print('Remplissage du tableau tj') n=saisie_taille(5,30) remplir_tj(tj,n) print('Votes des journalistes') m=saisie_taille(2,50) remplir_ts(ts,m) afficher_MVP(tj,ts,n) |
Exécution du programme:
Pour créer une application en Python et Designer QT afin d'automatiser l'élection du joueur MVP, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLabel
nommé 'msg' pour afficher des messages d'erreur.
QLineEdit
nommé 'ch1' pour entrer les noms des joueurs
QLineEdit
nommé 'ch2' pour entrer les numéros des choix
QPushButton
nommé 'remplirtj_bt' pour mettre les noms des joueurs dans le tableau TJ
QPushButton
nommé 'remplirts_bt' pour mettre les scores dans le tableau TS
QLabel
nommé 'tabtj_label' pour contenir les noms des joueurs dans le tableau TJ
QLabel
nommé 'tabtj_label' pour contenir les scores dans le tableau TS
QPushButton
nommé 'afficher_bt' pour rechercher le score MVP de la saison, ainsi que le nom de chaque joueur ayant ce score
QLabel
nommé 'resulat' pour contenir le score MVP de la saison, ainsi que le nom de chaque joueur ayant ce score
Enregistrez le fichier avec l'extension .ui
, par exemple tabtab-5.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 |
from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication from numpy import array tj=array([str]*60) # declaration des noms des joueurs ts=array([int()]*60) # declaration du tableau scores 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 def verif_unicite(t,i): j=0 while (j<i-1) and (t[i]!=t[j]): j=j+1 return (t[i]!=t[j]) # Procedure qui remplit un tableau des adherents a partir d'une chaine des caractères def createTabTJ(): windows.tabtj_label.clear() windows.msg.clear() global n #pour la taile des tableaux 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='' unicite=True # parcourir les caracteres de la chaine CH1 while (i<len(ch)) and unicite and (('A'<=ch[i].upper()<='Z') or (ch[i]==' ') or (ch[i]=='#')) : if ('A'<=ch[i].upper()<='Z') or ch[i]==' ': ch1=ch1+ch[i] if ((ch[i]=='#') or (i==len(ch)-1)) : # remplir le tableau M par les noms des joueurs ch1= supprimer_espaces(ch1) tj[j]=ch1 if j>0: unicite=verif_unicite(tj,j) ch1='' j=j+1 i=i+1 if (i==len(ch)) and (unicite) : if 1<=j<=30: n=j # pour la taille des deux tableaux tab='' for k in range (j) : tab=tab+ 'tj['+str(k)+']= '+tj[k]+ '\n' #afficher les elements du tableau windows.tabtj_label.setText(tab) else: windows.msg.setText("la taille du tableau doit etre entre 5 et 30") else: windows.msg.setText("donner prenoms et noms joueur uniques forme des lettres et/ou espaces et separes par #") # Procedure qui remplit un tableau des scores def createTabTS(): windows.tabts_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='' choix=0 test_choix=True # parcourir les caracteres de la chaine CH2 while(i<len(ch)) and test_choix and (('0'<=ch[i]<='9') or (ch[i]==' ')) : choix=choix+1 if ('0'<=ch[i]<='9'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau ts par les votes des journalistes if (0<=int(ch1)<=n): if choix==1: ts[int(ch1)]=ts[int(ch1)]+5 elif choix==2: ts[int(ch1)]=ts[int(ch1)]+3 else: ts[int(ch1)]=ts[int(ch1)]+1 choix=0 else: test_choix=False ch1='' i=i+1 if (i==len(ch)) and test_choix : tab='' for k in range (n) : tab=tab+ 'ts['+str(k)+']= '+str(ts[k])+ '\n' #afficher les elements du tableau windows.tabts_label.setText(tab) else: windows.msg.setText("Donner des choix entre 0 et "+str(n)) def afficher_MVP(): max=0 for i in range (1,n) : if ts[max]<ts[i]: max=i resultat="Le score MVP est :"+str(ts[max])+"\n" for i in range(n): if ts[i]==ts[max]: resultat=resultat+tj[i]+" , " windows.resultat.setText(resultat) windows.remplirtj_bt.clicked.connect ( createTabTJ ) windows.remplirts_bt.clicked.connect ( createTabTS ) windows.afficher_bt.clicked.connect ( afficher_MVP ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau Tj
2) Remplissage du tableau TS
3) Affichage du score MVP de la saison, ainsi que le nom de chaque joueur ayant ce score
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