Boucles imbriquées: Sortir/continuer sous conditions

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Stéphane
Messages : 29
Inscription : sam. 18/avr./2020 15:17

Boucles imbriquées: Sortir/continuer sous conditions

Message 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
Stéphane
Messages : 29
Inscription : sam. 18/avr./2020 15:17

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

Message 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...
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Stéphane
Messages : 29
Inscription : sam. 18/avr./2020 15:17

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

Message par Stéphane »

Merci pour ce conseil
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

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

Message 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
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

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

Message 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)
Répondre