Contrôle Machine n°3

Les seuls documents papier autorisés sont vos notes de cours, de travaux dirigés et de travaux pratiques. Les documents électroniques autorisés sont les documents présents sur les machines de l'IUT et dont vous êtes l'unique auteur (ainsi que les éventuels documents de cours). En dehors de la machine qui vous est attribuée et de votre matériel de composition (crayons, stylos, …), aucun matériel n'est autorisé.

Toutes les réponses devront prendre la forme de fichiers source en langage C (plus les scripts de compilation). Suivez scrupuleusement les instructions de ce sujet, vos réponses doivent correspondre aux exemples d'exécution : soyez rigoureux !

Sauf indication contraire, vous pouvez supposer que les données fournies sur la ligne de commande ou l'entrée standard respectent les restrictions de l'énoncé et ne nécessitent donc pas de contrôle.

Assurez-vous que votre copie de travail est à jour (git pull). Dans le répertoire dédié au module (normalement, ~/DEV/DEV1.1/), créez un nouveau répertoire nommé CM3. Faites-en votre répertoire courant et placez-y tous les fichiers générés durant l'épreuve.

Effacez tous les fichiers temporaires et ne gardez que les fichiers d'extension .c, .h et les éventuels Makefile (attention à ne pas effacer vos fichiers source !). Placez-vous ensuite dans le répertoire immédiatement au dessus de CM3 et archivez votre travail, par exemple par la commande :

bob@box:DEV1.1$ tar czvvf dummy_CM3.tar.gz CM3
Remplacez le mot dummy par votre login. Téléversez l'archive ainsi obtenue à cet endroit.

Attention Vous utiliserez obligatoirement les options -ansi -pedantic lors de la compilation.

  1. Graffiti. (7 points) Écrivez un programme qui prend en argument sur la ligne de commande le chemin d'un fichier, et qui ajoute au début de ce fichier une ligne de texte supplémentaire :

    Kilroy was here
    

    Dans votre programme, vous ne devrez ouvrir le fichier en question qu'une seule fois.

  2. Grandeur. (7 points) Écrivez une fonction récursive qui prend en argument un entier naturel (et rien d'autre) et qui renvoie le nombre de chiffres de sa représentation décimale.

    Écrivez un programme pour tester cette fonction. Ce programme vérifiera que l'on obtient bien le résultat attendu dans quatre cas différents :

    • la valeur 0,
    • la valeur 999,
    • la valeur 10000.
  3. Groupement. (6 points) Dans cette question, on considère des listes chaînées dont les maillons contiennent chacune une valeur réelle. Tous les maillons auront de plus une propriété supplémentaire : la valeur du maillon est inférieure ou égale à celle du maillon suivant s'il existe. Ceci garantit que ces listes chaînées sont triées par ordre croissant.

    Écrivez une fonction qui affiche une telle liste chaînée.

    Écrivez une fonction qui prend un réel et une liste chaînée triée en argument et qui ajoute le réel à la liste en la laissant triée.

    Écrivez à l'aide de ces fonctions un programme qui prend une série de réels en arguments sur la ligne de commande et qui les affiche dans l'ordre croissant.

    bob@box:CM3$ ./a.out 5.45 -12 61.5 0 21.373
    -12.000000 0.000000 5.45000000 21.373000 61.500000
    

retour à la page d'accueil

retour au sommet