Inscription / Connexion Nouveau Sujet
Niveau Maths sup
Partager :

[Info] X 2007

Posté par
infophile
17-04-08 à 22:13

Bonsoir

J'essaye de faire le sujet d'info de l'X 2007 (donc si Ksilver ou autres passent par là... )

Citation :
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.


Citation :
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;


Citation :
Question 2 : Ecrire la fonction codage qui prend comme argument la liste \alpha=<\alpha_0,...,\alpha_{n-1}>et le polynôme A(x) comme argument et qui retourne le codage de RS du message A.


Citation :
Function codage(alpha : poly ; A : poly) : poly;
Var i : integer;
    p,q,sommet : poly;

Begin
     q:=alpha;
     sommet:=NIL;
     while q <> NIL do
           begin
           new(p);
           p^.coeff:=valeur(A,q^.coeff);
           p^.suivant:=sommet;
           sommet:=p;
           q:=q^.suivant;
           end;
     codage:=miroir(sommet);
End;


J'ai utilisé donc une fonction miroir qui prend comme argument un polynôme U à coefficients dans K tel que U(x)=a_0+...+a_k.x^k et qui retourne le polynôme V tel que V(x) = a_k + ... + a_0.x^k.

Le problème c'est que je ne suis pas sûr de moi, je pensais parcourir la liste m'arrêter à a_k, le considérer comme premier élément, puis recommencer. Ca sent la récursivité mais je ne suis toujours pas à l'aise avec ça

Et si par la même occasion vous pouviez vérifier mes deux algos..

Merci beaucoup

Posté par
Cauchy
re : [Info] X 2007 18-04-08 à 00:16

Salut,

j'y connais rien au langage que t'utilises mais le deuxième algo c'est simplement remplir une liste de longueur n avec la formule donnée dans l'énoncé non?

Posté par
infophile
re : [Info] X 2007 18-04-08 à 00:20

Salut

Oui c'est ce que fais normalement mon algo non ?

Posté par
Cauchy
re : [Info] X 2007 18-04-08 à 00:28

Oui me semble-t-il, c'est ou que tu définis A avec les a_i?

Posté par
infophile
re : [Info] X 2007 18-04-08 à 00:42

Je pense que A c'est une liste prédéfinie, là on suppose qu'elle est déjà crée et à partir de celle-ci et de alpha (fournie également) on crée la liste B.

Posté par
Cauchy
re : [Info] X 2007 18-04-08 à 00:48

Oui ok , A tu la donnes en entrée sous forme de liste(c'est le message que tu veux coder) et après tu renvoies B, à mon avis il y a pas de problème si on te demande juste l'algorithme naif, tu remplis ta liste B au fur à mesure, je comprend pas pourquoi tu la remplis dans l'autre sens et fait miroir ca change quoi?

Posté par
infophile
re : [Info] X 2007 18-04-08 à 00:52

Ben le problème c'est que avec les pointeurs quand tu remplis en ajoutant à chaque fois le nouvel élément en tête de liste, ben au final l'ordre est inversé tu vois ? Donc pour rétablir l'ordre () j'applique miroir.

Parce que au début je calcule bo et je le mets dans la liste. Ensuite je calcule b1 et je le mets en tête, et ainsi de suite. Donc à la fin j'aurais : <bn-1...b1,b0>. Et miroir donnera <b0,b1,...,bn-1>.

Posté par
Cauchy
re : [Info] X 2007 18-04-08 à 00:54

Ok d'accord je vois, miroir c'est une fonction déja implémentée?

Posté par
infophile
re : [Info] X 2007 18-04-08 à 00:58

Non il faut la créer c'est bien ça mon soucis

Parce que si je balaye la liste, je m'arrête à ak et je le prend comme premier élément d'une liste (c'est-à-dire je l'accroche à un NIL), vu que a(k-1) pointe toujours vers ak j'ai bien peur que ça ne fonctionne pas..

Posté par
Cauchy
re : [Info] X 2007 18-04-08 à 01:01

Il y a pas moyen de faire ton programme avec des tableaux et d'aller chercher facilement les éléments, enfin je veux dire la avec tes listes en l'occurence a la fin ta liste *->b(n-1)->....>b0 comment tu attrapes ton b0, tu es obligé de parcourir la liste a chaque fois?

Posté par
infophile
re : [Info] X 2007 18-04-08 à 01:07

Non là visiblement on est obligé d'utiliser les pointeurs et j'suis pas trop à l'aise avec eux ^^

Posté par
puisea Posteur d'énigmes
re : [Info] X 2007 18-04-08 à 08:59

Salut Kévin, je venais poster un topic dans le forum expresso, mais je suis tombé sur ce topic, donc me voila.

Je vois que tu utilises le Pascal, donc je ne pourrais pas te donner une solution en Pascal, je peux cependant te donner une solution en caml avec des explications, ce que tu pourras traduire en Pascal, j'en suis sûr !

Voici la bête :

let miroir l = // Soit la fonction miroir qui prend comme argument la liste l
let rec aux m n = // Soit une fonction auxiliaire récursive aux qui prend comme arguments les listes m et n
match n with // On considère la liste n que l'on cherche à identifier selon sa forme
| [] -> m // Si n est vide (cela correspond à []) alors on renvoie m
| t :: q -> aux (t :: m) q // Si n est non vide elle est de la forme t::q où t est la tête de la liste (c'est donc un élément) et q la queue (c'est donc une liste égale à n privée de son premier élément), alors on applique la fonction aux à la liste concaténée t::m (c'est-à-dire la liste m sur laquelle on a rajouté en première place l'élément t) et à la queue q ce qui donne la récursivité.
in aux [] l ;; // Au final on applique cette fonction auxiliaire à la liste vide et la liste l.

Voila je pense que tu arrives à transcrire cela en Pascal

A noter qu'en caml, il existe déjà une fonction implantée à cette usage : la fonction rev...

Bon, je vais aller poster mon fameux topic dans le forum expresso moi

@+

Posté par
jeanseb
re : [Info] X 2007 18-04-08 à 09:39

Bonjour Kevin et puisea

Bonjour spécial à Cauchy, qu'on ne voit plus beaucoup (snif!). Ca va? tu révises tes tables de multiplications?

Posté par
infophile
re : [Info] X 2007 18-04-08 à 12:27

Salut Pierre et jeanseb

Merci beaucoup je viens seulement de comprendre que la queue d'une liste ce n'est pas le dernier élément mais la liste privée du premier élément

J'essayerai ce soir de traduire ça en Pascal (ah ces foutus pointeurs !).

Posté par
jeanseb
re : [Info] X 2007 18-04-08 à 16:07

Bon courage Kevin!

Posté par
Fractal
re : [Info] X 2007 18-04-08 à 18:01

Quand même, c'est mieux Caml

Fractal

Posté par
infophile
re : [Info] X 2007 18-04-08 à 19:16

Salut Guillaume !

Si y'a pas de pointeurs alors oui vive le Caml

Merci jeanseb

Posté par
Fractal
re : [Info] X 2007 18-04-08 à 20:30

Ya des références, ce qui est grosso modo la même chose mais en pas pareil ^^
Et les tableaux se comportent aussi ""un peu"" comme des pointeurs.

Qu'est-ce qui t'embête dans les pointeurs?

Fractal

Posté par
Cauchy
re : [Info] X 2007 19-04-08 à 00:08

Bonjour jeanseb,

ca va bien et toi, on me voit pas très souvent du fait que j'ai pas de connection internet donc je passe quelque fois quand je suis en salle info ou bien quand je rentre chez moi

La je révise plutot mes développements d'algèbre

Posté par
infophile
re : [Info] X 2007 23-04-08 à 16:49

Bonjour

Plus j'essaye de comprendre les pointeurs et plus je m'embrouille

Bon je tente de transcrire en Pascal l'algo de Pierre :

Citation :
Function nouveauPolynome(a : integer, Q : poly) : poly;

Var r : poly;

Begin
     new(r);
     r^.coeff:=a;
     r^.suivant:=Q;
     nouveauPolynome:=r;
End;

Function aux(m, n : poly) : poly;

Begin
      If n=NIL then aux:=NIL else aux:=aux(nouveauPolynome(n^.coeff,m),n^.suivant);
End;

Function miroir(U : poly) : poly;

Begin
     miroir:=aux(U,NIL);
End;



Pour pouvoir tester ces fonctions j'aimerais pouvoir générer une liste, donc imaginons que je veuille construire la liste <1,2,3> alors je suppose qu'il faut que j'écrive :

Citation :
nouveauPolynome(1,nouveauPolynome(2,nouveauPolynome(3,NIL)));


Autre chose que je ne suis pas sûr de comprendre, quand on représente une liste L avec des pointeurs ça ressemble à ceci :

[Info] X 2007

Mais pour récupérer l'élément 2 que doit-on écrire ? Parce que chaque rectangle représente un pointeur non ? Donc si on appelle p2 le deuxième pointeur alors on ferait p2^.coeff, mais encore faut-il pouvoir pointer vers ce pointeur !

Merci

Posté par
infophile
re : [Info] X 2007 23-04-08 à 16:54

J'oubliais : il a un corrigé de l'épreuve à cette adresse mais en Caml malheureusement (Si toutefois ça peut aider quelqu'un à m'aider )

Posté par
infophile
re : [Info] X 2007 23-04-08 à 18:29

Up svp

Posté par
Ksilver
re : [Info] X 2007 23-04-08 à 21:11

Salut !

ba ... j'peut pas grand chose pour toi en fait la, je connais pas du tous Pascal... et les réponses en caml tu les à déjà apparemment...


mais tu devrait tester tes algos sur un ordinateur tous simplement, tu verrai tous de suite si ca marche ou pas...

Posté par
infophile
re : [Info] X 2007 23-04-08 à 21:36

La fonction miroir n'a pas l'air de fonctionner

Posté par
infophile
re : [Info] X 2007 23-04-08 à 21:37

Salut Ksilver

Oui je viens de tester, la fonction valeur est bonne mais pas miroir.

Posté par
puisea Posteur d'énigmes
re : [Info] X 2007 26-04-08 à 11:34

Salut Kévin, idem que Ksilver.
Je n'y connais strictement rien en Pascal.
Désolé...

Bon courage !

Posté par
infophile
re : [Info] X 2007 30-04-08 à 22:42

J'ai fini par trouver ce qui n'allait pas dans la fonction miroir, j'avais écris if n=NIL then aux:=NIL alors qu'il fallait mettre aux:=m.

Merci à vous je vais pouvoir poursuivre



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !