Page 1 sur 1

Boucles imbriquées: Sortir/continuer sous conditions

Publié : mar. 28/avr./2020 15:23
par Stéphane
Bonjour

J'apprends à mon rythme, au gré de mes besoins. J ai déjà expérimenté les boucles While/Continue et For mais là s'agissant de boucles imbriquées, je suis perdu.
En effet je cherche à reproduire l’algorithme suivant avec TB un tableau de structure (min et max)

Code : Tout sélectionner

Pour chaque I du tableau TB
 J = Commence à I +1
  Pour chaque J du tableau TB
    Si J\Min <= I\max-10
      K commence à J +1
      Pour chaque K du tableau TB
        Si K\max >= J\min + 30
           C est OK
           Alors j'envois des infos à une procédure et je sors des boucles K et J pour continuer à incrementer I
J imagine tester la variable Ok à la fin de chaque itération de J et K et sortir ou non de la boucle avec un break (dans le cas de l usage d un for)

Est-il plus simple/logique/propre d'utiliser un While/Continue et alors comment fair een sorte qu il itère à nouveau I et pas les autres variables ?

Vous l aurez compris, je me suis perdu dans ces imbrications

Merci de votre aide

Re: Boucles imbriquées: Sortir/continuer sous conditions

Publié : mar. 28/avr./2020 16:40
par Stéphane
En fait je m en suis sorti tout seul comme un grand ;-)
J ai utilisé des while et mis la condition directement dans le test de la boucle...

Re: Boucles imbriquées: Sortir/continuer sous conditions

Publié : mar. 28/avr./2020 20:54
par Ar-S
Très bien que tu t'en sois dépatouillé. :P
Pour tester la vélocité de tes fonctions tu peux utiliser un chrono avec ElapsedMilliseconds()

Code : Tout sélectionner


DisableDebugger

  
Global Dim PIXEL(799,799)
CreateImage(0,800,800,32,$0)


Procedure CreationImage()

  StartDrawing(ImageOutput(0))
  
  For Y = 0 To 799
    For X = 0 To 799
      Plot(x,y,Random($FFFFFF))  
      Next
  Next
  
  StopDrawing()
EndProcedure

  


Procedure MaProce()
  
  StartDrawing(ImageOutput(0))
  For Y = 0 To 799
    For X = 0 To 799
       PIXEL(x,y) = Point(x,y)  
      Next
  Next
  StopDrawing()

EndProcedure


Start = ElapsedMilliseconds()
CreationImage()
Temps = ElapsedMilliseconds() + start

Start2 = ElapsedMilliseconds()
 MaProce()
Temps2 = ElapsedMilliseconds() + start2
    

MessageRequester("Info",Str(800*800)+ " pixels ont été colorés en " + Str(temps) + " ms",0)
MessageRequester("Info",Str(800*800)+ " couleurs de pixels ont été stockés en " + Str(temps2) + " ms",0)
  
FreeImage(0)
End

Re: Boucles imbriquées: Sortir/continuer sous conditions

Publié : mar. 28/avr./2020 21:17
par Stéphane
Merci pour ce conseil

Re: Boucles imbriquées: Sortir/continuer sous conditions

Publié : mer. 29/avr./2020 13:10
par kernadec
bjr Stéphane
pour les boucles imbriquées pour sortie par tests
la fonction suivant le niveau d'imbrication utilise la fonction : break avec 1, 2, 3,

Cordialement

Re: Boucles imbriquées: Sortir/continuer sous conditions

Publié : sam. 02/mai/2020 10:11
par Naheulf
Note concernant l'utilisation de ElapsedMilliseconds() :
Lorsque tu veut mesurer le temps passé à exécuter un morceau de code il faut bien penser à désactiver le débogueur. Si tu ne le fait pas tu mesure aussi le temps passé dans le débogueur.

Code : Tout sélectionner

#CYCLES = 10*1000*1000

CompilerIf Not #PB_Compiler_Debugger
	CompilerError "Vous devez activer le débogueur pour compiler ce code."
CompilerEndIf

; Avec débogueur
Debut = ElapsedMilliseconds()
somme = 0
For i = 1 To #CYCLES
	somme + 1
Next
Fin = ElapsedMilliseconds()
Temps1 = Fin - Debut

; En désactivant temporairement le débogueur
DisableDebugger
Debut = ElapsedMilliseconds()
somme = 0
For i = 1 To #CYCLES
	somme + 1
Next
Fin = ElapsedMilliseconds()
Temps2 = Fin - Debut
EnableDebugger

MessageRequester("Info",
                 "Temps avec débogueur : "+Str(Temps1)+"(ms)"+#CRLF$+
                 "Temps sans débogueur : "+Str(Temps2)+"(ms)",
                 0)