Page 1 sur 1

Procedure pour tableau vide

Publié : sam. 22/mai/2021 23:22
par venom
Bonsoir,

j’étais entrain d’écrire un petit code qui me permet de savoir si "un tableau a de la place libre". j'entend par la si il y a encore des 0 dedans.

J'ai donc voulu me faire une petite procédure qui test ça, forcement ça ne va pas comme je le souhaite :roll:

Voici un petit code simple pour comprendre :

Code : Tout sélectionner

; création d'un tableau de 4 cases "vides" (les 4 cases = 0)
Global Dim TableauDeLaMort(3)


; je remplis certaines cases avec des 1
TableauDeLaMort(0) = 1 ; case 0
TableauDeLaMort(1) = 0 ; case 1
TableauDeLaMort(2) = 0 ; case 2
TableauDeLaMort(3) = 1 ; case 3


; je creer ma procedure
Procedure VerificationDeLaMortQuiTue()
For a = 0 To 3
 If TableauDeLaMort(a) = 0
  ProcedureReturn #True ; retourne (1) vrai (le plateau a encore une ou des cases vides)
Else 
 ProcedureReturn #False ; retourne (0) faux (le plateau est plein)
 EndIf 
Next 
EndProcedure


; je lance ma procedure qui verifie si il y a encore des 0
Debug VerificationDeLaMortQuiTue()


Le problème, c'est que ça ne renvoie pas pour tout les cas mais uniquement sur la première case.
Si on change la valeur de la première case, la procédure fonctionne. On dirait que les 3 autres cases sont ignoré. :oops: :cry:

J'ai toujours eu du mal avec les ProcedureReturn
D'avance merci






@++

Re: Procedure pour tableau vide

Publié : sam. 22/mai/2021 23:40
par venom
Oops... Zé réussi :lol:
Je laisse l'ancien code et post ici le nouveau :

Code : Tout sélectionner

; création d'un tableau de 4 cases "vides" (les 4 cases = 0)
Global Dim TableauDeLaMort(3)


; je remplis certaines cases avec des 1
TableauDeLaMort(0) = 1 ; case 0
TableauDeLaMort(1) = 1 ; case 1
TableauDeLaMort(2) = 1 ; case 2
TableauDeLaMort(3) = 1 ; case 3


; je creer ma procedure
Procedure VerificationDeLaMortQuiTue()
For a = 0 To 3
 If TableauDeLaMort(a) = 0
  ProcedureReturn #True ; retourne (1) vrai (le plateau a encore une ou des cases vides)
 EndIf 
Next 
EndProcedure


; je lance ma procedure qui verifie si il y a encore des 0
Debug VerificationDeLaMortQuiTue()
il ne fallait simplement pas mettre le else






@++

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 8:54
par MLD
Bonjour venon
regarde comme ceci

Code : Tout sélectionner

; création d'un tableau de 4 cases "vides" (les 4 cases = 0)
Global Dim TableauDeLaMort(3);


; je remplis certaines cases avec des 1
TableauDeLaMort(0) = 1 ; case 0
TableauDeLaMort(1) = 0  ; case 1
TableauDeLaMort(2) = 0; case 2
TableauDeLaMort(3) = 1 ; case 3


; je creer ma procedure
Procedure VerificationDeLaMortQuiTue()
For a= 0  To 3
   If TableauDeLaMort(a) = 0 :index  = #True: EndIf
Next
If index  = #True
  ProcedureReturn  1
Else
  ProcedureReturn  0
EndIf  
EndProcedure


; je lance ma procedure qui verifie si il y a encore des 0
Debug VerificationDeLaMortQuiTue()

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 9:05
par kernadec
bjr venon
tu a commis une dyslexie dans ton commentaire :mrgreen: :mrgreen:
[Commentaire de Venon -quote]
ProcedureReturn #True ; retourne (1) vrai (le Plateau a encore une ou des cases vides)
[/quote]
cordialement

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 9:23
par venom
@kernadec
:lol: J'avoue c'est a n'y rien comprendre...

@MDL
Que dois-je en déduire ? Car mon second code fonctionne ! Quel est la meilleure attitude a avoir dans ce cas là ?






@++

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 9:48
par Marc56
ProcedureReturn fait ce que tu lui a demandé: quitter dès que la première condition est OK.

Si tu veux que tout soit testé, alors tu peux faire comme ceci (incrémenter un compteur et voir à la fin si > 0)

Code : Tout sélectionner

; création d'un tableau de 4 cases "vides" (les 4 cases = 0)
Global Dim TableauDeLaMort(3)

; je remplis certaines cases avec des 1
TableauDeLaMort(0) = 1 ; case 0
TableauDeLaMort(1) = 0 ; case 1
TableauDeLaMort(2) = 0 ; case 2
TableauDeLaMort(3) = 1 ; case 3

; je creer ma procedure
Procedure VerificationDeLaMortQuiTue()
    For a = 0 To 3
        Debug "Boucle: " + a
        If TableauDeLaMort(a) = 0
            Vide + 1 
        EndIf 
    Next 
    If vide > 0
        ProcedureReturn 1
    EndIf
EndProcedure


; je lance ma procedure qui verifie si il y a encore des 0
Debug VerificationDeLaMortQuiTue()
PS. J'écris 1 plutôt que #True car c'est moins de lettres à écrire :mrgreen:
Inutile de faire ProcedureReturn 0 dans le cas contraire: c'est implicite.

:wink:

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 10:22
par MLD
@Venon
Simplement si tu souhaite les deux réponses plein ou pas plein (Bien entendus je parle du tableau pas de moi) :oops: :lol:
Ceci permet une commande ultérieure.
Bonne journée.

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 10:51
par venom
Merci pour vos réponses.
Je vais essayer de compiler ton code MDL car si il permet de savoir le nombre de cases pleine et vide, ça pourrait m'intéresser 8)






@++

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 12:57
par MLD
Comme ceci

Code : Tout sélectionner

; création d'un tableau de 4 cases "vides" (les 4 cases = 0)
Global Dim TableauDeLaMort(4);**************


; je remplis certaines cases avec des 1
TableauDeLaMort(0) = 1 ; case 0
TableauDeLaMort(1) = 0  ; case 1
TableauDeLaMort(2) = 1; case 2
TableauDeLaMort(3) = 0 ; case 3


; je creer ma procedure
Procedure VerificationDeLaMortQuiTue()
index  = 0 
For a= 0  To 3
   If TableauDeLaMort(a) = 0 :index  = index +1: EndIf
Next
If index  > 0
  ProcedureReturn  index
EndIf  
EndProcedure
; je lance ma procedure qui verifie si il y a encore des 0
 cv = VerificationDeLaMortQuiTue()
Debug "case vide:  " + Str(cv)  
Debug "case pleine:  " + Str(ArraySize(TableauDeLaMort()) - cv)


Bon dimanche :lol:

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 13:08
par venom
:roll: Pas mal. Merci pour le code :P






@++

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 16:23
par Micoute
Moi, j'aurais utilisé ArraySize(TableauDeLaMort())

Re: Procedure pour tableau vide

Publié : dim. 23/mai/2021 18:02
par venom
Oui, comme l'a fait MDL juste au dessus :wink:






@++