IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Modification d'un tableau de tableaux


Sujet :

Caml

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Modification d'un tableau de tableaux
    Bonjour,

    je ne comprends pas le résultat d'une fonction simple que j'ai écrite avec OCaml, qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let t = Array.make 2 (Array.make 2 0) in
    t.(0).(0) <- 3;
    t;;
    Celle-ci me renvoie [|[|3; 0|]; [|3; 0|]|] alors que je m'attendais à avoir [|[|3; 0|]; [|0; 0|]|] car je pensais ne modifier que la première case du premier tableau avec t.(0).(0). Comment ça se fait ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Points : 10
    Points
    10
    Par défaut cas d'école
    tu utilise "Array.make 2 (Array.make 2 0)" qui crée un tableau qui contient en réalitée une série de liens identiques vers un unique tableau(celui que tu crées avec ton deuxième Array.make), si tu modifie ce tableau, tous les liens vont te renvoyer le tableau modifié

    pour t'en sortir, il faut juste utiliser "Array.make_matrix 2 2 0"

  3. #3
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    La fonction Array.make n x ne crée pas n copies indépendantes du tableau x. Pour cette raison, quand tu modifies un élément, tu modifies tous les autres. Si tu veux créer des copies différentes, utilise la fonction Array.init.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let t = Array.init 2 (fun _ -> Array.make 2 0)
    Edit suite à la réponse précédente : Array.make_matrix c'est bien dans le cas présent pour construire des matrices. Array.init est le cas plus général qui marchera aussi pour des tableaux de références, etc.

    Cordialement,
    Cacophrène

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    J'ai compris merci beaucoup pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] modification d'un tableau
    Par XuNiL51 dans le forum Langage
    Réponses: 2
    Dernier message: 20/12/2007, 10h46
  2. [Tableaux] Modification d'un tableau de tableau
    Par mikedavem dans le forum Langage
    Réponses: 5
    Dernier message: 06/01/2007, 11h33
  3. Tableau de tableaux
    Par stokastik dans le forum C
    Réponses: 8
    Dernier message: 15/08/2006, 10h45
  4. Réponses: 2
    Dernier message: 27/11/2005, 23h36
  5. VB6: Comment faire un tableau de tableaux ?
    Par AsmCode dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 10/11/2005, 22h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo