Page 1 sur 1
[Resolu] Elements present X Fois
Publié : dim. 11/juil./2010 8:39
par Ganagyre
Bonjour à tous.
Dans cet exemple de code, je cherche le nombre d'éléments contenu dans la Liste chainée qui sont présent X Fois (5 fois ici).
Code : Tout sélectionner
NewList test1.l()
aa.l
bb.l
resulte.l
; Remplir Aleatoirement la Liste chainée
For i = 1 To 100
AddElement(test1()) : test1() = Random(30)+1
Next i
; Tri Decroissant de la Liste chainée
SortList(test1(), #PB_Sort_Descending )
; Controle des Sorties à 5
ForEach test1()
aa+1
controle = test1()
Debug " Adresse = "+Str(aa)+" -------- Contient = "+Str(test1())
If controle = test1()
bb+1
EndIf
If bb = 5 ; si presence 5 fois on compte
resulte + 1
;bb = 0
EndIf
Next
Debug " Controle = "+Str(Controle)
;Debug " Total = " +Str(bb)
Debug " Resulte presences à 5 = "+Str(resulte)
Pour améliorer le parcours de la liste, un tri décroissant est effectué .
Je butte cependant sur la boucle qui compte les valeurs de la liste présentes 5 Fois .
Qui reste sur 1 !

Re: Elements present X Fois
Publié : dim. 11/juil./2010 9:12
par zaphod
...
Re: Elements present X Fois
Publié : dim. 11/juil./2010 11:12
par Ganagyre
Merci zaphod pour la modif du code.
J'ai mis un petit rajout, dans le controle du nombre de sortie pour éviter de compter quand le total depasse la valeur voulue (ici 5).
Cela marche presque, mais comptabilise toujour lorsque cela depasse 5 .
Code : Tout sélectionner
NewList test1.l()
aa.l
bb.l
resulte.l
; Remplir Aleatoirement la Liste chainée
For i = 1 To 100
AddElement(test1()) : test1() = Random(30)+1
Next i
; Tri Decroissant de la Liste chainée
SortList(test1(), #PB_Sort_Descending )
; Controle des Sorties à 5
controle=FirstElement(test1())
ForEach test1()
aa+1
;controle = test1()
Debug " Adresse = "+Str(aa)+" -------- Contient = "+Str(test1())
If controle = test1()
bb+1
Else
controle=test1()
bb=1
EndIf
If bb = 5 And test1() <> NextElement(test1()) ; si presence 5 fois on compte
resulte + 1
PreviousElement(test1())
Debug " Adresse =============================== "+Str(aa) +" = " +Str(test1())
;bb = 0
EndIf
Next
Debug " Controle = "+Str(Controle)
;Debug " Total = " +Str(bb)
Debug " Resulte presences à 5 = "+Str(resulte)

Re: Elements present X Fois
Publié : dim. 11/juil./2010 14:14
par SPH
Je ne sais pas si ca peux t'aider mais ce code te dis combien de fois on trouve une chaine dans une autre :
Code : Tout sélectionner
txt$="Le lila et la lili lisent le livre de la lola et lili est la"
cherche$="li"
a$=ReplaceString(txt$,cherche$,"")
i=(Len(txt$)-Len(a$))/Len(cherche$)
Debug "''"+cherche$+"'' trouvé "+Str(i)+" fois"
Re: Elements present X Fois
Publié : dim. 11/juil./2010 14:28
par venom
SPH a écrit :Je ne sais pas si ca peux t'aider mais ce code te dis combien de fois on trouve une chaine dans une autre :
Code : Tout sélectionner
txt$="Le lila et la lili lisent le livre de la lola et lili est la"
cherche$="li"
a$=ReplaceString(txt$,cherche$,"")
i=(Len(txt$)-Len(a$))/Len(cherche$)
Debug "''"+cherche$+"'' trouvé "+Str(i)+" fois"
ou la fonction native a purebasic :
Code : Tout sélectionner
Debug CountString("Le lila et la lili lisent le livre de la lola et lili est la", "li")
@++
Re: Elements present X Fois
Publié : dim. 11/juil./2010 14:50
par zaphod
...
Re: Elements present X Fois
Publié : dim. 11/juil./2010 15:00
par SPH
venom a écrit :ou la fonction native a purebasic :
Code : Tout sélectionner
Debug CountString("Le lila et la lili lisent le livre de la lola et lili est la", "li")
Ha, je savais pas que ca existait deja

Re: [Resolu] Elements present X Fois
Publié : lun. 12/juil./2010 6:44
par Ganagyre
Bonjour.
Grand merci à vous.
SPH
venom
zaphod

Re: [Resolu] Elements present X Fois
Publié : lun. 12/juil./2010 8:58
par G-Rom
une piste aussi via les structure couplé avec les map :
Code : Tout sélectionner
Structure MaStructure
List MaListe.i()
Map MonCompteur.i()
EndStructure
Procedure AddElement_(*List.MaStructure,element.i)
AddElement( *List\MaListe() )
*List\MaListe() = element
*List\MonCompteur(Str(element)) = *List\MonCompteur(Str(element)) + 1
EndProcedure
Procedure CoutElement(*List.MaStructure,element.i)
ProcedureReturn *List\MonCompteur(Str(element))
EndProcedure
A.MaStructure
AddElement_(@A,10)
AddElement_(@A,10)
AddElement_(@A,10)
AddElement_(@A,10)
AddElement_(@A,10)
Debug CoutElement(@A,10)
Re: [Resolu] Elements present X Fois
Publié : mar. 13/juil./2010 12:37
par Ganagyre
Merci G-Rom pour cet exemple Structure/List/Map.
Cela m'ouvre une nouvelle maniére de faire .
