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 :

[Ocaml] boucle imbriqué


Sujet :

Caml

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut [Ocaml] boucle imbriqué
    Bonjour

    Alors je cherche à réaliser une fonction sous ocaml qui fait une rotation d'une chaîne de caractère et enregistre à chaque tour le résultat dans un tableau de n case (ou n vaut la longueur de la chaîne de caractère)

    par exemple si je lance : rotate "salut"
    Il devrait me renvoyer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - String Array = [|aluts ; lutsa ; utsal ; tsalu ; salut|]
    Donc voici le code que j'ai écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    let rotation s =
    let n = String.length s in
    let tab = Array.make n "vide" and tmp = ref s.[0] in
    for i = 0 to n-1 do
    tmp := s.[0];
    for i2 = 0 to n-2 do
    s.[i2] <- s.[i2 + 1];
    done;
    s.[n-1]<- !tmp;
    tab.(i) <- s;
     
    done;
    tab;;
    et malheuresement il me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    : - String Array = [|salut ; salut ; salut ; salut ; salut|]
    Qui est la dernière valeur de s, pourtant s passe bien par toutes les valeurs souhaitées, et ces valeurs sont bien enregistrées dans le tableau, seulement il réécrit toujours au dessus :

    pour i = 0 le tableau est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [|aluts;vide;vide;vide;vide|]
    pour i = 1 le tableau est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [|lutsa; lutsa ; vide ;vide;vide|]

    pour i = 3 le tableau est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [|uttsal; utsal ; utsal ;vide;vide|]
    etc...

    Et c'est la que je ne comprend pas car j’insère s dans dans la case du tableau qui correspond à i alors pourquoi les cases du tableau qui sont plus petite que i changent aussi ?

    Merci

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Ce que tu insères dans ton tableau n'est pas une copie de s, mais s elle-même. Lorsque tu la modifies par la suite, toutes ses « occurrences » sont modifiées.

    Il te faut pour prévenir cela faire des copies de ta string s. Pour ce faire, je te renvoie vers la documentation du module String.

    Cdlt,

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    exact merci
    J'ai modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab.(i) <- s en tab.(i) <- String.copy s
    et ça fonctionne
    Problème résolu

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

Discussions similaires

  1. [OCaml] Problème de boucles imbriquées
    Par Capitain_jupi dans le forum Caml
    Réponses: 0
    Dernier message: 01/10/2011, 13h42
  2. boucle imbriquée
    Par zhoom dans le forum C
    Réponses: 4
    Dernier message: 07/11/2005, 13h10
  3. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/08/2005, 16h23
  4. Boucles imbriquées
    Par Immobilis dans le forum ASP
    Réponses: 28
    Dernier message: 14/01/2005, 13h17
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

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