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

Pascal Discussion :

Codage RS & pointeurs


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut Codage RS & pointeurs
    Bonjour,

    Je commence à travailler sur le sujet 2007 de l'X : http://www.imprimerie.polytechnique...._MpInfo_4h.pdf

    Question 1 : Ecrire la fonction valeur qui prend comme argument un polynôme U à coefficients dans K et un entier x, qui retourne la valeur U(x) dans K de ce polynôme en cet entier x.

    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
    Type poly = ^polycoeff;
         polycoeff = record
                     coeff : integer;
                     suivant : poly;
                     end;
     
    Function valeur(U: poly ; x : integer) : integer;
     
    Var somme, puissance : integer;
        p : poly;
     
    Begin
         somme:=0;
         puissance:=1;
         p:=U;
         while p <> NIL do
               begin
               somme:=somme+puissance*p^.coeff;
               p:=p^.suivant;
               puissance:=puissance*x;
               end;
         valeur:=somme;
     
    End;
    Question 2 : Ecrire la fonction miroir qui prend comme argument un polynôme U à coefficients dans K tel que U(x) = a0 + ... + ak.x^k et qui retourne le polynôme V tel que V(x) = ak + ... + a0.x^k.

    Voilà mon idée : On crée une nouvelle cellule, on parcourt la liste <a0,...,ak> jusqu'à l'élément ak que l'on injecte dans cette cellule, puis on supprime ak de la liste d'origine. Et on rajoute en tête la cellule à la liste <a0,...,ak-1>.

    Juste ? Ou peut-être une méthode récursive ?

    Merci !

    PS : Je débute avec les pointeurs.

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Je n' ai pas compiler le programme mais je crois que le programme fait bien ce que l' enonce dit.
    Pour le second, c' est juste l' inverse qu' on veut. Au lieu, de considerer le premier element comme a0, on doit parcourir la liste, atteindre la fin et considerer ak comme premier element.
    Pour ma part, je crois une bonne procedure reccursive fera l' affaire.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Fie,
    Citation Envoyé par Inf0phile Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
               puissance:=puissance*x;
    Je ne vois pas ce que tu veux faire avec cette ligne :
    prochaine puissance = puissance actuelle * x du point ?

    Pour la structure, j'aurais plutôt vu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Type poly = ^polycoeff;
         polycoeff = record
                     coeff, puissance : integer;
                     suivant : poly;
                     end;
    car il faut bien avoir un moyen de connaître la puissance correspondant à un coefficient

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Je n' avais pas vu ce point. Je considerais que les monome sont disposés suivant des puissances croissantes de 0 à n.
    Avec cette declaration, je crois que ça simplifie vraiment les choses, enfin pour la question 2.
    Il te faut maintenant crée une fonction qui permet d' elever x à la puissance n . Et utiliser une asctuce du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    somme=somme+coef*power(x,n-puissance);
    //n est le degre du polynome
    pour le question 2.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Bonjour à tous les deux !

    Je ne vois pas ce que tu veux faire avec cette ligne :
    prochaine puissance = puissance actuelle * x du point ?
    A la première itération on a : a0*1 (puisque j'ai initialisé puissance à 1).
    A la deuxième itération on a : a1*x (puisque puissance devient 1*x).
    Puis : a2*x² (puisque x devient x*x)
    ...etc

    Non ?

    Sinon je viens de lire le rapport http://www.imprimerie.polytechnique....nfo_MP_Rap.pdf et apparemment il vaut mieux passer par la récursivité pour ensuite calculer la complexité, donc je recommence ?

    Merci !

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par Inf0phile Voir le message
    Bonjour à tous les deux !
    A la première itération on a : a0*1 (puisque j'ai initialisé puissance à 1).
    A la deuxième itération on a : a1*x (puisque puissance devient 1*x).
    Puis : a2*x² (puisque x devient x*x)
    Le probleme n 'est pas là. En faite, revois la declaration suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    polycoeff = record
                     coeff, puissance : integer;
                     suivant : poly;
                     end;
    chaque coefficient contient aussi son degre. Il se peut que les monomes ne sont pas rangés dans le meme ordre que leurs degres. Il faut utiliser le fruit de ton analyse que recrée ce que tu as defini autrement.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    En fait si par hypothèse ils sont rangés par ordre de leur monôme vu comment on a définit les listes associées aux polynômes.

    Donc dans ces conditions la première question ça va ?

    J'vais voir comment faire en récursif...

    merci !

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

Discussions similaires

  1. [Accents - XML] Problème de codage non supporté !!
    Par Smortex dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/11/2002, 11h00
  2. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  3. codage objet
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 22/08/2002, 16h49
  4. djgpp et pointeurs far -2
    Par elvivo dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 29/07/2002, 22h43
  5. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 00h44

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