Conversion Qbasic -> VBA

Staple1600

XLDnaute Barbatruc
Bonsoir

Quelqu'un ici s'est-t-il amusé à essayer
de coller le contenu de fichiers.bas (QBasic)
dans VBE?


Et ensuite de voir comment traduire le tout en VBA?


Est-ce seulement possible?

Si oui, est-ce vain?
 

wilfried_42

XLDnaute Barbatruc
Re : Conversion Qbasic -> VBA

bonjour staple

c'est vain, dans le fait ou Qbasic n'est pas un langage strcturé objet, que seuls les commandes faciles peuvent etre transcrites. il existe des possibilités en QB qui à ma connaissance ne sont pas possibles en VBA (selon mes faibles connaissances de VBA). personnellement, en 1984, j'ai à l'aide d'une moulinette, transcrit des programmes Kbasic sous CPM en Mbasic86 sous Dos, les deux basic se ressemblant, la difficulté n'etait pas enorme.

Mais QB et VBA, n'ont pas la meme structure, personnellement, je pense que QB est plus puissant que VBA, et VBA plus pratique et c'est peu dire.
 

Creepy

XLDnaute Accro
Re : Conversion Qbasic -> VBA

Bonjour le Forum,

Je n'ai pas testé mais je serais curieux de faire le test ! Même si une fonction n'existe pas on doit pouvoir la reproduire !

Peux tu mettre un fichier joint que je teste.

Merci

Creepy
 

wilfried_42

XLDnaute Barbatruc
Re : Conversion Qbasic -> VBA

bonjour creepy

je ne sais pas si je peus retrouver dans mes archives une partie tres specifique de QB (Programmation directe en code assembleur dans le source de Qb). je suis ben incapable de programmer en assembleur. mais dans j'ai vu Qb le traduir. l'interet ne serait pas dans ce sens, mais dans l'autre sens. Qb etant compilable.................. bye billou pour la distrbution des projets lol
 

Staple1600

XLDnaute Barbatruc
Re : Conversion Qbasic -> VBA

Bonjour Creepy

Voici un exemple QBasic

Code:
1  REM * The Towers Of Hanoi
2  REM * BASIC
3  REM * Copyright (c) 1998 Amit Singh. All Rights Reserved.
4  REM * NOTES: Tested under Chipmunk BASIC 1.0
5  REM * NOTES: Tested under Microsoft(TM)(R)(C) *QBasic* 1.1
6  REM --- S is the stack
10 DIM S(4096)
15 REM --- b is the stack pointer
20 b = 1
25 REM --- _sfTO
30 t = 2
35 REM --- _sfFR
40 f = 0
45 REM --- _sfUS
50 u = 1
55 REM --- _sfNU
60 n = 3
65 REM --- _sfEN
70 e = 0
75 REM --- remain
80 m = 0
85 REM --- the stack variable
90 INPUT "Number of disks (0 < disks < 100)"; v
91 IF v>0 AND v<100 THEN GOTO 94 ELSE GOTO 92
92 PRINT "Illegal number of disks"
93 GOTO 90
94 INPUT "DISPLAY (Y/N)"; a$
99 REM --- PUSH N (=v here)
100 GOSUB 2000
110 v = 1
120 GOSUB 2000
130 v = 3
140 GOSUB 2000
150 v = 0
160 GOSUB 2000
170 WHILE b > 1
180 GOSUB 3000
190 e = v
200 GOSUB 3000
210 t = v
220 GOSUB 3000
230 f = v
240 GOSUB 3000
250 n = v
260 m = 6 - f - t
270 IF e <> 0 THEN GOTO 280 ELSE GOTO 380
280 GOSUB 4000
290 v = n - 1
300 GOSUB 2000
310 v = m
320 GOSUB 2000
330 v = t
340 GOSUB 2000
350 v = 0
360 GOSUB 2000
370 GOTO 570
380 IF n <> 1 THEN GOTO 390 ELSE GOTO 560
390 v = n
400 GOSUB 2000
410 v = f
420 GOSUB 2000
430 v = t
440 GOSUB 2000
450 v = 1
460 GOSUB 2000
470 v = n - 1
480 GOSUB 2000
490 v = f
500 GOSUB 2000
510 v = m
520 GOSUB 2000
530 v = 0
540 GOSUB 2000
550 GOTO 570
560 GOSUB 4000
570 WEND
575 PRINT "Move count: "; count
580 END

1999 REM --- procedure push(v)
2000 S(b) = v
2010 b = b + 1
2020 RETURN

2999 REM --- procedure pop()
3000 IF b = 0 THEN GOTO 3030 ELSE GOTO 3010
3010 b = b - 1
3020 v = S(b)
3030 RETURN

3999 REM --- procedure movedisk(from, to)
REM 4000 PRINT USING "move # --> #"; f; t;
4000 count=count+1
4001 IF A$ = "N" THEN RETURN
4002 PRINT "move ";f;" --> ";t;
4010 PRINT ""
4020 RETURN
 

Staple1600

XLDnaute Barbatruc
Re : Conversion Qbasic -> VBA

Re

et un autre un peu plus court

Code:
REM Euler Pseudoprime Test
REM Robert Campbell, 970701
DECLARE FUNCTION gcd& (x&, y&)
DECLARE FUNCTION powmod& (number&, exponent&, modulus&)

PRINT "Test number for primality using Euler test"
INPUT "number = "; thenumb&
PRINT powmod&(2, thenumb& - 1, thenumb&), powmod&(3, thenumb& - 1, thenumb&), powmod&(5, thenumb& - 1, thenumb&)
IF ((powmod&(2, thenumb& - 1, thenumb&) = 1) AND (powmod&(3, thenumb& - 1, thenumb&) = 1) AND (powmod&(5, thenumb& - 1, thenumb&) = 1)) THEN
        PRINT "Prime (probably, testing w/ bases 2, 3 and 5)"
ELSE
        PRINT "Composite"
END IF
END

FUNCTION powmod& (number&, exponent&, modulus&)
e& = exponent&
accum& = 1
pow2& = number&
WHILE (e& > 0)
        IF ((e& MOD 2) = 1) THEN accum& = (accum& * pow2&) MOD modulus&
        pow2& = (pow2& * pow2&) MOD modulus&
        e& = e& \ 2
WEND
powmod& = accum&
EXIT FUNCTION
END FUNCTION
 

wilfried_42

XLDnaute Barbatruc
Re : Conversion Qbasic -> VBA

re:

dans le premier, c'est un horreur, cela date de matusalem, avec des n° de ligne à chaque ligne de plus la programmation est ignoble avec plein de truc inutiles

exemple :
380 IF n <> 1 THEN GOTO 390 ELSE GOTO 560
390 v = n
400 GOSUB 2000
410 v = f
420 GOSUB 2000
430 v = t
440 GOSUB 2000
450 v = 1
460 GOSUB 2000
470 v = n - 1
480 GOSUB 2000
490 v = f
500 GOSUB 2000
510 v = m
520 GOSUB 2000
530 v = 0
540 GOSUB 2000
550 GOTO 570
560 GOSUB 4000

ecrire à la place : if n=1 goto 560

le deuxieme

il y as deux declare function
et une seule fonction de définie.

meme en Qb cela fait une erreure alorqu'en vba il n'y a as d'erreur puisque pas besoin de declarer les fonctions.
 

Staple1600

XLDnaute Barbatruc
Re : Conversion Qbasic -> VBA

Bonsoir

Est-ce de cette façon qu'il faut traduire en VBA?
Je ne suis pas habitué à l'utilisation du caractère de désignation de type de données.

Je ne sais pas si j'ai fait une erreur
mais pour 3 il trouve composite et non pas nombre premier

Code:
Sub test()
'auteur:
''Euler Pseudoprime Test
'Robert Campbell, 970701
Dim thenumb&
thenumb = InputBox("Un nombre?")
Debug.Print powmod&(2, thenumb& - 1, thenumb&)
Debug.Print powmod&(3, thenumb& - 1, thenumb&)
Debug.Print powmod&(5, thenumb& - 1, thenumb&)
If ((powmod&(2, thenumb& - 1, thenumb&) = 1) And (powmod&(3, thenumb& - 1, thenumb&) = 1) And (powmod&(5, thenumb& - 1, thenumb&) = 1)) Then
        MsgBox "Le nombre" & thenumb & " est un nombre premier (probably, testing w/ bases 2, 3 and 5)"
Else
        MsgBox "Composite"
End If
End Sub

Function powmod&(number&, exponent&, modulus&)
e& = exponent&
accum& = 1
pow2& = number&
While (e& > 0)
        If ((e& Mod 2) = 1) Then accum& = (accum& * pow2&) Mod modulus&
        pow2& = (pow2& * pow2&) Mod modulus&
        e& = e& \ 2
Wend
powmod& = accum&
Exit Function
End Function
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 098
Messages
2 116 189
Membres
112 679
dernier inscrit
Yupanki