Bogorno
Messages postés16Date d'inscriptionmardi 8 mars 2005StatutMembreDernière intervention19 avril 2007
-
1 avril 2007 à 16:02
Bogorno
Messages postés16Date d'inscriptionmardi 8 mars 2005StatutMembreDernière intervention19 avril 2007
-
6 avril 2007 à 06:36
Bonjour,
Je suis débutante et je voudrai faire une application capable de générer le classement d'une course.
1- Entrée des données des courreurs:
Nom
Numéro
Points dans le round 1
Points dans le round 2
2- L'application calcule le total de point de chaque courreur
3- On génère le classement du plus petit au plus grand nombre de point
4- On print et on sauvegarde
5- Je souhaiterai avoir la possibilité de charger un ancien classement
Je ne sais pas dans quoi mettre les données pour les trier et pour que je puisse les sauvegarder et les charger à volonté... Toute aide sera fortement apprécié.
Bogorno
Messages postés16Date d'inscriptionmardi 8 mars 2005StatutMembreDernière intervention19 avril 2007 1 avril 2007 à 23:03
Merci Bluebibubble mais l'ouverture dans Visual Studio 2005 me donne un message d'erreur concernant Module1.bas qui est manquant.
D'ou vient ce zip?
Merci.
Rita
Bogorno
Messages postés16Date d'inscriptionmardi 8 mars 2005StatutMembreDernière intervention19 avril 2007 2 avril 2007 à 02:12
Hey merci bien Bluebibubble!
Si je comprends bien tu as réalisé mon application pour l'occasion.
Le passage à Visual Studio 2005 fait en sorte que certains éléments doivent être changé cependant j'espère bien en venir à bout!
Petite question: à quoi sert dans la Private Sub FrmMain_Resize le -10 * 15 et le -50 * 15 ?
Merci encore pour ton aide.
Rita
Vous n’avez pas trouvé la réponse que vous recherchez ?
BLUEBIBUBBLE
Messages postés116Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention10 avril 20131 2 avril 2007 à 16:15
C'est pour redimensionné la listview a la taille de la fenètre, moins 10 pixels en X, et moins 50 pixels en Y, sinon la listview n'est pas totalement visible.
(Pixel*15=twips sur 99% des systemes)
Note: Il est préférable d'écrire:
LV.Move 0, 0, Me.Width - 10 * Screen.TwipsPerPixelX, Me.Height - 50 * Screen.TwipsPerPixelY
Screen.TwipsPerPixelX et Screen.TwipsPerPixelY retourne 15 sur un écran standard.
Bogorno
Messages postés16Date d'inscriptionmardi 8 mars 2005StatutMembreDernière intervention19 avril 2007 2 avril 2007 à 18:40
Je continue à décortiquer ton code.
Après l'import dans VS 2005, j'ai baissé la position de la LV car elle cachait le menu.
Je regarde aussi pour intéger l'impression du classement. Et finalement, la possibilité de modifier une entré après une erreur.
Grace à cela je progresse bien!
Merci encore.
Rita
BLUEBIBUBBLE
Messages postés116Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention10 avril 20131 3 avril 2007 à 11:41
Le principe est assez simple, on appelle QShort avec comme params l'index min et l'index max,
puis Qshort compare les extrémités de la liste avec la valeur centrale et croise (swap) ce qui doit l'être. Ensuite QShort s'apelle lui même (récursivité) jusqu'a ce que toute la liste soit triée. C'est bien plus rapide qu'un tri a bulle dès que la liste s'allonge un peu...
L'algo s'appelle 'MergeShort' parfois aussi appeler QuickShort (d'ou QShort), des recherches avec ces mots clefs vont te faire atterir sur des sites qui décrivent l'algo en long et en large, par example:
http://en.wikipedia.org/wiki/Mergesort
Voila pour trier dans l'ordre croissant (les lignes modifiées sont marquées *):
Private Sub QShort(L As Long, R As Long)
Dim i As Long, j As Long, X As Long, Tmp As String, M As Long i L: j R: X = Datas((R + L) \ 2).Total
Do
Do While Datas(i).Total < X: i = i + 1: Loop '* Skip
Do While Datas(j).Total > X: j = j - 1: Loop '* Skip
If i <= j Then
Tmp = Datas(i).Nom 'Swap les données
Datas(i).Nom = Datas(j).Nom
Datas(j).Nom = Tmp
M = Datas(i).Number
Datas(i).Number = Datas(j).Number
Datas(j).Number = M
M = Datas(i).Round1
Datas(i).Round1 = Datas(j).Round1
Datas(j).Round1 = M
M = Datas(i).Round2
Datas(i).Round2 = Datas(j).Round2
Datas(j).Round2 = M
M = Datas(i).Total
Datas(i).Total = Datas(j).Total
Datas(j).Total = M
i = i + 1
j = j - 1
End If
Loop Until i > j
If L < j Then Call QShort(L, j)
If i < R Then Call QShort(i, R)
End Sub
Bogorno
Messages postés16Date d'inscriptionmardi 8 mars 2005StatutMembreDernière intervention19 avril 2007 4 avril 2007 à 03:07
Avec le lien de Wikipedia j'ai bien compris la méthode.
Pour ce qui est de la partie 'Swap les données je suis dans la brume...
J'ai voulu essayer d'ajouter une colonne suplémentaire dans la listview cependant je ne vois pas à quel endroit le titre de la colonne s'affiche, j'aimerai en même temps donner une largeur spécifique.
Je pense avoir compris pour l'affichage des données d'ailleurs j'ai ajouté une colonne round3. Le total se met à jour mais la colonne ne s'affiche pas dans la LV...
BLUEBIBUBBLE
Messages postés116Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention10 avril 20131 4 avril 2007 à 09:39
Dans la FrmMain, sélectionner le control ListView, puis propriétés:
DoubleClick sur CUSTOM, puis l'onglet 'Column Headers' et enfin 'Insert column'
Là c'est possible de modifier le titre et la largeur...
Pour le Swap des donnée, il s'agit de 'croisés' les valeurs de Datas(i) et de Datas(j):
on ne peut pas croisé directement toute la structure, il faut croisé chaque éléments de la structure
Bogorno
Messages postés16Date d'inscriptionmardi 8 mars 2005StatutMembreDernière intervention19 avril 2007 5 avril 2007 à 03:31
Je comprends mieux le swap maintenant merci!
Pas de problème pour ajouter des colonnes, tout s'affiche correctement. Le total se fait correctement lui aussi.
J'ai modifié FrmMain en ajoutant 2 TabControl, dans le premier j'entre les données relatives aux participants et dans l'autre j'ai mis la LV. Tout marche bien également. Merci encore car tout cela c'est grâce à tes explications!
Pour la prochaine étape je voudrais faire une action si le total de plusieurs concurants est identique.
En fait les ex aequo sont départagés par leur nombre de 0.
Si A a 10 pts (dont 4 zéros) et que B a 10 pts aussi (mais 6 zéros), le premier sera B et le deuxième ex aequo sera A.
Je verrai bien une boîte de dialogue qui s'ouvrirait en disant A et B sont ex aequo, veuillez entrer leur nombre de zéro. Et ainsi de suite pour tous les ex aequo, puis le classement se mettrait à jour.
Je comptait insérer un test dans le swap mais ça plante maintenant.