Page 2 sur 2
Publié : ven. 05/nov./2004 9:17
par Good07
Bonjour Soldat !
Merci pour tous ces programmes.
J'ai fait les tests avec mon ordinateur :
AMD 3GHz
512 Mo
affichage FX5200
pour 10000 balles (c'est pas cher ...

)
En suprimant l'affichage du debbuger:
Premier prog:
test1=6.703 s
test2=5.672 s
deuxième prog:
test1=6.359 s
test2=5.781 s
Extra
Je n'ai pas essayé en utilisant des tableaux pour voir la différence.
Pour Crystal Noir:
et ben puisque c comme ca je boude na !
Non ! ne t'en va pas.
J'ai bien récupéré ton code sur le site mais j'ai un petit problème avec. J'utilise la dernière version de Pure 3.92 et lorsque je compile j'ai le message suivant:
Erreur syntaxe ligne 4 dans include procédures.pb
ligne 4 : Bullet()x = x
je pense qu'il devrait y avoir bullet()\x=x
mais même là il me répète la même chose
Alors je ne vois pas
Mais dans l'ensemble, jai étudié les listings et c'est super. Je vois que les listes chaînées non plus de secrets pour toi. Ni pour le soldat inconnu d'ailleur.
Merci pour tous ces progs.
Il ne me reste plus qu'a avoir des idées pour mettre tout ça en pratique.
A+
André
Publié : ven. 05/nov./2004 10:14
par Crystal Noir
oui tout à fait en fait il manque le \ car le forum me les as squizzé
Par contre si tu pouvais me dire le message d'erreur que tu as exactement. De toute facon je vais le corriger.
Publié : ven. 05/nov./2004 10:22
par Le Soldat Inconnu
test1=6.703 s
test2=5.672 s
deuxième prog:
test1=6.359 s
test2=5.781 s
Les valeurs sont dans le même ordre que sur mon programme ?
moi j'ai ceci avec mon dernier code sur le 500 de mes parents (avec 10000 balles)
- Méthode 1 : 5978
- Méthode 2 : 11106
- Par contre, avec un tableau, on va beaucoup plus vite qu'avec une liste chainée, avec 10000 balles, j'obtients 1332ms
et ça fait une très grosse différence par rapport à toi entre les 2 méthodes avec les listes chainée
et entre 5978 (sur mon 500) et 6359 (sur ton 3000), je trouve que ton PC est un poil à la ramasse
Tu as PB à jour ?
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.92
;
; Explication du programme :
; Faire un test entre chaque valeur d'une liste chainée
; cette exemple s'appuie sur des balles en position X Y, le test qui n'est pas représenté ici est une collision
Structure InfoBalle
x.l
y.l
; etc ....
EndStructure
NewList Balle.InfoBalle()
NbBalles = 4
; On ajoute #NbBalles balles
For n = 1 To NbBalles
AddElement(Balle())
Balle()\x = n
Balle()\y = n
Next
PosListeBalle1 = -1
ResetList(Balle())
; Boucle 1
While NextElement(Balle()) ; On passe à l'élément suivant
PosListeBalle1 + 1 ; On compte pour connaître le numéro de l'élément
*BalleTemp.InfoBalle = @Balle() ; On récupère l'élément courant de la boucle 1
PosListeBalle2 = -1
ResetList(Balle())
; Boucle 2
While NextElement(Balle()) ; On passe à l'élément suivant
PosListeBalle2 + 1 ; On compte pour connaître le numéro de l'élément
; On compare la balle à la position PosListeBalle1 dans la boucle 1 avec celle à la position PosListeBalle2 dans la boucle 2
If PosListeBalle1 <> PosListeBalle2 ; Ce test sert à éviter d'avoir le test sur la même balle
Debug Str(*BalleTemp\x) + ", " + Str(*BalleTemp\y) + " / " + Str(Balle()\x) + ", " + Str(Balle()\y)
EndIf
Wend
ChangeCurrentElement(Balle(), *BalleTemp) ; On remet l'élément courant de la boucle 1
Wend
;- Test de rapidité
ClearList(Balle())
NbBalles = 10000
; On ajoute NbBalles balles
For n = 1 To NbBalles
AddElement(Balle())
Balle()\x = n
Balle()\y = n
Next
Temps1 = GetTickCount_()
PosListeBalle1 = -1
ResetList(Balle())
While NextElement(Balle())
PosListeBalle1 + 1
*BalleTemp.InfoBalle = @Balle()
PosListeBalle2 = -1
ResetList(Balle())
While NextElement(Balle())
PosListeBalle2 + 1
If PosListeBalle1 <> PosListeBalle2
Debug Str(*BalleTemp\x) + ", " + Str(*BalleTemp\y) + " / " + Str(Balle()\x) + ", " + Str(Balle()\y)
EndIf
Wend
ChangeCurrentElement(Balle(), *BalleTemp)
Wend
Temps2 = GetTickCount_()
ResetList(Balle())
While NextElement(Balle())
PosListeBalle = ListIndex(Balle())
*BalleTemp.InfoBalle = @Balle()
ResetList(Balle())
While NextElement(Balle())
If PosListeBalle <> ListIndex(Balle())
Debug Str(*BalleTemp\x) + ", " + Str(*BalleTemp\y) + " / " + Str(Balle()\x) + ", " + Str(Balle()\y)
EndIf
Wend
SelectElement(Balle(), PosListeBalle)
Wend
Temps3 = GetTickCount_()
; On teste avec un tableau
; d'abord, on recopie les données dans un tableau pour travailler sur le même échantillon
Dim TableauBalle.InfoBalle(NbBalles - 1)
ResetList(Balle())
For n = 0 To NbBalles - 1
NextElement(Balle())
TableauBalle(n)\x = Balle()\x
TableauBalle(n)\y = Balle()\y
Next
Temps4 = GetTickCount_()
For n = 0 To NbBalles - 1
For nn = 0 To NbBalles - 1
If n <> nn
Debug Str(TableauBalle(n)\x) + ", " + Str(TableauBalle(n)\y) + " / " + Str(TableauBalle(nn)\x) + ", " + Str(TableauBalle(nn)\y)
EndIf
Next
Next
Temps5 = GetTickCount_()
MessageRequester("Rapidité", "Méthode 1 = " + Str(Temps2 - Temps1) + Chr(10) + "Méthode 2 = " + Str(Temps3 - Temps2) + Chr(10) + "Méthode 3 (Tableau) = " + Str(Temps5 - Temps4), 0)
Publié : ven. 05/nov./2004 10:27
par Good07
Bonjour Crystal Noir.
Je te donne le message d'erreur complet. Dans mon précédent post je l'avais un peu tronqué.
Ligne 121:Error in the included file 'C\procedures.pb
ligne 4:Syntax Error
Bon je part pour Marseille dans une heure. Je verrai ça Dimanche soir si tu as corrigé sinon je ferai un cherché remplacé sur toutes les expressions de la structure.
A+ et encore merci
André.
Publié : sam. 06/nov./2004 19:23
par cookie
@soldat inconnu: d'accord avec toi
méthode 1: 954
méthode 2: 1718
méthode 3(tableau): 297
(j'ai un athlon 2600+)
Publié : sam. 06/nov./2004 20:15
par Crystal Noir
C'est corrigé mais je l'ai pas ici, je te met ca en ligne dès lundi :p
Publié : dim. 07/nov./2004 21:57
par Good07
Bonsoir Soldat !
Bon je rentre de Marseille et je viens de voir vos réponses.
et ça fait une très grosse différence par rapport à toi entre les 2 méthodes avec les listes chainée
et entre 5978 (sur mon 500) et 6359 (sur ton 3000), je trouve que ton PC est un poil à la ramasse
Tu as PB à jour ?
Ben...J'ai la 3.92 enfin je croyais car il m'a fallu tout désinstaller et réinstaller la 3.91 puis la mise à jour pour que ça fonctionne correctement.
Sauf pour SmartUpdater qui me donne toujours ce message :
SmartUpdater tool not found in the Pure basic directory.
Pourtant il est bien à sa place
Enfin pour le reste je te donne les résultats:
Méthode 1: 813
Méthode 2: 1515
Méthode 3: 281
Ya pas à dire c'est autre chose
Bon d'accord c'est plus rapide avec les tableaux, mais c'est aussi moins souple d'emploi. Je pense qu'il faut les réserver à des application assez simple.
Merci pour ces test et surtout pour les annotations du listing. C'est super et très clair.
Pour Crystal Noir:
C'est corrigé mais je l'ai pas ici, je te met ca en ligne dès lundi :p
Merci
A+