• Aucun résultat trouvé

Travaux Pratiques de programmation n

N/A
N/A
Protected

Academic year: 2022

Partager "Travaux Pratiques de programmation n"

Copied!
2
0
0

Texte intégral

(1)

Travaux Pratiques de programmation n

o

1

Cours de Programmation C

—L2.1—

xExercice 1.

La permutation de Josephus(n, p) n personnes se placent en cercle,

on compte p personnes et on ´ elimine la pi` eme, puis la pi`eme apr`es celle-ci

. . .

. On continue tant que toutes les personnes n’ont pas ´ et´ e elimin´ ees (ce sera toi le chat, mais ...)

La permutation de Josephus est la suite des num´ eros des personnes ´ elimin´ ees.

La permutation Josephus(6,4) est : 4, 2, 1, 3, 6, 5.

Pour d´ eterminer cette permutation, on cr´ ee une liste simplement chaˆın´ ee circulaire contenant les entiers de

1

` a

n, puis on ´

elimine les cellules une ` a une. On utilise les types

typedef struct cel{

int valeur;

struct cel *suivant;

}Cellule,*Liste;

1. ´ Ecrire une fonction d’allocation d’une Cellule qui re¸ coit une valeur

n

et renvoie, si possible, l’adresse d’une Cellule contenant la valeur

n

et formant une liste circulaire

`

a un seul ´ el´ ement. En cas d’´ echec la fonction renvoie NULL

2. Ecrire une fonction int AjoutCirculaire(Liste *l, int val) qui ajoute une nou- velle cellule contenant la valeur val ` a la liste circulaire. La fonction renvoie 0 en cas d’echec d’allocation, 1 sinon.

3. Ecrire une fonction int Cr´ eationCercle(Liste *l, int nombre) qui forme une liste circulaire avec les entiers de 1 ` a nombre.

4. Ecrire une fonction Liste ExtraitPieme(Liste *l,int p) qui extrait la cellule situ´ ee p cellules apr` es la cellule de tˆ ete. La cellule qui suit celle qui a ´ et´ e supprim´ ee devient la nouvelle cellule de tˆ ete.

5. Ecrire une fonction void Affiche Josephus(int n, int p) qui affiche la permuta- tion de Josephus(n,p). La fonction cr´ ee une liste circulaire de

n

cellules puis la d´ etruit en supprimant une cellule toutes les

p

cellules.

xExercice 2.

Polynˆ omes

Dans toutes les r´ eponses, une attention particuli` ere sera donn´ ee ` a la gestion de la m´ emoire.

On d´ ecide de repr´ esenter des polynˆ omes ` a coefficients entiers ` a une variable par des listes simplement chaˆın´ ees de monˆ omes, chaque monˆ ome ´ etant repr´ esent´ e par une structure constitu´ ee d’un entier coef pour le coefficient du monˆ ome, d’un entier degre pour le degr´ e

1

(2)

du monˆ ome, et d’un pointeur sur le monˆ ome suivant. Un polynˆ ome ne contient pas 2 monˆ omes de mˆ eme degr´ e.

On ordonne les monˆ omes par degr´ e croissant.

1. D´ efinir les types Monome et Polynome

2. ´ Ecrire une fonction Monome* CreerMonome(int coef,int degre) qui effectue la cr´ eation du monome

coef xdegre

3. ´ Ecrire une fonction void LiberePolynome(Polynome *P) qui lib` ere tous les monˆ omes du polynˆ ome *P et r´ einitialise le pointeur ` a NULL.

4. ´ Ecrire une fonction void AfficheListe(Polynome P) qui affiche les monˆ omes d’un polynˆ ome sous forme de couple (coeff, degre).

5. ´ Ecrire une fonction int AjouteMonome(Monome *m,Polynome *p) qui ajoute le monˆ ome *m au polynˆ ome *p. Un polynˆ ome ne doit pas avoir deux monˆ omes avec le mˆ eme degre, cependant, on ne traitera pas pour l’instant le cas des monˆ ome ` a coeffi- cient nul

6. ´ Ecrire une fonction Polynome LirePolynome(Polynome *p) qui cr´ ee un polynˆ ome par lecture successive de ses monˆ omes. La lecture s’arrˆ ete ` a la saisie d’un degr´ e n´ egatif (ou en cas de probl` eme de m´ emoire). Le polynˆ ome donn´ e en exemple pourrait avoir

´

et´ e saisi par :

Donner les monomes sous forme degre coefficient:

0 12 4 2 1 1 13 -5 4 1 -1

7. Ecrire une fonction void Nettoie(Polynome *P) qui supprime du polynome les monomes de coefficients 0, sauf si le polynome est le polynome nul represent´ e par le monˆ ome de coefficient 0 et de degre’ 0

8. Modifier la fonction LirePolynome pour que le polynˆ ome renvoy´ e corresponde bien au formatage ci-dessus (gestion du polynˆ ome nul)

9. ´ Ecrire une fonction AffichePolynome( Polynome P) qui affiche le polynˆ ome P sur une ligne. On repr´ esentera la puissance de x par ˆ . Le polynˆ ome pr´ ec´ edent est affich´ e sous la forme :

12+3x^4-5x^13

10. Reprendre les fonctions SommePolynome et ProduitPolynome ´ ecrites en TD et les im- planter.

2

Références

Documents relatifs

De plus, les s´ eries de Fourier sont aussi un outil pour r´ ealiser l’analyse de Von Neumann des EDP, afin d’obtenir des conditions CFL assurant la stabilit´ e L 2 du sch´ emaI.

Ecrire une fonction orthogonalisation, prenant en entr´ ee une liste de vecteurs dans un espace V (pas n´ ecessairement R n ) ainsi qu’un produit scalaire (une fonction de V ×V dans

Si A est un anneau principal, tout ´ el´ ement irr´ eductible est premier, et donc les notions d’´ el´ ement premier et d’´ el´ ement irr´ eductible co¨ıncident dans ce

Le¸ con: Approximation d’une fonction par des polynˆ omes et des polynˆ omes trigonom´ etriques.. Exemples

– Liste doublement chaˆ ın´ ee : en plus du champ successeur, chaque ´ el´ ement contient un champ pr´ ed´ ecesseur qui est un pointeur sur l’´ el´ ement pr´ ec´ edent dans

´ Ecrivez des fonctions r´ ealisant : l’union, l’intersection, la diff´ erence, la diff´ erence sym´ etrique et le produit cart´ esien de

Propri´ et´ es arithm´ etiques : polynˆ omes premiers entre eux, th´ eor` eme de Bezout, lemme de Gauss, lien entre A × B, A ∧ B et A ∨ B.. Remarque : la notion d’id´ eal

D´ emontrer que g est une application lin´ eaire.. Nous admettrons qu’il en est de