Forum Liberty Basic France

Le 15/11/2015 à 19h42

Libertynaute Débutant

Groupe: Membre

Inscrit le: 11/11/2015
Messages: 6
bonjour
Il y a très très longtemps j'ai fait du basic :lol . Voulant me faire un petit programme j'ai donc fait une recherche sur internet et j'ai trouvé votre site .
J'ai donc installé just basic pour essayer.
j'ai fait un premier petit programme qui tire 5 chiffres au hasard et les trie du plus petit au plus grand .
Seulement voila je dois pas avoir de double et c'est là ou le bas blesse :( .Je pense que quand il y en a un il sort de la boucle i alors qu'il ne devrait pas .
Si quelqu'un pouvait m'indiqué mon erreur .
Une petite question rnd est vraiment aléatoire ? parce que les résultats sont bizarre .
En vous remerciant d'avance .
Code VB :
 
dim tableau(5)
for i=0 to 4
    [go2]
    val=int(50*(rnd(1))) 'numéro aléatoire 
    If val = 0 goto [go2]'annuler si = 0
    print i;
    print " ";
    print val
        for z = 0 to (i+1) 'vérifier si le numéro aléatoire n'est pas en double
            if val = tableau(z) then
            print "double"
            goto [go2]
            else
            end if
        next z
 
   tableau(i)=val
next i
for tab =0 to 4
print tableau(tab);
    if tab<4 then
    print " ";
    else
    print " "
    end if
next tab
[go3]
    for a = 0 to 3 ' trier les numéros
        num = tableau(a)
        if num > tableau(a+1) then
        tableau(a) = tableau(a+1)
        tableau(a+1) = num
        goto [go3]
        else
       end if
    next a
print tableau(0);
print " ";
print tableau(1);
print " ";
print tableau(2);
print " ";
print tableau(3);
print " ";
print tableau(4)
 

   
Le 15/11/2015 à 19h48

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Bonjour et bienvenue leclode, j'ai pris ton code et on va regarder ce qui coince.
A+
____________________
Roro

   
Le 15/11/2015 à 19h55

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Alors:
Tu génère le nombre...ok
Tu affiche....ok
Tu compare avec le contenu du tableau; mais gloups! tu n'y a encore rien mis dans le tableau

Il faut stocker les nombres dans le tableau avant de comparer

Note que pour mettre du code dans un message, il faut mettre une ligne:
[ "code=vb" ] sans les guillemets et sans espaces
Le code....
.....
Et finir avec une ligne:
[ "/code" ] sans les guillemets et sans espaces
____________________
Roro

   
Le 15/11/2015 à 20h01

Libertynaute Débutant

Groupe: Membre

Inscrit le: 11/11/2015
Messages: 6
Si si ;) ligne 16 .Je serai pour la prochaine fois pour "code VB" justement je me suis posé la question quand j'ai vu la mise en page .
Essais dans juste basic tu as les chiffres qui sortent :-)
merci



Edité par leclode Le 15/11/2015 à 20h09

   
Le 15/11/2015 à 20h17

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Ah oui, tu ne le mets dans le tableau que s'il n'y est pas déjà, ok
Tu devrais faire une boucle plus longue (20 tours par exemple)
Et afficher le contenu du tableau dans une boucle
For x...
print tableau(x)
next

On va regarder de plus près...
____________________
Roro

   
Le 15/11/2015 à 20h57

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
J'ai mis le bazar en interface graphique ça permets d'extraire et d'afficher des données
Le "Go 1 " démarre la première partie de ton code, ( le tirage; qui va bien)
Le "Go 3" démarre le tri.( qui a un soucis, y a un zéro qui traine)
Code VB :
 
    ' NOMAINWIN
    WindowWidth = 295
    WindowHeight = 290
    UpperLeftX = (DisplayWidth-WindowWidth)-200
    UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    TEXTBOX #w.testa, 10 , 30, 90, 25
    BUTTON #w.go1, "Go 1 !", [go], UL, 120, 30, 50, 20
    BUTTON #w.go3, "Go 3 !", [go3], UL, 120, 60, 50, 20
    BUTTON #w.sto, "Stop !", [stop], UL, 20, 70, 40, 20
    TEXTBOX #w.tri, 20, 110, 60, 25
    TEXTBOX #w.dur, 100, 170, 90, 25
    GRAPHICBOX #w.m 5, 5, 280, 250
    OPEN "Test B" FOR window_nf AS #w
    #w, "TRAPCLOSE [closetest]"
    #w.m , "down"
    #w.m , "fill blue; color yellow; backcolor blue"
    #w.m, "place 20 150": #w.m, "\Tours Tri"
     #w.m, "place 90 210": #w.m, "\Entrer temps de pause"
    ' #w.entr, "10000"
     #w.dur, "200": #w.tri, "0"
     dim table(11)
     #w.go3, "!disable" 'désactive bouton "go 3"
  wait
    [go]
      #w.dur, "!contents? dur$": dur=val(dur$)
     ' #w.entr, "!contents? var$"
    for i=0 to 10-1
       [go2]
       if sto=1 then sto=0: exit for ' stoppe la misère
       val=int(100*(rnd(1))) 'numéro aléatoire
       If val = 0 goto [go2]'annuler si = 0
       print i;
       print " ";
       print val
       for z = 0 to (i+1) 'vérifier si le numéro aléatoire n'est pas en double
          if val = table(z) then
             print "double"
             goto [go2]
          end if
    next z
   table(i)=val
   #w.testa, str$(table(i))
   gosub [pause] ' Pour pouvoir stopper en cas de misère
  next i
  #w.go3, "!enable" ' active bouton "go 3"
  print "----------------------------------"
  wait
  [go3]
    n = 10: tour=0
    for i = n-1 to 1 step -1
         for j = 0 to i
             if sto=1 then sto=0: exit for ' stoppe la misère
             #w.testa, str$(table(j));".....";str$(table(j+1))
             if table(j) > table(j+1) then
                  tmp = table(j)
                  table(j) = table(j+1)
                  table(j+1) = tmp
             end if
             gosub [pause]
         next j
         tour=tour+1: #w.tri, str$(tour)
         gosub [pause]
    next i
  '-----------------
    for b=0 to 10
       print table(b)
    next b
  wait
  [stop]
    sto=1
  wait
  [pause]
    timer dur, [temps]
   wait
  [temps]
    timer 0
  return
  wait
  [closetest]
    CLOSE  #w
    END
 
 
____________________
Roro

   
Le 16/11/2015 à 09h14

Libertynaute Débutant

Groupe: Membre

Inscrit le: 11/11/2015
Messages: 6
bonjour merci de ton aide
Justement le zéro qui traine c'est quand il y a un double .Il change bien le numéro en double mais il sort de la boucle principale (i). Résultat les dernières valeurs ne sont plus tirées et il n'y a plus de valeur dans le tableau d'où le ou les zéros .



Je t'ai mis deux exemples le premier le tirage 3: 1 zéro
le deuxième tirage 2 :2 zéro.
C'est là ou je ne comprends pas c'est pourquoi il sort de la boucle .
refaire une boucle au départ en donnant a "i" la valeur du dernier tirage seulement quand il y a un double je vais essayer.

   
Le 16/11/2015 à 10h18

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
C'est pas trop normal puisque tu ne stocke que si la valeur est bonne (non zéro et non double)
Il ne devrait y avoir aucun zéros dans le tableau
____________________
Roro

   
Le 19/11/2015 à 09h39

Libertynaute Débutant

Groupe: Membre

Inscrit le: 11/11/2015
Messages: 6
Bonjour bon pas eu trop le temps mais ce matin j'ai refait le code. Enfin ça fonctionne.

Code VB :
 
dim tableau(5)
[go1]
val=int(50*(rnd(1))) 'numéro aléatoire
If val = 0 goto [go1]'annuler si chiffre aléatoire = 0
 for z = 0 to (i)' + 1) 'vérifier si le numéro aléatoire n'est pas en double
            if val = tableau(z) then
            print "double"
            'w =i - 1
            goto [go1]
            else
            end if
        next z
 print i;
    print " ";
    print val
   tableau(i)=val
i = i + 1
if i= 5 then
'fin
else
goto [go1]
end if
[ter]
for a = 0 to 3 ' trier les numéros
num = tableau(a)
        if num > tableau(a+1) then
        tableau(a) = tableau(a+1)
        tableau(a+1) = num
        goto [ter]
        else
       end if
next a
print tableau(0);
print " ";
print tableau(1);
print " ";
print tableau(2);
print " ";
print tableau(3);
print " ";
print tableau(4)
 end
 


Bon par contre j'ai pas trouvé pour le code j'ai bien mis code=vb ........ et /code j'ai essayé de plusieurs façons la mis en page ne se fait pas .



Edité par leclode Le 19/11/2015 à 09h45

   
Le 19/11/2015 à 12h09

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Très bien! Mais avec un tableau plus grand ce serait plus évident
Pour la mise en conteneur, il faut mettre: code=Vb et: /code entre crochets [...]
____________________
Roro

   
Le 21/11/2015 à 13h37

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Hello leclode,

Belle entrée en matière pour un retour aux sources, je trouve.

Il n'y a plus qu'à fignoler la présentation, maintenant qu'il marche^^ Au fait, tu n'as pas besoin des "else" dans tes deux "if", tu peux terminer avec "end if" directement.

Pour ma part je préfère utiliser les "gosub" plutôt que des "goto".

Et ton code me dit qu'on peut sortir d'une boucle avec un goto renvoyant avant le "for", qui se réinitialisé à la valeur de début. J'aurais pas osé , mais puisque ça marche...

Bienvenue au club :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

   
Le 22/11/2015 à 11h43

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Hello vous deux !

Roland, devenu spécialiste en graphisme JB/LB. "votre code va finir engraphismé" ;)

Pour l'expérience, j''ai essayé de refaire le programme de leclode à ma façon, j'ai eu un mal de chien à établir le tri. Intellectuellement, quand ça veut pas, ça veut pas. J'ai quand même réussi à obtenir quelque chose, même si la code de leclode est bien plus bref pour le même résultat...

J'en perdis ? perdit ? perda ? ai perdu mon latin, mais ça a fini par fonctionner...

Bon dimanche

ti'code :
Code VB :
 
 
 
NbNombres=7
dim tirage(NbNombres)
 
'boucle principale, tire les nombre et les range par ordre décroissant dans un tableau
for a=0 to NbNombres-1
    print
    gosub [tirage]
    gosub [validation]
    gosub [tri]
next a
 
'affichage de la liste triée
for a=0 to NbNombres-1:print tirage(a);" ";:next
 
'et on s'arrête là
end
 
 
'============= zone des sous-programmes

[tirage]
    'tire au sort un nombre entre 50 et 0, nombre = val
    val=0
    while val=0    'il ne faut pas le nombre zéro
        val=int(50*(rnd(1)))
        print "nombre tiré : ";val
    wend
return
 
[validation]
    'vérifie si le nombre tiré n'existe déjà pas dans le tableau
    'relance un tirage si besoin
    for b=0 to NbNombres-1
        if b<>a then
            if val=tirage(b) then
                print"nouveau tirage nécessaire"
                gosub [tirage] 'le nombre a déjà été tiré, en prendre un autre
            end if
        end if
    next b
return
 
[tri]
'tri arrive après validation, la case correspondante à "val" n'est pas encore remplie

    'le tableau est vide, on écrit seulement val dans sa première case
    if a=0 then tirage(0)=val
 
    'il n'y a qu'une donnée dans le tableau, la première case,
    'si val est > à la première case, on copie la première case dans la seconde
    'et on place val dans la première
    'sinon, val est < à la première case, et on le place dans la seconde
    if a=1 then
        if val>tirage(0) then
            tirage(1)=tirage(0)
            tirage(0)=val
        else
            tirage(1)=val
        end if
    end if
 
 
    if a>1 then
 
        'on recherche la case qui recevra "val"
        'c'est la première case pour laquelle le contenu est inférieur à "val"
        remplace=-1
        for c=a to 0 step -1 '(une boucle ascendente garde la dernière occurence, on cherche la première)
            if val>tirage(c) then remplace=c 'numéro de la case qui va recevoir "val"
        next
 
        '(remplace reste -1 si aucune case n'est inférieure)
        if remplace>-1 then '

            'on décale les cases d'une position à partir de la position qui va recevoir "val"
            for d=a to remplace step-1
                tirage(d+1)=tirage(d)
            next
 
            'et on installe "val"
            tirage(remplace)=val
        end if
 
    end if
 
return
 
____________________
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 22/11/2015 à 12h42

Libertynaute Débutant

Groupe: Membre

Inscrit le: 11/11/2015
Messages: 6
bonjour Christophe
J'ai voulu essayé ton code j'ai un message d'erreur . Je vais regarder de plus près mais bon comme ça pointe sur une ligne ou il n'y a rien vais devoir me creuser la tête :siffle
Moi aussi je préfère les sous programmes c'est plus clair mais bon depuis le temps que je n'avais plus fait de basic j'ai fait au plus simple avec mes souvenirs . :hehe
bon dimanche

   
Le 22/11/2015 à 15h11

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
@ Christophe: Ne m'en parle pas du code de "leclode"; j'en suis resté sur le cul que son tri fonctionne.
Normalement il faut faire un double balayage comme j'ai fait.(principe du tri à bulles).
Il doit y avoir un loup quelque part.

@ leclode: Il y a un débugueur (la coccinelle dans la barre d'outils de l'éditeur).

Je vais tester l'usine à gaz de Christophe; ou pourquoi faire simple quand on peut faire compliqué

Edit: L'usine à gaz fonctionne.
@ leclode: Tu a dû bouffer quelque chose à la copie du conteneur. Christophe n'aurait jamais osé nous refiler un code foiré
____________________
Roro

   
Le 22/11/2015 à 17h56

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
@leclode, je pense aussi que tu as oublié un bout de code en faisant ton copier-coller.

Code VB :
 
'Autrement tu peux écrire tes instructions "print" en une ligne
    print i;
    print " ";
    print val
 
'et
print i;" ";val     'ça fonctionne pareil



@Roland, eh si, j'ose^^ :

Je viens de m'apercevoir que la procédure de validation ne fonctionnera pas si on tire successivement des nombres déjà présent dans le tableau

J'ai ajouté un "goto" façon leclode (c) en correctif, qui devrait effectivement relancer la procédure en cas de doublons successifs. Je n'ai pas expérimenté de doublons successifs, mais tel qu'elle est, la modif ne provoque pas de message d'erreur :

Code VB :
 
[validation]
    'vérifie si le nombre tiré n'existe déjà pas dans le tableau
    'relance un tirage si besoin
    for b=0 to NbNombres-1
        if b<>a then
            if val=tirage(b) then
                print"nouveau tirage nécessaire"
                gosub [tirage] 'le nombre a déjà été tiré, en prendre un autre
                goto [validation] 'relance la procédure de validation
            end if
        end if
    next b
return
 


Roland:

j'en suis resté sur le cul que son tri fonctionne

Moi aussi^^ Le fait de sortir d'une boucle avec un goto "juste avant la boucle" simplifie peut-être la conception.
____________________
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 22/11/2015 à 18h53

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
C'est vrai que la sortie de boucle n'est pas très orthodoxe.
A tester avec les "while" et les "do"
____________________
Roro

   
Le 23/11/2015 à 09h59

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
J'ai un peu cherché dans l'aide, et on trouve dans la page Branch Labels, GOTO and GOSUB : "Do not use GOTO to exit a FOR/NEXT or WHILE/WEND loop prematurely.". En fait, habituellement quand on sort d'une boucle c'est pour aller dans le code "en dessous". Le fait qu'on s'en serve pour aller "au dessus" de la boucle la remet à zéro quand l'ordi arrive sur le FOR, et tout rentre dans l'ordre ?

Cependant, à la page WHILE...[EXIT WHILE]...WEND : "Note: A program SHOULD NOT exit a WHILE...WEND loop using GOTO. It may cause the program to behave unpredictably. (See EXIT WHILE, below.)"

Donc en clair, l'utilisation d'un GOTO pour sortir d'une boucle FOR/NEXT ou WHILE/WEND peut amener des résultats imprévus. Il faut donc revoir le code pour supprimer ces GOTOs. leclode : tu as ton prochain objectif de TP^^


Au fait, on n'a pas répondu à la première question : la fonction RND est-elle fiable ? Je ne me suis jamais posé la question, et dans mes très anciens souvenirs d'autres basics, j'ai vu une boucle avec RND dessinant des points qui, au final, étaient répartis aux quatre coins d'un carré sur l'écran graphique, donc pas vraiment RND.

Un petit programme-test, qui pour l'instant ne teste que la répartition des nombres tirés au hasard, mais pas s'il existe des séries répétitives (ça reste à mettre sur pied) :

Code VB :
 
dim nombres(100)
 
for a=0 to 500
    tirage=int(rnd(1)*100)
    nombres(tirage)=nombres(tirage)+1
next a
 
print "Nombre:  quantité"
for a=0 to 99
    print a;"    ";nombres(a)
next
 
end
 


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 23/11/2015 à 15h41

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Citation:
pas vraiment RND

Bah si, c'est assez aléatoire, regarde
Mais bon, on n'échappe pas à la courbe de Gauss
Code VB :
 
     NOMAINWIN
    WindowWidth = 600
    WindowHeight = 500
    UpperLeftX = (DisplayWidth-WindowWidth)-200
    UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    BUTTON #w.go1, "Go !", [go], UL, 20, 30, 50, 20
    TEXTBOX #w.dur, 90, 30, 90, 25
    GRAPHICBOX #w.m 5, 5, 570, 460
    OPEN "Help" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeHelp]"
    #w.m , "down": #w.m , "fill black"
    #w.m , "color white; backcolor black"
    #w.m, "place 60 70": #w.m, "\Temps de pause"
    #w.dur, "200"
  wait
  [go]
    #w.dur, "!contents? dur$": dur=val(dur$)
    valx=int(450*(rnd(1))) 'numéro aléatoire
    valy=int(450*(rnd(1)))
    vals=int(4*(rnd(1)))
    gosub  [pause]
    If valx = 0 or valy=0 then goto [go]'annuler si chiffre aléatoire = 0
    #w.m, "place ";valx;" ";valy
    #w.m, "size ";vals
    #w.m, "set"
    goto [go]
  wait
  [pause]
    timer dur, [temps]
   wait
  [temps]
    timer 0
  return
  wait
  [closeHelp]
    CLOSE  #w
    END
 
____________________
Roro

   
Le 23/11/2015 à 22h10

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
C'est un loji ciel étoilé^^

Donc RND fonctionne
____________________
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 23/11/2015 à 22h45

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
RND (0-500) est plus rnd que RND (0-10)
J'ai fait un truc pour voir quel était le nombre maximum de sorties identiques consécutives au tirage à pile ou face
Mais je me suis emmélés les pinceaux pour le cumul. Et les pinceaux sont toujours emmélés
Je le mets là:
Code VB :
 
 
     NOMAINWIN
    WindowWidth = 280
    WindowHeight = 460
    UpperLeftX = (DisplayWidth-WindowWidth)-200
    UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    BUTTON #w.go, "Go !", [go], UL, 10, 10, 40, 20
    BUTTON #w.sto, "Stop !", [stop], UL, 60, 10, 40, 20
    TEXTBOX #w.temp, 10 , 55, 40, 25
    TEXTBOX #w.tir, 80 , 55, 40, 25
    TEXTBOX #w.conta, 10 , 110, 40, 25
    TEXTBOX #w.contb, 80 , 110, 40, 25
    TEXTBOX #w.tota, 10 , 160, 40, 25
    TEXTBOX #w.totb, 80 , 160, 40, 25
    TEXTBOX #w.maxa, 10 , 210, 40, 25
    TEXTBOX #w.maxb, 80 , 210, 40, 25
    GRAPHICBOX #w.m 0, 0, 280, 460
    OPEN "Proba" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeHelp]"
    #w.m , "down": #w.m , "fill blue"
    temp=500
    print text("yellow","blue",10,50,"Tempo  Tirage")
    print text("yellow","blue",10,105,"Pile  Face")
    print text("yellow","blue",10,155,"Tot P  Tot F")
    print text("yellow","blue",10,155,"Max P  Max F")
    #w.temp, str$(temp)
  wait
  [go]
    sto=0
    #w.temp, "!contents? var$" : temp=val(var$)
    while sto=0
       tir=int(rnd(1)*100) + 1
       #w.tir, str$(tir)
       if tir < 51 then '-----sortie Pile
         conta=conta + 1
 
         if conta > oldconta then
            tota=tota+1
            #w.tota, str$(tota)
            oldconta=conta
         end if
         if tota > oldtota then
            maxa=maxa+1
            oldtota=tota
            maxa=tota
         end if
            if maxa > oldmaxa then
               #w.maxa, str$(maxa)
               oldmaxa=maxa
 
         contb=0 ' : totb=0' : tota=0
         #w.conta, str$(conta)
         #w.contb, str$(contb)
         oldtota=conta
         #w.tota, str$(conta)
 
         '--------------
       else '------------sortie  Face
         contb=contb + 1
         if contb > oldcontb then
            totb=totb+1
         end if
            #w.totb, str$(totb)
            oldcontb=contb
         end if
         if totb > oldtotb then
            maxb=maxb+1
            oldtotb=totb
            if maxb > oldmaxb then
               #w.maxb, str$(maxb)
               oldmaxb=maxb
            end if
         end if
         conta=0  ' : tota=0' : totb=0
         #w.conta, str$(conta)
         #w.contb, str$(contb)
         #w.totb, str$(contb)
       end if
       gosub [pause]
    wend
  wait
  [stop]
    sto=1
  wait
     '-------------
Function text(col$,bak$,x,y,msg$) '------fonction d'affichage de textes
    #w.m, "font courier_new 12 bold"
    #w.m, "color ";col$;" ; backcolor ";bak$ 
    #w.m, "Place ";x;" ";y;";|";msg$
End Function
  [pause]  'pause en millisecondes
        timer temp, [temps]
        wait
        [temps]
        timer 0
  return
  wait
  [closeHelp]
    CLOSE  #w
    END
 


Edit: Ayééé, ça a l'air de marcher
Code VB :
 
 
        NOMAINWIN
    WindowWidth = 280: UpperLeftX = 450
    WindowHeight = 250: UpperLeftY = 20
    BUTTON #w.go, "Go !", [go], UL, 10, 10, 40, 20
    BUTTON #w.sto, "Stop !", [stop], UL, 60, 10, 40, 20
    BUTTON #w.rep, "Reprends", [ret], UL, 120, 10, 60, 20
    TEXTBOX #w.temp, 10 , 60, 40, 25
    TEXTBOX #w.tir, 80 , 60, 40, 25
    TEXTBOX #w.ntir, 150 , 60, 40, 25
    TEXTBOX #w.cumpile, 10 , 115, 40, 25
    TEXTBOX #w.cumface, 80 , 115, 40, 25
    TEXTBOX #w.totpile, 10 , 165, 40, 25
    TEXTBOX #w.totface, 80 , 165, 40, 25
    GRAPHICBOX #w.m 5, 5, 265, 210
    OPEN "Proba" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeProba]"
    #w.m , "down": #w.m , "fill blue"
    temp=100: #w.temp, str$(temp)
    #w.m,  "color yellow;backcolor blue"
    #w.m,  "Place 5 45": #w.m, "\Tempo      Tirage      N Tirages"
    #w.m,  "Place 10 105": #w.m, "\Pile          Face    consécutifs"
    #w.m,  "Place 10 155": #w.m, "\Tot P  Tot F"
    #w.m,  "Place 5 155": #w.m, "\Max P       Max F"
    #w.m,  "flush"
    gosub [opr]
  wait
  [go]
    sto=0: ntir=0
    #w.temp, "!contents? var$" : temp=val(var$)
    [ret]
       if sto=1 then sto=0: wait
       tir=int(rnd(1)*100) + 1
       #w.tir, str$(tir)
       if tir < 51 then
         pile=1: tirpile=tir: gosub [pile]
       end if
       if tir > 50 then
          face=1: tirface=tir: gosub [face]
       end if
       gosub [pause]
       goto [ret]
  wait
  [pile]
    face=0: cumface=0: ntir=ntir+1: x=5: #w.ntir, str$(ntir)
    if pile=oldpile then
       cumpile=cumpile+1: #w.cumpile, str$(cumpile)
    end if
    oldpile=pile
    if cumpile > oldcumpile then
       totpile=cumpile: oldcumpile=totpile
       #w.totpile, str$(totpile)
       if y > 460 then x=190  ' 480
       #r.r,  "Place ";x;" ";y: #r.r, "\P: ";str$(totpile);"...";str$(ntir)
       y=y+20
    end if
    #r.r, "flush"
  return
  wait
  [face]
    pile=0: cumpile=0: ntir=ntir+1: x=60: #w.ntir, str$(ntir)
    if face=oldface then
       cumface= cumface+1: #w.cumface, str$(cumface)
    end if
    oldface=face
    if cumface > oldcumface then
       totface=cumface: oldcumface=totface
       #w.totface, str$(totface)
       if y > 460 then x=250
       #r.r,  "Place ";x;" ";y: #r.r, "\F: ";str$(totface);"...";str$(ntir)
       y=y+20
    end if
    #r.r, "flush"
  return
  wait
  [stop]
    sto=1
  wait
  [pause]
        timer temp, [temps]
        wait
        [temps]
        timer 0
  return
  wait '**************************************
  [opr]
    WindowWidth = 380: UpperLeftX = 30
    WindowHeight = 550: UpperLeftY = 20
    GRAPHICBOX #r.r 5, 5, 365, 510
    OPEN "Résultats" FOR window_nf AS #r
    res=1
    #r, "TRAPCLOSE [closeResult]"
    #r.r , "down": #r.r , "fill darkblue"
    #r.r , "color yellow;backcolor darkblue"
    for yy=10 to 510 step 20
       #r.r, "place ";"180";" ";yy: #r.r, "\|"
    next yy
    #r.r, "flush"
    return
  wait
  [closeResult]
  sto=1
    CLOSE  #r: res=0
    CLOSE  #w
  wait
  [closeProba]
   if res=1 then close #r
    CLOSE  #w
    END
 
 
 
 
____________________
Roro

   

 |  |

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