joaofr
Messages postés4Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention 8 décembre 2005
-
6 déc. 2005 à 11:39
NHenry
Messages postés15118Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention11 mai 2024
-
8 déc. 2005 à 10:05
Bonjour,
Je m'appelle Joao et je suis un vieux curieux et debutant. Je ne suis
pas programmeur mais il m'arrive de m'amuser en basic. J'ai ecris en
basic une espece de programme
pour sortir sur imprimante des testes pour permis auto en Suisse.
J'enregistre toutes les reponses dans 4 tableaux selon les themes. Je
fais sortir sur imprimante 50 questions(4+20+6+20) exactement comme à
l'examen de theorie. J'aimerais transcrire cette chose
en VB pour l'utiliser sous Word, mais mes connaissances sont nules.
Exist'il un compilateur de basic vers VB??? ou pouvez vous me le faire.
Merci d'avance. Joao
TYPE enrTest
eNom AS STRING * 10
res AS SINGLE
END TYPE
DIM enr AS enrTest
DIM eNom AS enrTest
DIM solution$(4, 360)
DIM SINAIS(71), TEXTOS(332), GRAFICO(107), FOTOS(360), pag(4, 360)
'GOTO 10000 ' pour enregistrer les reponses
'GOTO 11000 ' pour sortir sur imprimante toutes les reponses
'GOTO 20000 ' pour nommer les fichiers dans le volume desire
CLS
OPEN "AUTO.Dat" FOR INPUT AS #1
INPUT #1, num
CLOSE #1
num: num = num + 1
RANDOMIZE TIMER
rep$ = " _ "
FOR X = 1 TO 4
ON X GOSUB 6001, 6002, 6003, 6004
FOR I = 1 TO X1
110 pag1 INT(RND(1) * X3) + 1: pag(X, I) pag1
IF I = 1 THEN 160
FOR I1 = 1 TO I - 1
IF pag(X, I) = pag(X, I1) THEN 110
NEXT I1
160 NEXT I
NEXT X
FOR X = 1 TO 4
ON X GOSUB 6001, 6002, 6003, 6004
220 INV = 0
FOR I 1 TO X1: IF I 1 THEN 240
240 IF pag(X, I) < pag(X, I - 1) THEN SWAP pag(X, I), pag(X, I - 1): INV = 1
NEXT I
IF INV = 1 THEN 220
NEXT X
X4 = 0
OPEN "AUTO.Dat" FOR OUTPUT AS #1
'PRINT #1,
"
Teste de theorie nø##"; num
PRINT #1, num
FOR X = 1 TO 4
ON X GOSUB 6001, 6002, 6003, 6004
FOR I = 1 TO X1
X4 = X4 + 1
PRINT #1, USING "Question ### "; X4;
PRINT #1, USING "position ###"; pag(X, I);
PRINT #1, " ";
PRINT #1, USING "\ "; X2$;
PRINT #1, " reponse "; rep$
NEXT I
NEXT X
CLOSE #1
INPUT "Voulez-vous la solution o/n", Z$
IF Z$ <> "o" THEN 800 ELSE 520
520 CLS
FOR X = 1 TO 4
ON X GOSUB 6001, 6002, 6003, 6004
ON X GOSUB 2001, 2002, 2003, 2004
FOR I = 1 TO X1
GET #1, pag(X, I), enr
solution$(X, pag(X, I)) = enr.eNom
NEXT I
NEXT X
X4 = 0
OPEN "Repons.dat" FOR OUTPUT AS #2
PRINT #2, USING "Reponses au teste de theorie nø##"; num
'PRINT #2, num
FOR X = 1 TO 4
ON X GOSUB 6001, 6002, 6003, 6004
FOR I = 1 TO X1
X4 = X4 + 1
PRINT #2, USING "\ "; solution$(X, pag(X, I));
PRINT #2, "--> reponse la";
PRINT #2, USING " question ###"; X4;
PRINT #2, USING " position ###"; pag(X, I);
PRINT #2, USING " \ \ "; X2$
NEXT I
NEXT X
CLOSE #1
CLOSE #2
800 END
2001 OPEN "C:\SINAIS" FOR RANDOM AS #1 LEN = LEN(enr): RETURN
2002 CLOSE #1: OPEN "C:\TEXTOS" FOR RANDOM AS #1 LEN = LEN(enr): RETURN
2003 CLOSE #1: OPEN "C:\GRAFICO" FOR RANDOM AS #1 LEN = LEN(enr): RETURN
2004 CLOSE #1: OPEN "C:\FOTOS" FOR RANDOM AS #1 LEN = LEN(enr): RETURN
NHenry
Messages postés15118Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention11 mai 2024159 6 déc. 2005 à 17:07
Bonjour
Quel est le basic d'origine (QB, GWBasic, ...) ?
VB de destination (VB6,.NET) ?
Quelques pistes :
- gosub -> sub ou function
- End -> fermeture de la fenetre principale ou fin du main
TYPE enrTest
eNom AS STRING * 10
res AS SINGLE
END TYPE
DIM enr AS enrTest
DIM eNom AS enrTest
DIM solution$(4, 360)
DIM SINAIS(71), TEXTOS(332), GRAFICO(107), FOTOS(360), pag(4, 360)
Devient :
{public | private} Type enrTest
eNom as string '*10 non géré
res as single
end type
dim enr as enrTest 'Explication, pourquoi tu déclare cela ?
dim eNom as enrTest
dim solution(4,360) as string
dim SINAI(71) as ????
dim TEXTOS(332) as ????
dim GRAFICO(107) as ????
dim FOTOS(360) as ????
dim pag(4,360) as ????
Préférence des types Numériques : long plutot que integer (si pas de virgules)
Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET)
NHenry
Messages postés15118Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention11 mai 2024159 7 déc. 2005 à 10:00
Bonjour
Pour mettre en forme (using seulement) utilie format
Les entrées tu peux utiliser inputbox.
lettres -> String
où est swap dans ton code?
Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET)
joaofr
Messages postés4Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention 8 décembre 2005 7 déc. 2005 à 11:14
ReBonjour. ReMerci NHenry.
SWAP se trouve à la ligne 240.
Comment utiliser Format?
Je sais que je vous demande trop mais est ce que vous pourriez pas me
transcrire tout le programme ou en faire un tout neuf en VB, sachant
que:
-je dois enregistrer qq part tts les reponses
correctes a toutes les questions que sont reparties en 4 groupes
[textes(332), signaux(71), graphiques(107) et photos(360)]
-que chaque teste, de exactement 50 questions,
devra sortir 4 questions SIGNAUX, 20 TEXTES, 6 GRAPHIQUES et 20 PHOTOS,
choisies au hasard dans chaque groupe.
-sortir dans une autre feuille les reponses correctes à chacune des 50 questions.
A bientot.
Joao
Vous n’avez pas trouvé la réponse que vous recherchez ?
NHenry
Messages postés15118Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention11 mai 2024159 7 déc. 2005 à 11:38
Bonjour
SWAP peut se remplacer par le passage par une variable temporaire.
Traduire tt le code, g vai voir, sans garantie.
mStr=Format(Valeur, "format")
format = ##.#
pour using ##.#
Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET)
joaofr
Messages postés4Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention 8 décembre 2005 8 déc. 2005 à 08:01
Bonjour. C'est encore moi, le casse pieds. Je patauge serieusement avec ce VB. Voila un fichier avec ma transcription. Un tas de problemes. Comment faire ceci, cela...???.
Rien à faire, il y a beaucoup de choses que je comprends pas. Merci de votre aide.
Joao
Type
enrTest
eNom As String * 10
res As Single
num As Single
End Type
Dim enr As enrTest
Dim eNom As enrTest
Dim solution$(4, 360)
Dim SINAIS(71), TEXTOS(332), GRAFICO(107),
FOTOS(360), pag(4, 360)
Dim MemValeur1 As Variant, MemValeur2
As Variant
Dim Temp As Variant
Public
Function Swap(ByRef Valeur1 As Variant, _
ByRef Valeur2 As Variant)
As Boolean 'comment utiliser cette function
On Error GoTo Erreur
' Mémorise les valeurs avant de commencer
MemValeur1 = Valeur1
MemValeur2 = Valeur2
' Fait le Swapping
Temp = Valeur1
Valeur1 = Valeur2
Valeur2 = Temp
' Ok
Swap = True
Exit Function
Erreur:
' Souvent des erreurs de type de variables
incompatibles
' On remet les valeurs initiales
Valeur1 = MemValeur1
Valeur2 = MemValeur2
Swap = False
End Function
Sub
permis()
'' permis
Macro
' Macro
créée le 07.12.2005 par Joao
'
'goTo 10000 ' pour enregistrer les
reponses
'goto 11000' pour sortir sur imprimante
toutes les reponses
'goto 20000' pour nommer les fichiers
'cls 'comment effacer l'ecran - qu'est ce que remplace cls
num = 1
Open "D:\ProgramFiles\Basic\qbas45\AUTO.Dat"
For Input As #1 ' ou n'importe qq autre endroit
Input #1, num
Close #1
num: num =
num + 1
Randomize Timer
rep$ = "_"
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
For I = 1 To X1
110 pag1
Int(Rnd(1) * X3) + 1: pag(X, I) pag1
If I = 1 Then GoTo 160
For I1 = 1 To I - 1
If pag(X, I) = pag(X, I1) Then GoTo 110
Next I1
160 Next
I
Next X
For X = 1 To 4
On X GoSub 6001, 6002,
6003, 6004
220 INV = 0
For I 1 To X1: If I 1 Then GoTo 240
240 If pag(X, I) < pag(X, I - 1) Then Swap pag(X, I), pag(X,
I - 1): INV = 1
Next I
If INV = 1 Then GoTo 220
Next X
X4 = 0
Open "AUTO.Dat" For Output As #1
'print #1, "Test de theorie n ##";num
Print #1, num
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
For I = 1 To X1
X4 = X4 + 1
Print #1, using; "Question
### "; X4;
Print #1, using; "position
###"; pag(X, I);
Print #1, " ";
Print #1, using; "\"; X2$;
Print #1, "reponse"; rep$
Next I
Next X
Close #1
GoSub 16000
'input "voulez-vous la solution o/n",Z$
If Z$ <> "o" Then GoTo 800
Else GoTo 520
520 'cls
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
On X GoSub 2001, 2002, 2003, 2004
For I = 1 To X1
Get #1, pag(X, I), enr
solution$(X, pag(X, I)) = enr.eNom
Next I
Next X
X4 = 0
Open "repons.dat" For Output As #2
Print #2, using; "Reponses
au test de theorie n ##"; num
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
For I = 1 To X1
X4 = X4 + 1
Print #2, using; "\"; solution$(X, pag(X, I));
Print #2, "--->
reponse a la";
Print #2, using; " question
##"; X4;
Print #2, using; " position
###"; pag(X, I);
Print #2, using; "\"; X2$
Next I
Next X
Close #1
Close #2
800 End
2001Open "C:\SINAIS" For Random As #1
Len = Len(enr): Return
2002Close #1: Open "C:\TEXTOS" For
Random As #1 Len = Len(enr): Return
2003Close #1: Open "C:\GRAFICO" For
Random As #1 Len = Len(enr): Return
2004Close #1: Open "C:\FOTOS" For
Random As #1 Len = Len(enr): Return
NHenry
Messages postés15118Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention11 mai 2024159 8 déc. 2005 à 10:05
Bonjour,
pense à identer ton code (tab).
Option Explicit
Type enrTest
eNom As String
res As Single
num As Single
End Type
Dim enr As enrTest
Dim eNom As enrTest
Dim solution(4, 360) as String
Dim SINAIS(71) as String
Din TEXTOS(332) as String
dim GRAFICO(107) as String
dim FOTOS(360) as String
dim pag(4, 360) as String
'Evite les Variant
Public Function Swap(ByRef Valeur1 As Variant, _
ByRef Valeur2 As Variant) As Boolean 'comment utiliser cette function
Dim MemValeur1 As Variant, MemValeur2 As Variant
Dim Temp As Variant
On Error GoTo Erreur
' Mémorise les valeurs avant de commencer
MemValeur1 = Valeur1
MemValeur2 = Valeur2
' Fait le Swapping
Temp = Valeur1
Valeur1 = Valeur2
Valeur2 = Temp
' Ok
Swap = True
Exit Function
Erreur:
' Souvent des erreurs de type de variables incompatibles
' On remet les valeurs initiales
Valeur1 = MemValeur1
Valeur2 = MemValeur2
Swap = False
End Function
Sub permis()
'' permis Macro
' Macro créée le 07.12.2005 par Joao
'
'goTo 10000 ' pour enregistrer les reponses
'goto 11000' pour sortir sur imprimante toutes les reponses
'goto 20000' pour nommer les fichiers
'EVITE les GOTO/GOSUB, utilise plutot des fonction on des Sub!!!!!!!
Dim num as long
Dim X as long
Dim Y as long
'cls 'comment effacer l'ecran - qu'est ce que remplace cls
'Utilise des controles
num = 1
Open "D:\ProgramFiles\Basic\qbas45\AUTO.Dat" For Input As #1 ' ou n'importe qq autre endroit
Input #1, num
Close #1
num: num = num + 1
Randomize Timer
rep$ = "_"
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
For I = 1 To X1 110 pag1 Int(Rnd(1) * X3) + 1: pag(X, I) pag1
If I = 1 Then GoTo 160
For I1 = 1 To I - 1
If pag(X, I) = pag(X, I1) Then GoTo 110
Next I1
160 Next I
Next X
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
220 INV = 0 For I 1 To X1: If I 1 Then GoTo 240
240 If pag(X, I) < pag(X, I - 1) Then Swap pag(X, I), pag(X, I - 1): INV = 1
Next I
If INV = 1 Then GoTo 220
Next X
X4 = 0
Open "AUTO.Dat" For Output As #1
'print #1, "Test de theorie n ##";num
Print #1, num
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
For I = 1 To X1
X4 = X4 + 1
Print #1, using; "Question ### "; X4;
Print #1, using; "position ###"; pag(X, I);
Print #1, " ";
Print #1, using; "\"; X2$;
Print #1, "reponse"; rep$
Next I
Next X
Close #1
GoSub 16000
'input "voulez-vous la solution o/n",Z$
If Z$ "o" Then GoTo 800 Else GoTo 520
520 'cls
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
On X GoSub 2001, 2002, 2003, 2004
For I = 1 To X1
Get #1, pag(X, I), enr
solution$(X, pag(X, I)) = enr.eNom
Next I
Next X
X4 = 0
Open "repons.dat" For Output As #2
Print #2, using; "Reponses au test de theorie n ##"; num
For X = 1 To 4
On X GoSub 6001, 6002, 6003, 6004
For I = 1 To X1
X4 = X4 + 1
Print #2, using; "\"; solution$(X, pag(X, I));
Print #2, "---> reponse a la";
Print #2, using; " question ##"; X4;
Print #2, using; " position ###"; pag(X, I);
Print #2, using; "\"; X2$
Next I
Next X
Close #1
Close #2
800 End
Bon j'ai pas tout coriger, quelques conseils :
Evite les goto/gosub, utimlise plutos les if, function, exit, sub et autres
Idente ton code, il sera plus lisible
met option explicit en haut de tous tes modules, cela oblige de déclarer ttes tes variables
limite au maximum la visibilité de tes variables
Utilise freefile pour récupérer un numéro de fichier que tu peux ouvrir
Utilise des controles pour afficher les résultats
Ton projet c'est un projet EXE?
Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET)