[Resolu] Elements present X Fois

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ganagyre
Messages : 67
Inscription : jeu. 09/nov./2006 13:41
Localisation : PACA

[Resolu] Elements present X Fois

Message 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 ! :?
Dernière modification par Ganagyre le lun. 12/juil./2010 6:39, modifié 1 fois.
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Re: Elements present X Fois

Message par zaphod »

...
Dernière modification par zaphod le dim. 27/mai/2012 7:40, modifié 1 fois.
Avatar de l’utilisateur
Ganagyre
Messages : 67
Inscription : jeu. 09/nov./2006 13:41
Localisation : PACA

Re: Elements present X Fois

Message 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:
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: Elements present X Fois

Message 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"

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Elements present X Fois

Message 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:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Re: Elements present X Fois

Message par zaphod »

...
Dernière modification par zaphod le dim. 27/mai/2012 7:40, modifié 1 fois.
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: Elements present X Fois

Message 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:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ganagyre
Messages : 67
Inscription : jeu. 09/nov./2006 13:41
Localisation : PACA

Re: [Resolu] Elements present X Fois

Message par Ganagyre »

Bonjour.

Grand merci à vous.

SPH
venom
zaphod


:D
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Resolu] Elements present X Fois

Message 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)
Avatar de l’utilisateur
Ganagyre
Messages : 67
Inscription : jeu. 09/nov./2006 13:41
Localisation : PACA

Re: [Resolu] Elements present X Fois

Message par Ganagyre »

Merci G-Rom pour cet exemple Structure/List/Map.

Cela m'ouvre une nouvelle maniére de faire .

:wink:
Répondre