EXERCICE 1 : le retour des nombres binaires
Vous allez coder quelques fonctions de manipulation des nombres binaires représentés sous la forme de chaines de caractères comme "1000010".
- Ecrire la fonction
init()
qui met taille caractères de valeur donnée dans la chaine passée en paramètre - Ecrire la fonction
inversion()
qui inverse la chaine de caractères donnée en paramètre - Ecrire la fonction
conversionb2d()
qui convertit un nombre binaire donné dans une chaine de caractères en l'entier correspondant (on se contente d'un int pour l'examen, pas de long ou de unsigned int/long) Par exemple, "101" donne 5
- on somme la décomposition des puissances de 2 = 101 = 1 * 4 + 0 * 2 + 1
- on commence par le bit le plus à gauche et on se déplace vers la droite. A chaque nouveau bit, on mutliplie par 2 et on l'ajoute ... (1 * 2 + 0 ) * 2 + 1 -> 5
- Ecrire la fonction
conversiond2b()
qui convertit un nombre décimal dans sa représentation binaire donnée par la chaine de caractères. L'algorithme classique est assez simple. Si nb est le nombre à convertir, il suffit de noter le reste de la division euclidienne de nb par 2 puis de diviser nb par 2 et ainsi de suite jusqu’à 0. Il ne faut pas oublier d'inverser la forme finale pour avoir le bon résultat. Par exemple, 13 donne "1101"
addition()
qui permet de faire la somme binaire r = a + b où a et b sont deux nombres binaires.
Les nombres n'ont pas forcément le même nombre de bits.EXERCICE 2 : recoder la commande UNIX wc et plus
Vous allez écrire un programme qui permet de connaître le nombre de caractères, de mots et de lignes d'un texte donné. Le texte pourra être saisi au clavier ou lu dans un fichier.
HYPOTHESES : les mots ne sont constitués que de lettres de A à Z (pas de chiffres) en majuscules. Tout autre symbole est un séparateur de mot. Un mot ne peut faire plus de TAILLE lettres (50 par exemple)
Le texte "A, BC" contient 1 ligne, 5 caractères et deux mots.
En dernière partie d'exercice, on mémorisera les mots déjà lus pour ne compter que les mots distincts.
- Ecrire la fonction
stats1()
qui donne le nombre de caractères, de lignes et de mots de la chaine passée en paramètre - Ecrire la fonction
lecture()
qui permet de lire le fichier dont le nom est donné en paramètre. La fonction renvoie une chaine de caractères allouée dynamiquement. Vous pouvez utiliser la fonctiontaille_fichier()
si besoin.
La liste des mots rencontrés par l'algorithme de comptage est mémorisée dans un tableau de structures de type info. Pour chaque lettre, on donne le nombre de mots qui commencent par cette lettre, le nombre de mots distincts et un tableau des mots triés dans l'ordre lexicographique.
- Compléter la structure pour que cela corresponde au test INITIALISER
- Ecrire la fonction
initialiser()
pour que le tableau soit initialisé - Ecrire la fonction
inserer()
qui permet d'insérer le mot dans la liste des mots et vérifier que cela marche bien ! - Ecrire la fonction
stats2()
qui prend une chaine de caracteres en paramètre, qui renvoie le nombre de caractères, le nombre de lignes et le nombre de mots et qui met à jour la liste de mots. - Ecrire les fonctions
total_mots()
ettotal_mots_distincts()
. Les fonctions seront testées séparément à la correction.