• Aucun résultat trouvé

Figure 1 Conversion en nombre binaire

N/A
N/A
Protected

Academic year: 2022

Partager "Figure 1 Conversion en nombre binaire"

Copied!
5
0
0

Texte intégral

(1)

Universit´e de Bordeaux Licence Maths/Informatique : 2eme` ann´ee Algorithmique des structures de donn´ees ´el´ementaires C. Blanc, M. Bousabbah

DS1 -25 octobre 2016- 9h30 Dur´ee : 30mn

Nombres binaires : Un syst`eme binaire est un syst`eme de num´erotation utilisant la base 2.

On nomme couramment un bit les chiffres de la num´erotation binaire positionnelle. Ceux-ci ne peuvent prendre que deux valeurs, not´ees par convention 0 et 1.

L’´ecriture binaire repose sur le fait que tout nombre peut s’´ecrire sous la forme d’une somme de puissance de 2.

Par exemple, l’´ecriture binaire de23 en d´ecimal est1 0 1 1 1.

Figure 1 – Conversion en nombre binaire

On propose de repr´esenter un nombre binaire par une liste simplement chain´ee ayant en premi`ere position le bit de poids faible. Le nombre 0 sera r´epr´esent´e par une liste d’un ´el´ement de valeur 0. On utilise la structure de donn´ees suivante :

s t r u c t S L i s t B i n{ i n t b i t ;

s t r u c t S L i s t B i n n e x t ; };

typedef s t r u c t S L i s t B i n S L i s t B i n ;

Figure2 – Repr´esentation d’un nombre binaire par une liste simplement chain´ee On dispose des primitives du type abstrait listes simplement chain´ees vues en cours et dont les prototypes sont rappel´es en annexe.

1

(2)

Exercice 1 Ecrivez les fonctions suivantes : 1. SList Bin multiplierPar2(SList Bin L)

qui multiplie par 2 le nombre binaire repr´esent´e par L 2. SList Bin diviserPar2(SList Bin L)

qui divise par 2 le nombre binaire repr´esent´e par L 3. bool estPair(SList Bin L)

qui vaut True siL repr´esente un nombre pair et False sinon.

4. Pour chaque fonction pr´ecisez sa complexit´e.

Exercice 2 On souhaite compl´eter l’impl´ementation en ajoutant aux primitives connues les deux suivantes :

void setData(SList Bin L, bit x);

qui remplace par x la valeur du bit point´e par L.

void setNext(SList Bin L, SList p);

qui remplace la valeur du suivant de L par p.

1. Ecrivez le code des primitvessetData et setNext.

2. Donnez la complexit´e des fonctions.

Incr´ementation On dispose d’une fonctionInc Binqui permet d’incr´ementer un nombre bi- naire, c’est `a dire d’ajouter 1 au nombre donn´e en param`etre. Par exemple :

L’incr´ementation de 1 0 1 1 1 est ´egale `a 1 1 0 0 0; L’incr´ementation de 1 1 0 0 0 est ´egale `a 1 1 0 0 1; L’incr´ementation de 11est ´egale `a 100.

Attention avec notre impl´ementation les bits de poids faibles d’un nombre binaire sont en tˆete de liste. Par exemple l’incr´ementation de 10111 (FIGURE 2) donnera 11000 qui sera donc r´epr´esent´e par la liste suivante :

Figure 3 – Repr´esentation du nombre binaire apr`es incr´ementation

2

(3)

On vous propose une version it´erative de la fonction Inc Bin ci-dessous. Pour faciliter la lecture de ce code nous avons supprim´e le pr´efixe asde slist des primitives.

Inc Bin S L i s t B i n I n c B i n ( S L i s t B i n L )

{

i f( L==NULL) return NULL ; e l s e

{ i f ( g e t D a t a ( L)==0) s e t D a t a ( L , 1 ) ; e l s e {

s e t D a t a ( L , 0 ) ;

S L i s t B i n p=g e t N e x t ( L ) ;

while( g e t N e x t ( p ) ! =NULL && g e t D a t a ( p)==1 ) { s e t D a t a ( p , 0 ) ;

p=g e t N e x t ( p ) ; }

i f ( g e t D a t a ( p)==0) s e t D a t a ( p , 1 ) ; e l s e

{ //TODO

} } return L ; }}

Exercice 3 En utilisant les primitives du type abstrait listes simplement chain´ees et ´eventuellement les nouvelles primitives :

1. Compl´etez le code it´eratif de cette fonction (zone TODO).

2. Ecrivez une version r´ecursive de la mˆeme fonction.

3. Pour chaque version donnez la complexit´e de vos fonctions.

3

(4)

-

4

(5)

Annexe : Ci-dessous le fichier asde slist.hd´ecrit l’interface du type abstrait asde slist asde slist.h

typedef i n t d a t a t y p e ;

typedef s t r u c t S L i s t S L i s t ;

// a l l o c a t e s s p a c e f o r one S L i s t e l e m e n t S L i s t a s d e s l i s t a l l o c (void) ;

// f r e e s s p a c e f o r one S L i s t e l e m e n t void a s d e s l i s t f r e e l i n k ( S L i s t l i n k ) ; // a d d s a new e l e m e n t on t h e s t a r t o f t h e l i s t

S L i s t a s d e s l i s t p r e p e n d ( S L i s t L , d a t a t y p e d ) ; // d e l e t e an e l e m e n t on t h e s t a r t o f t h e l i s t

S L i s t a s d e s l i s t d e l e t e f i r s t ( S L i s t L ) ; // i n s e r t un new e l e m e n t a f t e r S L i s t p

S L i s t a s d e s l i s t i n s e r t a f t e r ( S L i s t L , S L i s t p , d a t a t y p e d ) ; // d e l e t e an e l e m e n t a f t e r S L i s t p

S L i s t a s d e s l i s t d e l e t e a f t e r ( S L i s t L , S L i s t p ) ; // g e t s n e x t e l e m e n t i n a S L i s t

S L i s t a s d e s l i s t g e t N n e x t ( S L i s t L ) ; // g e t s d a t a i n a S L i s t

d a t a t y p e a s d e s l i s t g e t D a t a ( S L i s t L ) ;

5

Références

Documents relatifs

[r]

On constate que les lignes correspondant ` a un nombre impair compos´ e (par ex- emple, ici la quatri` eme ligne correspondant au nombre impair 9) ne contiennent jamais de case

[r]

Executer ce programme avec 4 nombres différents et faire une conjecture.. Démontrer

Dans le chapitre précédent, nous nous somme intéressé au coefficient directeur de la tangente à la courbe d’une fonction. Nous avons ensuite défini le nombre dérivé de la

En latin, toucher se dit tangere. Les mathématiciens en ont fait le mot tangente. 2°) Déterminer l’équation réduite de T.. 1°) Tracer T sur le graphique. 2°)

[r]

Avec cent pièces, on achète