 
                        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