Outils logiciels pour les cours Paris II

Cours Paris II

Stages/ Thèses/ Séminaires

Laboratoire

edit SideBar

Cours 5

Lire et Ecrire dans un fichier. Le tri rapide

  • Rappels
    • Instructions de boucle
  For I=1 to N step 1
  ....
  Next


  Do While (test)
  ....
  Loop
  • Instruction de test
  If (test) then 
  Else  ...
  End if
  • Ecrire dans un fichier ".txt"
  Sub wfile()

  Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim Fileout As Object
    Set Fileout = fso.CreateTextFile("C:\Documents and Settings\mdr\Mes documents\VBA\ES.txt", True, True)

  M = 20
  i = 1
  Do While i < M + 1
   Cells(i + 1, 2) = "a" & Str(i)
  ' print in a file
   Fileout.Write "a" & Str(i) & Chr(13) & Chr(10)
   i = i + 1
  Loop
   ' close the file
    Fileout.Close
  End Sub
  • Lire un fichier ".txt"
    Sub rfile() Dim myFile As String Dim textline As String
 ' preparing the file 
myFile = "C:\Documents and Settings\mdr\Mes documents\VBA\ES.txt"
  Open myFile For Input As #1

  i = 1
  Do Until EOF(1)
    Line Input #1, textline
    Cells(i+1, 5) = textline
    i = i + 1
  Loop

   ' close the file
  Close #1
  End Sub
  • Tri d'une liste: Tri rapide
    • Choisir un pivot (élément en position début, fin, milieu ou aléatoire)
    • parcourir la liste en construisant une liste inf (éléments inférieurs au pivot) et une liste sup (éléments supérieurs au pivot),
    • Résultat= Tri(inf),pivot,Tri(sup)

Détails de Quicksort (Wikipedia)

 Sub Main()
   Dim myArray(15) As Double
   For I = 1 To 15 Step 1
   myArray(I) = Cells(I, 1)
   Next

   Call QSort(myArray, 0, 4)

   For I = 1 To 15 Step 1
   Cells(I, 6) = myArray(I)
   Next

 End Sub

 Sub QSort(sortArray() As Double, ByVal leftIndex As Integer, _
                                     ByVal rightIndex As Integer)
    Dim compValue As Double
    Dim I As Integer
    Dim J As Integer
    Dim tempNum As Double

    I = leftIndex
    J = rightIndex
    compValue = sortArray(Int((I + J) / 2))

    Do
        Do While (sortArray(I) < compValue And I < rightIndex)
            I = I + 1
        Loop
        Do While (compValue < sortArray(J) And J > leftIndex)
            J = J - 1
        Loop
        If I <= J Then
            tempNum = sortArray(I)
            sortArray(I) = sortArray(J)
            sortArray(J) = tempNum
            I = I + 1
            J = J - 1
        End If
    Loop While I <= J

    If leftIndex < J Then QSort sortArray(), leftIndex, J
    If I < rightIndex Then QSort sortArray(), I, rightIndex
 End Sub
  • Recherche dichotomique

Recherche dans un tableau trié A(N), d'une valeur a:

  • If ( A(int(N/2))= a) : Résultat=1
  • If ( A(int(N/2))> a) : A = A(int(N/2)+1, N) else A = A(1,int(N/2)-1)
  • Résultat= Recherche(A)

Fichier Excel avec ces macros

UP2