Forum Liberty Basic France

Général » Durées d'exécution d'une instruction basic Comparaison de deux programmes donnant le même résultat
Le 10/09/2017 à 15h46

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 401
Dominical bonjour !

Roland dans une autre discussion:
J'aimerais bien trouver la relation exacte entre le temps et la longueur pour deux boucles imbriquées du genre: (nlignes * nmots/ligne)/coeff lié à nlignes ?

Cela mérite un peu de réflexion pour intégrer cette boucle imbriquée dans le testeur ici décrit. Par contre les quelques essais que j'ai pu faire avec l'exemple fourni dans le programme démontre que l'exactitude de la durée d'exécution n'est pas fiable, on ne peut se baser que sur une moyenne.

Le projet n'est pas tout à fait terminé, il reste de la finition à faire : l'alignement des étiquettes sur les axes du graphique ne sont pas toujours centrés, l'affichage des grands nombres pose problème, et autres petites bricoles dont je ne me souviens plus mais bien présentes. Rien de grave, ce qui permet de copier le cadre ci-dessous l'éditeur Just/Liberty Basic:

Code VB :
 
'comparaison de rapidité de deux blocs d'instructions ayant même fonction
'reste à voir le centrage des nombres sur les axes du graphique : des fois c'est OK, des fois pas

 
 
nomainwin
WindowWidth = 800
WindowHeight = 600
 
demarre=0
nombressais=25
nombredetours=1000
 
'préparation des couleurs de courbe
[couleursdispo]
data "jaune","brun","rouge","rouge foncé","rose","rose foncé","bleu","bleu foncé"
data "vert","vert foncé","cyan clair","cyan foncé","blanc","noir","gris clair","gris foncé"
dim couleur$(16)
restore [couleursdispo]
for a=0 to 15:read a$:couleur$(a)=a$:next
 
[couleursJB]
data "yellow","brown","red","darkred","pink","darkpink","blue","darkblue","green"
data "darkgreen","cyan","darkcyan","white","black","lightgray","darkgray"
dim couleurJB$(16)
restore [couleursJB]
for a=0 to 15:read a$:couleurJB$(a)=a$:next
 
'choix initial des couleurs de courbe
index1=1    'courbe 1
index2=3    'courbe 2
index3=11   'couleur quand courbe 1 et courbe 2 se confondent

'préparation de l'interface graphique
statictext #1.qtetest,"Quantité d'essais :", 10, 20, 150, 20
TEXTBOX #1.qtetest1, 170, 17, 100, 20
 
statictext #1.qteboucle,"Quantité de boucles par essai :", 10, 40, 150, 20
TEXTBOX #1.qteboucle1, 170, 37, 100, 20
 
BUTTON #1.start, "Démarrer test", [start], ul, 280, 17, 100, 40
 
TEXTEDITOR #1.result, 10, 70, 790, 170
fonteresult$="!font Liberation_Mono 9"
 
statictext #1.coulsol1,"Couleur de trace, solution 1 :", 20, 250, 140, 20
COMBOBOX #1.courbe1, couleur$(), [couleurtrace1], 160, 247, 100, 20
 
statictext #1.coulsol1,"solution 2 :", 290, 250, 60, 20
COMBOBOX #1.courbe2, couleur$(), [couleurtrace2], 350, 247, 100, 20
 
statictext #1.coulsol1,"traces 1 et 2 confondues :", 480, 250, 130, 20
COMBOBOX #1.courbe3, couleur$(), [couleurtrace3], 610, 247, 100, 20
 
largeurgraphicbox=780
hauteurgraphicbox=265
graphicbox #1.graph, 10, 280, largeurgraphicbox, hauteurgraphicbox
largeurcaractere=8  'graphicbox
hauteurcaractere=12
fontegraphic$="font Liberation_Mono ";largeurcaractere;" ";hauteurcaractere
 
BUTTON #1.quit, "Quitter", [quitter], ul, 680, 17, 100, 40
 
'ouverture interface, boucle principale
open "Durée d'exécution d'un bloc d'instructions basic" for window as #1
    print #1.result, fonteresult$ 
    print #1.qtetest1, str$(nombressais)
    print #1.qteboucle1, str$(nombredetours)
    print #1.courbe1, "selectindex "; index1
    print #1.courbe2, "selectindex "; index2
    print #1.courbe3, "selectindex "; index3
    print #1.graph, "down"
    print #1.graph, "fill black"
    print #1.graph, fontegraphic$ 'dimension des caractères des graduations
    print #1, "trapclose [quitter]"
wait
 
 
'****** sous programmes et fonctions
[start]
 
    demarre=1
    print #1.qtetest1, "!contents? nombressais$"
    print #1.qteboucle1, "!contents? nombredetours$"
 
    nombressais=val(nombressais$)
    nombredetours=val(nombredetours$)
    dim essais(nombressais,2)
 
    print #1.result,""
    print #1.result,"Test en cours pour ";nombressais$;" essais de "; nombredetours$;" boucles."
 
    topdebut=time$("ms")
    for numessai=0 to nombressais-1
 
        debut=time$("ms")
        'Solution 1 : placer les instructions à tester dans la boucle "sol1"
        for sol1=1 to nombredetours
            b=int(rnd(1)*10)
            if b=0 then c=c
            if b=1 then c=c
            if b=2 then c=c
            if b=3 then c=c
            if b=4 then c=c
            if b=5 then c=c
            if b=6 then c=c
            if b=7 then c=c
            if b=8 then c=c
            if b=9 then c=c
        next
        fin=time$("ms")
        essais(numessai,0)=fin-debut
 
        debut=time$("ms")
        'Solution 2 : placer les instructions à tester dans la boucle "sol2"
        for sol2=1 to nombredetours
            b=int(rnd(1)*10)
            select case b
                case 0 : c=c
                case 1 : c=c
                case 2 : c=c
                case 3 : c=c
                case 4 : c=c
                case 5 : c=c
                case 6 : c=c
                case 7 : c=c
                case 8 : c=c
                case 9 : c=c
            end select
        next
        fin=time$("ms")
        essais(numessai,1)=fin-debut
 
    next
 
    topfin=time$("ms")
    dureetotale=topfin-topdebut
 
    'calculs moyenne et écart min max en millisecondes
    b=0:bmin=0:bmax=0:bsum=0:bmoy=0
    c=0:cmin=0:cmax=0:csum=0:cmoy=0
 
    for a=0 to nombressais-1
 
        b=essais(a,0)
        if a=0 then bmin=b
        if b<bmin then bmin=b
        if b>bmax then bmax=b
        bsum=bsum+b
 
        c=essais(a,1)
        if a=0 then cmin=c
        if c<cmin then cmin=c
        if c>cmax then cmax=b
        csum=csum+c
 
    next
 
    bmoy=bsum/nombressais
    cmoy=csum/nombressais
    espaces$=space$(10)
    'mise en forme des résultats pour impression en texteditor
    bmin$=right$(espaces$+str$(bmin),10)
    bmax$=right$(espaces$+str$(bmax),10)
    bmoy$=right$(espaces$+str$(bmoy),10)
 
    cmin$=right$(espaces$+str$(cmin),10)
    cmax$=right$(espaces$+str$(cmax),10)
    cmoy$=right$(espaces$+str$(cmoy),10)
 
    solution1$="Solution 1 : "+bmin$+" "+bmax$+" "+bmoy$+"   (ms)"
    solution2$="Solution 2 : "+cmin$+" "+cmax$+" "+cmoy$+"   (ms)"
 
    print #1.result,"test achevé, durée totale : ";dureetotale;" ms"
    print #1.result,"     durée : "+right$(espaces$+"mini",10)+" "+right$(espaces$+"maxi",10)+" "+right$(espaces$+"moyenne",10)+"   (ms)"
    print #1.result,solution1$
    print #1.result,solution2$
 
 
    gosub [affiche_le_graphique]
    wait
 
 
[affiche_le_graphique]
 
    'paramètres de la zone d'affichage du graphique
    margebas=30
    margegauche=50
    margehaut=10
    margedroite=30
 
    xo=margegauche  'origine des axes
    yo=hauteurgraphicbox-margebas
 
    xFinAxeX=largeurgraphicbox-margedroite
    yFinAxeY=margehaut
 
    longueurAxeX=xFinAxeX-xo
    longueurAxeY=yo-yFinAxeY
 
    'initialisation de l'espace graphique
    print #1.graph, "cls"
    print #1.graph, "down"
    print #1.graph, "fill black"
 
    'dessin des axes
    print #1.graph, "color darkgreen"
    print #1.graph, "line ";xo;" ";yo;" ";xo;" ";yFinAxeY
    print #1.graph, "line ";xo;" ";yo;" ";xFinAxeX;" ";yo
 
    'affichage des graduations principales, de leur valeur et du nom de l'axe
    print #1.graph, "backcolor black"
    print #1.graph, "color white"
 
'affichage de l'axe x
    intervalle=calibraxe(nombressais)
    petitegrad=longueurAxeX/nombressais
    grandegrad=longueurAxeX/intervalle
 
    tours=1     'pour position du libellé de l'axe
    tour=int(nombressais/intervalle)
 
    'graduations principales
    for grad=0 to nombressais-1 step intervalle
 
        xpreced=x   '(pour afficher le nom de l'axe entre deux valeurs)
        x=grad*petitegrad
 
        if grad>0 then
            'affichage valeur numérique
            xaff=xo+posetiq("x",grad,nombressais,largeurcaractere,longueurAxeX)
            print #1.graph, "place ";xaff;" ";yo+13
            print #1.graph, "\";grad
        end if
 
        if tours=tour then
            'affichage nom de l'axe
            axeX$="(essais)"
            xnom=xo+0.5*(xpreced+x)-len(axeX$)*largeurcaractere/2-petitegrad/2
            print #1.graph, "place ";xnom;" ";yo+13
            print #1.graph, "\";axeX$
        end if
 
        tours=tours+1
 
    next
 
    'affichage dernière graduation
    print #1.graph, "line ";xFinAxeX;" ";yo;" ";xFinAxeX;" ";yFinAxeY
 
    x=xo+posetiq("x",nombressais,nombressais,largeurcaractere,longueurAxeX)
    print #1.graph, "place ";x;" ";yo+13
    print #1.graph, "\";nombressais
 
    'graduations secondaires
    print #1.graph, "color darkgreen"
 
    if petitegrad>2*largeurcaractere then
        debut=1
        nombredepoints=nombressais
        pas=1
    else
        debut=0
        nombredepoints=nombressais-1
        pas=intervalle
    end if
 
    for grad=debut to nombredepoints step pas
        x=xo+grad*petitegrad
        print #1.graph, "line ";x;" ";yo-longueurAxeY;" ";x;" ";yo+5
    next
 
'affichage de l'axe y
    print #1.graph, "color white"
 
    if bmax>cmax then amax=bmax else amax=cmax  'valeur max pour l'axe y
    intervalle=calibraxe(amax)
    petitegrad=longueurAxeY/amax
    grandegrad=longueurAxeY/intervalle
 
    'graduations principales
    tours=1
    tour=int(amax/intervalle)
 
    for grad=0 to amax-1 step intervalle
 
        ypreced=y   '(pour afficher le nom de l'axe entre deux valeurs)
        y=grad*petitegrad
 
        'affichage valeur numérique
        yaff=yo-posetiq("y",grad,amax,largeurcaractere,longueurAxeY)
        xdecalage=xo-8-largeurcaractere*len(str$(grad))
        print #1.graph, "place ";xdecalage;" ";yaff+hauteurcaractere/2
        print #1.graph, "\";grad
 
        'affichage nom de l'axe
        if tours=tour then
            axeY$="(ms)"
            xdecalage=xo-8-largeurcaractere*len(axeY$)
            ynom=yo-0.5*(ypreced+y)+(hauteurcaractere+10-petitegrad)/2
            print #1.graph, "place ";xdecalage;" ";ynom
            print #1.graph, "\";axeY$
        end if
 
        tours=tours+1
 
    next
 
    'affichage dernière graduation'
    print #1.graph, "color darkgreen"
    print #1.graph, "line ";xo;" ";yo-amax*petitegrad;" ";xFinAxeX;" ";yo-amax*petitegrad
 
    yaff=yo-posetiq("y",amax,amax,largeurcaractere,longueurAxeY)
    xdecalage=xo-8-largeurcaractere*len(str$(amax))
    print #1.graph, "color white"
    print #1.graph, "place ";xdecalage;" ";yaff+hauteurcaractere/2
    print #1.graph, "\";amax
 
    'graduations secondaires
    print #1.graph, "color darkgreen"
 
    if petitegrad>hauteurcaractere+4 then
        debut=1
        nombredepoints=amax
        pas=1
    else
        debut=0
        nombredepoints=amax-1
        pas=intervalle
    end if
 
    for grad=debut to nombredepoints step pas
        y=yo-grad*petitegrad
        print #1.graph, "line ";xo+longueurAxeX;" ";y;" ";xo-5;" ";y
    next
 
    'lecture de la couleur des courbes
    coul1$=couleurJB$(index1-1) 'courbe 1
    coul2$=couleurJB$(index2-1) 'courbe 2
    coul3$=couleurJB$(index3-1) 'courbe 1 et 2 confondues

    'dessin des courbes
    petitegrad=longueurAxeX/nombressais
    coefy=longueurAxeY/amax
 
    for a=0 to nombressais-1
        xpoint=xo+a*petitegrad
        c1=yo-essais(a,0)*coefy
        c2=yo-essais(a,1)*coefy
 
        if c1=c2 then
            'les deux courbes sont confondues sur ce point, on n'affiche qu'un seul point
            print #1.graph, "color ";coul3$
            print #1.graph, "line ";xpoint;" ";c1;" ";xpoint+petitegrad;" ";c1;" "
        else
            'les deux courbes ne sont pas confondues sur ce point, chacune a sa couleur
            print #1.graph, "color ";coul1$
            print #1.graph, "line ";xpoint;" ";c1;" ";xpoint+petitegrad;" ";c1;" "
 
            print #1.graph, "color ";coul2$
            print #1.graph, "line ";xpoint;" ";c2;" ";xpoint+petitegrad;" ";c2;" "
        end if
    next a
 
    'affichage terminé, on relève le crayon
    print #1.graph, "up"
 
    return
 
 
[couleurtrace1]
    print #1.courbe1, "selectionindex? index1"
    if demarre=1 then gosub [affiche_le_graphique]
    wait
 
 
[couleurtrace2]
    print #1.courbe2, "selectionindex? index2"
    if demarre=1 then gosub [affiche_le_graphique]
    wait
 
 
[couleurtrace3]
    print #1.courbe3, "selectionindex? index3"
    if demarre=1 then gosub [affiche_le_graphique]
    wait
 
 
[quitter]
    close #1
    end
 
 
function calibraxe(valeurmax)
 
    'formater l'affichage des nombres ronds sur l'axe horizontal
    a$=str$(valeurmax)
    nbgrad=val(left$(a$,1)) 'premier chiffre
    exposant=len(a$)-1      'déduction de l'exposant de la puissance de 10

    'et en déterminer le multiplicateur
    puissance=1
    for a=1 to exposant-1:puissance=puissance*10:next
 
    'puis calculer l'intervalle entre graduations principales
    select case nbgrad
        case 1 : i=2
        case 2,3 : i=5
        case 4,5,6 : i=10
        case 7,8,9 : i=15
    end select
 
    calibraxe=i*puissance
 
end function
 
 
function posetiq(axe$,graduation, graduationmaxi,largeurcaractere,longueuraxe)
 
    'position de la valeur de la graduation à afficher sur l'axe du graphique
    etiq$=str$(graduation)
 
    if axe$="x" then
       largeurgraduation=longueuraxe/graduationmaxi
       etiq=len(etiq$)*largeurcaractere/2
    else
       largeurgraduation=0
       etiq=0
    end if
 
    posetiq=longueuraxe*graduation/graduationmaxi-etiq-largeurgraduation/2
 
end function
 
 


Voilà ce que ça donne sur mon PC Linux/Wine


et sur mon petit eeepc XP tournant sur batterie


Les résultats seraient peut-être plus significatifs si le programme avait été compilé comme exécutable, je me suis contenté de le lancer à partir de l'éditeur.

Je pensais aussi mettre un indicateur de temps restant, graphique ou numérique, mais c'est impossible : il faudrait mettre les instructions de l'indicateur à l'intérieur des boucles de mesures, et donc fausser la mesure par la présence desdites instructions (à moins d'en faire un calibrage "à vide" et d'en tenir compte au dépouillement des résultats, mais voir à la remarque concernant la précision temporelle évoquée dans le premier paragraphe).

Ce serait sympa aussi de pouvoir proposer deux texteditor dans lesquelles on pourrait coller directement des portions de code à tester, ce serait plus sûr pour le programme, mais je ne vois pas trop comment faire pour placer ce code dans la boucle de mesure lors de l'exécution.

Pour l'instant je m'arrête là et je suis déjà à la bourre pour la vraie vie

A+

'tophe



Edité par Christophe Le 10/09/2017 à 15h46
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais 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/09/2017 à 21h02

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1942
Citation:
texteditor dans lesquelles on pourrait coller directement des portions de code à tester,

ça paraît possible en le mettant dans un fichier extension ".bas" et de le lancer avec un run "....bas"
le système de mesure encadrant le code à tester plus les lignes pour l'affichage.
A mon avis le temps de mesure compte pour epsilon un time en haut un time en bas et une soustraction.

Pour la fonction liant n lignes * x mots au temps j'ai été demandé sur un forum de math.
Quand j'ai eu la réponse, j'ai cru faire une crise cardiaque; tellement c'est simple et tellement je suis bèèèèèèèèèète.
Oui on ne peut faire qu'une estimation; c'est déjà pas mal. En restant conscients de ce sur quoi portent les mesures.
Pour les temps d'attente, je trouve que l'affichage d'un décompte, c'est bien.
J'ai fait une sorte de "chargeur" dont on peut régler le nombre de lignes et le nombre de mots par lignes.
J'y ajouterais sans doute des boucles particulières ou des paramètres de plus en entrée, je modifierai le code ici-même... C'est vraiment fait à l'arrache parce que j'étais pressé de savoir. faire gaffe, il génère un fichier au clic sur: "Save".
Je n'ai pas encore regardé ton truc mais l'affichage est nickel.

Le "chargeur ??"
Code VB :
 
 
     ' NOMAINWIN ' Empêche l'ouverture de la console
     ' UpperLeftX=INT((DisplayWidth-WindowWidth)/2) ' Placement relatif de la fenêtre
     ' UpperLeftY=INT((DisplayHeight-WindowHeight)/2) ' Absolu --> UpperLeftY=100
     ' WindowWidth = 250 ' Largeur
     ' WindowHeight = 100 ' Hauteur
     ' BackgroundColor$ = "darkblue" ' "123 145 221" <--RGB
     ' ForegroundColor$ = "lightgray"
     ' TextboxColor$ = "yellow"
     '--- Les Controles ----
     ' STATICTEXT #w.t, "Type", 500, 5, 50, 15
     ' TEXTBOX #w.entr, 20 , 180, 50, 25
     ' BUTTON #w.go, "Go !", [go], UL, 10, 10, 40, 20 ' bouton (UL <--Upper Left (point de ref en haut à gauche)
     ' TEXTEDITOR #w.te, 430, 50, 180, 230
     ' LISTBOX #w.ext,  array$(), [event], 150, 50, 180, 230
       ' #w.ext, "select string" ' Sélectionne le même élément que "string"
       ' #w.ext, "select "; string$ ' Extrait la chaine
       ' #w.ext, "selectindex i"  'Selectionne un element à la position de l'index
       ' #w.ext, "selectindex "; i ' Index en variable
       ' #w.ext, "selection? selected$" ' place la chaîne de l'élément actuellement sélectionné dans $
       ' #w.ext, "selectionindex? index"   'extrait l'index sélectionné
       ' #w.ext, "font times_new_roman 10"
       ' #w.ext, "singleclickselect"
       ' #w.ext, "enable"
       ' #w.ext, "setfocus"
     ' COMBOBOX #w.ext, array$(), [event], xPos, yPos, wide, high ' listbox déroulante
     ' GRAPHICBOX #w.m 0, 0, 280, 460
     ' MENU #w, "title", "text", [branchLabel], "text2", [branchLabel2]
     ' OPEN "Help" FOR window_nf AS #w
     ' #w, "TRAPCLOSE [quit]"
     '----------
     ' LOADBMP "lefond", "fond.bmp"
     ' #w.ext, "DRAWBMP lefond 5 10"
     ' DIM info$(10,10)
     '----------------
     ' c$ = "Première ligne" + chr$(13) 'Confirmation  multiligne
     ' c$ = c$ + "Deuxième ligne" + chr$(13)
     ' c$ = c$ + "Troisième ligne" + chr$(13)
     ' CONFIRM c$; reponse$
     '------
     ' NOTICE "Le fichier est sauvé"
     '------
     ' nombr = int(rnd(1)*10) + 1 ' Génération nombre aléatoire
     ' #w.ext, "place ";xx;" ";yy ' Placement par variables dans graphicbox
     ' #w.ext, "!contents? var$" ' Extraction de textbox
     ' #w.ext, str$(var) ' Affichage de variable dans textbox
     ' open DefaultDir$ + "\"+directory$+"\readme.txt" for append as #f
     ' open "test.txt" for output as #f 'Ouverture/création fichier en écriture
       ' print #f, lesdonnées$ <-- Chaines uniquement
       ' close #f
     ' open "test.txt" for input as #g 'Ouverture fichier en lecture
       ' while eof(#g)=0
       ' line input #g, lesdonnées$
       ' variable = val(lesdonnées$) ' Chaine --> Variable
       ' wend
       ' close #g
     ' UNLOADBMP "lefond"
     ' CLOSE  #w: END
  '---------------------------------- Help -------------------------
     NOMAINWIN
    WindowWidth = 600
    WindowHeight = 510
    UpperLeftX = 5'
    UpperLeftY = 40
    TEXTBOX #w.espioa, 20 , 340, 50, 25
    TEXTBOX #w.espiob, 90 , 340, 50, 25
 
    TEXTBOX #w.time, 100 , 380, 50, 25
    TEXTEDITOR #w.te, 5, 140, 520, 230
    BUTTON #w.sav, "Save !", [Save], UL, 10, 60, 40, 20
    BUTTON #w.lect, "Lect !", [lect], UL, 70, 60, 40, 20
    BUTTON #w.bou, "Boucl!", [bou], UL, 70, 90, 40, 20
    TEXTBOX #w.n, 130 , 60, 50, 25
    TEXTBOX #w.nr, 200 , 60, 50, 25
    BUTTON #w.val, " Go !", [val], UL, 260, 60, 50, 30
    TEXTBOX #w.tee, 330 , 60, 100, 25
    TEXTBOX #w.espioc, 330, 90, 50, 25
    TEXTBOX #w.timr, 450 , 60, 100, 25
    TEXTBOX #w.timn, 450 , 95, 100, 25
    GRAPHICBOX #w.m 5, 35, 585, 480
    OPEN "Chargeur" FOR window_nf AS #w
    #w, "TRAPCLOSE [closew]"
    #w.m , "down"
    #w.te, "!font arial 12 bold"
    #w.n, "2000": #w.nr, "7"
    [val]
     #w.n, "!contents? n$" : n=val(n$): #w.nr, "!contents? nr$" : nr=val(nr$)
    tee=int(n*0.00038): #w.tee, "Estim:  ";str$(tee);" sec"
    dim entr$(n+1, nr+1)
    nom$="AA BB CC DD EE FF GG HH II JJ"
    cur$="aaa bbb ccc"
    tp$="aaaa bbbb cccc dddd eeee ffff gggg hhhh"
    critx$="1t 2t 3t 4t 5t 6t 7t 8t 9t 10t 11t 12t 13t"
    crity$="1 2 3 4"
    #w.time, "": tempa=time$("seconds")
    dec=n
    for a=1 to n
       xnom=int(rnd(1)*10) + 1
        entr$(a,1)=word$(nom$,xnom)
       xcur=int(rnd(1)*3) + 1
        entr$(a,2)=word$(cur$,xcur)
       xtp=int(rnd(1)*8) + 1
        entr$(a,3)=word$(tp$,xtp)
       critx=int(rnd(1)*13) + 1
        entr$(a,4)=word$(critx$,critx)
       crity=int(rnd(1)*4) + 1
        entr$(a,5)=word$(crity$,crity)
       xnot=int(rnd(1)*100) + 1
        entr$(a,6)=str$(xnot)
       xpon=int(rnd(1)*4) + 1
        entr$(a,7)=str$(xpon)+"p"
        dec=dec-1: #w.espioc, str$(dec)
    next a
    tempb=time$("seconds"): gosub [afft]
    wait
 
    wait
    [Save]
      'file$="temp.txt"
    tempa=time$("seconds"): #w.time, ""
    open "jeffX.txt" for output as #d
      for x=1 to n
      en$=entr$(x,1)+" "+entr$(x,2)+" "+entr$(x,3)+" "+entr$(x,4)+" "+entr$(x,5)+" "+entr$(x,6)+" "+entr$(x,7)
        print #d, en$
        #w.espiob, str$(x)
      next x
    close #d
    tempb=time$("seconds"): t=tempb-tempa: #w.time, str$(t);" sec"
     #w.te, "SAUVE"
    wait
   [bou]
      tempa=time$("seconds"): #w.time, ""
      for a=1 to n
        for b=1 to nr)
         if entr$(a,b)=one$ then h=j
        next b
        #w.espioc, str$(a)
      next a
    tempb=time$("seconds"): gosub [afft]
    wait
'----------------------------------------------------------------------
    #w.te, "!cls"
   gosub [comptage]
      dim entr$(n+2,nr+2): dim back$(n+2,nr+2)
   gosub [charge]
   gosub [aff]
  wait
  [comptage]
    n=0: x=0
        open file$ for input as #g 'Ouverture fichier en lecture
        line input #g, donnee$
        for h=1 to len(donnee$) '-----comptage rubriques
          if word$(donnee$,h)="" then nr=h-1: exit for
        next h
        while eof(#g)=0
        line input #g, donnee$
        n=n+1
        wend
        close #g '---------
  return
  [charge]
  n=1
        open file$ for input as #h 'Ouverture fichier en lecture
        while eof(#h)=0
        line input #h, donnee$
        #w.te, donnee$
        wend
        n=n-1
        close #h '---------
  return
    [aff]
        for a=0 to n '------Affichage
          ligne$=""
          for b=1 to nr
            ligne$=ligne$+entr$(a,b)
            for e=1 to 15-len(entr$(a,b))
            ligne$=ligne$+" "
            next e
            e=0
          next b
           #w.te, ligne$
        #w.te, "."
        next a
   ' #s.visu, "-------------------------------------------------------------";_
    '"------------------------------------------------------------------"
  return
[afft]
    #w.timr, "": t=tempb-tempa: #w.timr, "Temps:  ";str$(t);" sec"
    if t>60 then #w.timn, str$(t/60);" mn ";str$(t-(t/60));" sec"
    #w.te, "Ready": #w.te, "!cls": #w.te, "Ready"
    return
  [pause]
        timer tempo, [temps]
        wait
        [temps]
        timer 0
        return
  wait
  [closew]
    CLOSE  #w
    END
 
____________________
Roro

   
Le 12/09/2017 à 14h56

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 401
Citation:
ça paraît possible en le mettant dans un fichier extension ".bas" et de le lancer avec un run "....bas"


Dès que j'aurais deux minutes, j’essaierai de voir la méthode pour écrire des instructions dans les texteditor et transformer ces instructions en programmes. Le mécanisme de mesure des temps fera partie intégrante de ces programmes, qui fourniront aussi le contexte dans lequel se trouveront les instructions à tester. Ce serait sympa que ça fonctionne

Citation:
C'est vraiment fait à l'arrache parce que j'étais pressé de savoir
Moi aussi j'ai parfois des flashs créatifs ;) Par contre ne j'ai pas tout capté et le bouton Lect. cherche désespérément son sous-programme. Je me penche sur une instruction que je n'ai pas l'habitude d'utiliser, timer <variable>, [sousprogramme]
Code VB :
 
 [pause]
        timer tempo, [temps]
        wait
        [temps]
        timer 0
        return
 


Je pars remplir le frigo.

'Tophe
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais 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 12/09/2017 à 19h06

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1942
Citation:
Ce serait sympa que ça fonctionne

Je vais essayer aussi, pour faire la soudure il y a "open for append"; mais bon, autant coller dans la console avec un time au départ, un time à l'arrivée et un print au final.
Et puis s'il s'agit de bouts de prog il faut préciser des variables pour que ça tourne (qui sont générées ailleurs dans le prog)
Citation:
timer <variable>, [sousprogramme]

ça ne fera que retarder l'exécution de [sousprogramme] je vais essayer de retrouver des codes
où cassiope utilise timer de façon "étrange".
____________________
Roro

   
Général » Durées d'exécution d'une instruction basic Comparaison de deux programmes donnant le même résultat  

 |  |

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