Win3x.Org

Windows & DOS Community

Postez vos petits programmes en QBasic

Règles du forum

Pour tout sujet impliquant un système d'exploitation daté de 2000 à nos jours, merci de le publier dans la section intitulée « Informatique moderne ».

Répondre   Page 2 sur 5  [ 44 messages ]
Aller sur la page « 1 2 3 4 5 »
Auteur Message
Dr Frankenstein
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 19 juin 2009 03:21
Membre d'honneur
Hors-ligne
 
Messages : 418
Inscription : 28 oct. 2004 01:31
 
gm86 a écrit :
Voilà l'extrait de la Bible PC :
Donc je suis pas le seul à avoir cette brique! :D


----
Publié : Vendredi 19 Juin 2009 02:27:57
gm86 a écrit :
Ce programme est excellent. Le jeu est simple mais amusant, l'introduction bien faite ainsi que les sons.
Il serait en revanche intéressant d'insérer des espaces dans le programme afin que le lecteur ne confonde pas les boucles.
Son indentation était probablement là, mais il n'a pas utilisé la balise

_________________

Introducing Windows 95.
It lets you use more than eight characters to name your files. Imagine that. ~Apple.


Haut
Profil Citer
NeuhNeuh
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 19 juin 2009 10:14
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 240
Inscription : 04 juin 2009 00:00
 
Ok donc il faut que j'utilise curdir$ au lancement pour setter une variable global qui possède donc le chemin en cours (puisque l'interruption recupère le chemin dos en cours d'utilisation curdir$ fait pareil ^^) même si ce n'est pas EXACTEMENT ce que je veux faire ^^

Je vous remercie beaucoup de vos réponses :)

Edit :
Allez ! Je pose un code pour faire une pause de X secondes ☺
sub WFTime (attente!)
  debut! = TIMER
  Do : Loop while TIMER - debut! < attente! 
End sub
Exemple :
WFTime 2
pour faire une pause de deux secondes ^^

_________________

[ img ]


Haut
Profil Citer
gm86
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 21 juin 2009 11:47
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 628
Inscription : 01 sept. 2008 19:07
 
Je ne connais ni « curdir$ » ni un moyen de connaître à coup sûr le chemin d'accès d'une application lancée par DOS.
En revanche, il est simple d'obtenir les chemins de recherche des exécutables.
Il suffit de consulter la variable d'environnement PATH.
? environ$("PATH")   'if faut tapez la variable en CAPITALES
Maintenant, un peu de code machine.
Il est possible en BASIC d'envoyer du texte à l'imprimante.
On peut aussi imprimer l'écran avec Microsoft GWBASIC grâce à l'instruction LCOPY.
Mais cette instruction n'est reconnue ni par IBM BASIC ni par MS QBASIC.
Il faut alors utiliser l'interruption 5 qui est activée normalement par la touche "Impr écran".
Il existe un programme d'exemple dans l'aide de QBASIC employant l'instruction CALL ABSOLUTE.
Le voici traduit pour l'IBM BASICA :
10 I=0:ASM=0            'important ! déclarer les variables en les initialisant
20 DIM A%(1)            '0 à 1 soit 2 mots (4 octets)
30 MEM%=VARPTR(A%(0))
100 FOR I=0 TO 2
110   READ ASM
120   POKE MEM%,ASM
130   MEM%=MEM%+1
140 NEXT
150 SCRNCOPY=VARPTR(A%(0))
160 CALL SCRNCOPY
170 END
1000 'code machine
1010 DATA &Hcd,&H05             :'int 5
1020 DATA &Hcb                  :'retf
De plus, ce programme fonctionne dans une fenêtre DOS, contrairement à l'instruction LCOPY qui peut être sans effet.
Pour finir, voilà une façon de faire avec QuickBasic :
REM $INCLUDE: 'QB.BI'
DIM entree AS RegType
DIM sortie AS RegType
CALL INTERRUPT(&H5, entree, sortie)

Dernière modification par gm86 le 15 août 2012 21:55, modifié 5 fois.

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
Dr Frankenstein
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 29 juin 2009 04:30
Membre d'honneur
Hors-ligne
 
Messages : 418
Inscription : 28 oct. 2004 01:31
 
Les messages s'envoient à des fenêtres, pas des processus. Un processus peut avoir plusieurs fenêtres.

Il n'y a pas de moyen déjà fait pour avoir une liste des fenêtres pour un processus donné. Par contre, tu peux t'en créer une toi-même avec (voir http://www.codeguru.com/forum/showthread.php?t=353149 ) (je te ferais un exemple de code, mais je m'y connais pas assez avec VB, je fais principalement du C et du C++.

Pour tuer un processus, je suppose que ça : http://www.tek-tips.com/viewthread.cfm? ... 376&page=3 peut t'aider. Je crois pas que les enfants sont tués, et je sais pas comment connaître les enfants d'un processus. J'imagine qu'on peut connaître le parent, mais je sais pas pour l'inverse.

_________________

Introducing Windows 95.
It lets you use more than eight characters to name your files. Imagine that. ~Apple.


Haut
Profil Citer
Tiger
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 02 juil. 2009 16:39
Membre inscrit
Hors-ligne
 
Messages : 2
Inscription : 26 août 2007 16:20
 
Pour récupérer les paramètres de la ligne de commande en QBASIC, il faut utiliser COMMAND$


Avec windows xp pro, pour connaitre les services qui utilisent un processus, il suffit d'ouvrir une console et d'utiliser la commande "tasklist /svc".
Par exemple sur mon PC actuellement le processus services.exe, de PID 700, a les services PlugPlay et Eventlog.


Haut
Profil Citer
gm86
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 02 juil. 2009 20:49
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 628
Inscription : 01 sept. 2008 19:07
 
QBasic ne reconnaît pas la chaîne COMMAND$ en tant qu'ensemble des options de la ligne de commande puisqu'il ne compile pas les fichiers. QuickBASIC qui peut créer des exécutables la reconnaît.
QBASIC est une version de QuickBASIC qui est limitée à être uniquement un environnement de programmation tout comme GW-BASIC/BASICA.


----
Publié: lundi 6 juillet 2009 21:55

Qu'est-ce que form ? Je ne connais pas le VB.

Donc, je me permets aussi un léger hors-sujet.
QBasic est assez précis dans les calculs.
Contrairement à GW-BASIC/BASICA, il utilise le format IEEE reconnu par les coprocesseurs arithmétiques.
Pour calculer une racine carrée, la fonction SQR() donne des résultats fiables.
Avec le GW-BASIC/BASICA, elle les donne en simple précision, et il faut lui préférer la méthode de Newton. Cependant, si l'utilisateur a lancé GWBASIC/BASICA avec l'option /D, la fonction SQR() ne fera pas de conversion interne en simple précision, donnant ainsi des résultats précis. Encore faut-il qu'il y pense.
Le programme suivant illustre l'expérimentation de cette méthode.
10 'Calculer la racine carrée d'un nombre en utilisant la méthode de Newton
20 VIEW PRINT: CLS
30 GOSUB 100    '== DEBUT ==
40 GOSUB 1000   '== TRAITEMENT ==
50 '
60 '
70 '
80 '
90 '
100 '== D E B U T ==
110 PRINT "Calcul de la racine carrée d'un nombre en utilisant la méthode de Newton."
120 COLOR 0, 7: PRINT "F1": PRINT "F2": PRINT "F5"
130 COLOR 7, 0
140 LOCATE 2, 3: PRINT " Changer la précision"
150 LOCATE 3, 3: PRINT " Entrer un nombre"
160 LOCATE 4, 3: PRINT " Quitter"
170 PREC$ = "Différence entre les deux dernières approximations < 10 puissance -"
180 CHIFFRE% = 8        'paramètre fixe optimal mais il en faudrait un adapté à la grandeur du nombre
190 PRELGN% = 7         'prochaine première ligne d'affichage
200 GOSUB 12000          'aller à PRECISION
210 FOR N = 1 TO 10     'surveiller les touches F1 à F10
220   KEY(N) ON
230 NEXT
240 ' - choix -
250 ON KEY(1) GOSUB 10000        'aller à ENTRER PRECISION
260 ON KEY(2) GOSUB 11000        'aller à ENTRER NB
270 ON KEY(5) GOSUB 13000        'aller à QUITTER
280 VIEW PRINT PRELGN% TO 24    'restriction de l'usage des premières lignes
300 RETURN
310 '
320 '
330 '
1000 '== T R A I T E M E N T ==
1010 GOTO 1000    'boucle d'attente d'un événement -- pression sur F1, F2 ou F5
1020 '
1100 'calcul
1110 COMPTEUR% = 0: DIF# = 2: RACDER# = 1       'on initialise les valeurs mais la dernière peut être améliorée
1120 WHILE ABS(DIF#) > PRECISION#
1130   RACPRE# = RACDER#        'à placer entre la condition et le calcul
1140   RACDER# = (RACPRE# + NOMBRE# / RACPRE#) / 2
1150   DIF# = RACPRE# - RACDER#
1160   PRINT RACPRE#; TAB(25); "-"; TAB(29); RACDER#; TAB(53); "="; TAB(57); DIF#
1170   COMPTEUR% = COMPTEUR% + 1
1180 WEND
1190 PRINT "La racine carrée de "; NOMBRE#; " obtenue après "; COMPTEUR%; " itérations est"; CHR$(13); RACDER#
1200 '
1500 GOTO 1000  'boucle principale
1510 '
1520 '
1530 '
1540 '
10000 '* ENTRER PRECISION *
10010 INPUT "Combien de chiffres de comparaison après la virgule (1-15) "; CHIFFRE%
10020 IF CHIFFRE% < 1 OR CHIFFRE% > 15 THEN 10010
10030 LIGNE% = CSRLIN            'sauvegarder la position du curseur
10040 VIEW PRINT 5 TO 6: CLS     'effacer les lignes 5 et 6
10050 GOSUB 12000                 'aller à PRECISION
10060 VIEW PRINT PRELGN% TO 24   'revenir à la restriction de lignes précédente
10070 LOCATE LIGNE%, 1           'restaurer la position du curseur
10080 RETURN                     'revenir à la boucle d'attente
10090 '
10100 '
11000 '* ENTRER NB *
11010 INPUT "Entrez un nombre pour en extraire le racine carrée "; NOMBRE#
11020 IF NOMBRE# < 0 THEN PRINT "Nombre négatif non permis.": GOTO 11000
11030 RETURN 1100        'retourner après la boucle d'attente
11040 '
11050 '
12000 '* PRECISION *
12010 LOCATE 5, 1: PRINT PREC$; CHIFFRE%
12020 PRECISION# = 10 ^ -CHIFFRE%
12030 RETURN
12040 '
12050 '
13000 '* QUITTER *
13010 PRINT "Programme terminé."
13020 LIGNE% = CSRLIN
13030 VIEW PRINT                 'usage de toute les lignes et curseur au début
13040 LOCATE LIGNE%, 1           'le curseur revient à sa position d'avant
13050 END
Notes :
Ce programme est incompatible avec le BASICA d'IBM, l'instruction VIEW PRINT lui étant inconnue.
La boucle d'attente empêche l'affichage du curseur sauf si on utilise le BASIC version 3 de Microsoft.
Les routines secondaires sont placées dans les lignes supérieures à 10000.
L'emploi du GOTO ici évite de compliquer le programme mais il reste à éviter. C'est pourquoi il ne sert qu'à créer la boucle du programme et une boucle d'attente.
A la ligne 1110, 2 est affecté à DIF# afin de permettre d'entrer dans la boucle WHILE...WEND. En effet, la boucle DO...LOOP qui teste la condition à la fin n'existe qu'en QuickBasic et QBasic. J'aurais aussi pu utiliser une instruction IF condition THEN n° ligne placée à la fin de la boucle ; néanmoins, cette solution est moins structurée.
Un dernier point, je n'ai rien prévu pour le calcul de la racine carrée de zéro. Vous pouvez essayer avec QBasic.

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
Tiger
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 06 juil. 2009 23:52
Membre inscrit
Hors-ligne
 
Messages : 2
Inscription : 26 août 2007 16:20
 
gm86 a écrit :
Qu'est-ce que form ?
C'est une fenêtre windows. Il s'agit d'un objet avec des propriétés. Pour modifier la propriété, il suffit de mettre nom_de_ta_fenetre.propriété = nouvelle_valeur

par exemple form1.caption = "nouveau titre"

Pour connaitre les propriétés, il faut regarder l'explorateur de propriété de VisualBASIC


Haut
Profil Citer
michel
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 06 juil. 2009 23:57
Administrateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 2828
Inscription : 07 févr. 2003 19:46
PC Rétro : IBM - PS2 mod85-DOS 6.22 - Windows 3.11 fwg
 
gm86 a écrit :
Un dernier point, je n'ai rien prévu pour le calcul de la racine carrée de zéro. Vous pouvez essayer avec QBasic.
En Qbasic, QuickBasic, Turbo Basic:
INPUT; x
PRINT SQR(x)
Si on saisi "0" on obtient "0" comme résultat. Je ne vois pas comment il en serait autrement :!:

_________________

clikicitoraleur


Haut
Profil Citer
gm86
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 07 juil. 2009 12:19
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 628
Inscription : 01 sept. 2008 19:07
 
A Michel.
Je me suis mal exprimé. J'ai voulu dire calculer la racine carrée de zéro en lançant mon programme sous QBasic, et non en utilisant l'instruction spécifique de QBasic.
Ce programme donne des résultats peu fiables avec des valeurs proches de zéro, a moins d'augmenter le nombre d'itérations.
Décomposer la racine en deux parties serait une solution plus rapide :

sqr(3.2156*10^-11)
= sqr (0.32156) * sqr(10^-10)
= sqr (0.32156) * 10^-5

L'algorithme donne rapidement un résultat précis avec un nombre tel que 0.32156.
Pour le cas précédent du zéro, il suffit de créer une exception pour éviter d'obtenir une valeur, certes infime mais non nulle.

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
0597534
Sujet du message : Re: Postez vos petits programmes pour DOS en QBasic
Publié : 07 juil. 2009 23:22
 
 
bonjour, voici Pong, que j'ai écris il y a longtemps, bien avant d'avoir fait LightCycles. J'aimerais avoir de l'aide pour créer ou "simuler" une intelligence pour l'ordinateur, qui se trouve à être la barre de droite. Aussi, j'ai discuté avec mon oncle qui est technicien d'informatique et il me disait que le problème de rafraichissement (clignotement de l'écran) pourrait se régler en ajoutant comme deux écrans et interchanger entre ceux-ci.(si possible, un peux d'explications s'il vous plait) Je tiens à préciser que le joueur ne peux jamais gagner car la palette de l'ordinateur suis la position en Y de la balle, c'est pourquoi je disais donner une petite intelligence à l'ordi pour donner une chance au joueur de pouvoir gagner... Bref, je suis sur qu'en tant que spécialistes et mordus d'ordi (je fais référence à vous, équipe de win3x et tout les autres utilisateurs), saurez peut-être m'aider ou m'éclairer sur certain trucs et me donner même quelques conseils :wink:
DECLARE SUB gameover2 ()
DECLARE SUB gameover ()
DECLARE SUB soundpause ()
DECLARE SUB intro ()
DIM x AS INTEGER
'DIM xmod AS INTEGER
DIM y AS INTEGER
'DIM ymod AS INTEGER
DIM linex AS INTEGER
DIM liney AS INTEGER
DIM linex2 AS INTEGER
DIM liney2 AS INTEGER

x = 320
y = 240
xmod = 1
ymod = 1
linex = 17
liney = 240
linex2 = 620
liney2 = 240
z = 0

SCREEN 12

DO
IF z = 0 THEN
intro
END IF
z = 1
x = x + xmod
y = y + ymod
liney2 = y

press$ = INKEY$            'commandes clavier
IF press$ = "a" THEN    'haut
liney = liney - 26
ELSEIF press$ = "z" THEN 'bas
liney = liney + 26
END IF

IF x > 600 AND y <= liney2 + 40 AND y >= liney2 - 40 THEN
xmod = -xmod
SOUND 350, 1
LET b = b + 1
END IF

IF x < 35 AND y <= liney + 40 AND y >= liney - 40 THEN
xmod = -xmod
'rajouter ymod = -ymod quand la balle arrive en haut de la pallette
SOUND 350, 1
LET a = a + 1
END IF

IF a = 5 AND b = 5 THEN
LET xmod = 2
LET ymod = ymod = ymod
END IF
   
IF x < 2 THEN
LET p2 = p2 + 1
LET x = 320
LET y = 240
LET xmod = 1
LET ymod = 1
SOUND 350, 8
PRINT "BUT!- JOUEUR:"; p; ", ORDI:"; p2
SLEEP 2
LET a = 0
LET b = 0
CLS
END IF

IF x > 632 THEN
LET p = p + 1
LET x = 320
LET y = 240
LET xmod = 1
LET ymod = 1
SOUND 350, 8
PRINT "BUT!- JOUEUR:"; p; ", ORDI:"; p2
SLEEP 2
CLS
LET a = 0
LET b = 0
END IF

IF y < 17 OR y > 460 THEN
ymod = -ymod
SOUND 700, 1
END IF

IF press$ = "p" THEN
soundpause
END IF

IF p2 = 5 THEN
gameover2
ELSEIF p = 5 THEN
gameover
END IF

CIRCLE (x, y), 17, 20
LINE (linex - 5, liney - 40)-(linex + 5, liney + 40), 20, BF
LINE (linex2 - 5, liney2 - 40)-(linex2 + 5, liney2 + 40), 20, BF
CIRCLE (x, y), 17, 0
LINE (linex - 5, liney - 40)-(linex + 5, liney + 40), 0, BF
LINE (linex2 - 5, liney2 - 40)-(linex2 + 5, liney2 + 40), 0, BF
LINE (0, 0)-(640, 0), 20
LINE (0, 477)-(640, 477), 20

LOOP

SUB gameover
SOUND 340, 2
SOUND 430, 2
SOUND 510, 2
SOUND 690, 6
SOUND 340, 2
SOUND 465, 2
SOUND 570, 2
SOUND 690, 6
SOUND 390, 2
SOUND 510, 2
SOUND 640, 2
SOUND 760, 4
SOUND 510, 2
SOUND 690, 6
SOUND 340, 6
PRINT "vous avez gagne, appuyez sur une touche pour continuer..."
END
END SUB

SUB gameover2
SOUND 350, 2
SOUND 390, 2
SOUND 430, 2
SOUND 450, 2
SOUND 520, 2
SOUND 575, 2
SOUND 620, 5
SOUND 350, 2
SOUND 575, 5
SOUND 350, 2
SOUND 520, 5
SOUND 350, 2
SOUND 460, 10
SOUND 430, 10
SOUND 620, 1.5
SOUND 430, 1.5
SOUND 620, 1.5
SOUND 430, 1.5
SOUND 620, 1.5
SOUND 430, 1.5
SOUND 620, 1.5
SOUND 430, 6
PRINT "partie terminee, appuyez sur une touche pour quitter..."
END
END SUB

SUB intro
PRINT
PRINT
PRINT "                         ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "                         º   ÜÜÜÜ  ÜÜÜÜ  ÜÜ  Ü  ÜÜÜÜ   º"
PRINT "                         º  °Û  Û °Û  Û °Û Û Û °Û ÜÜ   º"
PRINT "                         º  °Ûßßß °ÛÜÜÛ °Û° ßÛ °ÛÜÜÛ   º"
PRINT "                         º  °     °°°°  °  °°  °°°°    º"
PRINT "                         ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
PRINT
PRINT "                                 PAR: KARL LEVEILLE"
PRINT
PRINT "--INSTRUCTIONS--"
PRINT "Le principe est tres simple:echangez la balle avec votre adversaire jusqu'a"
PRINT "ce que celle-ci se retrouve derriere la palette du joueur. Apres 5 points, "
PRINT "la partie sera terminee. "
PRINT "--CONTROLES--**LES LETTRES DOIVENT ETRES EN MINUSCULES**"
PRINT "a=bouger la palette gauche vers le haut"
PRINT "z=bouger la palette vers le bas"
PRINT "p=pause, appuyer sur une touche autre que p pour reprendre la partie"
PRINT
PRINT
PRINT "Appuyez sur une touche pour commencer la partie..."
SOUND 610, 4
SOUND 0, 1
SOUND 610, 2
SOUND 640, 2
SOUND 730, 2
SOUND 800, 5
SLEEP
CLS
END SUB

SUB soundpause
SOUND 700, 1
SOUND 550, 1
SOUND 700, 1
SOUND 550, 1
SLEEP
SOUND 700, 1
SOUND 550, 1
SOUND 700, 1
SOUND 550, 1
END SUB



Haut
Citer
Afficher : Trier par : Ordre :
Répondre   Page 2 sur 5  [ 44 messages ]
Revenir à « Informatique des vieux systèmes » | Aller sur la page « 1 2 3 4 5 »
Aller :