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

 C Discussion :

Aide pour une fonction récursive.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 172
    Par défaut Aide pour une fonction récursive.
    Nom : grille.jpg
Affichages : 207
Taille : 5,6 Ko

    Bonjour,

    J'essai d'écrire une fonction permettant de calculer toutes les positions possibles d'éléments de différentes taille sur une grille (voir schéma ci-dessus). L'ordre des éléments ne doit pas changer.

    Je pense que la meilleure façon serait d'écrire une fonction récursive, d'abord décaler le dernier élément d'une case vers la droite jusqu'à la fin de la ligne, puis ensuite décaler le deuxième élément d'une case vers la droite, et recalculer toute les positions du premier et ainsi de suite jusqu'à avoir fait le tour des positions possibles (j'espère ne pas être trop confu).

    J'ai vraiment du mal avec les fonctions récursives, si vous avez une idée de la façon dont je pourrai l'écrire ça pourrait m'avancer un peu ?

    Je vous remercie.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 172
    Par défaut
    J'ai oublié de préciser, le nombre d'éléments et leurs tailles peuvent varier, donc je pense qu'on peut entrer ces informations en argument de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int nb_de_positions_possibles(int nombre_elements, int * taille)
    {
     
    }
    Ou taille est un tableau contenant la taille (en case) de chaque éléments, dans l'ordre d'apparition.

    C'est vraiment le genre de problème qui me font mal à la tête, j'ai souvent l'habitude de vouloir faire trop compliqué, si vous avez une idée à me suggérer ?
    Merci.

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par fred61 Voir le message
    J'essai d'écrire une fonction permettant de calculer toutes les positions possibles d'éléments de différentes taille sur une grille (voir schéma ci-dessus). L'ordre des éléments ne doit pas changer.
    J'ai beau retrourner cette phrase dans tous les sens, je ne comprends pas ce que tu dois faire : comment calculer toutes les positions différentes si l'ordre est fixe ??
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 813
    Billets dans le blog
    1
    Par défaut
    Bonjour

    C'est pas compliqué: les éléments de couleur ne sont pas fixés entre eux. Ils peuvent "glisser" de façon individuelle le long du "rail" selon leurs longueurs respectives et selon l'espace libre qu'il y a après (la zone blanche n'est pas un élément, c'est un espace vide...)

    J'avais déjà fait une fonction de ce genre quand je m'étais amusé à résoudre le jeu du logigraphe. Effectivement on est obligé de passer par une fonction récursive...

    Citation Envoyé par fred61 Voir le message
    J'ai oublié de préciser, le nombre d'éléments et leurs tailles peuvent varier, donc je pense qu'on peut entrer ces informations en argument de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int nb_de_positions_possibles(int nombre_elements, int * taille)
    {
     
    }
    Ou taille est un tableau contenant la taille (en case) de chaque éléments, dans l'ordre d'apparition.
    Tu n'es pas obligé de stocker le nombre d'éléments. Etant donné qu'il ne peut pas y avoir d'élément de taille "0", tu peux utiliser cette valeur "0" comme indicateur de fin de tableau. Exemple pour celui de ton image: {3, 2, 1, 2, 4, 0}.
    Ensuite tu initialises une boucle qui prend un élément précis et qui le déplacera à chaque itération d'un cran vers la droite tant qu'il y a des espaces. Et à chaque itération tu réappelles cette fonction mais en lui passant l'élément à déplacer (d'abord le dernier puis l'avant dernier puis ...)
    Un truc de ce genre
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fonction(tableau_d_elements, elementX)
    {
        pour (i=0; i < nb_d_espaces; i++)
        {
            deplacer elementX d'une position vers la droite
            si (x != 1)
            {
                fonction(tableau_d_elements, elementX-1)
            }
        }
        remettre elementX à sa position iintiale
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Hello,

    Le problème peut être approché différemment aussi. Au lieu considérer à déplacer tes éléments sur ta grille, tu pourrais te demander comment répartir les cases blanches entre tes éléments. Pour l'image de ton premier post on aurait 0 case blanche entre le début de la grille et l'élément orange, 0 entre l'orange et jaune, 0 entre le jaune et le magenta, 0 entre le magenta et le vert, 0 entre le vert et le cyan, 9 entre le cyan et la fin de la grille. Tu te retrouves avec le tuple (0,0,0,0,0,9). Le tuple (1,2,3,0,2,1) est une autre solution, soit 1 case blanche entre le début de la grille et l'élément orange, 2 entre l'orange et le jaune, etc.
    Si on note n le nombre de cases blanches (n=taille de la grille - somme des tailles des éléments) et m le nombre d'intervalles (m=1+nombre d'éléments), ton problème se réduit à parcourir toutes les partitions de n en m parties ordonnées.
    Je n'ai pas fait de recherches avec google mais il doit sans doute y avoir de la littérature sur ce problème.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Ooh, cela m'a l'air d'une très bonne idée.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 172
    Par défaut
    Merci Sve@r pour ton algo, j'ai commencer à essayer de le développer cet après-midi mais j'ai pas encore terminé.

    L'idée de picodev me parait vraiment pas mal, je pense que ça sera plus facile à développer, et surement moins gourmand en temps.

    En tout cas merci pour tout, je vous tiens au courant si j'ai réussi à faire quelque chose de fonctionnel.

Discussions similaires

  1. Aide pour une fonction
    Par vincent62149 dans le forum Excel
    Réponses: 1
    Dernier message: 06/07/2007, 17h38
  2. [FPDF] Besoin d'aide pour une fonction publipostage..;
    Par dark$hadow dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 10/02/2007, 15h39
  3. Réponses: 15
    Dernier message: 26/03/2006, 12h10
  4. Aide pour une fonction
    Par mimi060101 dans le forum Scheme
    Réponses: 1
    Dernier message: 24/02/2006, 16h59

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