Forum Liberty Basic France

Le 27/02/2016 à 21h45

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
Reprise du message précédent

Christophe: Uune seule adresse:
https://www.virtualbox.org/wiki/Linux_Downloads
____________________
Roro

   
Le 28/02/2016 à 01h19

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Voilà qui est fait. La précédente tentative était pas loin d'être un fiasco, et là ça s'est déroulé sans accroc, je sais pas pourquoi. C'est encore un peu compliqué pour partager les clef et disques usb (forcément, quand un système l'accapare, il n'est plus disponible pour l'autre), mais j'ai pu installer JB et lancer ton prog.

Maintenant ça fait bien pouet-pouet ;)

Mais pour l'audio il manque des traits et des points, serait-ce à cause de la virtualisation ? Pourquoi pas des points et des traits calibrés en durée, un trait valant trois points, et terminer point et trait par un silence de la valeur d'un point, ça devrait être faisable avec Audacity ?
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 28/02/2016 à 07h07

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
J'ai un peu nettoyé le zip
Je pense que le son "point " est trop court; en vertu du code, on devrait l'entendre et on ne l'entend pas
Je savais qu'il y aurait des réclamations au niveau du son
Mais c'est du morse écossais (cornemuse inside) :)
____________________
Roro

   
Le 28/02/2016 à 12h06

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Tiens, puisque tu m'as fais passer sous VirtualBox, je me suis vengé !

J'ai créé trois fichiers audio :
point.wav : 1/10è de seconde de son et 1/10è de seconde de silence
trait.wav : 3/10è de seconde de son et 1/10è de seconde de silence
espace2pt.wav : 2/10è de seconde de silence (et pas 3, puisque qu'un espace vaut trois point, et qu'il y en a déjà un à la fin de point.wav et de trait.wav

J'ai modifié ton prog comme suit :
Code VB :
 
    for h=1 to p ' ------Son
        for d=1 to len(enr$(h)) 'on ressort les trucs du congélo
       ' print mid$(enr$(h),d,1)
           select case mid$(enr$(h),d,1) 'on analyse par caractères
              case "."
              playwave "point.wav" ',async
             'playwave ""
             'gosub [pause]
              case "-"
              playwave "trait.wav"',async
              'playwave ""
             'gosub [pause]
             'case ".§"
             'temp=700: playwave "": gosub [pause]: temp=200
           end select
           print temp
        next d
        playwave "espace2pt.wav"
     next h
 


Pas la peine de recopier, tout est contenu dans le zip : Morse_RoStoff.zip

C'est sympa mais il y a parfois des claquements parasites qui dénaturent le message.

Maintenant qu'on sait bientôt faire un wav, (et donc du silence), pourquoi ne génèrerait-on pas, en début de programme, 36 wavs représentant autant de caractères, avec une vitesse et une hauteur de note qu'on choisirait ?

(j'avais dit que je me vengerais, hé hé hé niak niak ;) )



Edité par Christophe Le 28/02/2016 à 12h12
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 28/02/2016 à 16h44

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
Citation:
36 wavs représentant autant de caractères

Bah parce que générer 36 wav, ça va prendre 36 heures
Mais l'idée n'est pas mauvaise.
Je vais voir ce que donne ton truc
A +
EDIT: Hey...C'est pas mal, on se croirait dans un film de guerre
Mais le silence entre les lettres est trop long
Dans un message en morse, ça enchaine (plus
____________________
Roro

   
Le 28/02/2016 à 18h40

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Tatie, tatie tata ! Bon, les enfants, y'a du taf, du bread over the planche, comme pourraient dire les Britiches, je ne pensais pas qu'on pouvait autant disserter sur du morse : Morse sur Wikipedia

pmp, tu vois ce qui t'attend ^^

Roland:
Mais le silence entre les lettres est trop long

Théoriquement non, je me suis basé sur ce doc pour confirmer mes souvenirs :

International Morse code:

...
2.1 A dash is equal to three dots.
2.2 The space between the signals forming the same letter is equal to one dot.
2.3 The space between two letters is equal to three dots.
2.4 The space between two words is equal to seven dots.
...


Par contre il est très possible que JB/LB n'ait pas été conçu pour gérer des wav aussi brefs, il y a peut-être des temps de latence quand il charge un wav. constatation qui va dans le sens d'un wav par lettre et non par tiret ou point.

J'ai oublié de générer l'espace entre deux mots. Au fait, je pensais que la barre de fraction qu'utilise pmp était une invention à lui, en fait non, je viens d'apprendre qu'il s'agit bien d'une notation pour séparer les mots (pas les lettres). C'est juste une notation, je ne crois pas qu'on envoie de "/"
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 28/02/2016 à 20h35

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
En fait, tes 36 wav, il suffit de les générer une fois et de les mettre dans le dossier.
Mais la boucle de lecture va être plus longue (36 "if" ou 36 "case")
Les "if" sont tous lus; les "cases" non
Reste à savoir si la différence entre un "case" trouvé en début et en fin de boucle est perceptible à l'oreille.
____________________
Roro

   
Le 29/02/2016 à 15h43

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Il y aura en tout cas moins de différence que pour un wav par point ou trait. On pourrait aussi envisager un tableau.

Il devrait être possible de générer automatiquement les codes au lieu de se les coltiner à la main. Je n'ai pas l'algorithme en tête mais ça doit pas être insurmontable. On avait parlé d'une modulation d'un signal par l'autre quand on parlait du générateur BF, et du morse c'est une modulation en tout-ou-rien. On pourrait même créer directement la phrase sans passer par la création individuelles des lettres... Même si en cet instant je ne sais pas trop comment.

pmp, on est toujours dans dans ta discussion, et en attendant des nouvelles de ton menu à boutons, nous projetisons sur la comête :)
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
pmp
Le 29/02/2016 à 19h58

Libertynaute Timide

Groupe: Membre

Inscrit le: 15/02/2016
Messages: 27
J'ai essayé un truc mais sa ne marche pas, déja le a$=Inkey$ ne marche pas, mais je pense que se n'est pas la seule erreur ^^
Merci de jetter un coup d'oeil
Code VB :
 
[Recevoir]
NOMAINWIN
WindowHeight=800
WindowWidth=700
 
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 open "Décoder " for graphics for graphics_nsb AS #a
 
a$ = ".-"
b$ = "-..."
c$ = "-.-."
d$ = "-.."
e$ = "."
f$ = "..-."
g$ = "--."
h$ = "...."
i$ = ".."
j$ = ".---"
k$ = "-.-"
l$ = ".-.."
m$ = "--"
n$ = "-."
o$ = "---"
p$ = ".--."
q$ = "--.-"
r$ = ".-."
s$ = "..."
t$ = "-"
u$ = "..-"
v$ = "...-"
w$ = ".--"
x$ = "-..-"
y$ = "-.--"
z$ = "--.."
 
 
 
Chiffre = INT(26*RND(1))
 
if ( Chiffre = 1 ) then Lettre$ = ".-"
if ( Chiffre = 2 ) then Lettre$ = "-..."
if ( Chiffre = 3 ) then Lettre$ = "-.-."
if ( Chiffre = 4 ) then Lettre$ = "-.."
if ( Chiffre = 5 ) then Lettre$ = "."
if ( Chiffre = 6 ) then Lettre$ = "..-."
if ( Chiffre = 7 ) then Lettre$ = "--."
if ( Chiffre = 8 ) then Lettre$ = "...."
if ( Chiffre = 9 ) then Lettre$ = ".."
if ( Chiffre = 10 ) then Lettre$ = ".---"
if ( Chiffre = 11 ) then Lettre$ = "-.-"
if ( Chiffre = 12 ) then Lettre$ = ".-.."
if ( Chiffre = 13 ) then Lettre$ = "--"
if ( Chiffre = 14 ) then Lettre$ = "-."
if ( Chiffre = 15 ) then Lettre$ = "---"
if ( Chiffre = 16 ) then Lettre$ = ".--."
if ( Chiffre = 17 ) then Lettre$ = "--.-"
if ( Chiffre = 18 ) then Lettre$ = ".-."
if ( Chiffre = 19 ) then Lettre$ = "..."
if ( Chiffre = 20 ) then Lettre$ = "-"
if ( Chiffre = 21 ) then Lettre$ = "..-"
if ( Chiffre = 22 ) then Lettre$ = "...-"
if ( Chiffre = 23 ) then Lettre$ = "-..-"
if ( Chiffre = 24 ) then Lettre$ = "-..-"
if ( Chiffre = 25 ) then Lettre$ = "-.--"
if ( Chiffre = 26 ) then Lettre$ = "--.."
 
print #a, "place ";X;" ";Y;Lettre$
 
    #a "when characterInput [A]"
    #a, "TRAPCLOSE [closeHelp]"
    wait
    a$=Inkey$
If a$=Lettre$
then
print #A, "place ";X;" ";Y+5;" ;| Juste ! "
else
print #A, "place ";X;" ";Y+5;" ;| Faux  ! "
wait
Goto [MENU]
end if
Y=Y+15
Goto [Recevoir]
 




Edité par pmp Le 29/02/2016 à 20h37

   
Le 29/02/2016 à 23h04

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
pmp pour que le code soit mis en conteneur, il faut que tu mette :
code=vb entre crochets [...] une ligne avant le code
Et: /code entre crochets [ ...] une ligne après le code
____________________
Roro

   
Le 29/02/2016 à 23h27

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Tu as tout mis dans un sac et tu as secoué ? Y'en a vraiment dans tous les sens, là dedans... pmp, faudrait peut-être un peu réfléchir par toi-même, c'est la base même du hobby. (ou faire une pause salvatrice)

Alors, dans l'ordre :
Code VB :
open "Décoder " for graphics for graphics_nsb AS #a

10 secondes pour trouver l'anomalie, coefficient 1

Code VB :
#a "when characterInput [A]"

Tant qu'il n'y aura pas de sous-programme nommé [A] et finissant par wait (et de virgule après le #a) je doute que tu puisse entrer quoi que ce soit au clavier^^ . Sur la ligne au dessus il manque le "setfocus" pour dire à l'ordinateur que c'est dans cette fenêtre qu'on va écrire quelque chose...

Code VB :
#a, "TRAPCLOSE [closeHelp]"

Il n'y a pas de [closeHelp] dans ton listing, et le programme le cherchera à un moment ou un autre. Et comme il n'y a pas de end sur le cheminement du programme, je crois même qu'on ne peut pas en sortir sans un ctrl-alt-suppr.

Code VB :
 
a$ = ".-"
b$ = "-..."
c$ = "-.-."
d$ = "-.."
e$ = "."
f$ = "..-."
g$ = "--."
h$ = "...."
i$ = ".."
j$ = ".---"
k$ = "-.-"
l$ = ".-.."
m$ = "--"
n$ = "-."
o$ = "---"
p$ = ".--."
q$ = "--.-"
r$ = ".-."
s$ = "..."
t$ = "-"
u$ = "..-"
v$ = "...-"
w$ = ".--"
x$ = "-..-"
y$ = "-.--"
z$ = "--.."
 

Quelle est l'utilité de ces variables ?

Il y a d'ailleurs risque de confusion entre a$=".-" et plus bas, a$=Inkey$, ton a$ aura la valeur entrée au clavier alors que tu croyais qu'elle était ".-"


Code VB :
print #a, "place ";X;" ";Y;Lettre$

Ce serait pas plutôt : print #a, "place ";X;" ";Y;" ;|"+Lettre$

Code VB :
 
a$=Inkey$
If a$=Lettre$
then
 

C'est normal, cette ligne qui commence par "then" ?
La condition ne fonctionnera pas, puisque a$ est ta frappe au clavier, alors que Lettre$ est le code morse : l'ordi ne sait pas que "a" est ".-", il te faut trouver le moyen de le lui dire.

Juste à la suite :
Code VB :
 
print #A, "place ";X;" ";Y+5;" ;| Juste ! "
else
print #A, "place ";X;" ";Y+5;" ;| Faux ! "
wait
Goto [MENU]
end if
 

C'est quoi, ce wait / goto [MENU] / end if ?
Le programme attend au milieu d'une condition et va à [MENU] quand une action de l'utilisateur est détectée. Mais [MENU] n'existe pas.

Code VB :
print #A, "place ";X;" ";Y+5;" ;| Juste ! "

Ta fenêtre s'appelle #a ou #A ?

J'ai un peu adapté ton programme, à toi de comprendre comment il marche :top

Code VB :
 
'29 fev 23h10
NOMAINWIN
 
X=10
Y=10
 
WindowHeight=800
WindowWidth=700
 
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 
open "Décoder " for graphics_nsb AS #a
 
    #a, "setfocus"
    #a, "when characterInput [A]"
    #a, "TRAPCLOSE [closeHelp]"
 
    gosub [tirage_au_sort]
 
    wait
 
 
[A]
    a$=Inkey$
    print #a, "place ";X+50;" ";Y+40;" ;|"+UPPER$(a$)
    print #a, "place ";X;" ";Y+60;" "
 
    If UPPER$(a$)=UPPER$(Rep$) then
        print #a, "| Réponse juste ! "
    else
        print #a, "| Réponse fausse ! "
    end if
 
    Y=Y+90
    gosub [tirage_au_sort]
    wait
 
 
[tirage_au_sort]
'(changé Chiffre par Nombre, un nombre contenant plusieurs chiffres...)
    Nombre = INT(26*RND(1))
    if ( Nombre = 1 ) then Rep$="a":Lettre$ = ".-"
    if ( Nombre = 2 ) then Rep$="b":Lettre$ = "-..."
    if ( Nombre = 3 ) then Rep$="c":Lettre$ = "-.-."
    if ( Nombre = 4 ) then Rep$="d":Lettre$ = "-.."
    if ( Nombre = 5 ) then Rep$="e":Lettre$ = "."
    if ( Nombre = 6 ) then Rep$="f":Lettre$ = "..-."
    if ( Nombre = 7 ) then Rep$="g":Lettre$ = "--."
    if ( Nombre = 8 ) then Rep$="h":Lettre$ = "...."
    if ( Nombre = 9 ) then Rep$="i":Lettre$ = ".."
    if ( Nombre = 10 ) then Rep$="j":Lettre$ = ".---"
    if ( Nombre = 11 ) then Rep$="k":Lettre$ = "-.-"
    if ( Nombre = 12 ) then Rep$="l":Lettre$ = ".-.."
    if ( Nombre = 13 ) then Rep$="m":Lettre$ = "--"
    if ( Nombre = 14 ) then Rep$="n":Lettre$ = "-."
    if ( Nombre = 15 ) then Rep$="o":Lettre$ = "---"
    if ( Nombre = 16 ) then Rep$="p":Lettre$ = ".--."
    if ( Nombre = 17 ) then Rep$="q":Lettre$ = "--.-"
    if ( Nombre = 18 ) then Rep$="r":Lettre$ = ".-."
    if ( Nombre = 19 ) then Rep$="s":Lettre$ = "..."
    if ( Nombre = 20 ) then Rep$="t":Lettre$ = "-"
    if ( Nombre = 21 ) then Rep$="u":Lettre$ = "..-"
    if ( Nombre = 22 ) then Rep$="v":Lettre$ = "...-"
    if ( Nombre = 23 ) then Rep$="w":Lettre$ = "-..-"
    if ( Nombre = 24 ) then Rep$="x":Lettre$ = "-..-"
    if ( Nombre = 25 ) then Rep$="y":Lettre$ = "-.--"
    if ( Nombre = 26 ) then Rep$="z":Lettre$ = "--.."
 
    print #a, "place ";X;" ";Y;" ;|A quelle lettre correspond ce symbole ?"
    print #a, "place ";X+50;" ";Y+20;" ;|"+Lettre$ 
 
    return
 
 
[closeHelp]
    close #a
    end
 
 

A+



Edité par Christophe Le 29/02/2016 à 23h32
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
pmp
Le 02/03/2016 à 20h18

Libertynaute Timide

Groupe: Membre

Inscrit le: 15/02/2016
Messages: 27
A oui effectivement ^^ Bon j'ai essayé de corriger tous les points et de ne pas trop regarder donc code pour ne pas copier ton travail.
Voila ou j'en suis, sa ne marche toujours pas, mais c'est déja mieux ^^
En tous cas merci beaucoup pour le temps passé a m'expliquer :)
Code VB :
 
NOMAINWIN
close #x
X=10
Y=10
WindowHeight=800
WindowWidth=700
 
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 open "Décoder " for graphics AS #a
 
a$ = ".-"
b$ = "-..."
c$ = "-.-."
d$ = "-.."
e$ = "."
f$ = "..-."
g$ = "--."
h$ = "...."
i$ = ".."
j$ = ".---"
k$ = "-.-"
l$ = ".-.."
m$ = "--"
n$ = "-."
o$ = "---"
p$ = ".--."
q$ = "--.-"
r$ = ".-."
s$ = "..."
t$ = "-"
u$ = "..-"
v$ = "...-"
w$ = ".--"
x$ = "-..-"
y$ = "-.--"
z$ = "--.."
 
 
 
Chiffre = INT(14*RND(1))
 
    if ( Chiffre= 1 ) then Rep$="a":Lettre$ = ".-"
    if ( Chiffre = 2 ) then Rep$="b":Lettre$ = "-..."
    if ( Chiffre = 3 ) then Rep$="c":Lettre$ = "-.-."
    if ( Chiffre = 4 ) then Rep$="d":Lettre$ = "-.."
    if ( Chiffre = 5 ) then Rep$="e":Lettre$ = "."
    if ( Chiffre = 6 ) then Rep$="f":Lettre$ = "..-."
    if ( Chiffre = 7 ) then Rep$="g":Lettre$ = "--."
    if ( Chiffre = 8 ) then Rep$="h":Lettre$ = "...."
    if ( Chiffre = 9 ) then Rep$="i":Lettre$ = ".."
    if ( Chiffre = 10 ) then Rep$="j":Lettre$ = ".---"
    if ( Chiffre = 11 ) then Rep$="k":Lettre$ = "-.-"
    if ( Chiffre = 12 ) then Rep$="l":Lettre$ = ".-.."
    if ( Chiffre = 13 ) then Rep$="m":Lettre$ = "--"
    if ( Chiffre = 14 ) then Rep$="n":Lettre$ = "-."
    if ( Chiffre = 15 ) then Rep$="o":Lettre$ = "---"
    if ( Chiffre = 16 ) then Rep$="p":Lettre$ = ".--."
    if ( Chiffre = 17 ) then Rep$="q":Lettre$ = "--.-"
    if ( Chiffre = 18 ) then Rep$="r":Lettre$ = ".-."
    if ( Chiffre = 19 ) then Rep$="s":Lettre$ = "..."
    if ( Chiffre = 20 ) then Rep$="t":Lettre$ = "-"
    if ( Chiffre = 21 ) then Rep$="u":Lettre$ = "..-"
    if ( Chiffre = 22 ) then Rep$="v":Lettre$ = "...-"
    if ( Chiffre = 23 ) then Rep$="w":Lettre$ = "-..-"
    if ( Chiffre = 24 ) then Rep$="x":Lettre$ = "-..-"
    if ( Chiffre = 25 ) then Rep$="y":Lettre$ = "-.--"
    if ( Chiffre = 26 ) then Rep$="z":Lettre$ = "--.."
print #a, "place ";X;" ";Y;" ;|"+Lettre$ 
    #a, "setfocus"
    #a "when characterInput [C]"
    #a, "TRAPCLOSE [Christophe]"
    wait
    [C]
    Roland$=Inkey$
    print #a, "place ";X;" ";Y+5;" ;|"+Roland$ 
If UPPER$(Roland$)= UPPER$(Rep$) then
print #a, "place ";X;" ";Y+10;" ;| Juste ! "
else
print #a, "place ";X;" ";Y+10;" ;| Faux  ! "
Close #a
Goto [Menu]
end if
 
 
 
Y=Y+15
Goto [Recevoir]
 
[Christophe]
    Goto [Menu]
    Close #a
 




Edité par pmp Le 02/03/2016 à 20h21

   
Le 02/03/2016 à 23h54

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Tu pouvais copier sur moi et sur Roland, il le fallait, c'était fait pour. Pas étonnant que tu aie du mal a avancer, que tu t'obstines à coder façon plat de spaghetti qu'on ne sait pas par quel bout prendre, et a utiliser massivement du goto ceci ou celà alors que des gosub/return sont plus souples, plus adaptés, plus "carrés" au niveau de la programmation.

Plat de spaghetti
Code VB :
 
 print #a, "place ";X;" ";Y;" ;|"+Lettre$ 
    #a, "setfocus"
    #a "when characterInput [C]"
    #a, "TRAPCLOSE [Christophe]"
    wait
    [C]
    Roland$=Inkey$
    print #a, "place ";X;" ";Y+5;" ;|"+Roland$ 
If UPPER$(Roland$)= UPPER$(Rep$) then
print #a, "place ";X;" ";Y+10;" ;| Juste ! "
else
print #a, "place ";X;" ";Y+10;" ;| Faux  ! "
Close #a
Goto [Menu]
end if
 


Le même dans un souci de lisibilité :
Code VB :
 
    print #a, "place ";X;" ";Y;" ;|"+Lettre$ 
    #a, "setfocus"
    #a "when characterInput [C]"
    #a, "TRAPCLOSE [Christophe]"
    wait 
 
 
[C] 'lorsque le programme détecte une frappe clavier 
    Roland$=Inkey$   
    print #a, "place ";X;" ";Y+5;" ;|"+Roland$ 
 
    If UPPER$(Roland$)= UPPER$(Rep$) then	'si le caractère entré est le caractère attendu, alors
	print #a, "place ";X;" ";Y+10;" ;| Juste ! "	'on affiche "juste"
    else
	print #a, "place ";X;" ";Y+10;" ;| Faux  ! "	'sinon on affiche "faux"
	close #a
	goto [Menu]
    end if
 


C'est pas mieux comme ça ?

Reprend nos exemples, demande-toi pourquoi on a mis telle instruction à tel endroit, fais comme si tu étais toi-même le compilateur et exécute mentalement, ligne après ligne, le programme. C'est pas toujours facile, ni franchement agréable mais c'est formateur, bien plus que de partir à l'aventure avec le peu de choses qu tu sais du langage de programmation.

J'attend ton explication de texte ^^



Edité par Christophe Le 02/03/2016 à 23h55
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 03/03/2016 à 00h01

Libertynaute Débutant

Groupe: Membre

Inscrit le: 10/10/2012
Messages: 19
Bonjour la communauté,
Besoin d'un conseil pour avancer dans mon programme.
Je m'amuse a faire des stats sur le tennis.
Je me suis fais un petit prog qui fonctionne bien mais qui est un peu pénible à long terme lorsque je rentre des données.
Je m'explique:
Lorsque je rentre le nombre de sets d'un match ayant eu lieu entre 2 joueurs,je suis obligé de le faire touche par touche.
Si le résultat du match est 62 pour le 1er set 57 pour le second set et 63 pour le 3 ème set,je dois rentrer à l'aide de 6 inputs différents,et donc 6 variables différentes la valeur de chaque set.Ainsi la manip au clavier se traduit par 6 (entrée),2 (entrée),5 (entrée),ect ... jusqu'a la dernière 3 (entrée).Donc beaucoup de manip lorqu'il y a beaucoup de match à rentrer et un risque d'erreur plus important.
L'idéal serait de rentrer au clavier 625763 puis (entrée),puis de pouvoir faire exploiter au programme chaque nombre séparemment pour qu'il puisse le mettre dans 6 variables différentes.Or je ne trouve pas la fonction qui permette de faire cela.
Si par exemple j'ecris l'ordre suivant dans mon programme:
input" Rentrer le résultat du match",resmatch,la variable resmatch contiendra bien 625763,mais comment dire au programme que le 6 doit aller dans la variable A,le 2 dans la variable B,le 5 dans la variable C ect ...
.En espérant ne pas avoir été trop brouillon quant à l'exposé de mon problème.
Si quelqu'un pouvait me donner un conseil ce serait sympathique,car j'ai essayé de mon coté de trouver une solution,mais sans succès.
Merci et au plaisir
Franck.

Web    
pmp
Le 03/03/2016 à 19h51

Libertynaute Timide

Groupe: Membre

Inscrit le: 15/02/2016
Messages: 27
Bon voila sa marche, j'ai repris ton code et j'ai compris comment sa marchait ;)
Voila tous le code du jeu, par contre il y a un problème dans décoder, sa ne revienne pas au menu sa met une erreur.

Code VB :
 
[Menu]
 
v=0
CLS
 
 
 
 
 button #x, "Décoder", [Recevoir], UL, 40, 100
 button #x, "Coder", [transmettre], UL, 200, 100
 button #x, "Alphabet", [Alphabet], UL, 40, 200
 button #x, "Quitter", [stop], UL, 200, 200
 WindowHeight=320
 
WindowWidth=350
 
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 open "Menu " for graphics for graphics_nsb AS #x
 
 print #x, "place ";120;" ";60;" ;| - Morse -    "
wait
 
 
 
Cls
NOMAINWIN
WindowHeight=800
WindowWidth=700
 
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 open "Alphabet " for graphics for graphics_nsb AS #A
 
print #A, "place ";100;" ";15;" ;| Lettre   Morse  Moyen Mnémotechnique*     "
 
 
 
print #A, "place ";100;" ";35;"     ;\     A     .-          Arnold, allo, Arlon, Arnaud"
print #A, "place ";100;" ";50;"     ;\     B     -...        Bonaparte                  "
print #A, "place ";100;" ";65;"     ;\     C     -.-.        Contemporain, Coca-Cola    "
print #A, "place ";100;" ";80;"     ;\     D     -..         Do-ré-mi, document         "
print #A, "place ";100;" ";95;"     ;\     E     .           Eh                         "
print #A, "place ";100;" ";110;"    ;\     F     ..-.        Farandole, fanfaronne      "
print #A, "place ";100;" ";125;"    ;\     G     --.         Gondole, Gloutonne         "
print #A, "place ";100;" ";140;"    ;\     H     ....        Hilarité, hystérique,      "
print #A, "place ";100;" ";155;"    ;\     I     ..          Ici, Idriss, Ibis          "
print #A, "place ";100;" ";170;"    ;\     J     .---        Jablonovo, j’ai gros bobo  "
print #A, "place ";100;" ";185;"    ;\     K     -.-         Kohinor, Korridor,Koalo    "
print #A, "place ";100;" ";190+10;" ;\     L     .-..        Limonade                   "
print #A, "place ";100;" ";205+10;" ;\     M     --          Moto                       "
print #A, "place ";100;" ";220+10;" ;\     N     -.          Noël                       "
print #A, "place ";100;" ";235+10;" ;\     O     ---         Oh bobo, Opporto           "
print #A, "place ";100;" ";250+10;" ;\     P     .--.        Phylosophe , philosophie   "
print #A, "place ";100;" ";265+10;" ;\     Q     --.-        Quoquorico                 "
print #A, "place ";100;" ";280+10;" ;\     R     .-.         Ricoré                     "
print #A, "place ";100;" ";295+10;" ;\     S     ...         Sardine, salade            "
print #A, "place ";100;" ";310+10;" ;\     T     -           Thon, tôt                  "
print #A, "place ";100;" ";325+10;" ;\     U     ..-         Union                      "
print #A, "place ";100;" ";340+10;" ;\     V     ...-        Valparaiso, végétation     "
print #A, "place ";100;" ";355+10;" ;\     W     .--         Xagon-post(e), wagon long  "
print #A, "place ";100;" ";370+10;" ;\     X     -..-        Xochimilco, oxydation      "
print #A, "place ";100;" ";385+10;" ;\     Y     -.--        Yoshimoto                  "
print #A, "place ";100;" ";400+10;" ;\     Z     --..        Zorro est là               "
print #A, "place ";100;" ";415+10;" ;\     .     .-.-.-      AAA (.-+.-+.-)             "
print #A, "place ";100;" ";430+10;" ;\     ,     --..--      MIM (--+..+--)             "
print #A, "place ";100;" ";445+10;" ;\     ?     ..--..      IMI (..+--+..)             "
print #A, "place ";100;" ";460+10;" ;\     !     -.-.--      AAM (.-+.-+--)             "
print #A, "place ";100;" ";475+10;" ;\     (     -.--.       KN (-.-+-. )               "
print #A, "place ";100;" ";490+10;" ;\     )     -.--.-      KK (-.-+-.-)               "
print #A, "place ";100;" ";505+10;" ;\    "
print #A, "place ";100;" ";520+10;" ;\   "
print #A, "place ";50;" ";600;" ;\ *Le code morse est facilement mémorisable à l’aide des codes courts et longs  "
print #A, "place ";50;" ";615;" ;\  remplacés par des syllabes. Le code long (-) remplacé par une syllabe en [o]."
print #A, "place ";50;" ";630;" ;\  Le code court (.) remplacé par une des autres voyelles "
print #A, "place ";50;" ";645;" ;\ Si tu souhaites avoir la liste complète du code morse, c'est ici : "
print #A, "place ";50;" ";660;" ;\ https://fr.wikipedia.org/wiki/Morse_(alphabet)#Tables_d.E2.80.99encodage "
Print ""
Print ""
Print " Appui sur entrée"
 
input ""; A
goto [Menu]
[Recevoir]
 
X=10
Y=10
WindowHeight=800
WindowWidth=700
 
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 open "Décoder " for graphics AS #a
[Recevoir2]
 
a$ = ".-"
b$ = "-..."
c$ = "-.-."
d$ = "-.."
e$ = "."
f$ = "..-."
g$ = "--."
h$ = "...."
i$ = ".."
j$ = ".---"
k$ = "-.-"
l$ = ".-.."
m$ = "--"
n$ = "-."
o$ = "---"
p$ = ".--."
q$ = "--.-"
r$ = ".-."
s$ = "..."
t$ = "-"
u$ = "..-"
v$ = "...-"
w$ = ".--"
x$ = "-..-"
y$ = "-.--"
z$ = "--.."
 
 
 
Chiffre = INT(14*RND(1))
 
    if ( Chiffre= 1 ) then Rep$="a":Lettre$ = ".-"
    if ( Chiffre = 2 ) then Rep$="b":Lettre$ = "-..."
    if ( Chiffre = 3 ) then Rep$="c":Lettre$ = "-.-."
    if ( Chiffre = 4 ) then Rep$="d":Lettre$ = "-.."
    if ( Chiffre = 5 ) then Rep$="e":Lettre$ = "."
    if ( Chiffre = 6 ) then Rep$="f":Lettre$ = "..-."
    if ( Chiffre = 7 ) then Rep$="g":Lettre$ = "--."
    if ( Chiffre = 8 ) then Rep$="h":Lettre$ = "...."
    if ( Chiffre = 9 ) then Rep$="i":Lettre$ = ".."
    if ( Chiffre = 10 ) then Rep$="j":Lettre$ = ".---"
    if ( Chiffre = 11 ) then Rep$="k":Lettre$ = "-.-"
    if ( Chiffre = 12 ) then Rep$="l":Lettre$ = ".-.."
    if ( Chiffre = 13 ) then Rep$="m":Lettre$ = "--"
    if ( Chiffre = 14 ) then Rep$="n":Lettre$ = "-."
    if ( Chiffre = 15 ) then Rep$="o":Lettre$ = "---"
    if ( Chiffre = 16 ) then Rep$="p":Lettre$ = ".--."
    if ( Chiffre = 17 ) then Rep$="q":Lettre$ = "--.-"
    if ( Chiffre = 18 ) then Rep$="r":Lettre$ = ".-."
    if ( Chiffre = 19 ) then Rep$="s":Lettre$ = "..."
    if ( Chiffre = 20 ) then Rep$="t":Lettre$ = "-"
    if ( Chiffre = 21 ) then Rep$="u":Lettre$ = "..-"
    if ( Chiffre = 22 ) then Rep$="v":Lettre$ = "...-"
    if ( Chiffre = 23 ) then Rep$="w":Lettre$ = "-..-"
    if ( Chiffre = 24 ) then Rep$="x":Lettre$ = "-..-"
    if ( Chiffre = 25 ) then Rep$="y":Lettre$ = "-.--"
    if ( Chiffre = 26 ) then Rep$="z":Lettre$ = "--.."
print #a, "place ";X;" ";Y;" ;|"+Lettre$ 
    #a, "setfocus"
    #a "when characterInput [C]"
    #a, "TRAPCLOSE [Christophe]"
    wait
 
 
[C] 'lorsque le programme détecte une frappe clavier
    Roland$=Inkey$ 
    print #a, "place ";X+20;" ";Y;" ;|"+Roland$ 
 
    If UPPER$(Roland$)= UPPER$(Rep$) then    'si le caractère entré est le caractère attendu, alors
    print #a, "place ";X;" ";Y+20;" ;| Juste ! "    'on affiche "juste"
    Y=Y+35
    Goto [Recevoir2]
    else
    print #a, "place ";X;" ";Y+10;" ;| Faux  ! "    'sinon on affiche "faux"
    close #a
    goto [Menu]
    end if
 
 
 
[Christophe]
    Goto [Menu]
    Close #a
 
[transmettre]
 
WindowWidth=1100
WindowHeight=500
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 
open "Fenêtre" for graphics AS #w
    'GRAPHICBOX #w.m 0, 0, 280, 460
    print #w, "setfocus"
    x=20: y=50
    a=550: b=50
 
 
    #w "when characterInput [A]"
    #w, "TRAPCLOSE [closeHelp]"
    wait
 
[A]
 
    a$=Inkey$
 
    If asc(a$)=00 then print #w, "place ";a;" ";b;"/"
 
    If asc(a$)=8 then 'si on a appuyé sur "del" :

        'on efface le dernier caractère entré
        x=x-24 '2 fois l'écart entre caractère, à cause du fonctionnement de inkey$ (explications dans le post)
        print #w, "place ";x;" ";y;" ;|          "
 
        'et on efface le code morse correspondant
        a=a-40
        print #w, "place ";a;" ";b;" ;|           "
 
    else    'pour tous les autres caractères :

        if len(a$)=1 then print #w, "place ";x;" ";y;" ;|";a$ 
        if (  a$="a" ) then L$=".-/"
        if (  a$="b" ) then L$="-.../"
        if (  a$="c" ) then L$="-.-./"
        if (  a$="d" ) then L$="-../"
        if (  a$="e" ) then L$="./"
        if (  a$="f" ) then L$="..-./"
        if (  a$="g" ) then L$="--./"
        if (  a$="h" ) then L$="..../"
        if (  a$="i" ) then L$="../"
        if (  a$="j" ) then L$=".---/"
        if (  a$="k" ) then L$="-.-/"
        if (  a$="l" ) then L$=".-../"
        if (  a$="m" ) then L$="--/"
        if (  a$="n" ) then L$="-./"
        if (  a$="o" ) then L$="---/"
        if (  a$="p" ) then L$=".--./"
        if (  a$="q" ) then L$="--.-/"
        if (  a$="r" ) then L$=".-./"
        if (  a$="s" ) then L$= ".../"
        if (  a$="t" ) then L$="-/"
        if (  a$="u" ) then L$="..-/"
        if (  a$="v" ) then L$="...-/"
        if (  a$="w" ) then L$="-..-/"
        if (  a$="x" ) then L$="-..-/"
        if (  a$="y" ) then L$="-.--/"
        if (  a$="z" ) then L$="--../"
 
        print #w, "place ";a;" ";b;" ;|";L$ 
        a=a+20
        x=x+12
 
    end if
 
 
    L$=""
    a$=""
    If x=500 then x=20: y=y+20
    If a=1050 then a=550: b=b+20
 
 
 
    wait
 
[closeHelp]
    Close #w
 
goto [Menu]
 
[stop]
stop
 




Edité par pmp Le 03/03/2016 à 19h51

   
Le 03/03/2016 à 22h49

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Citation:
par contre il y a un problème dans décoder, sa ne revienne pas au menu sa met une erreur.

Rien d'insurmontable, à mon avis, on verra ça demain.

A+
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 06/03/2016 à 00h51

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Finalement il y a des choses à revoir

En ce qui concerne la fenêtre [Menu] tu as bien rédigé le code (cependant v=0 et CLS ne servent à rien)

Par contre pour la fenêtre suivante, alphabet, tu as oublié l'étiquette [Alphabet] que l'ordinateur cherchera lorsqu'on cliquera sur le bouton adéquat, et tu termine cette section non pas par un wait, mais par un "Goto' qui te ramène a [menu], et te fera donc ouvrir la fenêtre #x déjà ouverte...

A cet instant je ne sais pas s'il suffit simplement de fermer #A pour que tu retrouve ton menu toujours ouvert, mais j'ai l'impression que tu va trop vite, sans réfléchir ou au moins sans valider ce que tu as déjà écrit avant de passer à l'étape suivante.

Par exemple, il y a deux bourdes manifestes dans cet extrait :
Code VB :
 
[Christophe]
    Goto [Menu]
    Close #a 	'tu ne passera jamais par close #a

[transmettre]	'et c'est tant mieux car tu continuerais dans {transmettre], et ce n'est pas ce que tu voulais faire...

WindowWidth=1100
...
 


Et on a déjà vu les deux points suivants, non réglés : à quoi te servent les chaînes a$ à z$, et que fais-tu du conflit possible entre a$=".-" et a$=Inkey$ ?

Termine déjà tes programmes séparément, et quand ils fonctionneront "aux petits oignons", on pourra les intégrer dans un système de fenêtre qui amènera une complexité supplémentaire...

Autrement, voici à quoi ça pourrait ressembler (les fenêtres sont vides, c'est juste le mécanisme)
Code VB :
 
'06 mars 00h35

'on génère une fenêtre principale, avec 4 boutons :
'"décoder","coder", "alphabet", qui ouvrent chacun une fenêtre, et
'un bouton "quitter".
'les fenêtres peuvent être ouvertes en même temps

nomainwin
 
'fenetre principale
UpperLeftX = 20
UpperLeftY = 20
WindowWidth = 280
WindowHeight = 260
 
button #principale, "Décoder", [Recevoir], UL, 20, 50, 100, 60
button #principale, "Coder", [transmettre], UL, 140, 50, 100, 60
button #principale, "Alphabet", [Alphabet], UL, 20, 120, 100, 60
button #principale, "Quitter", [stop], UL, 140, 120, 100, 60
 
open "Menu " for graphics for graphics_nsb AS #principale   'graphics_nsb

    print #principale, "place ";100;" ";30;" ;| - Morse -    "
 
    #principale, "TRAPCLOSE [stop]"
    wait
 
 
[Recevoir]
    'si la fenêtre est déjà ouverte, on ferme la fenêtre
    'je n'ai pas vu d'instructions permettant de savoir si une fenêtre est ouverte ou fermée
    'grâce à fenetreDecoder, on saura si la fenêtre est ouverte ou fermée :
    'fenetreDecoder=1 -> fenêtre ouverte
    'fenetreDecoder=0 -> fenêtre fermée
    if fenetreDecoder=1 then close #decode else fenetreDecoder=1
 
    UpperLeftX = 320
    UpperLeftY = 20
    WindowWidth = 400
    WindowHeight = 300
 
    open "Décoder " for graphics AS #decode
 
    #decode, "TRAPCLOSE [quitte_decode]"
    wait
 
[quitte_decode]
    fenetreDecoder=0
    close #decode
    wait
 
 
[transmettre]
 
    if fenetreCoder=1 then close #code else fenetreCoder=1
 
    fenetreCoder=1
    UpperLeftX = 340
    UpperLeftY = 40
    WindowWidth = 400
    WindowHeight = 300
 
    open "Coder " for graphics AS #code
 
    #code, "TRAPCLOSE [quitte_code]"
    wait
 
[quitte_code]
    fenetreCoder=0
    close#code
    wait
 
 
 
[Alphabet]
 
    if fenetreAlphabet=1 then close #alphabet else fenetreAlphabet=1
 
    UpperLeftX = 360
    UpperLeftY = 60
    WindowWidth = 400
    WindowHeight = 300
 
    open "Alphabet " for graphics AS #alphabet
 
    #alphabet, "TRAPCLOSE [quitte_alpha]"
    wait
 
[quitte_alpha]
    fenetreAlphabet=0
    close #alphabet
    wait
 
 
[stop]
    if fenetreDecoder=1 then close #decode
    if fenetreCoder=1 then close #code
    if fenetreAlphabet=1 then close #alphabet
 
    close #principale
    end '(ou stop, au choix)

 


Si tu as des questions au sujet du fonctionnement, tu fais signe
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
pmp
Le 10/03/2016 à 12h32

Libertynaute Timide

Groupe: Membre

Inscrit le: 15/02/2016
Messages: 27
Voilà je crois que j'ai fin tous marche voilà le code :

Code VB :
 
[Menu]
 
v=0
CLS
 
 
 
 
 button #x, "Décoder", [Recevoir], UL, 40, 100
 button #x, "Coder", [transmettre], UL, 200, 100
 button #x, "Alphabet", [Alphabet], UL, 40, 200
 button #x, "Quitter", [stop], UL, 200, 200
 WindowHeight=320
 
WindowWidth=350
 
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
open "Menu " for graphics for graphics_nsb AS #x
 
 print #x, "place ";120;" ";60;" ;| - Morse -    "
wait
 
[Alphabet]
 
Cls
NOMAINWIN
WindowHeight=800
WindowWidth=700
 
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 open "Alphabet " for graphics for graphics_nsb AS #A
 
print #A, "place ";100;" ";15;" ;| Lettre   Morse  Moyen Mnémotechnique*     "
 
 
 
print #A, "place ";100;" ";35;"     ;\     A     .-          Arnold, allo, Arlon, Arnaud"
print #A, "place ";100;" ";50;"     ;\     B     -...        Bonaparte                  "
print #A, "place ";100;" ";65;"     ;\     C     -.-.        Contemporain, Coca-Cola    "
print #A, "place ";100;" ";80;"     ;\     D     -..         Do-ré-mi, document         "
print #A, "place ";100;" ";95;"     ;\     E     .           Eh                         "
print #A, "place ";100;" ";110;"    ;\     F     ..-.        Farandole, fanfaronne      "
print #A, "place ";100;" ";125;"    ;\     G     --.         Gondole, Gloutonne         "
print #A, "place ";100;" ";140;"    ;\     H     ....        Hilarité, hystérique,      "
print #A, "place ";100;" ";155;"    ;\     I     ..          Ici, Idriss, Ibis          "
print #A, "place ";100;" ";170;"    ;\     J     .---        Jablonovo, j’ai gros bobo  "
print #A, "place ";100;" ";185;"    ;\     K     -.-         Kohinor, Korridor,Koalo    "
print #A, "place ";100;" ";190+10;" ;\     L     .-..        Limonade                   "
print #A, "place ";100;" ";205+10;" ;\     M     --          Moto                       "
print #A, "place ";100;" ";220+10;" ;\     N     -.          Noël                       "
print #A, "place ";100;" ";235+10;" ;\     O     ---         Oh bobo, Opporto           "
print #A, "place ";100;" ";250+10;" ;\     P     .--.        Phylosophe , philosophie   "
print #A, "place ";100;" ";265+10;" ;\     Q     --.-        Quoquorico                 "
print #A, "place ";100;" ";280+10;" ;\     R     .-.         Ricoré                     "
print #A, "place ";100;" ";295+10;" ;\     S     ...         Sardine, salade            "
print #A, "place ";100;" ";310+10;" ;\     T     -           Thon, tôt                  "
print #A, "place ";100;" ";325+10;" ;\     U     ..-         Union                      "
print #A, "place ";100;" ";340+10;" ;\     V     ...-        Valparaiso, végétation     "
print #A, "place ";100;" ";355+10;" ;\     W     .--         Xagon-post(e), wagon long  "
print #A, "place ";100;" ";370+10;" ;\     X     -..-        Xochimilco, oxydation      "
print #A, "place ";100;" ";385+10;" ;\     Y     -.--        Yoshimoto                  "
print #A, "place ";100;" ";400+10;" ;\     Z     --..        Zorro est là               "
print #A, "place ";100;" ";415+10;" ;\     .     .-.-.-      AAA (.-+.-+.-)             "
print #A, "place ";100;" ";430+10;" ;\     ,     --..--      MIM (--+..+--)             "
print #A, "place ";100;" ";445+10;" ;\     ?     ..--..      IMI (..+--+..)             "
print #A, "place ";100;" ";460+10;" ;\     !     -.-.--      AAM (.-+.-+--)             "
print #A, "place ";100;" ";475+10;" ;\     (     -.--.       KN (-.-+-. )               "
print #A, "place ";100;" ";490+10;" ;\     )     -.--.-      KK (-.-+-.-)               "
print #A, "place ";100;" ";505+10;" ;\    "
print #A, "place ";100;" ";520+10;" ;\   "
print #A, "place ";50;" ";600;" ;\ *Le code morse est facilement mémorisable à l’aide des codes courts et longs  "
print #A, "place ";50;" ";615;" ;\  remplacés par des syllabes. Le code long (-) remplacé par une syllabe en [o]."
print #A, "place ";50;" ";630;" ;\  Le code court (.) remplacé par une des autres voyelles "
print #A, "place ";50;" ";645;" ;\ Si tu souhaites avoir la liste complète du code morse, c'est ici : "
print #A, "place ";50;" ";660;" ;\ https://fr.wikipedia.org/wiki/Morse_(alphabet)#Tables_d.E2.80.99encodage "
Print ""
Print ""
Print " Appui sur entrée"
 
input ""; A
goto [Menu]
[Recevoir]
close #x
X=10
Y=10
WindowHeight=800
WindowWidth=700
 
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 open "Décoder " for graphics AS #a
[Recevoir2]
 
a$ = ".-"
b$ = "-..."
c$ = "-.-."
d$ = "-.."
e$ = "."
f$ = "..-."
g$ = "--."
h$ = "...."
i$ = ".."
j$ = ".---"
k$ = "-.-"
l$ = ".-.."
m$ = "--"
n$ = "-."
o$ = "---"
p$ = ".--."
q$ = "--.-"
r$ = ".-."
s$ = "..."
t$ = "-"
u$ = "..-"
v$ = "...-"
w$ = ".--"
x$ = "-..-"
y$ = "-.--"
z$ = "--.."
 
 
 
Chiffre = INT(14*RND(1))
 
    if ( Chiffre= 1 ) then Rep$="a":Lettre$ = ".-"
    if ( Chiffre = 2 ) then Rep$="b":Lettre$ = "-..."
    if ( Chiffre = 3 ) then Rep$="c":Lettre$ = "-.-."
    if ( Chiffre = 4 ) then Rep$="d":Lettre$ = "-.."
    if ( Chiffre = 5 ) then Rep$="e":Lettre$ = "."
    if ( Chiffre = 6 ) then Rep$="f":Lettre$ = "..-."
    if ( Chiffre = 7 ) then Rep$="g":Lettre$ = "--."
    if ( Chiffre = 8 ) then Rep$="h":Lettre$ = "...."
    if ( Chiffre = 9 ) then Rep$="i":Lettre$ = ".."
    if ( Chiffre = 10 ) then Rep$="j":Lettre$ = ".---"
    if ( Chiffre = 11 ) then Rep$="k":Lettre$ = "-.-"
    if ( Chiffre = 12 ) then Rep$="l":Lettre$ = ".-.."
    if ( Chiffre = 13 ) then Rep$="m":Lettre$ = "--"
    if ( Chiffre = 14 ) then Rep$="n":Lettre$ = "-."
    if ( Chiffre = 15 ) then Rep$="o":Lettre$ = "---"
    if ( Chiffre = 16 ) then Rep$="p":Lettre$ = ".--."
    if ( Chiffre = 17 ) then Rep$="q":Lettre$ = "--.-"
    if ( Chiffre = 18 ) then Rep$="r":Lettre$ = ".-."
    if ( Chiffre = 19 ) then Rep$="s":Lettre$ = "..."
    if ( Chiffre = 20 ) then Rep$="t":Lettre$ = "-"
    if ( Chiffre = 21 ) then Rep$="u":Lettre$ = "..-"
    if ( Chiffre = 22 ) then Rep$="v":Lettre$ = "...-"
    if ( Chiffre = 23 ) then Rep$="w":Lettre$ = "-..-"
    if ( Chiffre = 24 ) then Rep$="x":Lettre$ = "-..-"
    if ( Chiffre = 25 ) then Rep$="y":Lettre$ = "-.--"
    if ( Chiffre = 26 ) then Rep$="z":Lettre$ = "--.."
print #a, "place ";X;" ";Y;" ;|"+Lettre$ 
    #a, "setfocus"
    #a "when characterInput [C]"
    #a, "TRAPCLOSE [Christophe]"
    wait
 
 
[C] 'lorsque le programme détecte une frappe clavier
    Roland$=Inkey$ 
    print #a, "place ";X+20;" ";Y;" ;|"+Roland$ 
 
    If UPPER$(Roland$)= UPPER$(Rep$) then    'si le caractère entré est le caractère attendu, alors
    print #a, "place ";X;" ";Y+20;" ;| Juste ! "    'on affiche "juste"
    Y=Y+35
    Goto [Recevoir2]
    else
    print #a, "place ";X;" ";Y+10;" ;| Faux  ! "    'sinon on affiche "faux"
    close #a
    goto [Menu]
    end if
 
 
 
[Christophe]
    Goto [Menu]
    Close #a
 
[transmettre]
close #x
 
WindowWidth=1100
WindowHeight=500
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 
open "Fenêtre" for graphics AS #w
    'GRAPHICBOX #w.m 0, 0, 280, 460
    print #w, "setfocus"
    x=20: y=50
    a=550: b=50
 
 
    #w "when characterInput [A]"
    #w, "TRAPCLOSE [closeHelp]"
    wait
 
[A]
 
    a$=Inkey$
 
    If asc(a$)=00 then print #w, "place ";a;" ";b;"/"
 
    If asc(a$)=8 then 'si on a appuyé sur "del" :

        'on efface le dernier caractère entré
        x=x-24 '2 fois l'écart entre caractère, à cause du fonctionnement de inkey$ (explications dans le post)
        print #w, "place ";x;" ";y;" ;|          "
 
        'et on efface le code morse correspondant
        a=a-40
        print #w, "place ";a;" ";b;" ;|           "
 
    else    'pour tous les autres caractères :

        if len(a$)=1 then print #w, "place ";x;" ";y;" ;|";a$ 
        if (  a$="a" ) then L$=".-/"
        if (  a$="b" ) then L$="-.../"
        if (  a$="c" ) then L$="-.-./"
        if (  a$="d" ) then L$="-../"
        if (  a$="e" ) then L$="./"
        if (  a$="f" ) then L$="..-./"
        if (  a$="g" ) then L$="--./"
        if (  a$="h" ) then L$="..../"
        if (  a$="i" ) then L$="../"
        if (  a$="j" ) then L$=".---/"
        if (  a$="k" ) then L$="-.-/"
        if (  a$="l" ) then L$=".-../"
        if (  a$="m" ) then L$="--/"
        if (  a$="n" ) then L$="-./"
        if (  a$="o" ) then L$="---/"
        if (  a$="p" ) then L$=".--./"
        if (  a$="q" ) then L$="--.-/"
        if (  a$="r" ) then L$=".-./"
        if (  a$="s" ) then L$= ".../"
        if (  a$="t" ) then L$="-/"
        if (  a$="u" ) then L$="..-/"
        if (  a$="v" ) then L$="...-/"
        if (  a$="w" ) then L$="-..-/"
        if (  a$="x" ) then L$="-..-/"
        if (  a$="y" ) then L$="-.--/"
        if (  a$="z" ) then L$="--../"
 
        print #w, "place ";a;" ";b;" ;|";L$ 
        a=a+20
        x=x+12
 
    end if
 
 
    L$=""
    a$=""
    If x=500 then x=20: y=y+20
    If a=1050 then a=550: b=b+20
 
 
 
    wait
 
[closeHelp]
    Close #w
 
goto [Menu]
 
[stop]
stop
 
 
 
  nomainwin
  run "winhlp32 justbasic.hlp"
 
  end
 
 
 
 

   
Le 10/03/2016 à 19h51

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Ah, ce sentiment de parler dans le vide... Je renonce ;)

Je renonce à te demander l'utilité des chaînes a$-z$ et comment tu gère l'éventuelle interférence entre a$="._", et a$=Inkey$, et toutes autres choses déjà (et re-, voire re-re-) signalées. Tu auras toute la discussion à relire quand tu te décideras à faire du nettoyage dans ton code.

Ne t'ai-je pas demandé aussi que tes codes fonctionnent nickel, avant de chercher à les mettre ensemble ?


Pour le fonctionnement de ta dernière version, voici ce que j'ai constaté :

Lancement :
On arrive bien sur quatre boutons : "Décoder", "Coder", "Alphabet" et "Quitter". -> OK

La barre de titre de la fenêtre affiche "Menu" et la fenêtre affiche "- Morse -" Il serait logique que ce soit l'inverse : la barre de titre affiche "Morse" (ou mieux, "apprendre le Morse" et la fenêtre "- Menu -" -> pour info


Bouton Décoder :
On arrive sur une fenêtre affichant un symbole morse.

Si on entre au clavier la lettre correspondant au code, on a l'affichage du mot "juste" puis un nouveau symbole à deviner s'affiche en dessous. Si ce n'est pas la bonne lettre, la fenêtre "Décoder" se ferme. -> A revoir.

Un premier clic sur son gadget de fermeture semble sans autre effet que d'afficher au premier plan la fenêtre "Menu". Quel est donc ce tour de force ? Le second clic sur le gadget de fermeture plante le programme, les messages sont "#a #x, these handles closed by JustBASIC. Please add the appropriate CLOSE commands", puis "Runtime Error : Handle #x already in use" -> A revoir.


Bouton Coder :
On arrive sur la fenêtre... "Fenêtre". Certes, c'est une fenêtre, mais le nom est-il bien choisi ? -> pour info

Ce qu'on tape au clavier s'affiche en caractères alphabétiques sur la gauche, en morse sur la droite -> -> OK

Lorsque le code morse passe à la ligne suivante, l'affichage alpha continue sur la même ligne... -> A revoir.

Le code morse ne contient pas de symbole "/" entre les lettres ni entre les mots, je suppose qu'on ne l'utilise que lorsqu'on transcrit à la main ce qu'on entend, et dans ce cas il ne sépare que les mots : voir pour cela les liens que j'ai placé un peu plus haut dans la discussion. -> -> pour info

fermeture par le gadget : -> OK


Bouton Alphabet :
On arrive sur la fenêtre "Alphabet". Rien à signaler, tout s'affiche conformément aux attentes. Fermeture par le gadget en haut à droite. -> OK

il y a un "E2.80.99" qui s'est invité dans le lien internet affiché -> pour info

Si on re-clique sur Alphabet, on a un plantage. Les messages sont "#A #x, these handles closed by JustBASIC. Please add the appropriate CLOSE commands" puis "Runtime Error : Handle #A already in use". -> A revoir.


Comme quoi ton programme, quoi que tu en dises, ne fonctionne pas.

Reprend chacun de tes sous-programmes [Recevoir], [transmettre] et [Alphabet], et transforme-les en programmes individuels pleinement fonctionnels : tu lance ton prog Recevoir, la fenêtre s'ouvre correctement, le comportement est celui attendu, et la fenêtre se ferme normalement sur ton initiative. Pareil pour les autres.

On verra après ce qu'on en fait. Hop, au taf !



Edité par Christophe Le 10/03/2016 à 20h23
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 10/06/2016 à 22h22

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Bah alors, pmp, on te revoit quand ? Faut pas te décourager pour si peu :top
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie