CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Qbasic probleme de sub

raiku
raiku
Niveau 8
13 octobre 2007 à 12:18:08

bonjour, voici mon code:

ON KEY(1) GOSUB FIN
KEY(1) ON
INPUT "Entrez le numero de l´exercice"; exo
PRINT "1 - Tables de multiplications"
IF exo = 1 THEN GOSUB TABLE
END

SUB FIN
STOP
END SUB

SUB TABLE

FOR x = 1 TO 12
FOR y = 1 TO 12
DO
again: z = x * y
PRINT x; "*"; y; "="
INPUT resultat
IF resultat <> z THEN GOTO again
NEXT y
NEXT x
LOOP
END SUB

Mon problème est le suivant, il me dit dès la ligne 1 qu´il faut lui définir une étiquette. J´aimerai donc savoir ce qu´est une étiquette car je ne comprend pas pouquoi ceci ne marche pas. Je veux simplement lui dire qu´en appuyant sur ESC, il faut aller au SUB fin qui quitte le programme.

Merci

NarutoOnline
NarutoOnline
Niveau 5
13 octobre 2007 à 16:40:50

Oui apres GOTO ou GOSUB il faut mettre une etiquette, mais dons ton cas tu veux appeler une fonction, donc tu fais "ON KEY(1) FIN".

dnob700
dnob700
Niveau 10
13 octobre 2007 à 17:10:00

pour définir une étiquette tu utilise le mots clef LABEL au lieu de SUB. Tu peut alors "sauter" à l´étiquette avec un GOTO ou y aller puis en revenir avec un GOSUB, mais il faut terminer cette "procédure" non pas par END SUB mais par RET (ou RETURN, je ne me souviens plus). Mais c´est une méthode ancienne, utiliser de vraies sous procédure est plus propre. Que tu défini comme tu l´a fait et tu les appelle comme le dit Naruto dans le cas d´un événement ON KEY.

QBasic est un très bon langage (c´est avec ça que j´ai tout appris) mais en même temps, il est un peu vieux et tu derait peut-être essayer quelque chose de plus moderne qui resterait simple.

J´allais te conseiller phrogram, mais je vois qu´il est devenu payant. Donc oublie ce conseil et reste en QB jusqu´à ce que tu es envie d´aller voir plus loin.

raiku
raiku
Niveau 8
13 octobre 2007 à 18:20:54

Haa, j´ai 2 probleme
La premiere, c´est que le mot clef Label n´existe pas (enfin il ne le reconnait pas en tout cas)
Ensuite quand j´enleve le end sub pour mettre return, il me met un message d´erreur me dissant qu´il est impossible qu´il y´est un sub/function sans end sub/function.

dnob700
dnob700
Niveau 10
13 octobre 2007 à 18:38:54

oui logique, car pour enlever le end sub il faut mettre un label. Si ce n´est aps le mot clef LABEL, alors c´est peut-être le mot clef LBL, ou alors c´est peut-être rien, il suffit de mettre :
nom_du_label:

(le deux point à la fin précisant qu´on a un label).

Essaye, une de ces solutions devrait fonctionner.

raiku
raiku
Niveau 8
14 octobre 2007 à 10:25:04

Je crois que mêttre le nom du label tout seul suffit.
Maintenant j´ai un autre message d´erreur.
Il me dit : next sans for
Je ne comprend pas où est mon erreur de syntaxe.
Voici ce que moi j´interprete:
Je demande pour y est y allant de 1 à 12 de faire la boucle
il tombe sur next y, il incremente y ainsi de suite jusqu´à 12.
Il tombe donc ensuite sur le next x, l´incremente de 1. (par contre je ne sais pas si il reinitialise y à 1).

NarutoOnline
NarutoOnline
Niveau 5
14 octobre 2007 à 11:43:34

Le DO...LOOP est mal placé.
Tu peux l´utiliser pour remplacer le GOTO :

FOR x = 1 TO 12
FOR y = 1 TO 12
z = x * y
DO
PRINT x; "*"; y; "="
INPUT resultat
LOOP UNTIL resultat = z ´répéter à partir de DO jusqu´à ce que resulta=z
NEXT y
NEXT x

raiku
raiku
Niveau 8
14 octobre 2007 à 13:07:45

Ha oui malin!!! (ou plutot, je ne suis pas futé^^).
Je voudrais aussi savoir, je suis un peu perdu au niveau des

on...key
key on
key
je crois que l´on peut aussi utiliser chr$
Apres ça, je crois que ça devrait aller
Merci

raiku
raiku
Niveau 8
14 octobre 2007 à 13:17:45

ha oui et je viens d´essayer ça, il comprend le TABLE:
Il m´y renvoie si je le met sur la page principale, seulement quand je tape sub table, le logiciel ouvre une autre fenetre dans laquelle j´écris ma sub routine, et là c´est comme si elle n´était pas définit.
Je crois que ça n´est pas très clair comme explication.
En fait le code que j´ai ecris est un copier coller des différentes fenetres, je ne peux pas ecrire sur une seule et meme page (mais normalement le logiciel doit etre prevu pour sa puisqu´il me les ouvre automatiquement).

Logiciel utilisé: QB4.5 fr

dnob700
dnob700
Niveau 10
14 octobre 2007 à 16:16:30

commende par télécharger la dernière version de QBasic là par exemple :
http://perso.orange.fr/sectionpc/sectionbasic/programmes/
Même celle là (7.1) a pas mal de problème, mais elle corrige certain défaut de la 4.5 (bon, c´est pas censé être gratuit, mais je crois que raisonnablement tu peut le télécharger).

Je ne comprend pas ton problème de table ? si table est une sous routine, alors quand tu tape le sub table il t´ouvre une nouvelle fenêtre dans laquelle tu tape ta sous routine (y compris la ligne SUB TABLE) et elle est définit dans ce fichier là (i.e. dans cette partie du fichier, en fait c´est juste l´éditeur qui découpe l´affichage, mais toute les routines sont définies les unes à la suite des autres). Qu´est-ce qui n´est pas définit dans la nouvelle fenêtre ?

Tu peut aussi enregistrer ton programme au format texte et le poster sur un wall pour qu´un le regarde.

raiku
raiku
Niveau 8
14 octobre 2007 à 18:28:29

ON KEY(1) GOSUB FIN
KEY(1) ON
INPUT "Entrez le numero de l´exercice"; exo
PRINT "1 - Tables de multiplications"
IF exo = 1 THEN GOSUB TABLE

SUB FIN
END
END SUB

SUB TABLE

FOR x = 1 TO 12
FOR y = 1 TO 12
z = x * y
DO
PRINT x; "*"; y; "="
INPUT resultat
LOOP UNTIL resultat = z
NEXT y
NEXT x
END SUB

Je vais changer le debut, je vais essayer de lui dire quand appuyant sur 1 il doit aller au sub table (c´est parce que j´ai bien évidemment l´intention par la suite de faire un menu affichant pour chaque N° l´exercice correspondant).

Sinon j´ai telecharger QB7.1
L´exe oldqb fonctionne (inutile puisque c´est QB4.5), Mais le qbx ne fonctionne pas il me renvoie: répertoire de démarrage non valide, vérifier votre fichier pif.

dnob700
dnob700
Niveau 10
14 octobre 2007 à 23:07:48

oui, il faut régler dans les propriété du programme son répertoire de démarrage (qui doit être celui dans lequel il est enregistré).

Quand c´est fait, il crée un raccourci vers le programme. C´est ce raccourci qu´il faut utiliser pour lancer le programme. Et tu peut mettre le raccourci où tu veux dans ton ordi bien sûr. En tout cas, c´était comme ça sur XP encore (et précédent), mais sur vista, je n´ai pas essayé donc je n´en sais rien, si jamais tu as cet OS.

raiku
raiku
Niveau 8
15 octobre 2007 à 21:15:18

Bon je n´ai pas resolu le probleme de QB7.1, mais par contre j´ai resolu mes histoire de sub.
Disons que s´était juste une histoire de présentation.

....gosub Fin
...
Fin:
...
return

....call Fin
...
sub Fin
...
end sub

Voilà!!!
Par contre j´ai un nouveau souci, et j´ai pourtant essayer pas mal de chose avec ces histoire de on key.
Je définis une touche qui est ESC à laquelle je lui attribut un gosub Fin dans lequel il y a l´ordre de quitter le programme.
Voici le code: (pk ça ne fonctionne pas?)

KEY 15, CHR$(0) + CHR$(1)
ON KEY(15) GOSUB Fin
KEY(15) ON

dnob700
dnob700
Niveau 10
15 octobre 2007 à 21:56:12

je crois que escape c´est chr$(27) si j´ai bonne mémoire.
D´autre part, il y a bien quelques touches (les flèches principalement) qui utilisent deux caractères successifs, mais je ne sais pas si tu peut définir un KEY avec plusieurs caractères.

Je n´ai jamais vraiment utilisé cette fonctionnalité, donc je ne sais pas trop.

raiku
raiku
Niveau 8
17 octobre 2007 à 13:14:02

Bonjour
Bon je n´ai pas eu bcp de tmps, mais je n´ai pas encore reussis a faire fonctionner les touches
meme key(1) qui correspond a F1 ne fonctionne pas. Je vais essayer de trouver le cause du probleme, mais si vous aviez un exemple tout bete a me montrer, ca pourrait etre utile.

Je cherche aussi a afficher un tableau.
Je peux donc soit utiliser la fonction print et local en bidouillant avec des boucles. Mais j´ai vu au´il existait une fonction appeler WIDTH. Le seul probleme c´est aue je n´arrive jamais rien a obtenir. A quoi sert elle exactement?

dnob700
dnob700
Niveau 10
17 octobre 2007 à 18:03:20

il y a une aide en ligne pas mal quidevrait te décrire la fonction width normalement (avec la touche F1 je dirais). Parce que pour moi, le QB est très lointain et je ne peut certainement pas répondre à ce genre de question.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment