Page 1 sur 1

[R] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 21:45
par zarnergun
Bonjour, je désire actuellement réalisé un array multidimensionnels avec un nombre de lignes X et colonnes Y de valeur "0", que je dois modifier par la suite au cours des fonctions en "1".

j'ai donc créer une fonction :

Code : Tout sélectionner

Func generer_tableau($X, $Y)
    Dim $tab[$X][$Y]
    For $i = 1 To $X
               ; Modifier tout les X en "0" ou false
        For $j = 1 To $Y
               ; Modifier tout les Y en "0" ou false
        Next
    Next
EndFunc

Au final, je ne sais pas du tout comment faire pour assigner une valeur a toutes les cellules d'une même ligne.

Merci beaucoup par avance

Re: [..] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 21:48
par TommyDDR
Vous ne pouvez pas procédé ainsi, en effet, $Tableau[0][0] est différent de $Tableau[0][1], il est donc impossible d'affecter une valeur à tous les $Tableau[0].

Procédez case par case :
► Afficher le textecode

Re: [..] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 22:00
par zarnergun
Rectification c'est normal mes boucles ne commencent pas a 0 !!!

Merci beaucoup, cela fait trois heures que je cherches ...

Par contre je pense plutot que ce qu'il faut prendre c'est i et j des boucles ?

Code : Tout sélectionner

Func generer_tableau($X, $Y)
    Dim $tab[$X][$Y]
    For $i = 1 To $X
        For $j = 1 To $Y
            $tab[$i][$j] = 0
        Next
    Next
    Return $tab
EndFunc
Petit soucis par contre :
Que ce soit avec x et y ou i j, j’obtiens l'erreur suivante :
x.au3 (22) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$tab[$i][$j] = 0
^ ERROR
->21:56:30 AutoIT3.exe ended.rc:1

Re: [..] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 22:02
par TommyDDR
Au temps pour moi, j'ai répondu trop vite.

Un tableau de 3 cases ira de 0 a 2
$Tab[0]
$Tab[1]
$Tab[2]

Ce qui nous fait bien 3 cases.
Et oui, ce sont bien les i et j... il faut que j'aille dormir moi ^^
Bravo d'avoir trouvé tout seul ;) c'est comme ça qu'on avance le mieux.
Donc :
► Afficher le textecode

Re: [..] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 22:03
par zarnergun
Oui merci beaucoup, je suis un petit peu inattentif a certaines choses.

Problème résolu, (vite :) ), merci beaucoup

Re: [..] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 22:06
par Tlem
En fait, il y à un piège ALC.
Lorsque vous créez un tableau $Tab[10][10], vous avez bien un tableau de 10X10, mais le premier élément est l'élément $Tab[0][0]. ^^

Donc lorsque vous faites votre boucle For, il ne faut pas aller jusqu'à 10. Vous devez vous arrêter à 9. :mrgreen:

Cela donne pour votre code :

Code : Tout sélectionner

Func generer_tableau($X, $Y)
    Dim $tab[$X][$Y]
    For $i = 1 To $X - 1
        For $j = 1 To $Y -1
            $tab[$i][$j] = 0
        Next
    Next
    Return $tab
EndFunc
Et là tout roule. ;)

Edit : Grillé lors de la rédaction du message.
Ça m'apprendra à détailler. hihihi

Re: [R] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 22:17
par zarnergun
Je vous remercie également de vous être donné du mal :)

Re: [R] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 22:45
par jchd
Maintenant, il n'est guère besoin d'initialiser un tableau AutoIt à 0 explicitement si l'on code en conséquence.
Par "design" AutoIt initialise toute variable (y compris les éléments d'un tableau) par des chaînes vides. Or les variables AutoIt sont des variants et une chaîne vide "vaut" zéro (est convertie en 0 par un appel interne à Number()) quand elle fait partie d'une expression numérique ou d'un membre d'une comparaison contre un autre membre numérique.

Dans ton cas, il suffira de mettre à 1 (ou toute autre valeur numérique) les éléments requis pour obtenir le même résultat que si l'ensemble des éléments avaient été initialisé à 0 explicitement.

Re: [R] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 23:03
par zarnergun
Ah ! D'accord, bah c'est bon a savoir, c'est un peu frustrant vu le temps qu'il m'a fallut ;D

Re: [R] Assigner valeur a toutes les cellules d'un array

Posté : lun. 27 juin 2011 23:15
par jchd
Euh, tu veux dire "vu le temps qu'il t'a fallu pour m'indiquer que je perdais le mien" ?
Hélas, j'ai énormément de touches programmées sur ce clavier, mais pas toutes les réponses.
T'inquiète, je plaisante !

Re: [R] Assigner valeur a toutes les cellules d'un array

Posté : mar. 28 juin 2011 01:32
par zarnergun
:)
Le pire c'est que je me rend compte que je tournais en rond et tout alors que c’était simple comme concept mais que j'étais pas foutu de m'en sortir ^^

Je veux faire un générateur de labyrinthe, a l'heure actuelle, le déplacement, le checkage des cellules voisines et le cochage des cellules fonctionnent, mais avec quelques étrangetés (Il refuse certaines cellules et malgré les conditions strictes en fait un peu a sa tête ; Mes ordres doivent être trop faiblards :D). si je trouve pas cette nuit, demain vous allez avoir de mes nouvelles sur une autre demande :D promis après j’arrête de vous embêter :)

je vous souhaite bonne nuit malgré cette chaleur atroce, Et encore merci a tous ;)

Re: [R] Assigner valeur a toutes les cellules d'un array

Posté : mar. 28 juin 2011 09:51
par zeshrek
jchd a écrit :Maintenant, il n'est guère besoin d'initialiser un tableau AutoIt à 0 explicitement si l'on code en conséquence.
Par "design" AutoIt initialise toute variable (y compris les éléments d'un tableau) par des chaînes vides.
oui enfin presque.
Il y a la possibilité d'utiliser redim qui permet justement de (re)dimentionner un tableau sans éffacer son contenu.
Sinon, globalement je suis d'accord avec toi quand on initialise une variable ou un tableau, son contenu est une chaine vide de valeur zero

Re: [R] Assigner valeur a toutes les cellules d'un array

Posté : mar. 28 juin 2011 11:39
par Docteur
une chaine vide de valeur zero
Image

Une chaîne vide a pour valeur une chaîne de caractères sans caractère.
Un zéro a pour valeur zéro.
La chaîne "0" a pour valeur une chaîne de caractères avec le caractère 0.

Cordialement,

Le docteur.

Re: [R] Assigner valeur a toutes les cellules d'un array

Posté : mar. 28 juin 2011 13:58
par zeshrek
Non, une chaine vide de valeur zero c'est ca :

Code : Tout sélectionner

Global $toto
MsgBox(0, "Longeur de $toto", "longueur = " & StringLen($toto) & @CRLF & "ce qui en fait bien une chaine vide")
MsgBox(0, "Valeur de $toto", "Equation du premier degré :" & @CRLF & "si $toto + 1 = " & $toto + 1 & @CRLF & "Conbien vaut $toto ?")
Nous avons donc bien une chaine vide (son stringlen est bien a zero) et de valeur 0 (parceque sauf erreur de ma part, 0+1 ca fait bien 1) ce qui est bien différent d'une chaine de 1 caractere "0" (code ascii 48)

De rien.