Une station de radio lance chaque début de semaine un concours hebdomadaire intitulé « Hitparade » pour classer cinq titres de chansons qu’elle propose à ses auditeurs et affiche le résultat du classement le samedi.
Tout au long de la semaine, un responsable de la station reçoit par téléphone les propositions des participants au concours des participants au concours parmi ses auditeurs qui sont appelés à choisir le titre préféré afin d’ajouter à son score 3 points.
Pour obtenir le classement final des cinq chansons suite à la participation d’un nombre donné des auditeurs de la station, on se propose d’écrire un programme qui permet de :
- Remplir un tableau T1 par les cinq titres des chansons, sachant qu’un titre est composé uniquement par des lettres alphabétiques et des espaces.
- Saisir le nombre N de participants avec 5≤N≤100.
Générer un tableau T2 représentant les scores des cinq chansons en ajoutant 3 points au score de chacune si le numéro qui lui correspond a été choisi par un participant. Ce numéro est un chiffre allant de 1 à 5, représentant l’emplacement de la chanson dans le tableau T1.
- Afficher le classement des chansons, comme indiqué dans l’exemple ci-après, en commençant par le titre de la chanson ayant le plus grand score. Il est à noter que les chansons ayant un même score auront un même score auront un même rang dans le classement.
Exemple : T1
Happy | Sorry | Me Quemo | Rosa | Hello |
Et un nombre de participants N=11 ayant fait les mêmes suivants :
Choix de participant n°1 : 5
Choix de participant n°2 : 4
Choix de participant n°3 : 5
Choix de participant n°4 : 1
Choix de participant n°5 : 2
Choix de participant n°6 : 5
Choix de participant n°7 : 1
Choix de participant n°8 : 2
Choix de participant n°9 : 4
Choix de participant n°10 : 1
Choix de participant n°11 : 5
On aura T2 :
9 | 6 | 0 | 6 | 12 |
Le programme affiche :
Le classement est :
Rang 1 : Hello
Rang 2 : Happy
Rang 3 : Sorry, Rosa
Rang4 : Me Quemo
Voici une solution algorithmique en pseudo-code pour résoudre ce problème :
Variables
T1
: tableau contenant les 5 titres de chansons
T2
: tableau contenant les scores des 5 chansons, initialisé à zéro
N
: nombre de participants (entier)
choix
: tableau des choix des participants (tableau de taille N
)
Algorithme
1- Initialiser le tableau T1
avec les 5 titres de chansons.
2- Initialiser le tableau T2
avec des scores à 0 pour chaque chanson.
3- Saisir le nombre de participants N
tel que 5 ≤ N
≤ 100.
4- Pour chaque participant, saisir le choix d'une chanson (nombre de 1 à 5). Si le choix correspond à une chanson, ajouter 3 points au score correspondant dans T2
.
5- Trier les chansons en fonction de leurs scores dans l'ordre décroissant. Si deux chansons ont le même score, elles partagent le même rang.
6- Afficher le classement final des chansons.
Dans cet algorithme, On va utiliser trois fonctions et quatre procédures:
Algorithme du programme Principal
1 2 3 4 5 6 7 8 |
Algorithme code_participant Debut remplir(t1) nbr_participants<-saisie_nbr_participants() generer_scores(t2,nbr_participants) tri_classement_chansons(t1,t2) afficher_classement(t1,t2) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
t1 | tableaux des chaînes |
t2 | tableaux des entiers |
nbr_participants | entier |
La fonction verif_chanson
Cette fonction vérifie si une chaîne est composée uniquement des lettres et des espaces.
1 2 3 4 5 6 7 8 |
fonction verif_chanson(ch):booleen Début i<-0 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') Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure remplir
Cette procédure remplit le tableau t par des noms des chansons composés uniquement des lettres et des espaces
1 2 3 4 5 6 7 8 9 10 11 |
procedure remplir(@t:tab) Début Pour i de 0 à 4 faire Ecrire("donner chanson N°"+str(i)+" forme par des lettres ou des espaces:") lire(t[i]) Tant que verif_chanson(t[i])=Faux faire Ecrire("donner chanson N°"+str(i)+" forme par des lettres ou des espaces: ") lire(t[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction saisie_nbr_participants
Cette fonction saisit le nombre des participants entre 5 et 100.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_nbr_participants():entier Début Ecrire('Donner le nombre des participants entre 5 et 100: ') Lire(n) Tant que n<5 ou n>100 faire Ecrire('Donner le nombre des participants entre 5 et 100: ') Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La fonction saisie_choix
Cette fonction saisit le choix de le la chanson entre 1 et 5.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_nbr_participants(i:entier):entier Début Ecrire('Donner le choix du numero du chanson entre 1 et 5 pour participant N°:'+i+': ') Lire(c) Tant que c<1 ou c>5 faire Ecrire('Donner le choix du numero du chanson entre 1 et 5 pour participant N°:'+i+': ') Lire(c) Fin tant que retourner c Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
c | entier |
La procédure generer_scores
Cette procédure génère dans un troisième tableau tc, un code pour chaque participant.
1 2 3 4 5 6 7 |
procedure generer_scores(@t:tab,nbr_partipants:entier) Début Pour i de 0 à nbr_participants-1 faire c<-saisie_choix(i) t[c-1]<-t[c-1]+3 # ajouter le score saisi par l'utilisateur au tableau t2 Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
c | entier |
La procédure tri_classement_chansons
Cette procédure trie le tableau t2 des scores en utilisant la méthode par sélection.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
procedure tri_classement_chansons(@t1:tab1;@t2:tab2) Début Pour i de 0 à 4 faire max<-i Pour j de i+1 à 4: Si t2[max]<t2[j] alors max<-j Fin si Fin pour Si t2[i]<t2[max] alors temp<-t2[max] t2[max]<-t2[i] t2[i]<-temp temp=t1[max] t1[max]=t1[i] t1[i]=temp Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
max | entier |
La procédure afficher_classement
Cette procédure affiche le classement des chansons selon leurs scores
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure afficher_classement(t1:tab1;t2:tab2) Début Ecrire('rang 1= '+str(t1[0]),end='') j<-1 Pour i de 1 à 4 faire Si t2[i-1]=t2[i] alors Ecrire(', '+t1[i]) Sinon Ecrire() # retour à la ligne j<-j+1 Ecrire('rang '+j+'= '+t1[i]) Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | 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 |
from numpy import array t1=array([str]*30) # declaration du tableau des chansons t2=array([int()]*30) # declaration du tableau des scores def verif_chanson(ch): #verifier que la chanson est compose seulement par des lettres et des espaces i=0 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 remplir(t): # remplir le tableau des chansons for i in range (5) : t[i]=input("donner chanson N°"+str(i)+" forme par des lettres ou des espaces: ") while (verif_chanson(t[i])==False) : t[i]=input("donner chanson N°"+str(i)+" forme par des lettres ou des espaces: ") def saisie_nbr_participants(): n=int(input('Donner le nombre des participants entre 5 et 100: ')) while n<5 or n>100 : n=int(input('Donner le nombre des participants entre 5 et 100: ')) return n def saisie_choix(i): # saisie le choix de la chanson c=int(input('Donner le choix du numero du chanson entre 1 et 5 pour participant N°:'+str(i)+': ')) while c<1 or c>5 : c=int(input('Donner le choix du numero du chanson entre 1 et 5 pour participant N°:'+str(i)+': ')) return c def generer_scores(t,nbr_partipants): for i in range(nbr_participants): c=saisie_choix(i) t[c-1]=t[c-1]+3 # ajouter le score saisi par l'utilisateur au tableau t2 def tri_classement_chansons(t1,t2): # trier le tableau t2 des ranrs en utilisant la methode par selection for i in range(0,4): max=i for j in range(i+1,5): if t2[max]<t2[j] : max=j if t2[i]<t2[max]: temp=t2[max] t2[max]=t2[i] t2[i]=temp temp=t1[max] t1[max]=t1[i] t1[i]=temp def afficher_classement(t1,t2): #afficher le classement des chansons selon les rangs print('rang 1= '+str(t1[0]),end='') j=1 for i in range(1,5): if t2[i-1]==t2[i] : print(', '+str(t1[i]),end='') else: print() j=j+1 print('rang '+str(j)+'= '+str(t1[i]),end='') #programme principal remplir(t1) nbr_participants=saisie_nbr_participants() generer_scores(t2,nbr_participants) tri_classement_chansons(t1,t2) afficher_classement(t1,t2) |
Exécution du programme
Pour créer une application en Python et Designer QT qui classe cinq titres de chansons qu’elle propose à ses auditeurs et affiche le résultat du classement, 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 chansons.
QLineEdit
nommé 'choix' pour entrer les choix des chansons.
QPushButton
nommé 'remplirtn_bt' pour mettre les nom des chansons dans le tableau t1.
QPushButton
nommé 'remplirtg_bt' pour mettre les choix des chansons dans le tableau t2.
QPushButton
nommé 'trier_bt' pour trier le tableau t2 dans un ordre décroissant en suivant la méthode par sélection.
QPushButton
nommé 'afficher_bt' pour recherche le classement des chansons selon leurs scores.
QLabel
nommé 'msg' pour afficher des messages d'erreur.
QLabel
nommé 'tabt1_label' pour afficher les noms des chansons du tableau t1.
QLabel
nommé 'tabt2_label' pour afficher les scores du tableau t2.
QLabel
nommé 'resultat' pour afficher le classement des chansons selon leurs scores.
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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array t1=array([str]*30) # declaration du tableau des chansons t2=array([int()]*30) # declaration du tableau des 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 # Procedure qui remplit un tableau des chansons a partir d'une chaine des caractères def createTab1(): windows.tabt1_label.clear() windows.msg.clear() ch = windows.ch.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 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)) : # remplir le tableau t2 par des chansons t1[j]=ch1 ch1='' j=j+1 i=i+1 if i==len(ch): if j==5: tab='' for k in range (j) : tab=tab+ 't1['+str(k)+']= '+t1[k]+ '\n' #afficher les elements du tableau windows.tabt1_label.setText(tab) else: windows.msg.setText("le nombre des chansons = 5") else: windows.msg.setText("les mots doit etre compose des lettres et des espaces") # Procedure qui remplit un tableau des rangs a partir d'une chaine des caractère def createTab2(): for i in range(6): t2[i]=0 windows.tabt2_label.clear() windows.msg.clear() ch = windows.choix.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='' test_chiffre=True # parcourir les caracteres de la chaine while(i<len(ch)) and test_chiffre and ('1'<=ch[i]<='5' or ch[i]==' ') : if ('1'<=ch[i].upper()<='5'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau t2 par des scores t2[int(ch1)-1]=t2[int(ch1)-1]+3 test_chiffre=('1'<=ch1<='5') ch1='' j=j+1 i=i+1 if i==len(ch): if 5<=j<=100: tab='' for k in range (5) : tab=tab+ 't2['+str(k)+']= '+str(t2[k])+ '\n' #afficher les elements du tableau windows.tabt2_label.setText(tab) else: windows.msg.setText("le nombre des participants doit etre entre 5 et 100") else: windows.msg.setText("les choix doit etre 1 et 5") def tri_classement_chansons(): # trier le tableau t2 des ranrs en utilisant la methode par selection for i in range(0,4): max=i for j in range(i+1,5): if t2[max]<t2[j] : max=j if t2[i]<t2[max]: temp=t2[max] t2[max]=t2[i] t2[i]=temp temp=t1[max] t1[max]=t1[i] t1[i]=temp tab1='' tab2='' for k in range (5) : tab1=tab1+ 't1['+str(k)+']= '+str(t1[k])+ '\n' tab2=tab2+ 't2['+str(k)+']= '+str(t2[k])+ '\n' #afficher les elements du tableau windows.tabt1_label.setText(tab1) windows.tabt2_label.setText(tab2) def afficher_classement(): #afficher le classement des chansons selon les rangs liste='rang 1= '+str(t1[0]) j=1 for i in range(1,5): if t2[i-1]==t2[i] : liste=liste+', '+str(t1[i]) else: liste=liste+'\n' #retour a la ligne j=j+1 liste=liste+'rang '+str(j)+'= '+str(t1[i]) #afficher le classement des chansons windows.resultat.setText(liste) windows.remplirt1_bt.clicked.connect ( createTab1 ) windows.remplirt2_bt.clicked.connect ( createTab2 ) windows.trier_bt.clicked.connect ( tri_classement_chansons ) windows.afficher_bt.clicked.connect ( afficher_classement ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau des chansons
2) Remplissage du tableau des scores
3) trier le tableau des scores
*
4) Afficher le classement des chansons selon leurs scores
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