Vous êtes sur la page 1sur 3

Exercices sur les fonctions

1 Dcalage circulaire d'un entier long non sign


Ecrire une fonction qui prend comme paramtre un entier de type unsigned long et le
transforme en son dcal circulaire.

2 Incrmentation des lments de la diagonale d'une matrice entire lue dans un


fichier
1. Ecrire une fonction qui lit une matrice entire et retourne un tableau deux
dimensions contenant ses coefficients. La matrice sera dcrite dans un fichier ayant
la forme suivante : la premire ligne contient le nombre de lignes de la matrice, la
deuxime ligne son nombre de colonnes ; les lignes suivantes correspondent aux
coefficients. On utilisera l'oprateur de redirection d'UNIX ``<'' pour lire le fichier.
2. Ecrire une fonction qui prend comme paramtre une matrice d'entiers (de type int **)
et qui affiche ses coefficients.
3. Ecrire une fonction qui prend comme paramtre une matrice d'entiers et qui
incrmente tous les lments de sa diagonale.
4. Le nombre de lignes et le nombre de colonnes de la matrice, ainsi que le nom du
fichier contenant ses coefficients, sont maintenant passs en arguments du
programme.
o

Ecrire une nouvelle fonction de lecture, qui prend comme paramtre une
chane de caractres (correspondant au nom du fichier contenant la matrice),
et qui retourne un tableau d'entiers deux dimensions stockant les coefficients
de la matrice.

Modifier le programme principal en consquence.

3 Distribution des poids d'un code linaire binaire


3.1 Lecture et stockage de la matrice gnratrice

Afin de minimiser la fois la taille prise en mmoire pour stocker la matrice gnratrice et le
temps de calcul, on stocke la matrice gnratrice binaire dans un tableau deux dimensions
dont chaque ligne est constitue d'entiers de type unsigned long (64 bits sur un DEC alpha).
De cette faon, on peut diviser la taille de chaque ligne par un facteur proche de 8 *
sizeof(unsigned long). Par exemple, le vecteur binaire de longueur 10, 1001000101 peut
tre stock sur un unsigned long dont la valeur (en base 10) est 20 + 23 + 27 + 29 = 649.
On travaillera donc dans toute la suite sur une matrice gnratrice compacte de type
unsigned long **. Pour cela, crire une fonction qui lit la matrice binaire telle qu'elle est crite
dans le fichier et qui retourne la matrice compacte correspondant. Les longueur et dimension
du code, ainsi que le nombre de colonnes de la matrice compacte pourront tre dclares
comme des variables globales. On veillera ce que le programme soit portable, en
particulier ce qu'il fonctionne galement sur des architectures o un entier de type
unsigned long est cod sur 64 bits.
Le prototype de la fonction crire sera :
unsigned long **lire_matrice(void);

3.2 Poids de Hamming d'un vecteur binaire


Ecrire une fonction qui prend comme paramtres un vecteur de type unsigned long * et sa
longueur, et qui retourne le poids de Hamming de ce vecteur. Son en-tte sera :
int poids(unsigned long *vecteur, int taille_vecteur)

3.3 Distribution des poids


En se servant de la fonction prcdente, crire un programme qui calcule la distribution des
poids du code.
Pour numrer les 2k combinaisons linaires des lignes de la matrice gnratrice, on se
servira de la mthode suivante utilisant le code de Gray. Cet algorithme permet d'numrer
tous les vecteurs de F2k en ne modifiant qu'une seule coordonne chaque tape. Les
vecteurs de F2k sont reprsents par k bits, (g0,...,gk-1). On ajoute ce vecteur une

composante gk vrifiant tout moment gk = g0 + g1 + ... + gk-1 mod2.


Initialisation :
g0 = g1 = ... = gk-1=gk =0 .
A chaque tape :

Si gk = 0, modifier g0.

Sinon :
o

i le premier indice tel que gi 0.

si i k-1, modifier gi+1.

si i = k-1, modifier gk-1.

Remettre jour gk.

Ainsi, les vecteurs de F22 seront numrs dans l'ordre suivant : (0,0) - (1,0) - (1,1) - (0,1)
On peut utiliser cette mthode pour numrer toutes les combinaisons linaires de k lignes.
L'indice de la coordonne modifier chaque tape de l'algorithme prcdent correspond
l'indice de la ligne ajouter la combinaison linaire prcdente. Par exemple, pour k=2, on
numrera les combinaisons linaires dans l'ordre suivant : vecteur nul, ligne 1, ligne 1 +
ligne 2 , ligne 2.

3.4 Passage des caractristiques du code en arguments du programme


Modifier le programme prcdent afin que la longueur, la dimension et le nom du fichier o la
matrice gnratrice est stocke figurent en arguments du programme. Pour appeler le
programme, on tapera par exemple :
a.out 10 3 fichier
This document was translated from LATEX by

Vous aimerez peut-être aussi