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 :

Travail sur les systèmes de Lindenmayer ou L-systèmes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 21
    Par défaut Travail sur les systèmes de Lindenmayer ou L-systèmes
    Déplacé depuis le forum C à la demande de l'auteur.

    Bonjour et Bonnes Fêtes à tous!

    J'ai un travail de programmation à réaliser en C sur les systèmes de Lindenmayer ou L-systèmes et j'ai bien du mal à débuter! Étant aussi débutant en programmation...

    Voici une petite explication du sujet:



    J'ai un soucis avec la fonction (nouveau_symbole) décrite ci-après:



    En effet, je ne sais pas faire une fonction qui change de valeur de sortie quand on l’exécute... Si vous pouviez me mettre sur la piste, je vous en remercierais fortement!

    Bonne après-midi!

    Guillaume.

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Salut,

    Dans ton cas, je pense que seule une variable statique fera l'affaire. Tu peux alors simplement coder la fonction comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char nouveau_symbole(void)
    {
      static char symbol = 'a' - 1; // Initialisation du symbole
      return ++symbol; // Incrémentation du symbole puis retour.
    }
    Au premier appel, ça retournera 'a', puis 'b', etc. Évidemment une fois à 'z' ça ne va plus retourner des lettres, à toi de gérer ce cas en fonction des contraintes.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 21
    Par défaut
    Bonjour et merci pour ta réponse!

    Citation Envoyé par Trademark Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char nouveau_symbole(void)
    {
      static char symbol = 'a' - 1; // Initialisation du symbole
      return ++symbol; // Incrémentation du symbole puis retour.
    }
    Une petite question: Que signifie le - 1?


    Guillaume.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Citation Envoyé par Guillaume1989 Voir le message
    Une petite question: Que signifie le - 1?
    En fait, en C, les caractères sont officiellement des nombres entiers. « 'a' » se lit donc, sémantiquement, « le caractère a » mais est en pratique une expression renvoyant un nombre entier correspondant à ce caractère dans le jeu d'exécution de base, soit, dans les faits et pour faire simple, le code ASCII de « a ».

    « 'a' - 1 » permet donc d'initialiser la variable statique avec la valeur qui le précède immédiatement. Ceci parce que l'instruction suivante pré-incrémente la variable avant d'en retourner la valeur. Ça permet donc de continuer à utiliser cette pré-incrémentation tout en commençant bien à « a ».

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 21
    Par défaut
    D'accord merci pour ce renseignement!


    Un autre soucis: j'ai créée ma fonction egaux qui permet de voir si deux symboles sont identiques mais j'ai un problème avec les pointeurs... Comment récupérer, à la sortie de la fonction nouveau_symbole, les deux symboles à comparer?

    Merci!

  6. #6
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    En fait, dans l'énoncé, il y a une abstraction du type d'un symbole. Et vous manipulez seulement des pointeurs. Donc, il faudrait peut-être modifier la précédente fonction pour obtenir quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef char symbole; // On définit l'abstraction demandée.
    symbole* nouveau_symbole(void)
    {
      static symbole symbole_courant = 'a'; // Initialisation du symbole
      symbole* nouveau = malloc(sizeof(symbole)); // On crée le symbole (réservation de l'espace mémoire).
      *nouveau = symbole_courant++; // On affecte le symbole que nous incrémentons juste après.
      return nouveau; // Retour du symbole créé
    }
    Pour rappel, on accède à la valeur d'un pointeur via '*'. Ce qui est alloué via malloc doit être détruit via un free.

    La responsabilité de la fonction nouveau_symbole est maintenant de créer en mémoire un symbole et de l'initialiser. (J'ai pu changer le "'a' - 1" qui te perturbait).

    Bon travail !

Discussions similaires

  1. [fscanf] Travail sur les colonnes
    Par kikibrioche dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/10/2006, 10h15
  2. Travail sur les URLs
    Par TalPen dans le forum Langage
    Réponses: 9
    Dernier message: 12/05/2006, 23h41
  3. [MFC][Visual C++ 6]Travail sur les dates
    Par tus01 dans le forum MFC
    Réponses: 6
    Dernier message: 31/01/2006, 21h32
  4. GDI - Travail sur les pixels dans un DIB
    Par jiib dans le forum Windows
    Réponses: 3
    Dernier message: 12/12/2005, 13h17

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