Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| algorithme de classement | |
| | Auteur | Message |
---|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: algorithme de classement Mer 15 Mai 2013 - 21:16 | |
| Bonsoir à tous,
Comme je suis pas très bon en math, j'ai besoin de vous.
Voilà le sujet:
soit de 3 à 6 joueurs qui ont acquis des points au cours d'une partie (peu importe à quel jeu) 2 d'entre eux ont acquis le même nombre de points. Je souhaite déterminer qui est premier, deuxième, troisième, etc... les joueurs sont identifiés dans un tableau Joueur$(n%), leur score par Score%(n%) et leur classement par Class%(n%).
Je souhaite une procédure du style Calcul_Classement(Nb_joueur%) qui retourne le classement de chaque joueur et qui tient compte des joueurs qui arrivent à la même place. (EX: toto=1 paul et jacques=2 pierre=4)
A VOS CLAVIER !
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: algorithme de classement Mer 15 Mai 2013 - 21:35 | |
| Grace à JL35 (sur un autre poste) j'ai trouvé un début de piste écrite en QB64. - Code:
-
place = 11 ' calcul de la place FOR i = 1 TO 10 IF score > score(i) THEN IF i < place THEN place = i END IF NEXT i ' repartition des 10 scores IF place = 10 THEN score(place) = score IF place < 10 THEN FOR i = 10 TO place STEP -1 score(i) = score(i - 1) NEXT i score(place) = score END IF Je n'ai pas encore testé. A+ | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: algorithme de classement Mer 15 Mai 2013 - 23:36 | |
| Bonsoir à tous, bonsoir à Jean-Claude, Est-ce que ce petit bout de code répond à ta question? - Code:
-
dim score(10),place,flag,i score(0)=0 score(1)=200:score(2)=150:score(3)=120:score(4)=110:score(5)=100 score(6)=090:score(7)=080:score(8)=080:score(9)=070:score(10)=050
sc()
place = 110 message "votre score :"+str$(place)+" points"
FOR i = 1 TO 10 IF place > score(i) then flag=score(i):score(i)=place:place=flag NEXT i
message "nouveau classement:" sc() end
sub sc() for i=1 to 10 if score(i-1)=score(i) print i-1;" - ";score(i);" points" else print i;" - ";score(i);" points" end_if next i print end_sub
Pour les noms des joueurs je te laisse faire, vue que tu as déjà le classement, il suffit d'ajouter la variable nom_joueur$(i) et le tour est joué si je puis dire... A+ | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 16 Mai 2013 - 2:00 | |
| Je vais m'abstenir même si je me suis creusé les neurones un moment. Bignono a été plus rapide et surtout beaucoup plus court... Edit : GENIAL !!! ce code, Bignono . Je garde ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: algorithme de classement Jeu 16 Mai 2013 - 4:50 | |
| Salut tout le monde. Le code de Bignono est certes GENIAL pour citer Ygeronimi, mais je pense que ça ne répond pas à ce que Jean Claude attend. Si j’ai bien compris, Jean Claude dispose de 3 tableaux contenant respectivement les noms des joueurs et leur score pour les 2 premiers tableaux et désire calculer leur classement dans le 3ème tableau. Comme ces 3 trois tableaux sont indépendants l’un de l’autre, on doit d’abord trier le tableau des scores dans l’ordre décroissant et modifier en conséquence l’ordre dans le tableau des noms. Ainsi on obtient un classement selon le score : la relation entre ces 2 tableaux est l’ordre de leur indice. Il nous faut ensuite déterminer le rang de chaque joueur à partir du tableau trié des scores en tenant compte de l’ex aequo. Voici mon code : - Code:
-
' ****************************************************************************** ' POUR_JEAN_CLAUDE.BAS PAR PAPYDALL ' ******************************************************************************
dim nb_joueur : nb_joueur = 9 : ' Nombre de joueurs dim joueur$(nb_joueur) : ' tableau contenant les noms des joueurs dim score(nb_joueur) : ' tableau contenant les scores des joueurs dim class$(nb_joueur) : ' tableau contenant les classements des joueurs ' -------------------- Init_joueur(nb_joueur) Init_score(nb_joueur) tri_bulle(nb_joueur) classement(nb_joueur) Affiche_resultat(nb_joueur) ' --------------------
end ' ****************************************************************************** ' Remplissage du tableau des joueurs SUB Init_joueur(n) dim_local i for i = 1 to n : read joueur$(i) : next i ' les noms des joueurs data "Jean Claude","JL35 ","Jicehel ","Ygeronimi ","JJN4 " data "Bignono ","Cosmos70 ","Klaus ","Papydall " END_SUB ' ****************************************************************************** ' Remplissage du tableau des scores SUB Init_Score(n) dim_local i for i = 1 to n : read score(i) : next i ' Les scores des joueurs ' toutes mes excuses pour ceux qui ont un score faible; c'est INVOLONTAIRE ! data 19,15,18,15,15,12,11,18,11 END_SUB ' ****************************************************************************** ' Tri des joueurs selon leur score SUB Tri_bulle(n) dim_local i,permut,aux,aux$ REPEat permut = 0 for i = 1 to N-1 if score(i) < score(i+1) ' permuter score(i) et score(i+1) aux = score(i) : score(i) = score(i+1) : score(i+1) = aux ' permuter joueur(i) et joueur(i+1) aux$ = joueur$(i) : joueur$(i) = joueur$(i+1) : joueur$(i+1) = aux$ permut = 1 end_if next i until permut = 0 END_SUB ' ****************************************************************************** ' Détermination du classement de chaque joueur en tenant comptes des ex aequo SUB classement(n) dim_local i,r,s$,ex$ r = 1 : ex$ = " ex aequo " : s$ = string$(10," ") for i = 1 to n -1 class$(i) = str$(i) +s$ if score(i) = score(i+1) r = i repeat class$(i) = str$(r) + ex$ : i = i + 1 if i = nb_joueur then exit_for until score(i) <> score(i+1) class$(i) = str$(r) +ex$ end_if next i if score (i) = score(i-1) class$(i) = class$(i-1) else class$(i) = str$(i)+s$ end_if END_SUB ' ****************************************************************************** ' Affichage des joueurs avec classement et score SUB Affiche_resultat(n) dim_local i for i = 1 to n print class$(i) ; " "; joueur$(i) ; " ";score(i) next i END_SUB ' ******************************************************************************
Que ceux qui sont cités dans le programme comme des joueurs m’excusent surtout s’ils trouvent que leur score est faible ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: algorithme de classement Jeu 16 Mai 2013 - 7:27 | |
| Bravo à vous deux, c'est du rapide et de l’efficace... Je vais retenir celui de Bignono qui est simple et répond plus à mon besoin, car les joueurs de mon programme sont déjà identifiés et leur place est fixe car ils se trouvent dans un GRID. C'est un tableau de marquage. Celui de Papydall à le mérite de faire le classement avec le nom des joueurs. C'est un "Podium" d'ordre d'arrivée. En conclusion les 2 ont chacun leur utilité. Je vous remercie, je viens de gagner beaucoup de temps. J'espère vous fournir le code complet de mon jeu prochainement. Une mention à Papydall qui me place vainqueur dans son classement alors que je n'ai strictement rien fait.... | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: algorithme de classement Jeu 16 Mai 2013 - 9:17 | |
| Bonjour Jean-Claude, Je viens de m'apercevoir que mon code sur mon post précédent ne répondait pas tout à fait à ce que tu demandais. En effet, il y a un hic! Quand 3 ou 4 scores sont identiques, il ne sait pas les classer en ex aeco! Donc j'ai rectifié et refait un autre petit code avec les noms des joueurs, (tu remarqueras que tu es toujours en tête du classement ), qui doit savoir tenir compte du classement de plusieurs scores ex aeco! - Code:
-
dim score(10),nom$(10),joueur$,i_joueur$,place,flag,i score(0)=0 score(1)=200:score(2)=150:score(3)=150:score(4)=150:score(5)=150 score(6)=090:score(7)=080:score(8)=080:score(9)=070:score(10)=050 nom$(0)="" nom$(1)="Jean Claude":nom$(2)="JL35 ":nom$(3)="Jicehel ":nom$(4)="Ygeronimi ":nom$(5)="JJN4 " nom$(6)="Bignono ":nom$(7)="Cosmos70 ":nom$(8)="Klaus ":nom$(9)="Papydall ":nom$(10)="Untel " sc():' afficher le classement initial
place = 110:joueur$="Super Jack ":' ici le nouveau score et le nouveau joueur à intégrer au classement message "votre score : "+joueur$+str$(place)+" points"
classe():' ici on classe les scores message "nouveau classement:"
sc():' ici on affiche les nouveaux scores end
sub classe() for i=1 to 10 if place>score(i) then flag=score(i):score(i)=place:place=flag:i_joueur$=nom$(i):nom$(i)=joueur$:joueur$=i_joueur$ next i end_sub
sub sc() dim_local a$(10) for i=1 to 10 if score(i-1)=score(i) a$(i)=left$(a$(i-1),1)+" - "+str$(score(i))+" points ......"+nom$(i) else a$(i)=str$(i)+" - "+str$(score(i))+" points ......"+nom$(i) end_if print a$(i) next i print end_sub
PS: Je n'ai pas fait exprès de te classer en dernière position Papydall, Tu es quand même parmi les meilleurs du Forum!!! A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: algorithme de classement Jeu 16 Mai 2013 - 12:30 | |
| Merci Bignono. Moi aussi, je modifie mon code, pour tenir compte que l’envoi d’un code sur le forum, modifie les espaces dans une string ! Je profite de formater l’affichage pour un visu acceptable, mais ça n’a rien à voir avec l’algorithme utilisé. PS : désolé Jean Claude, tu n’es plus le 1er : un invité t’a déclassé ! Ne nous laisse pas trop languir d’attendre de pouvoir jouer à ton jeu que tu caches TOP SECRET ! - Code:
-
' ****************************************************************************** ' POUR_JEAN_CLAUDE.BAS PAR PAPYDALL ' ******************************************************************************
dim nb_joueur : nb_joueur = 16 : ' Nombre de joueurs dim joueur$(nb_joueur) : ' tableau contenant les noms des joueurs dim score(nb_joueur) : ' tableau contenant les scores des joueurs dim class$(nb_joueur) : ' tableau contenant les classements des joueurs ' -------------------- Init_joueur(nb_joueur) Init_score(nb_joueur) tri_bulle(nb_joueur) classement(nb_joueur) Affiche_resultat(nb_joueur) ' --------------------
end ' ****************************************************************************** ' Remplissage du tableau des joueurs SUB Init_joueur(n) dim_local i for i = 1 to n read joueur$(i) ' Ajouter les espaces nécessaires pour formater l'affichage des noms des joueurs joueur$(i) = joueur$(i) + string$(12-len(joueur$(i))," ") next i ' les noms des joueurs data "Jean Claude","JL35","Jicehel","Ygeronimi","JJN4","Gigi75","Pan59","Sergeause" data "Bignono","Cosmos70","Klaus","Papydall","Mindstorm","Froggy One","Rmont","Invité" END_SUB ' ****************************************************************************** ' Remplissage du tableau des scores SUB Init_Score(n) dim_local i for i = 1 to n : read score(i) : next i ' Les scores des joueurs ' toutes mes excuses pour ceux qui ont un score faible; c'est INVOLONTAIRE ! data 19,15,18,15,15,15,17,18,17,17,19,13,14,16,15,20 END_SUB ' ****************************************************************************** ' Tri des joueurs selon leur score SUB Tri_bulle(n) dim_local i,permut,aux,aux$ REPEAT permut = 0 for i = 1 to N-1 if score(i) < score(i+1) ' permuter score(i) et score(i+1) aux = score(i) : score(i) = score(i+1) : score(i+1) = aux ' permuter joueur(i) et joueur(i+1) aux$ = joueur$(i) : joueur$(i) = joueur$(i+1) : joueur$(i+1) = aux$ permut = 1 end_if next i until permut = 0 END_SUB ' ****************************************************************************** ' Détermination du classement de chaque joueur en tenant comptes des ex aequo SUB classement(n) dim_local i,r,s$,ex$,z$ r = 1 : ex$ = " ex aequo " : s$ = string$(10," ") for i = 1 to n -1 if i < 10 then z$ = "0" : else : z$ = "" : ' pour formater les rangs class$(i) = z$ + str$(i) + s$ if score(i) = score(i+1) r = i repeat class$(i) = z$ + str$(r) + ex$ : i = i + 1 if i = nb_joueur then exit_for until score(i) <> score(i+1)
class$(i) = z$ + str$(r) + ex$ end_if next i if score (i) = score(i-1) class$(i) = class$(i-1) else class$(i) = z$ + str$(i)+ s$ end_if END_SUB ' ****************************************************************************** ' Affichage des joueurs avec classement et score SUB Affiche_resultat(n) dim_local i for i = 1 to n print class$(i) ; " "; joueur$(i) ; " ";score(i) next i END_SUB ' ******************************************************************************
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: algorithme de classement Sam 18 Mai 2013 - 18:45 | |
| Coucou me revoilou. Après bien des essais de vos codes, j'ai concocté le mien car mon problème était mal expliqué. Ce que je voulait c'était d'afficher la classement dans un GRID sans changer la position des joueurs dans ce GRID Voici mon code - Code:
-
dim n%,nbj% nbj%=6:dim score%(nbj%),class%(nbj%) label Afi_classement
' le grid dim Grid_1%:Grid_1%=1:grid Grid_1%:width Grid_1%,450 grid_column Grid_1%,7:grid_row Grid_1%,3:grid_row_height Grid_1%,30 for n%=1 to nbj%:grid_write Grid_1%,1,1+n%,"joueur "+str$(n%):next n%:' les joueurs grid_write Grid_1%,2,1,"Score":grid_write Grid_1%,3,1,"Classement"
' attribution des points score%(1)=10:score%(2)=8:score%(3)=10:score%(4)=30:score%(5)=5:score%(6)=100 ' affiche les scores for n%=1 to nbj%:grid_write Grid_1%,2,1+n%,str$(score%(n%)):next n%
classe()
END
' ---------- sub classe() dim_local i%,i2%,i3%,cl%,sc%,nb_index%,index%(nbj%) ' initialise pour permettre l'appel à chaque changement d'un score sc%=0:nb_index%=0:cl%=1:for i%=1 to nbj%:class%(i%)=0:next i% ' classe for i3%=1 to nbj% ' recherche meilleur score for i2%=1 to nbj% for i%=1 to nbj% if class%(i%)=0 and sc%<score%(i%) then sc%=score%(i%) next i% next i2% ' recheche l'index du ou des meilleur scores for i%=1 to nbj% if index%(i%)=0 and sc%=score%(i%) then index%(i%)=i%:class%(i%)=cl%:nb_index%=nb_index%+1 next i% gosub Afi_classement:' affiche le classement maintenant (en cas de sortie) if cl%=nbj% then exit_sub sc%=0:cl%=cl%+nb_index%:nb_index%=0 next i3% end_sub ' ------------- Afi_classement: ' affiche le classement du ou des vainqueurs si index%(i%)<>0 for i%=1 to nbj% if index%(i%)<>0 then grid_write Grid_1%,3,index%(i%)+1,string$(8," ")+str$(class%(i%)) next i% return ' ----
Encore merci car vos codes sont valables pour l'affichage en ordre (du vainqueur au dernier) A+ PS: pour une bonne compréhension de la suite du topic je ne corrige pas ma phote.
Dernière édition par Jean Claude le Sam 18 Mai 2013 - 21:07, édité 1 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: algorithme de classement Sam 18 Mai 2013 - 20:24 | |
| Salut Jean Claude Tu as bien fait « d’afficher la classement dans un GRID sans changer la position des joueurs dans ce GRID » En tout cas, c’est un bon code, merci ; on pourra s’en servir. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: algorithme de classement Sam 18 Mai 2013 - 21:03 | |
| Il est impitoyable ce Papydall, Je voulais dire que mon code c'était la classe.... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: algorithme de classement Dim 19 Mai 2013 - 1:11 | |
| C'est bien ce que je disais .... que ton code c'était la classe ment | |
| | | Contenu sponsorisé
| Sujet: Re: algorithme de classement | |
| |
| | | | algorithme de classement | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |