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)
:wink:

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")
:lol:






@++

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")
:lol:
Ha, je savais pas que ca existait deja :wink:

Re: [Resolu] Elements present X Fois

Publié : lun. 12/juil./2010 6:44
par Ganagyre
Bonjour.

Grand merci à vous.

SPH
venom
zaphod


:D

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 .

:wink: