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
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é.
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
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
[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

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
Inutile de faire ProcedureReturn 0 dans le cas contraire: c'est implicite.

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)
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
@++
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

Re: Procedure pour tableau vide
Publié : dim. 23/mai/2021 13:08
par venom

Pas mal. Merci pour le code
@++
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
@++