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

Algorithmes et structures de données Discussion :

Problème d'interprétation de programmes


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut Problème d'interprétation de programmes
    Bonjour,
    voilà j'ai un gros problème quand il s'agit d'interpréter le but d'un programme et je dois préparer un concours.
    Si quelqu'un est en mesure de m'aider qu'il me fasse signe je laisserais mon adresse email.
    Je vous laisse un exemple avec lequel je n'arrive pas à me débattre:

    FONCTION g(n:entier, p:entier, q:entier) RESULTAT val: entier
    DEBUT
    SI n<p ALORS val <- q
    SINON val <- g(n-p,p,q+1)
    FIN SI
    FIN

    Par avance merci de vos réponses.

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Essaie d'appliquer cet algorithme sur un exemple. Je te suggere d'utiliser 0 comme troisieme argument.

  3. #3
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Ce programme est un programme récursif. Ce qu'il faut d'abord, c'est comprendre les opérateurs :
    val <- q signifie qu'on mets la valeur de "q" dans "val".
    g(n-p,p,q+1) signifie qu'on rappele le programme avec les arguments "n-p", "p" et "q+1".

    Sachant cela, il faut prendre des valeurs pour chacun des arguments de la fonction et voir ce que cela fait.
    Je te conseille d'écrire a chaque étape, la valeur de chacune des variables. Et lorsque tu arrives au dernier "FIN", tu regarde la valeur de "val", et c'est que que le programme est cencé retourner.

    Commence effectivement avec "0" comme valeur pour "q". Cette variable défini la "profondeur" de la récursivité. Donc quand tu commence, q est cencé valoir 0 (la récursivité n'a pas encore commencé).

    --
    Rakken

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    On t'as déjà dit que q représente le nombre de fois que tu appelles la fonction.

    La condition d'arrêt étant n<p, il semble assez logique de tester avec des valeurs de p>=n. Tu peux constater que dans les arguments, le deuxième ne change jamais (c'est p), et le premier ne fait que décrementer n de p à chaque fois.

    Si tu faisais tourner l'algorithme, tu trouverais vite...

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    (*source camL*)
     
    let rec g(n,p,q)=
     if n<p then q else g(n-p,p,q+1);;
    #g : int * int * int -> int = <fun>
     
    g(14,1,0);;
    #- : int = 14
    g(14,7,0);;
    #- : int = 2

  5. #5
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Partons du principe que l'on a deux nombres représentés dans le programme par n et p.
    Alors
    Pour obtenir n<=p, on doit faire
    Donc on cherche à obtenir la division entière de n par p...
    D'où l'exemple cité par Millie:
    g(14,7,0);;
    #- : int = 2
    14 est un multiple de 2, donc q sera un entier:
    Au contraire, si
    alors q ne sera pas un entier mais un réel, d'où la vérification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SI n<p ALORS val <- q

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut Merci à tous
    Bonsoir,
    je dois dire que j'ai été étonné de vos réponses, et je vous en remercie.
    Je vais essayer avec ça.
    Merci beaucoup et bonne année à tous.
    Tonio

    P.S: j'aurais surement d'autres questions

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/07/2006, 11h13
  2. Problème pour faire un programme
    Par Kypper_667 dans le forum C++
    Réponses: 4
    Dernier message: 26/06/2006, 18h53
  3. petit problème de sortie de programme
    Par clampin dans le forum C
    Réponses: 2
    Dernier message: 17/06/2006, 11h51
  4. Problème d'execution du programme
    Par black is beautiful dans le forum Windows
    Réponses: 1
    Dernier message: 31/03/2006, 21h24
  5. Problème d'interprétation XSL XML
    Par ForceTranquille dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/03/2006, 15h53

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