1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
Set FSO = CreateObject("Scripting.FileSystemObject")
dim taille,liste_de_base,fin,nombre_de_diviseurs_multiples,temps_de_depart,fichier_final,nombre_possibilites,taille_plus_longue_possibilite
Sub initialisation()
Dim choix,depart,ligne_fin,infos
choix = MsgBox("Reprendre le calcul? OUI" & chr(13) & "Recommencer à zéro? NON",4)
If choix = 7 Then ' Si choix = NON
taille = InputBox("Tapper la taille du nouveau tableau")
For i = 1 to taille
liste_de_base = liste_de_base & i & "_"
Next
Set fichier_a_traiter = FSO.CreateTextFile("fichier_a_traiter.txt",true)
For depart = 1 to taille
fichier_a_traiter.WriteLine depart & "_" & "*" & modifie(liste_de_base,depart)
Next
fichier_a_traiter.Close
Set fichier_final = FSO.CreateTextFile("resultat_algorithme_juniper_green_version2.txt",true)
fichier_final.WriteLine "Algorithme de Juniper Green. Taille du tableau : " & taille
fichier_final.WriteLine "Nombre actuel de possibilités;Taille de la plus longue possibilité;Possiblité la plus longue;Temps de traitement"
fichier_final.Close
nombre_possibilites = 0
taille_plus_longue_possibilite = 0
temps_de_depart = Time
Else
Set fichier_final = FSO.OpenTextFile("resultat_algorithme_juniper_green_version2.txt",1)
Do While Not fichier_final.AtEndOfStream
ligne_fin = fichier_final.ReadLine
Loop
infos = Split(ligne_fin,";")
nombre_possibilites = infos(0)
taille_plus_longue_possibilite = infos(1)
temps_de_depart = infos(3)
End If
fin = FALSE
End Sub
Function lister_diviseurs_multiples(nombre,liste_a_traiter)
Dim candidat,temp
nombre_de_diviseurs_multiples=0
While liste_a_traiter<>""
candidat = Left(liste_a_traiter,Instr(liste_a_traiter,"_")-1)
If nombre MOD candidat = 0 OR candidat MOD nombre = 0 Then
temp=temp & candidat & "_"
nombre_de_diviseurs_multiples = nombre_de_diviseurs_multiples + 1
End If
liste_a_traiter = Right(liste_a_traiter, Len(liste_a_traiter)-Instr(liste_a_traiter,"_"))
Wend
lister_diviseurs_multiples = temp
End Function
Function cherche_diviseurs_multiples(liste,position)
Dim temp
temp = liste
If position = 1 Then
cherche_diviseurs_multiples = Left(temp,InStr(temp,"_")-1)
Else
For i=1 to position-1
temp = Mid(temp,InStr(temp,"_")+1)
cherche_diviseurs_multiples = Left(temp,InStr(temp,"_")-1)
Next
End If
End Function
Function modifie(liste,nombre)
Dim temp
temp = liste
If InStr(temp,"_" & nombre & "_") = 0 Then
modifie = Mid(temp,Instr(temp,"_")+1)
Else
modifie = Replace(temp,"_" & nombre & "_","_")
End If
End Function
Sub etudier_chaine(x)
nombre_possibilites = nombre_possibilites + 1
Dim a,b
a = x
b = Split(a,"_")
If Ubound(b) > taille_plus_longue_possibilite Then
taille_plus_longue_possibilite = Ubound(b)
Set fichier_final = FSO.OpenTextFile("resultat_algorithme_juniper_green_version2.txt",8)
fichier_final.WriteLine nombre_possibilites & ";" & taille_plus_longue_possibilite & ";" & x & ";" & temps_de_traitement()
fichier_final.Close
End If
End Sub
Function temps_de_traitement()
Dim a
a = Hour(temps_de_depart)*3600 + Minute(temps_de_depart)*60 + Second(temps_de_depart)
temps_de_traitement = Hour(Time)*3600 + Minute(Time)*60 + Second(Time) - a
End Function
Sub traitement()
fin = TRUE
Set fichier_a_traiter = FSO.OpenTextFile("fichier_a_traiter.txt",1)
Set fichier_temp = FSO.CreateTextFile("temporaire.txt",true)
Dim ligne,chaine,liste_restante,liste_diviseurs_multiples,temp,a,b,numero_ligne_a_traiter
numero_ligne_a_traiter = 0
liste_diviseurs_multiples = ""
While liste_diviseurs_multiples = "" AND NOT fichier_a_traiter.AtEndOfStream
numero_ligne_a_traiter = numero_ligne_a_traiter + 1
ligne = fichier_a_traiter.ReadLine
chaine = Left(ligne,InStr(ligne,"*")-1)
liste_restante = Mid(ligne,InStr(ligne,"*")+1)
If liste_restante = "" Then
etudier_chaine(chaine)
Else
a = Replace(Mid(chaine,InStrRev(chaine,"_",Len(chaine)-1)+1),"_","")
b = liste_restante
liste_diviseurs_multiples = lister_diviseurs_multiples(a,b)
If liste_diviseurs_multiples = "" Then
etudier_chaine(chaine)
Else
fin = FALSE
For i=1 to nombre_de_diviseurs_multiples
temp = cherche_diviseurs_multiples(liste_diviseurs_multiples,i)
fichier_temp.WriteLine chaine & temp & "_*" & modifie(liste_restante,temp)
Next
End If
End If
Wend
Do While Not fichier_a_traiter.AtEndOfStream
fichier_temp.WriteLine fichier_a_traiter.ReadLine
Loop
fichier_temp.Close
fichier_a_traiter.Close
FSO.DeleteFile("fichier_a_traiter.txt")
FSO.MoveFile "temporaire.txt","fichier_a_traiter.txt"
End Sub
' ******************** PROGRAMME PRINCIPAL ******************************
initialisation()
passage = 0
While fin = FALSE
traitement()
Wend
Set fichier_final = FSO.OpenTextFile("resultat_algorithme_juniper_green_version2.txt",8)
fichier_final.WriteLine chr(13) & " ------------ FIN ---------------------" & chr(13)
fichier_final.WriteLine "Nombre total de possibilités : " & nombre_possibilites & " Temps total de traitement : " & temps_de_traitement()
fichier_final.Close
Wscript.Echo "Terminé" |
Partager