Votre question

Convertir VB6 vers le C++

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
22 Juillet 2008 15:40:31

Bonjour à tous, voilà.. J'ai un programme en VB et j'aimerais le convertir en C++. Sachant que je ne connais absolument pas le C++, j'aimerais quelques conseils qui me permettra de convertir le fichier assez rapidement. Il existe des logiciels, mais ils ne sont pas forcement fiable.

Bref, voici le code source

  1. Option Explicit: Option Base 1
  2. Sub calculs(): Unload Form1: Dim n As Integer, fs As Object, a As String: n = Form1.n: a = Right("000" & CStr(n), 3)
  3. Set fs = CreateObject("Scripting.FileSystemObject"): If fs.folderexists("c:\Test\hyperplan\" & a) Then MsgBox ("Dossier " & a & " existant::Le détruire - avec son contenu- avant de refaire les calculs !!"): Exit Sub Else MkDir "c:\Test\hyperplan\" & a: MsgBox ("Démarrage:: Clic sur OK ")
  4. Dim supp() As Byte, k As Integer, tmp As Integer, x As Integer, b As String: x = n - 1: If x > 25 Then x = 25
  5. Dim i As Integer, ix As Integer, j As Integer, r As Integer, pro As Integer, sig As Integer, ssp As String, ssn As String, ss As String, det() As Integer, snt() As Integer, res() As Integer: ReDim det(n): ReDim snt(n): ReDim res(n)
  6. For k = 1 To x: b = Right("00" & CStr(k), 2): Erase supp: ReDim supp(n - 1, n): Open "c:\Test\hyperplan\" & a & "\" & b & ".txt" For Output As #1: Close #1
  7. For tmp = 1 To k: supp(1, tmp) = 1: Next tmp: ix = 1
  8. cc: For i = ix + 1 To n - 1: For j = 1 To n: supp(i, j) = supp(i - 1, j): Next j
  9. tmp = 0: For j = n To 1 Step -1: If supp(i, j) = 0 Then tmp = j: GoTo jj
  10. If tmp <> 0 Then supp(i, j) = 0: supp(i, tmp) = 1: GoTo rr
  11. jj: Next j: ix = i - 1: GoTo ff
  12. rr: For j = tmp + 1 To n: If supp(i, j) = 1 Then GoTo jjj
  13. For r = j + 1 To n: If supp(i, r) = 1 Then supp(i, j) = 1: supp(i, r) = 0: GoTo jjj
  14. Next r
  15. jjj: Next j
  16. Next i: For i = 1 To n: det(i) = i: Next i: sig = 1: pro = 0
  17. aa: For i = 2 To n: sig = sig * supp(i - 1, det(i)): Next i: pro = pro + sig
  18. For i = n - 1 To 1 Step -1: sig = n + 1: For j = i + 1 To n: If det(j) > det(i) And det(j) < sig Then sig = det(j): tmp = j
  19. Next j: If sig < n + 1 Then sig = det(i): det(i) = det(tmp): det(tmp) = sig: tmp = i + 1: GoTo ran
  20. Next i: res(n) = pro: GoTo bb
  21. ran: If tmp = 2 Then res(det(1) - 1) = pro: pro = 0
  22. For i = 1 To n: If i < tmp Then GoTo rani
  23. For j = i + 1 To n: If j < tmp Then GoTo ranj
  24. If det(j) < det(i) Then sig = det(i): det(i) = det(j): det(j) = sig
  25. ranj: Next j
  26. rani: Next i: sig = 1: For i = 1 To n: snt(i) = det(i): Next i: For i = 1 To n - 1
  27. If snt(i) <> i Then
  28. For j = i + 1 To n: If snt(j) = i Then snt(j) = snt(i): sig = -sig: GoTo sigi
  29. Next j: End If
  30. sigi: Next i: GoTo aa
  31. bb: tmp = 0: For i = 1 To n: If res(i) = 0 Then GoTo ee
  32. If tmp = 0 Then tmp = Abs(res(i)) Else r = Abs(res(i)): sig = (tmp + r + Abs(tmp - r)) / 2: pro = (tmp + r - Abs(tmp - r)) / 2: Do Until pro = 0: r = pro: pro = sig Mod pro: sig = r: Loop: tmp = r
  33. ee: Next i: If tmp = 0 Then ix = n - 1: GoTo ff
  34. For i = 1 To n: res(i) = res(i) / tmp: If Abs(res(i)) > 675 Then MsgBox ("Absolue > 675 !! M'avertir !! "): Exit Sub
  35. Next i: ssp = "": ssn = "": For i = 1 To n: If res(i) = 0 Then ssp = ssp & "ZZ": ssn = ssn & "ZZ"
  36. If res(i) > 0 Then
  37. r = res(i) Mod 26: If r = 0 Then ss = "z" Else ss = Chr(64 + r)
  38. r = (res(i) - r) / 26: If r = 0 Then ssp = ssp & "z" & ss Else ssp = ssp & Chr(64 + r) & ss
  39. r = res(i) Mod 26: If r = 0 Then ss = "z" Else ss = Chr(96 + r)
  40. r = (res(i) - r) / 26: If r = 0 Then ssn = ssn & "z" & ss Else ssn = ssn & Chr(96 + r) & ss
  41. End If
  42. If res(i) < 0 Then
  43. r = (-res(i)) Mod 26: If r = 0 Then ss = "z" Else ss = Chr(96 + r)
  44. r = (-res(i) - r) / 26: If r = 0 Then ssp = ssp & "z" & ss Else ssp = ssp & Chr(96 + r) & ss
  45. r = (-res(i)) Mod 26: If r = 0 Then ss = "z" Else ss = Chr(64 + r)
  46. r = (-res(i) - r) / 26: If r = 0 Then ssn = ssn & "z" & ss Else ssn = ssn & Chr(64 + r) & ss
  47. End If: Next i: Open "c:\Eternity\hyperplan\" & a & "\" & b & ".txt" For Input As #1: If EOF(1) Then Close #1: GoTo tt
  48. Do Until EOF(1): Line Input #1, ss: If ss = ssp Or ss = ssn Then Close #1: ix = n - 1: GoTo ff
  49. Loop: Close #1
  50. tt: Open "c:\Eternity\hyperplan\" & a & "\" & b & ".txt" For Append As #1: Print #1, ssp: Close #1: ix = n - 1
  51. ff: tmp = 0: For j = n To 1 Step -1: If supp(ix, j) = 0 Then tmp = j: GoTo supj
  52. If tmp <> 0 Then supp(ix, j) = 0: supp(ix, tmp) = 1: GoTo supr
  53. supj: Next j: If ix > 1 Then ix = ix - 1: GoTo ff Else GoTo fin
  54. supr: For j = tmp + 1 To n: If supp(ix, j) = 1 Then GoTo supjj
  55. For r = j + 1 To n: If supp(ix, r) = 1 Then supp(ix, j) = 1: supp(ix, r) = 0: GoTo supjj
  56. Next r
  57. supjj: Next j: GoTo cc
  58. fin: Next k: MsgBox ("TERMINE !"): End Sub


Merci de votre aide.

Autres pages sur : convertir vb6 vers

22 Juillet 2008 20:09:53

Déjà, pourquoi souhaites-tu "convertir" du VB en C++?

Il existe peut être des compilateurs VB vers C++, mais je ne vois pas trop quel avantage ça apporte...

Et puis le code n'est pas très lisible, c'est comme ça qu'il est écrit en vrai? (je vois des goto dedans!)
Qu'est ce qu'il est censé faire?
22 Juillet 2008 22:52:08

Le programme permet d'effectuer des calculs. Certains de ces calculs peuvent durées pendant quelques années. J'ai pensé que le C++ permettait d'être plus rapide et donc de gagner du temps.

Bah, sinon, le code est écrit comme ça en vrai..

C'est mal les Goto?
Contenus similaires
22 Juillet 2008 23:58:59

Citation :
J'ai pensé que le C++ permettait d'être plus rapide et donc de gagner du temps.

Si tu souhaites gagner du temps, il serait probablement plus pertinent de le réécrire toi même en C++, et de repenser les algorithmes utilisés. Je doute sérieusement que passer par un langage intermédiaire supplémentaire lors de la compilation puisse améliorer les performances.
Je doute également de la capacité du programme à tourner pendant des années... C'est censé calculer quoi? Qu'est ce qu'il pourrait avoir à calculer pendant autant de temps?

Citation :
C'est mal les Goto?

Extrêmement. C'est une très mauvaise pratique de programmation, dénoncée depuis l'avènement de la programmation structurée dans les années 70 : là par exemple, je suis incapable de dire ce que fait ton code. Des If/then/else et des boucles remplacent très avantageusement les goto, d'ailleurs.
En plus, il est nécessaire d'indenter le code, sauter des lignes (il n'y a habituellement qu'une seule instruction par ligne), et mettre des commentaires "utiles" sur ce que fait le programme; donner des noms de variables qui ont un sens, etc.
23 Juillet 2008 00:10:01

Citation :
Si tu souhaites gagner du temps, il serait probablement plus pertinent de le réécrire toi même en C++, et de repenser les algorithmes utilisés.

Me reste plus qu'à apprendre le C et le C++ ^^

Citation :
Je doute également de la capacité du programme à tourner pendant des années... C'est censé calculer quoi? Qu'est ce qu'il pourrait avoir à calculer pendant autant de temps?

Calcul de probabilité grâce au NP Complet... Calcul de plus de 420 dimensions.

Citation :
Extrêmement. C'est une très mauvaise pratique de programmation, dénoncée depuis l'avènement de la programmation structurée dans les années 70 : là par exemple, je suis incapable de dire ce que fait ton code. Des If/then/else et des boucles remplacent très avantageusement les goto, d'ailleurs.
En plus, il est nécessaire d'indenter le code, sauter des lignes (il n'y a habituellement qu'une seule instruction par ligne), et mettre des commentaires "utiles" sur ce que fait le programme; donner des noms de variables qui ont un sens, etc.

Hum, d'accord!
23 Juillet 2008 00:38:41

Citation :
Me reste plus qu'à apprendre le C et le C++ ^^

Pas nécessairement, essaye de voir d'abord si il n'y a pas des parties qui peuvent être repensés pour aller plus vite: d'abord dans les algorithmes utilisés, puis dans la façon dont ils sont implémentés; regarde les sections qui prennent le plus de temps ou reviennent le plus souvent lors de l'exécution. Ce serait plus facile si le programme était plus lisible.

Citation :

Calcul de probabilité grâce au NP Complet... Calcul de plus de 420 dimensions.

Hmm, je n'ai pas compris ce que tu voulais dire. Calcul, okay, probabilité, d'accord, mais "grâce au NP Complet"? Que veux tu dire par là? Pour moi, NP-Complet signifie que la complexité de l'algorithme est polynomiale (donc le temps augmente beaucoup plus vite que la quantité de données à traiter) et qu'on ne connait pas de meilleure solution. Et je ne vois pas trop ce que peut signifier "calcul de plus de 420 dimensions".
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS