Le jeu de tir à l’arc consiste à tirer des flèches en utilisant un arc vers un endroit cible.
Un club de tir à l’arc organise une compétition entre ses joueurs. Cette compétition consiste à donner à chaque joueur trois essais de tir.
A chaque tir, le joueur gagne de 0 à 10 points selon l’endroit touché par la flèche sur une cible composée de 10 cercles concentriques comme l’illustre la figure ci-dessous.
Après le 3ème essai, un score est calculé pour chaque joueur représentant la somme des résultats de ses trois essais, et ce pour classer les joueurs.
On se propose d’écrire un programme Pascal permettant :
1- de remplir un tableau A par N noms de joueurs participant à cette compétition (avec 2 ≤ N ≤ 20),
2- de calculer le score de chaque joueur sachant que le résultat d’un essai est un entier positif inférieur ou égal à 10,
3- d’afficher la liste des joueurs ainsi que les scores correspondants en commençant par le meilleur.
Exemple :
Pour N = 4 et le tableau A suivant :
A | Mohamed ABIDI | Fatma AYADI | Anis OMRI | Imen LOUIZ |
1 | 2 | 3 | 4 |
En considérant que les résultats des trois essais ainsi que les scores calculés des quatre joueurs sont les suivants :
Joueur | Essai n°1 | Essai n°2 | Essai n°3 | Score |
Mohamed ABIDI | 8 | 10 | 9 | 27 |
Fatma AYADI | 10 | 7 | 10 | 27 |
Anis OMRI | 7 | 9 | 7 | 23 |
Imen LOUIZ | 9 | 9 | 10 | 28 |
La liste des joueurs affichée sera la suivante :
Imen LOUIZ avec un score de 28 Mohamed ABIDI avec un score de 27 Fatma AYADI avec un score de 27 Anis OMRI avec un score de 23
Dans cet algorithme, On va utiliser deux fonctions et trois procédures:
Algorithme du programme Principal
1 2 3 4 5 6 7 |
Algorithme jeu_de_tir Debut n<-saisie_entier(2,30) remplir(a,score,n) tri(a,score,n) afficher(a,score,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
a | tableau des chaînes des caractères |
score | entier |
La fonction saisie_taille
Cette fonction saisit la taille du tableau entre 2 et 20.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille():entier Début Ecrire("donner un entier entre 2 et 20 ")) Lire(n) Tant que (n<2) ou (n>20) faire Ecrire("donner un entier entre 2 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 le nom saisi est forme uniquement des lettres et/ou espaces et ne dépasse pas 30 caractères
1 2 3 4 5 6 7 8 9 10 11 12 13 |
fonction verif_nom(ch:chaine):booleen Début Si long(ch)<=30 alors #si le nom est compose au maximum 30 caracteres 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]=' ') faire i<-i+1 Fin tant que retourner ('A'<=Majus(ch[i])<='Z') ou (ch[i]=' ') Sinon retourner Faux Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure remplir
Cette procédure remplit un tableau A par N noms de joueurs participant à cette compétition (avec 2 ≤ N ≤ 20) et calculer le score de 3 essais sachant que le résultat d’un essai est un entier positif inférieur ou égal à 10,
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(@a:tab1,@score:tab2;n:entier) Début Pour i de 0 à n-1 faire # saisi des noms des joueurss Ecrire("donner nom joueur N°"+i+" forme des lettres et/ou espaces: ") Lire(a[i]) Tant que (verif_nom(a[i])=Faux) faire Ecrire("donner nom joueur N°"+i+" forme des lettres et/ou espaces: ") Lire(a[i]) Fin tant que # saisi des 3 essais pour chaque joueur Pour j de 0 à 2 faire Ecrire("donner score de l'essai N°"+j+1+" entre 0 et 10: ") lire(e) Tant que (e<0) ou (e>10) faire Ecrire("donner score de l'essai N°"+j+1+" entre 0 et 10: ") Lire(e) Fin tant que # calcul du score score[i]<-score[i]+e Fin pour Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
e | entier |
La procédure tri
Cette procédure permet de trier le tableau score dans un ordre décroissant en utilisant la méthode de tri par sélection.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
procedure tri(@a:tab1,@score:tab2;n:entier) Début Pour i de 0 à n-2 faire max<-i Pour j de i+1 à n-1 faire Si score[max]<score[j] alors max<-j Fin si Fin pour Si i!=max alors temp<-score[max] score[max]<-score[i] score[i]<-temp temp=a[max] a[max]=a[i] a[i]=temp Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
max | entier |
La procédure afficher
Cette procédure permet d’afficher la liste des joueurs ainsi que les scores correspondants en commençant par le meilleur
1 2 3 4 5 6 7 |
procedure afficher(a:tab1,score:tab2;n:entier) Début Ecrire('La liste des joueurs est la suivante:') Pour i de 0 à n-1 faire Ecrire(a[i]+" avec un score de "+score[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 |
from numpy import array a=array([str]*100) # declaration du tableau des noms joueurs score=array([int()]*100) # declaration du tableau des scores def saisie_taille(): n=int(input("donner la taille du tableau entre 2 et 20: ")) while (n<2) or (n>20): n=int(input("donner la taille du tableau entre 2 et 20: ")) return n def verif_nom(ch): if len(ch)<=30 : #si le nom est compose au maximum 30 caracteres 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]==' ') else: return False def remplir(a,score,n): # remplir le tableau des noms for i in range (n) : a[i]=input("donner nom joueur N°"+str(i)+" forme des lettres et/ou espaces: ") while (verif_nom(a[i])==False): a[i]=input("donner nom joueur N°"+str(i)+" forme des lettres et/ou espaces: ") for j in range(3): e=int(input("donner score de l'essai N°"+str(j+1)+" entre 0 et 10: ")) while (e<0) or (e>10): e=int(input("donner score de l'essai N°"+str(j+1)+" entre 0 et 10: ")) score[i]=score[i]+e def tri(a,score,n): # on va utiliser la methode de tri par selection # pour trier le tableau score dans un ordre decroissant for i in range (n-1) : max=i for j in range (i+1,n) : if score[max]<score[j]: max=j if i!=max : temp=score[max] score[max]=score[i] score[i]=temp temp=a[max] a[max]=a[i] a[i]=temp def afficher(a,score,n): print('La liste des joueurs est la suivante:') for i in range (n) : print(a[i]+" avec un score de "+str(score[i])) #programme principal n=saisie_taille() remplir(a,score,n) tri(a,score,n) afficher(a,score,n) |
Exécution du programme
Pour créer une application en Python et Designer QT qui va saisir les noms des joueurs, calculer les scores des joueurs et afficher les meilleurs, 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 noms des joueurs.
QLineEdit
nommé 'ch2' pour entrer les essais des joueurs.
QPushButton
nommé 'remplira_bt' pour mettre les noms des joueurs dans le tableau A.
QPushButton
nommé 'remplirs_bt' pour calculer et mettre les scores dans le tableau score.
QPushButton
nommé 'trier_bt' pour trier le tableau score dans un ordre croissant.
QPushButton
nommé 'afficher_bt' pour afficher la liste des joueurs ainsi que les scores correspondants en commençant par le meilleur.
QLabel
nommé 'msg' pour afficher des messages d'erreur.
QLabel
nommé 'resultat' pour contenir la liste des joueurs ainsi que les scores correspondants en commençant par le meilleur.
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 |
from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication from numpy import array a=array([str]*60) # declaration des noms des joueurs score=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 createTabTA(): windows.tabta_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='' taille_nom=True verifunicite=True # parcourir les caracteres de la chaine CH1 while (i<len(ch)) and taille_nom and verif_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) a[j]=ch1 taille_nom=(len(ch1)<=30) if j>0: verifunicite=verif_unicite(a,j) ch1='' j=j+1 i=i+1 if (i==len(ch)) and (taille_nom) and (verifunicite): if 1<=j<=20: n=j # pour la taille des deux tableaux tab='' for k in range (j) : tab=tab+ 'a['+str(k)+']= '+a[k]+ '\n' #afficher les elements du tableau windows.tabta_label.setText(tab) else: windows.msg.setText("la taille du tableau doit etre entre 2 et 20") 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 createTabScore(): windows.tabts_label.clear() windows.msg.clear() ch = windows.ch2.text() for i in range(n): score[i]=0 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='' essai=0 test_essai=True # parcourir les caracteres de la chaine CH2 while(i<len(ch)) and test_essai and (('0'<=ch[i]<='9') or (ch[i]==' ')) : if ('0'<=ch[i]<='9'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : essai=essai+1 # remplir le tableau score par les essais de tir if (0<=int(ch1)<=10): score[j]=score[j]+int(ch1) if essai==3: essai=0 j=j+1 ch1='' else: test_essai=False i=i+1 if (i==len(ch)) and test_essai : print(str(j)) if j==n: #la taille du tableau s doit etre egal a la taille du tableau m tab='' for k in range (j) : tab=tab+ 'score['+str(k)+']= '+str(score[k])+ '\n' #afficher les elements du tableau windows.tabts_label.setText(tab) else: windows.msg.setText("la taille du tableau Score doit etre egal a "+str(n)) else: windows.msg.setText(" Les essais doit etre <=10 ") def tri(): # on va utiliser la methode de tri par selection # pour trier le tableau score dans un ordre decroissant for i in range (n-1) : max=i for j in range (i+1,n) : if score[max]<score[j]: max=j if i!=max : temp=score[max] score[max]=score[i] score[i]=temp temp=a[max] a[max]=a[i] a[i]=temp tab1='' tab2='' for k in range (n) : tab1=tab1+ 'a['+str(k)+']= '+a[k]+ '\n' tab2=tab2+ 'score['+str(k)+']= '+str(score[k])+ '\n' #afficher les elements des tableaux windows.tabta_label.setText(tab1) windows.tabts_label.setText(tab2) def afficher(): resultat='La liste des joueurs est la suivante:\n' for i in range (n) : resultat=resultat+a[i]+" avec un score de "+str(score[i])+"\n" windows.resultat.setText(resultat) windows.remplira_bt.clicked.connect ( createTabTA ) windows.remplirs_bt.clicked.connect ( createTabScore ) windows.trier_bt.clicked.connect ( tri ) windows.afficher_bt.clicked.connect ( afficher ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau A des noms des joueurs
2) Remplissage du tableau score des essais des joueurs
3) Trier le tableau score dans un ordre décroissant
4) Afficher la liste des joueurs ainsi que les scores correspondants en commençant par le meilleur.
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