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

Contribuez Discussion :

[Défis][7] Et maintenant, la suite !


Sujet :

Contribuez

  1. #1
    Rédacteur/Modérateur

    [Défis][7] Et maintenant, la suite !


    joint à ce message, vous trouverez un fichier suite.zip contenant une fonction MATLAB qui, comme son nom l'indique, génère une suite mathématique (assez connue).

    La fonction est contenue dans un fichier p que vous pouvez l'exécuter sans risque sous MATLAB, faite moi confiance.

    La fonction s'utilise comme ceci :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    suite(N)
    avec N le nombre d'itérations pour générer les éléments de la suite, donc un entier supérieur à 0.

    Sans argument d'entrée, la fonction affiche le résultat pour 10 itérations comme ceci :
    1 
    11 
    21 
    1211 
    111221 
    312211 
    13112221 
    1113213211 
    31131211131221 
    13211311123113112211 
    11131221133112132113212221
    ---------------------------------------

    Saurez-vous identifier le fonctionnement de la suite et écrire un code MATLAB permettant d'obtenir et d'afficher les termes de la suite de 1 à N (comme le fait la fonction suite)

    ---------------------------------------

    Pour permettre à tout le monde de participer, soumettez-moi vos réponses par MP en insérant votre code MATLAB entre balises [code][/code]

    ---------------------------------------

    Je donnerai dans cette discussion la liste des membres ayant la bonne réponse.

    ---------------------------------------

    Question subsidiaire :

    Saurez-vous trouver le nom de cette suite
    Envoyez-moi votre réponse à cette dernière question par MP.

    ---------------------------------------

    Bonne participation !

    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  2. #2
    Rédacteur/Modérateur

    Liste des membres ayant trouvé la bonne réponse



    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Rédacteur/Modérateur

    Voici la solution

    -------------------------

    Cette suite mathématique est la suite de Conway

    Citation Envoyé par Wikipedia
    La suite de Conway est une suite mathématique inventée en 1986 par le mathématicien John Horton Conway, initialement sous le nom de « suite audioactive »1. Elle est également connue sous le nom anglais de Look and Say (« regarder et dire »). Dans cette suite, un terme se détermine en annonçant les chiffres formant le terme précédent.
    Source : http://fr.wikipedia.org/wiki/Suite_de_Conway

    La fonction "cachée" dans le code p était celle-ci :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    function suite(N)
     
    if nargin==0
        N = 10;
    end
     
    if N<=0
        error('N doit etre un entier superieur a 0')
    end
     
    clc
     
    s = 1;
     
    fprintf('%d', s);
    fprintf('\n');
     
    for m = 1:N
     
        k(1) = 1;
        u(1) = s(1);
        i = 1;
     
        for n = 2:numel(s)
     
            if s(n)==s(n-1)
                k(i) = k(i)+1;
            else
                i = i+1;
                k(i) = 1;
                u(i) = s(n);
            end
     
        end
     
        s = [k;u];
        s = s(<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />.';
     
        fprintf('%d', s);
        fprintf('\n');
     
    end


    Aurélien avait donné une version plus compacte sur son blog "MATLAB pour les geeks" ici : Suite de Conway (dont ce sont largement inspirés tanguy4724 et Winjerome )

    -------------------------

    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Membre habitué
    tu nous repproches un plagiat ou une recherche internet fructueuse ayant mené à une inspiration soudaine?

  5. #5
    Rédacteur/Modérateur

    Je reproche pas... je constate
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Membre habitué
    et moi je confesse.

    un autre défi pour nous racheter?

  7. #7
    Modérateur

    Je connaissais aussi le billet d'aurélien du coup, j'ai préféré ne pas participer... (en fait je n'ai pas réussi à modifier suffisamment le code d'Aurélien pour que ça passe inaperçu... apparemment vous non plus!)
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  8. #8
    Membre habitué
    effectivement, nous non plus.

    En même temps, améliorer un code c'est intéressant, mais l'inverse l'est moins

    Et le code d'Aurélien me semble déjà optimisé...