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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array m=array([str]*30) # declaration du tableau des maladies s=array([str]*30) # declaration du tableau des symptomes 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 des adherents a partir d'une chaine des caractères def createTabM(): windows.tabm_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='' # parcourir les caracteres de la chaine CH1 while (i<len(ch)) and (('A'<=ch[i]<='Z') or ch[i]==' ') : if ('A'<=ch[i]<='Z'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau M par les noms des maladies m[j]=ch1 ch1='' j=j+1 i=i+1 if (i==len(ch)): if 2<=j<=100: n=j # pour la taille des deux tableaux tab='' for k in range (j) : tab=tab+ 'm['+str(k)+']= '+m[k]+ '\n' #afficher les elements du tableau windows.tabm_label.setText(tab) else: windows.msg.setText("la taille du tableau doit etre entre 2 et 100") else: windows.msg.setText("donner les noms des maladies forme des majuscules") # Procedure qui remplit un tableau des commenatires a partir d'une chaine des caractères def createTabS(): 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='' # parcourir les caracteres de la chaine CH2 while(i<len(ch)) and (('A'<=ch[i]<='Z') or (ch[i]==' ') or (ch[i]=='#')) : if (ch[i]!=' '): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau r par des réponses VRAI ou FAUx s[j]=ch1 ch1='' j=j+1 i=i+1 if (i==len(ch)): 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+ 's['+str(k)+']= '+s[k]+ '\n' #afficher les elements du tableau windows.tabts_label.setText(tab) else: windows.msg.setText("la taille du tableau S doit etre egal a "+str(n)) else: windows.msg.setText("symptomes doivent etre forme des majuscules, # et des espaces: ") def recherche_maladies(): symptome = windows.symptome.text() symptome.find('#') liste_maladies='' for i in range (n) : if s[i].find(symptome)>=0 : liste_maladies=liste_maladies+m[i]+', ' if liste_maladies!='': resultat='Les maladies probables sont: '+liste_maladies else: resultat="On n 'a pas trouve des maladies pour votre symptome" windows.resultat.setText(resultat) windows.remplirm_bt.clicked.connect ( createTabM ) windows.remplirs_bt.clicked.connect ( createTabS ) windows.afficher_bt.clicked.connect ( recherche_maladies ) 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