Fusion & Intersection de 2 listes vers une liste

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Fanator
Messages : 20
Inscription : jeu. 19/avr./2007 8:14

Fusion & Intersection de 2 listes vers une liste

Message par Fanator »

Bonjour à tous.
Je poste ci-dessous ce qu'il y a dans le titre. Cela peut servir également aux tableaux mais aussi à fusionner 1 liste et 1 tableau ou à trouver l'intersection vers 1 autre liste.
FUSION :

Code : Tout sélectionner

; fusion de 2 listes triées vers une liste

#FinListe = "ZZZZ"

NewList ListeOne.s()
NewList ListeTwo.s()
NewList ListeRes.s()

Procedure Fusion(ListeOne.s(), ListeTwo.s())
Shared ListeRes()
Repeat
;   If ListIndex(ListeOne())=CountList(ListeOne())-1 And ListIndex(ListeTwo())=CountList(ListeTwo())-1
  If ListeOne()=#FinListe And ListeTwo()=#FinListe
    DeleteElement(ListeRes())                   ; supprimer l'élément vide
    Break
  ElseIf ListeOne()<ListeTwo()
    ListeRes()=ListeOne(): NextElement(ListeOne())
  ElseIf ListeTwo()<ListeOne()
    ListeRes()=ListeTwo(): NextElement(ListeTwo())
  Else
    ListeRes()=ListeOne()
    NextElement(ListeOne()): NextElement(ListeTwo())
  EndIf
  AddElement(ListeRes())
ForEver
EndProcedure

; remplissage des 2 listes à fusionner
For i=0 To 3
  AddElement(ListeOne())
  If i<3
    ListeOne() = Chr((2*i)+65)
  Else
    ListeOne()=#FinListe         ; marque de fin de liste
  EndIf
Next i

For i=0 To 4
  AddElement(ListeTwo())
  If i<4
    ListeTwo() = Chr(81+i)
  Else
    ListeTwo()=#FinListe         ; marque de fin de liste
  EndIf
Next i

; affichage de chaque liste
Debug "----Liste 1"
i=0
ForEach ListeOne()
  Debug Str(i) + "-" + ListeOne()
  i+1
  If i=CountList(ListeOne())-1
    Break
  EndIf
Next

Debug "----Liste 2"
j=0
ForEach ListeTwo()
  Debug Str(j) + "-" + ListeTwo()
  j+1
  If j=CountList(ListeTwo())-1
    Break
  EndIf
Next

FirstElement(ListeOne())
FirstElement(ListeTwo())
AddElement(ListeRes())

Fusion(ListeOne(), ListeTwo())

; affichage du résultat
Debug "------------Fusion Liste 1 & Liste 2"
i=0
ForEach ListeRes()
  Debug Str(i) + "-" + ListeRes()
  i+1
Next
Debug "Nombre d'éléments dans liste Res = " + Str(CountList(ListeRes()))

End

INTERSECTION :

Code : Tout sélectionner

; intersection de 2 listes triées vers une liste

#FinListe = "ZZZZ"

NewList ListeOne.s()
NewList ListeTwo.s()
NewList ListeRes.s()

Procedure Intersection(ListeOne.s(), ListeTwo.s())
Shared ListeRes()
Repeat
;   If ListIndex(ListeOne())=CountList(ListeOne())-1 And ListIndex(ListeTwo())=CountList(ListeTwo())-1
  If ListeOne()=#FinListe And ListeTwo()=#FinListe
    DeleteElement(ListeRes())             ; effacer l'élément vide
    Break
  ElseIf ListeOne()<ListeTwo()           ; valeur liste1 < Valeur liste2
    NextElement(ListeOne())
  ElseIf ListeTwo()<ListeOne()           ; valeur liste2 < valeur liste1
    NextElement(ListeTwo())
  Else                                   ; valeur liste1 = valeur liste2
    ListeRes()=ListeOne()
    NextElement(ListeOne()): NextElement(ListeTwo())
    AddElement(ListeRes())
  EndIf
ForEver
EndProcedure

For i=0 To 14
  AddElement(ListeOne())
  If i<14
    ListeOne() = Chr(i+65)
  Else
    ListeOne()=#FinListe           ; marque de fin de liste
  EndIf
Next i

For i=0 To 7
  AddElement(ListeTwo())
  If i<7
    ListeTwo() = Chr(75+i)
  Else
    ListeTwo()=#FinListe           ; marque de fin de liste
  EndIf
Next i

Debug "----Liste One"
i=0
ForEach ListeOne()
  Debug Str(i) + "-" + ListeOne()
  i+1
  If i=CountList(ListeOne())-1
    Break
  EndIf
Next

Debug "----Liste Two"
j=0
ForEach ListeTwo()
  Debug Str(j) + "-" + ListeTwo()
  j+1
  If j=CountList(ListeTwo())-1
    Break
  EndIf
Next

FirstElement(ListeOne())
FirstElement(ListeTwo())
AddElement(ListeRes())

Intersection(ListeOne(), ListeTwo())

Debug "---------- Intersection Liste One & Liste Two"
i=0
ForEach ListeRes()
  Debug Str(i) + "-" + ListeRes()
  i+1
Next
Debug "Nombre d'éléments dans Liste Res = " + Str(CountList(ListeRes()))

End

Pour ceux que ça intéresse...

A+
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ça sert a quoi par exemple ? 8O
Répondre