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. Bilan. (6 points) Écrivez une fonction récursive qui calcule le nombre de valeurs strictement négatives dans un tableau d'entiers. Cette fonction prendra deux arguments : le tableau et la taille du tableau (aucun autre argument n'est permis).

    É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 :

    • un tableau vide,
    • un tableau contenant seulement des valeurs positives ou nulles,
    • un tableau contenant seulement des valeurs strictement négatives,
    • un tableau contenant des valeurs de signes divers, et au moins une valeur nulle.
  2. Blague. (7 points) Un petit plaisantin nous a fourni le fichier blague.c :

    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
     
    int main(void) {
      srand(time(NULL));
      if (rand()%2) {
        printf("Ϳоie !\n");
      } else {
        printf("Désespoir !\n");
      }
      return EXIT_SUCCESS;
    }

    Ce fichier en apparence correct ne compile pas, car certains symboles ; (point virgule, en unicode 0x3B) ont été remplacés par des symboles ; (point d'interrogation grec, en unicode 0xCD suivi de 0xBE).

    Écrivez un programme qui prend en argument le chemin d'un fichier et qui y remplace tous les points d'interrogation grecs par des points-virgules. Vous ferez attention à ne pas modifier la taille du fichier. Votre programme devra n'ouvrir qu'une seule fois le fichier à modifier.

  3. Bifurcation. (7 points) Les fichiers queue.c et queue.h forment une mini-bibliothèque qui met une file à votre disposition. Il n'est pas nécessaire de lire le code source, mais la lecture de l'en-tête est indispensable pour réussir cette question. Vous ne devez pas modifier ces fichiers.

    Écrivez un programme qui affiche la somme de ses arguments entiers, puis la liste des arguments qui ont été ignorés.

    bob@box:CM3$ ./a.out one 21 7 x/y 27! -9 end
    somme :   19
    ignorés : one x/y 27! end
    

    Pour ne pas devoir convertir deux fois chaque argument, on placera dans une file les arguments rejetés lors de la conversion afin de les afficher plus tard.

    Concevez également un fichier Makefile pour permettre la compilation de votre programme en conjonction avec les fichiers fournis.

retour à la page d'accueil

retour au sommet